TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hernanutn en 09 de Marzo de 2020, 12:51:47

Título: RTOS CCS PIC 16F877
Publicado por: hernanutn en 09 de Marzo de 2020, 12:51:47
HOLA MI CONSULTA  ES QUE CUANDO USO EL

Código: [Seleccionar]
#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..
Título: Re:RTOS CCS PIC 16F877
Publicado por: KILLERJC en 09 de Marzo de 2020, 13:05:14
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:

Citar
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.
Título: Re:RTOS CCS PIC 16F877
Publicado por: hernanutn en 09 de Marzo de 2020, 13:13:34
Código: [Seleccionar]
#use delay(clock=4M) con cystal de 4 MHz

Código: [Seleccionar]
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..
Título: Re:RTOS CCS PIC 16F877
Publicado por: KILLERJC en 09 de Marzo de 2020, 14:33:44
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
Título: Re:RTOS CCS PIC 16F877
Publicado por: hernanutn en 09 de Marzo de 2020, 16:11:16
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.