Ahi descargue 2 archivos con 16f877 y otro con 16f84. La simulacion del 16f84 me dice que el parpadeo de los leds es de 10Hz. Creo que algo anda mal. La simulacion del 16f877 parece que anda bien mandando pulsos de 38Hz.
Un par de ideas que tengo en mente es armar una rutina al estilo:
pwm_max_resolution(1~255)
pwm_set_percent_dutycycle(0~100)
Lo que noto es que si se aumenta la resolucion, baja la frecuencia, y eso con un cristal de menor velocidad que 20Mhz seria un problema. Yo le agregaria una funcion para sacrificar resolucion y ganar frecuencia.
Tambien que el ajuste del ancho se pueda hacer tambien por porcentaje. Para mi es mas comodo usando % y de paso uno se olvida de la resolucion maxima.
---EDIT
Pude sacar 200Hz con resolucion de 255 a 20Mhz. El codigo en Jalv2 es este por ahora.
Me da un par de warning pero igual parece que anda. Apreto el pulsador y me va bajando el duty. Esto se esta poniendo bueno, mas tarde voy a probar con un par de LEDs RGB que tengo por ahi para hacer pruebas.
Un par de ideas que tengo en mente es armar una rutina al estilo:
pwm_max_resolution(1~255)
pwm_set_percent_dutycycle(0~100)
Lo que noto es que si se aumenta la resolucion, baja la frecuencia, y eso con un cristal de menor velocidad que 20Mhz seria un problema. Yo le agregaria una funcion para sacrificar resolucion y ganar frecuencia.
Tambien que el ajuste del ancho se pueda hacer tambien por porcentaje. Para mi es mas comodo usando % y de paso uno se olvida de la resolucion maxima.
---EDIT
Pude sacar 200Hz con resolucion de 255 a 20Mhz. El codigo en Jalv2 es este por ahora.
Código:
const timer0_isr_rate = 80000
const DELAY_SLOTS = 2
var byte pwm_soft_duty0=0
var byte contador=255
alias led is pin_A0
pin_A0_direction = output
include timer0_isr_interval
timer0_isr_init()
procedure timer0() is
pragma interrupt
if (contador==pwm_soft_duty0) then
pin_a0=0
end if
if (contador==0) then
contador=255
porta=255
end if
contador=contador-1
end procedure
pwm_soft_duty0=0
forever loop
if (pin_b0==1) then
pwm_soft_duty0=pwm_soft_duty0+10
while(pin_b0==1) loop
end loop
end if
end loop
Me da un par de warning pero igual parece que anda. Apreto el pulsador y me va bajando el duty. Esto se esta poniendo bueno, mas tarde voy a probar con un par de LEDs RGB que tengo por ahi para hacer pruebas.
Última edición: