TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Mako22 en 15 de Noviembre de 2009, 13:59:45
-
Hola a todos.
Estoy intentando hacer algo muy sencillo con un 12f683, pero no lo consigo. Mi intención es hacer lo siguiente. Una entrada para leer un pulso de un receptor de rc, para dejar encendido de modo fijo un led o apagarlo, lo que pasa es que aun no tengo el receptor que voy a usar y aún no he entrado en esa rutina.
Un led con un simple parpadeo, otro con parpadeo parecido a un estroboscopio, y otro con un efecto fader.
He echo por separado cada una de las rutinas más o menos como las quiero y funcionan bien, el problema viene cuando intento ejecutarlas todas a la vez. He visto que la manera de conseguir una especie de "multitarea" se hace con los timer, pero tengo una duda sino cuatro. Cuando ejecuto la rutina del timer0 y la del timer1, funcionan bien aunque se ejecutan una detrás de la otra, es decir cuando termina de parpadear un led lo hace el otro, no ambos a la vez. ¿Es correcto así?¿no lo puedo hacer de otra forma?
Segunda duda, cuando ejecuto el código del timer2, los otro dos leds (rutinas) dejan de funcionar y solo funciona el efecto fader.¿? Tercera duda, he leído que se pueden llegar a utilizar hasta 16 timers, aunque yo solo necesitaré un máximo de cuatro, ¿eso es correcto? Y la ultima, he intentado usar la patilla GP4 como salida y no funciona ¿tiene alguna particularidad en especial?
Disculpar por la parrafada.
Un saludo
;Chip Settings
#chip 12F683,4
;Variables
Dim i As byte
On Interrupt Timer0Overflow Call Time
On Interrupt Timer1Overflow Call Time
On Interrupt Timer2Overflow Call Time
'On Interrupt Timer3Overflow Call Time
'Parpadeo
dir gpio.0 Out
'Stroboscopica
dir gpio.1 Out
'Fade
dir gpio.2 Out
'Foco frontal a través de la emisora
'dir gpio.4 Out
osccal = b'11111111'
InitTimer0 Osc, PS1_1/1
InitTimer1 Osc, PS1_1/1
InitTimer2 Osc, PS1_1/1
'nitTimer3 Osc, PS1_1/1
wait 100 ms
ClearTimer 0
StartTimer 0
ClearTimer 1
StartTimer 1
ClearTimer 2
StartTimer 2
'ClearTimer 3
'StartTimer 3
main:
set gpio.0 Off
set gpio.1 Off
set gpio.2 ON
wait 10 us
goto main
Sub TimerMark0
'Parpadeo
Set GPIO.0 on
Wait 1000 ms
Set GPIO.0 off
Wait 1000 ms
Return
End Sub
Sub TimerMark1
'Estrobocopica
Wait 1000 ms
Set GPIO.1 Off
Wait 40 ms
Set GPIO.1 On
Wait 40 ms
Set GPIO.1 Off
Wait 40 ms
Set GPIO.1 On
Return
End Sub
Sub TimerMark2
'Fader
' PWMOn
' Set gpio.2 Off
' For i = 255 To 0 step -1
' HPWM 1,1,i
' Wait 6 ms
' next i
' PWMOff
' wait 800 ms
' Return
End Sub
'Sub TimerMark3
' Este timer leera la emisora para el foco delantero
'Return
'End Sub