Problema con Pic 16f84a uln2803 y LEDs

Hola que tal, veran he tratado de armar una luz para amenizar las fiestas (como esta
) es bastante sencillo su funconamiento, utilizo 2 pics 16f84a y 2 uln2803 , un pic y un uln los uso para mover un motor a pasos, el cual hace girar 3 espejos, este sistema funciona bien, el problema que tengo es en el circuito que controla los LEDs, utilizo una matriz de 50 leds de 5 colores, el pic hace que los LEDs enciendan con ciertas secuencias y rutinas (el control es manual con una botonera) pero a la hora de conectarlos me llevo con la sorpresa de que encienden todos al mismo tiempo:confused: como si los catodos estuvieran conectados directamente a tierra sin pasar por el uln (bueno al inicio del programa todos los leds estan apagados, la cuestion esta cuando activo la primera secuencia con la botonera, aqui en vez de que prenda solo un color, prenden todos!) Algo que he observado es que aunque todos enciendan, los LEDs que deberian prender solo en ese momento encienden con mayor intensidad, los otros prenden pero mas difuminados. Ya revise la matriz (incluso hice pruebas con un LED en vez de la matriz y el comportamiento es el mismo) ya cheque las conexiones y todo parece en orden, es por eso que acudo a ustedes para ver sugerencias de lo que podria estar sucediendo espero puedan ayudarme. (y) Gracias.

PD. Adjunto esquema y programa (hice uno solo para probar el comportamiento de los leds, no tiene secuencias, pero el problema persiste, asi que lo descarto)

;;;;;;;;;;;;;;;;;;;;;;;;; Secuencias LEDs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; MAKRUGH CORP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
list p=16f84a ;decimos cual pic se va a usar
include <p16f84a.inc> ;incluimos su libreria
__config _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF ;fusibles

PDel0 EQU 0Ch ; Asignamos registros requeridos en retardos
PDel1 EQU 0Dh
PDel0a EQU 0Fh
PDel1a EQU 10h
PDel2a EQU 19h
PDel0c EQU 14h
PDel1c EQU 15h
PDel2c EQU 16h
PDel0d EQU 17h
PDel1d EQU 18h
PDel0f EQU 21h
PDel1f EQU 22h

org 0x00 ;origen
bsf STATUS,RP0 ;acceso a banco 1
bsf TRISA,0 ; Entradas: RA0 [BUTTON 1]
bsf TRISA,1 ; Entradas: RA1 [BUTTON 2]
bsf TRISA,4 ; RA4 [BUTTON 3]
bcf TRISB,0 ; Salidas : RB0 [LED INDICADOR3]
bcf TRISB,1 ; RB1 [LED INDICADOR4]
bcf TRISB,2 ; RB2 [LED INDICADOR5]
bcf TRISB,3 ; RB3 [LEDS BLANCOS]
bcf TRISB,4 ; RB4 [LEDS MORADOS]
bcf TRISB,5 ; RB5 [LEDS ROJOS]
bcf TRISB,6 ; RB6 [LEDS VERDES]
bcf TRISB,7 ; RB7 [LEDS AZULES]
bcf TRISA,2 ; RA2 [LED INDICADOR1]
bcf TRISA,3 ; RA3 [LED INDICADOR2]
bcf STATUS,RP0 ;acceso a banco 0

apagado bcf PORTB,0 ;apagamos LEDs
bcf PORTB,1
bcf PORTB,2
bcf PORTB,3
bcf PORTB,4
bcf PORTB,5
bcf PORTB,6
bcf PORTB,7
bcf PORTA,2
bcf PORTA,3
prog call demora20ms
btfsc PORTA,0
goto manual
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
goto prog
manual call demora20ms
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
blanco bsf PORTA,2
bsf PORTB,3
call demora2s ;50ms
bcf PORTB,3
bcf PORTA,2
btfsc PORTA,0
goto morado
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
goto blanco
morado bsf PORTA,2
bsf PORTB,4
call demora2s ;
bcf PORTB,4
bcf PORTA,2
btfsc PORTA,0
goto rojo
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
goto morado
rojo bsf PORTA,2
bsf PORTB,5
call demora2s ;
bcf PORTB,5
bcf PORTA,2
btfsc PORTA,0
goto verde
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
goto rojo
verde bsf PORTA,2
bsf PORTB,6
call demora2s ;
bcf PORTB,6
bcf PORTA,2
btfsc PORTA,0
goto azul
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
goto verde
azul bsf PORTA,2
bsf PORTB,7
call demora2s ;
bcf PORTB,7
bcf PORTA,2
btfsc PORTA,0
goto blanco
btfsc PORTA,1
goto tempo5s
btfsc PORTA,4
goto estrobo
goto azul

estrobo
tempo5s
goto prog

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
demora50ms
movlw .55 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .181 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
return ; 2+2 Fin.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
demora3s
movlw .67 ; 1 set numero de repeticion (C)
movwf PDel0c ; 1 |
PLoop0c movlw .91 ; 1 set numero de repeticion (B)
movwf PDel1c ; 1 |
PLoop1c movlw .122 ; 1 set numero de repeticion (A)
movwf PDel2c ; 1 |
PLoop2c clrwdt ; 1 clear watchdog
decfsz PDel2c, 1; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2c ; 2 no, loop
decfsz PDel1c, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1c ; 2 no, loop
decfsz PDel0c, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0c ; 2 no, loop
PDelL1c goto PDelL2c ; 2 ciclos delay
PDelL2c clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
demora20ms
movlw .21 ; 1 set number of repetitions (B)
movwf PDel0d ; 1 |
PLoop1d movlw .237 ; 1 set number of repetitions (A)
movwf PDel1d ; 1 |
PLoop2d clrwdt ; 1 clear watchdog
decfsz PDel1d, 1 ; 1 + (1) is the time over? (A)
goto PLoop2d ; 2 no, loop
decfsz PDel0d, 1 ; 1 + (1) is the time over? (B)
goto PLoop1d ; 2 no, loop
PDelL1d goto PDelL2d ; 2 cycles delay
PDelL2d clrwdt ; 1 cycle delay
return ; 2+2 Done
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
demora100ms
movlw .110 ; 1 set number of repetitions (B)
movwf PDel0f ; 1 |
PLoop1f movlw .181 ; 1 set number of repetitions (A)
movwf PDel1f ; 1 |
PLoop2f clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1f, 1 ; 1 + (1) is the time over? (A)
goto PLoop2f ; 2 no, loop
decfsz PDel0f, 1 ; 1 + (1) is the time over? (B)
goto PLoop1f ; 2 no, loop
PDelL1f goto PDelL2f ; 2 cycles delay
PDelL2f goto PDelL3f ; 2 cycles delay
PDelL3f clrwdt ; 1 cycle delay
return ; 2+2 Done
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
demora2s
movlw .167 ; 1 set number of repetitions (C)
movwf PDel0a ; 1 |
PLoop0a movlw .41 ; 1 set number of repetitions (B)
movwf PDel1a ; 1 |
PLoop1a movlw .72 ; 1 set number of repetitions (A)
movwf PDel2a ; 1 |
PLoop2a clrwdt ; 1 clear watchdog
decfsz PDel2a, 1 ; 1 + (1) is the time over? (A)
goto PLoop2a ; 2 no, loop
decfsz PDel1a, 1 ; 1 + (1) is the time over? (B)
goto PLoop1a ; 2 no, loop
decfsz PDel0a, 1 ; 1 + (1) is the time over? (C)
goto PLoop0a ; 2 no, loop
PDelL1a goto PDelL2a ; 2 cycles delay
PDelL2a clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
end

Por cierto, alimento los dos circuitos con una misma fuente de 12 V a 3A, uso el regulador de 5V para alimentar los 2 PICs y el uln para los LEDs.

Edito: Lo simulo en el proteus y funciona bien, ya no se que hacer :(
 

Adjuntos

  • Circuito LEDs MAKRUGH 2.png
    Circuito LEDs MAKRUGH 2.png
    49.1 KB · Visitas: 45
  • circuito pap makrugh 2.png
    circuito pap makrugh 2.png
    59.4 KB · Visitas: 36
Última edición:
Ya lo he resuelto, cambie el circuito a otro pcb y funciono correctamente, al parecer habia un corto. Pueden borrar el tema.
 
Ya lo he resuelto, cambie el circuito a otro pcb y funciono correctamente, al parecer habia un corto. Pueden borrar el tema.

Te felicito por que ya te salio; tu mismo le diste solucion bueno y esto quedara como un aporte para otros foreros que deseen hacer este proyecto:D(y)
PD: FELIZ AÑO NUEVO
 
Atrás
Arriba