¿Parpadeando 3 led's en paralelo?

0

Tengo una placa de desarrollo PIC que tiene pocas a bordo. Estoy programando MCU para que parpadee 3 LED de forma paralela. He hecho el siguiente código:

void led1() //blink led1 with delay of 700ms
{
  LED1 = 1;
  Delayms(700); 
  LED1 = 0;
  Delayms(700);
}
void led2() //blink led2 with delay of 1200ms
{
  LED2 = 1;
  Delayms(1200);
  LED2 = 0;
  Delayms(1200);
}
void led3()  //blink led3 with delay of 2000ms
{
  LED3 = 1;
  Delayms(2000);
  LED3 = 0;
  Delayms(2000);
}

void main()
{
  //******//
  /** code to blink led's in parallel **/
  //*****//
}

¿Qué lógica debo escribir para parpadear led's de forma paralela? Sé que embebido solo puede hacer una tarea a la vez, pero hay una solución de codificación para ello. No quiero usar FreeRTOS para aplicaciones simples. Quiero que parpadeen al mismo tiempo. Como el primer parpadeo con el retardo de 700 ms, al mismo tiempo, el segundo parpadeo con un retardo de 1.200 ms y al mismo tiempo el tercer parpadeo con un retardo de 2 segundos. Los 3 en paralelo

    
pregunta user46573544

3 respuestas

1

Cree un contador de 1 o 10 o 100 mS.
Para cada LED proporcione un registro de cuenta regresiva.
Cada vez que el temporizador "marca" disminuye cada registro de cuenta regresiva de LED.
Cuando un registro llega a cero, procese el LEd y reinicie el temporizador. QED.

También puedes usar contar hasta un límite u otros esquemas. El punto clave es que cada tarea es esencialmente independiente con la única fuente de temporizador que las dirige.

LEDRED = 7  
LEDGREEN = 12  
LEDBLUE = 20  

DO Until_hell_freezes_over

DELAY 100 mS

Decrement LEDRED  
IF LEDRED = 0  
    Toggle RED_LED  
    LEDRED = 7  
ENDIF  

Decrement LEDGREEN  
IF LEDGREEN = 0  
    Toggle GREEN_LED  
    LEDGREEN = 12  
ENDIF    

Decrement LEDBLUE   
IF LEDBLUE = 0  
    Toggle BLUE_LED   
    LEDBLUE = 20   
ENDIF   

LOOP
    
respondido por el Russell McMahon
0

Haría un temporizador que se apaga cada 100 ms. Luego, llame a una función 'update_led_x' que incrementará un contador para ese led. Cuando llega a cierto conteo, alterna el led y reinicia el conteo.

    
respondido por el Houston Fortney
0

Deberá volver a escribir el código para que el encendido y apagado de los tres LED pueda ocurrir independientemente en lugar de en secuencia. Si desea precisión, entonces una interrupción del temporizador será una buena idea. De lo contrario, y si esto es lo único que desea que haga el código, entonces podría tener un bucle de tiempo (1) con un solo retraso del mínimo que necesita, seguido de una función de controlador para cada uno de los LED. Cada LED necesitará su propio contador, que seguirá siendo restablecido al valor del número requerido de estos retrasos mínimos y los tres controladores de LED probarán, incrementarán y restablecerán los contadores respectivos cada vez que giren alrededor del bucle. Cuando los contadores alcancen la mitad de su valor, el LED se apagará y cuando el contador se restablezca a 0, se encenderán.

    
respondido por el Drewan Buckley

Lea otras preguntas en las etiquetas