TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hernanutn en 09 de Marzo de 2020, 12:51:47
-
HOLA MI CONSULTA ES QUE CUANDO USO EL
#task(rate=7000ms,max=20ms) lo calcula para 14s y uso un crystal de 4Mhz. La misma tarea lo realize con un rate=1s y lo calcula para 2s
Desde ya gracias..
-
No esta muy claro tu pregunta pero:
Primero necesitas definir el cristal como lo haces con los delays y definir correctamente el timer (y su preescaler).
Segundo el rate es cada cuanto se ejecuta la tarea, que puede darse en segundos (s), milisegundos microsegundos, etc. Y debe ser multiplo del minor_cycle especificado en la directiva USE_RTOS.
El max, es el tiempo MAXIMO de tiempo de procesador continuo que le vas a dar, y debe ser igual o menor al tiempo especificado en minor_cycle.
Si definiste correctamente tu frecuencia de cristal, y bien los preescalers del timer, no creo que tengas problemas y seguramente cumpla con los tiempos:
This directive tells the compiler which timer on the PIC to use for monitoring and when to grant control to a task. Changes to the specified timer's prescaler will effect the rate at which tasks are executed.
Entonces fijate bien el tema del preescaler.
-
#use delay(clock=4M) con cystal de 4 MHz
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1)
Lo saque de unos ejemplos de rtos de este foro.
voy a ver bien el tema del prescaler.
Gracias..
-
Depende de que PIC estes hablando pero el preescaler minimo de la mayoria de los Timer0 es 1:2 y no 1:1. tal ves por eso tenes el doble de tiempo
-
El error estaba en la tarea ya que quiero que lo haga periodicamente para prender y apagar 2 led(simulan el giro de un motor AC) y el rtos_yield() lo tengo al final por eso puse el rate a 3500ms y con eso cumplo los 7s por led ON/OFF.
Ademas cambie lo que me dijiste.