Aca estuve probando unas cosas. Todavia no lo probe en la vida real porque no tengo el PSI en esta maquina (me aparece un error al abrir el compilador de basic) y tampoco tengo la quemadora (me la presta un profe siempre y no la tengo a mano ahora).
El codigo que hice es el siguiente:
alldigital
trisa = %00000000
trisb = %00000000
Symbol led1 = porta.1
Symbol led2 = porta.0
Symbol led3 = porta.2
Symbol led4 = porta.3
Symbol led5 = porta.4
Symbol led6 = portb.0
Symbol led7 = portb.1
Symbol led8 = portb.2
Symbol led9 = portb.3
Symbol led10 = portb.4
dim i as Byte
dim j as Word
programa:
gosub off
led1 = 1
waitms 200
gosub off
for i = 1 to 3 step 1
for j = 1 to 784 step 1
led2 = 1
CALL _pwm(1, 168)
next j
gosub off
for j = 1 to 784 step 1
led3 = 1
CALL _pwm(2, 168)
CALL _pwm(1, 84)
next j
gosub off
for j = 1 to 784 step 1
led4 = 1
CALL _pwm(3, 168)
CALL _pwm(2, 84)
next j
gosub off
for j = 1 to 784 step 1
led5 = 1
CALL _pwm(4, 168)
CALL _pwm(3, 84)
next j
gosub off
for j = 1 to 784 step 1
led6 = 1
CALL _pwm(5, 168)
CALL _pwm(4, 84)
next j
gosub off
for j = 1 to 784 step 1
led7 = 1
CALL _pwm(6, 168)
CALL _pwm(5, 84)
next j
gosub off
for j = 1 to 784 step 1
led8 = 1
CALL _pwm(7, 168)
CALL _pwm(6, 84)
next j
gosub off
for j = 1 to 784 step 1
led9 = 1
CALL _pwm(8, 168)
CALL _pwm(7, 84)
next j
gosub off
for j = 1 to 784 step 1
led10 = 1
CALL _pwm(9, 168)
CALL _pwm(8, 84)
next j
gosub off
for j = 1 to 784 step 1
led9 = 1
CALL _pwm(10, 168)
next j
gosub off
for j = 1 to 784 step 1
led8 = 1
CALL _pwm(9, 168)
CALL _pwm(10, 84)
next j
gosub off
for j = 1 to 784 step 1
led7 = 1
CALL _pwm(8, 168)
CALL _pwm(9, 84)
next j
gosub off
for j = 1 to 784 step 1
led6 = 1
CALL _pwm(7, 168)
CALL _pwm(8, 84)
next j
gosub off
for j = 1 to 784 step 1
led5 = 1
CALL _pwm(6, 168)
CALL _pwm(7, 84)
next j
gosub off
for j = 1 to 784 step 1
led4 = 1
CALL _pwm(5, 168)
CALL _pwm(6, 84)
next j
gosub off
for j = 1 to 784 step 1
led3 = 1
CALL _pwm(4, 168)
CALL _pwm(5, 84)
next j
gosub off
for j = 1 to 784 step 1
led2 = 1
CALL _pwm(3, 168)
CALL _pwm(4, 84)
next j
gosub off
for j = 1 to 784 step 1
led1 = 1
CALL _pwm(2, 168)
CALL _pwm(3, 84)
next j
gosub off
next i
GOTO programa
END
Proc _pwm(led AS Word, _power AS Byte)
CONST periodo = 255 'Aproximado <4Khz
DIM t_low AS Byte 'Tiempo a OFF
t_low = periodo - _power 'Tiempo a OFF
if led = 1 THEN
IF _power > 0 THEN led1 = 1 'Pin a estado Higt
endif
if led = 2 THEN
IF _power > 0 THEN led2 = 1 'Pin a estado Higt
endif
if led = 3 THEN
IF _power > 0 THEN led3 = 1 'Pin a estado Higt
endif
if led = 4 THEN
IF _power > 0 THEN led4 = 1 'Pin a estado Higt
endif
if led = 5 THEN
IF _power > 0 THEN led5 = 1 'Pin a estado Higt
endif
if led = 6 THEN
IF _power > 0 THEN led6 = 1 'Pin a estado Higt
endif
if led = 7 THEN
IF _power > 0 THEN led7 = 1 'Pin a estado Higt
endif
if led = 8 THEN
IF _power > 0 THEN led8 = 1 'Pin a estado Higt
endif
if led = 9 THEN
IF _power > 0 THEN led9 = 1 'Pin a estado Higt
endif
if led = 10 THEN
IF _power > 0 THEN led10 = 1 'Pin a estado Higt
endif
WaitUs _power 'Establece tiempo a ON
if led = 1 THEN
led1 = 0
endif
if led = 2 THEN
led2 = 0
endif
if led = 3 THEN
led3 = 0
endif
if led = 4 THEN
led4 = 0
endif
if led = 5 THEN
led5 = 0
endif
if led = 6 THEN
led6 = 0
endif
if led = 7 THEN
led7 = 0
endif
if led = 8 THEN
led8 = 0
endif
if led = 9 THEN
led9 = 0
endif
if led = 10 THEN
led10 = 0
endif
WaitUs t_low 'Establece el tiempo a OFF
END Proc
off:
led1 = 0
led2 = 0
led3 = 0
led4 = 0
led5 = 0
led6 = 0
led7 = 0
led8 = 0
led9 = 0
led10 = 0
return
Por que 784? Facil, hice un regla de 3 simple:
1 ciclo --> 255us = 0,255ms
x ciclos --> 200ms
x = 784,31...
Obviamente no serian 200ms exactos porque la cuenta me dio un numero irracional y deberia ser entero y ademas ejecutar las lineas de codigo ya lleva un determinado tiempo, pero es bastante aproximado.
Si alguno tiene otra solucion o algun error que no me di cuenta porque no lo testee todavia, bienvenido sea.