TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jequer en 10 de Marzo de 2005, 14:26:00
-
Hola, estaba programando algo no importa que... y ya bien avanzado en el desarrollo descubro un problema con el puerto A. Asi que volví a lo basico y me di cuenta del siguiente problema:
Hice un programa super simple, que debiera encender un led, luego el
siguiente (sin apagar el primero), luego el que sigue (se supone que
ya hay tres encendidos) y asi.. hasta tener todos encendidos (exepto
el contreras del pin 4)
luego de la misma forma los va apagando.
osea algo asi
xxx00000
xxx00001
xxx00011
xxx00111
xxx01111
xxx11111
xxx11110
xxx11100
xxx11000
xxx10000
xxx00000
pero en lugar de eso, hace esto
xxx00000
xxx00010
xxx00100
xxx01000
xxx10000
xxx00000
xxx00000
xxx00000
xxx00000
xxx00000
xxx00000
El tris del puerto a, tambien lo probe cambiando de banco. pero es
igual el resultado
tengo dos uC y los dos responden de la misma manera. Ya me comí el datasheet no veo la solucion
Porfa cualquier aporte me servirá. GRACIAS
PS; El codigo fuente
list p=16f628A
pin0 equ 0x00
pin1 equ 0x01
pin2 equ 0x02
pin3 equ 0x03
pin4 equ 0x04
puertoA equ 0x05
trisA equ 85h
; RETARDOS
PDel0 equ 20h
PDel1 equ 21h
org 0h
;banco 1 rp1:rp0 = 0:1
movlw b"00000000"
tris puertoA
;===============================================================================================
;BLOQUE PRINCIPAL
;===============================================================================================
start
bsf puertoA,pin0
call PDelay
bsf puertoA,pin1
call PDelay
bsf puertoA,pin2
call PDelay
bsf puertoA,pin3
call PDelay
bsf puertoA,pin4
call PDelay
bcf puertoA,pin0
call PDelay
bcf puertoA,pin1
call PDelay
bcf puertoA,pin2
call PDelay
bcf puertoA,pin3
call PDelay
bcf puertoA,pin4
call PDelay
goto start
PDelay movlw .239 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 goto PDelL3 ; 2 cycles delay
PDelL3 clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 cycles delay
PDelL5 goto PDelL6 ; 2 cycles delay
PDelL6 goto PDelL7 ; 2 cycles delay
PDelL7 clrwdt ; 1 cycle delay
return ; 2+2 Done
end
-
Talvez lo que te falta es una resistencia de pullup en la pata RA4 ya que esta pata es de colector abierto y necesita estar polarizada para trabajar como salida.Hasta luego
-
Bueno le di una ojeada a tu programa y no veo por ningún lado la configuración de PORTA con I/O digitales, ese debe ser el problema por lo que sólo debes de agregar lo siguiente a tu programa:
list p=16f628A
pin0 equ 0x00
pin1 equ 0x01
pin2 equ 0x02
pin3 equ 0x03
pin4 equ 0x04
puertoA equ 0x05
trisA equ 85h
CMCON EQU 1FH ;###############
; RETARDOS
PDel0 equ 20h
PDel1 equ 21h
org 0h
MOVLW 0X07 ;################
MOVWF CMCON ;PORTA COMO I/O DIGITALES
;banco 1 rp1:rp0 = 0:1
BSF STATUS,5 ;################
movlw b"00000000" ;BANK 1
MOVWF TRISA
BCF STATUS,5 ;################
;BANK 2
start
bsf puertoA,pin0
call PDelay
bsf puertoA,pin1
call PDelay
bsf puertoA,pin2
call PDelay
bsf puertoA,pin3
call PDelay
bsf puertoA,pin4
call PDelay
bcf puertoA,pin0
call PDelay
bcf puertoA,pin1
call PDelay
bcf puertoA,pin2
call PDelay
bcf puertoA,pin3
call PDelay
bcf puertoA,pin4
call PDelay
goto start
PDelay movlw .239 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 goto PDelL3 ; 2 cycles delay
PDelL3 clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 cycles delay
PDelL5 goto PDelL6 ; 2 cycles delay
PDelL6 goto PDelL7 ; 2 cycles delay
PDelL7 clrwdt ; 1 cycle delay
return ; 2+2 Done
end
LAS MODIFICACIONES ESTAN HECHAS CON MAYUSCULAS. BUENO, CON ESO DEBE DE FUNCIONAR TU PROGRAMA... ME COMENTAS TUS RESULTADOS.
-
Ains , esos puertos analógicos está haciendo que la gente concurra más seguido al psicólogo

Digo yo... a los de microchip no se les ocurrió hacer default del puerto A de sus arañitas como entradas-salidas digitales?
O es que también tienen un monopolio en el ramo de los "curadores mentales"? :P
-
Cierto, en teoria el programador va a usar las salidas como digitales al primer momento (porq aun como salidas analogicas necesitaras setear los registros por si acaso). Carlyvalente tiene razon, el puerto deberia ser digital por defecto. Pero bueno, por alguna razon MC no lo penso de esa manera...