Hola a todos... Estoy diseñando una especie de porta retrato en el cual cada lado tiene una tira de leds.... Lo que necesito es armar una secuencia en la que se atenúen uno o mas lados dando así un efecto de sombra...
Ademas contar con un pulsador que me permitirá cambiar de "programa", es decir el orden o los lados a priorizar...
Luego de mucha prueba y error logre hacerlo funcionar con el programa que le adjunto abajo...
Problemas:
No puedo lograr que no parpadeen... Probé instalando un capacitor y se reduce en algo pero no mucho...
Como hago para que tarde mas en cumplir el ciclo sin que parpadeen aun mas???
Este es el prog:
Espero sepan alguna solucion...
Gracias...
Ademas contar con un pulsador que me permitirá cambiar de "programa", es decir el orden o los lados a priorizar...
Luego de mucha prueba y error logre hacerlo funcionar con el programa que le adjunto abajo...
Problemas:
No puedo lograr que no parpadeen... Probé instalando un capacitor y se reduce en algo pero no mucho...
Como hago para que tarde mas en cumplir el ciclo sin que parpadeen aun mas???
Este es el prog:
Código:
@ DEVICE pic16F628A, XT_OSC ' Opción del Osc Externo
DEFINE osc 4 ; especifica que es de 4MHz
@ DEVICE pic16F628A, WDT_OFF ' Watchdog Timer ON
@ DEVICE pic16F628A, PWRT_OFF ' Power-On Timer
@ DEVICE pic16F628A, BOD_OFF
@ DEVICE pic16F628A, MCLR_OFF ' Master Clear Opción interno
@ DEVICE pic16F628A, LVP_OFF ' Bajo voltaje de programación
@ DEVICE pic16F628A, CPD_OFF ' Protección del código de memoria OFF
@ DEVICE pic16F628A, PROTECT_OFF' protección de código OFF
cmcon=7
Trisb=0
FREC VAR BYTE ;variable FREC tamaño 255
FREC2 VAR BYTE
FREC3 VAR BYTE ;variable FREC tamaño 255
FREC4 VAR BYTE
FREC = 10
FREC2 = 10
FREC3 = 10
FREC4 = 10
DIR var bit
DIR2 var bit
DIR3 var bit
DIR4 var bit
DIR = 1
DIR2 = 1
DIR3 = 1
DIR4 = 1
num var byte
num = 0
PROG:
IF num > 11 THEN num = 0 ; si es mayor a 10 vuelve a cero
if porta.3 = 0 then ; suma
pause 500
num = num + 1
pause 200
if num = 1 then
FREC = 10
FREC2 = 90
FREC3 = 170
FREC4 = 250
pause 200
endif
if num = 2 then
FREC = 30
FREC2 = 250
FREC3 = 250
FREC4 = 250
pause 200
endif
if num = 3 then
FREC = 250
FREC2 = 30
FREC3 = 250
FREC4 = 250
pause 200
endif
if num = 4 then
FREC = 250
FREC2 = 250
FREC3 = 30
FREC4 = 250
pause 200
endif
if num = 5 then
FREC = 250
FREC2 = 250
FREC3 = 250
FREC4 = 30
pause 200
endif
if num = 6 then ; dos contra dos
FREC = 30
FREC2 = 250
FREC3 = 250
FREC4 = 30
pause 200
endif
if num = 7 then
FREC = 30
FREC2 = 30
FREC3 = 250
FREC4 = 250
pause 200
endif
if num = 8 then
FREC = 30
FREC2 = 250
FREC3 = 30
FREC4 = 250
pause 200
endif
if num = 9 then
FREC = 250
FREC2 = 30
FREC3 = 30
FREC4 = 250
pause 200
endif
if num = 10 then
FREC = 250
FREC2 = 30
FREC3 = 250
FREC4 = 30
pause 200
endif
if num = 11 then
FREC = 250
FREC2 = 250
FREC3 = 30
FREC4 = 30
pause 200
endif
if num = 12 then
FREC = 10
FREC2 = 10
FREC3 = 10
FREC4 = 10
pause 200
endif
else
PWM PORTB.0,FREC,1 ;sacar PWM l
IF FREC > 249 THEN DIR = 0 ; si mayor 248 resta
IF FREC < 11 THEN DIR = 1
if DIR = 0 then ; resta
FREC = FREC - 1
endif
if DIR = 1 then ; suma
FREC = FREC + 1
endif
PWM PORTB.1,FREC2,1 ;sacar PWM
IF FREC2 > 249 THEN DIR2 = 0 ; si mayor 248 resta
IF FREC2 < 11 THEN DIR2 = 1
if DIR2 = 0 then ; resta
FREC2 = FREC2 - 1
endif
if DIR2 = 1 then ; suma
FREC2 = FREC2 + 1
endif
PWM PORTB.2,FREC3,1 ;sacar PWM
IF FREC3 > 249 THEN DIR3 = 0 ; si mayor 248 resta
IF FREC3 < 11 THEN DIR3 = 1
if DIR3 = 0 then ; resta
FREC3 = FREC3 - 1
endif
if DIR3 = 1 then ; suma
FREC3 = FREC3 + 1
endif
PWM PORTB.3,FREC4,1 ;sacar PWM
IF FREC4 > 249 THEN DIR4 = 0 ; si mayor 248 resta
IF FREC4 < 11 THEN DIR4 = 1
if DIR4 = 0 then ; resta
FREC4 = FREC4 - 1
endif
if DIR4 = 1 then ; suma
FREC4 = FREC4 + 1
endif
endif
goto prog
end
Espero sepan alguna solucion...
Gracias...
Última edición por un moderador: