TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: esteban_pic en 26 de Diciembre de 2010, 18:30:46
-
Hola!!! ya hace varios años trabaje con el 16f84a este año quise volver a trabajar con pic pero quise saltar a un pic más nuevo el 16f873a y me lleve la sorpresa de tener que cambiar de grabador, salvando este problema comprando un nuevo grabador de pic, segui programado y grave el 16f873a y nunca lo logre hacer andar verifique todas las configuraciones que pude pero no funciono, les paso el código que quise hacer andar, solo quiero que prenda un led al pulsar un botón con una temporización , cosa que yo asia con facilidad en el 16f84a y ahora no logro realizar nada en el nuevo pic.
El problema me dicen es de digitalizar las entradas, pero configuro las entradas como digitales y sigo igual sin que el pic me responda.
Programo y gravo con el Mplab y el grabador es un pickit2.
La verdad e leido los manuales y las hojas de datos del pic y buscado la mayor información posible y puesto todo el esfuerzo posible, pero me a sido en vano, por eso recurro a ustedes espero que me puedan ayudar, desde ya muchas gracias anticipadas, saludos esteban
este es el código el cual e modificado un montón de veces pero no me responde al pulsarlo, si me responde la lógica interna pero no logro controlar nada desde el exterior:
list p=16f873 a
#include <p16f873a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;ver pwrte_on cp_off
;ver forma de onda de la alimentacion
;a que valor esta configurado el puerto a?
; org 0x05 ORG 5 Línea de inicio
status equ 0x03
porta equ 0x05
portb equ 0x06
intcon equ 0x0B
optionr equ 0x81
trisa equ 0x85
trisb equ 0x86
TEMP1 equ 0x21
TEMP2 equ 0x22
#define LED porta,0
#define BANK1 bsf status,5
#define BANK0 bcf status,5
org 0x00 ;aparentemente bien
;///// Etapa configuración
;BANK0
bcf status,5 ; bank0
bcf status,6 ; bank0
bcf intcon,4
;saco watch_dog
; bcf CON_WORD,2
; Deshabilito las int
bcf intcon, 7
;BANK1
bsf status,5 ; bank1
bcf status,6 ; bank1
; Puerto B como salida entero
movlw 00h
movwf trisb
;BANK0
bcf status,5 ; bank0
bcf status,6 ; bank0
movlw 00h
movwf portb
; Puerto A como entrada
;BANK1
bsf status,5 ; bank1
bcf status,6 ; bank1
movlw 0ffh
movwf trisa
;BANK0
bcf status,5 ; bank0
bcf status,6 ; bank0
movlw 00h
movwf porta
funciona
vuelta
call encendido
btfsc porta,0
goto vuelta
goto tr
tr call apagado
btfsc porta,0
goto tr
goto vuelta
goto funciona
encendido
movlw 0xff
movwf portb
call retardo
call retardo
movlw 0x00
movwf portb
call retardo
call retardo
movlw 0xff
movwf portb
call retardo
call retardo
movlw 0x00
movwf portb
return
apagado
movlw 0x00
movwf portb
call retardo
call retardo
call retardo
return
retardo
DEL500 MOVLW .200
MOVWF TEMP1
BBBB MOVLW .250
MOVWF TEMP2
AAAA NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMP2
GOTO AAAA
DECFSZ TEMP1
GOTO BBBB
RETLW 0
return
end
-
Tené en cuenta que el PIC16F873A tiene comparadores y conversor A/D. Por defecto (después de un reset) las entradas quedan configuradas como analógicas, por lo tanto dentro del bloque donde configurás el puerto A para que sea entrada deberías también configurar los registros CMCON y ADCON1 para que dichas entradas sean digitales y no analógicas.
-
Que bueno que allas respondido, investigare lo que me decis, gracias!!!!
-
Una consulta, para digitalizar las salidas, busque y entendi que en el registrro ADCON1 pongo en uno los bit de bit0 al bit3 para digitalizar, esto es correcto?
Lo que no se, es que hacer con el otro registro que me das el CMCON me habla de comparaciones, que tengo que hacer con ese registro para digitalizar las entradas?
Saludos, Esteban
-
Una consulta, para digitalizar las salidas, busque y entendi que en el registrro ADCON1 pongo en uno los bit de bit0 al bit3 para digitalizar, esto es correcto?
Sí, exacto.
Lo que no se, es que hacer con el otro registro que me das el CMCON me habla de comparaciones, que tengo que hacer con ese registro para digitalizar las entradas?
Dejar los bit CM0 a CM2 en 1 para que las entradas sean digitales y no se asignen a los comparadores.
-
yo de vuelta!!!! sigo sin poder hacer andar el proyecto aca subo el codigo modificado, aver si alguien ve algo malo.
saludos, esteban!!!!!!!!!!!!
-
Esta mal configurado el pin PORTA,0.
;BANK1
bsf status,5 ; bank1
movlw b'00000001'
movwf trisa
;BANK0
bcf status,5 ; bank0
movlw 0x00
movwf porta
Saludos.
-
Esta mal configurado el pin PORTA,0.
;BANK1
bsf status,5 ; bank1
movlw b'00000001'
movwf trisa
;BANK0
bcf status,5 ; bank0
movlw 0x00
movwf porta
Saludos.
Buenicimo!!! gracias por la ayuda, ahora voy a provar los cambios!!!
saludos y gracias!! Esteban :-/ :-/
-
sigue igual!!! aca mando el circuito haber si sirve de algo!!!!
-
Reemplazá:
bsf ADCON1,0
bsf ADCON1,1
bsf ADCON1,2
bsf ADCON1,3
Por:
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
El valor 0x06 es el que configura todos los pines del PORTA como digitales. Para mas información ver el datasheet de la familia 16F87X página 29.
Por otro lado, ojo que el comportamiento cuando se presiona el pulsador es bastante similar al otro en tu algoritmo. Revisa que ese sea realmente el comportamiento que estas buscando.
Saludos.
-
Reemplazá:
bsf ADCON1,0
bsf ADCON1,1
bsf ADCON1,2
bsf ADCON1,3
Por:
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
El valor 0x06 es el que configura todos los pines del PORTA como digitales. Para mas información ver el datasheet de la familia 16F87X página 29.
Por otro lado, ojo que el comportamiento cuando se presiona el pulsador es bastante similar al otro en tu algoritmo. Revisa que ese sea realmente el comportamiento que estas buscando.
Saludos.
Lo que es la casualidad!!!! esa es la repuesta!!!!! la alle en el manual y la prove hace un rato, pero lo que me desis es la respuesta a tanto tiempo perdido, gracias!!!!!!
de vuelta gracias!!! saludos esteban :-/ :-/