TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jequer en 10 de Marzo de 2005, 14:26:00

Título: Problema 16F628
Publicado 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
Título: RE: Problema 16F628
Publicado por: Micom en 10 de Marzo de 2005, 21:06:00
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
Título: RE: Problema 16F628
Publicado por: mario_pastor en 11 de Marzo de 2005, 06:55:00
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.
Título: RE: Problema 16F628
Publicado por: carlyvalente en 14 de Marzo de 2005, 03:18:00
Ains , esos puertos analógicos está haciendo que la gente concurra más seguido al psicólogo Sonrisa
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
Título: RE: Problema 16F628
Publicado por: fenix_jn en 14 de Marzo de 2005, 11:09:00
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...