PIC MCU: ¿Demora de software o hardware?

1

Experimentando con LED parpadeantes, aprendí cómo crear retrasos con un bucle de software o un tiempo de espera de un temporizador. Sé que para un simple programa de LED parpadeante, donde los procesos no son tan complicados y la sincronización no es crucial, el uso de cualquiera de los dos no importaría. Pero en más de un contexto multitarea crucial en el tiempo, ¿cuáles son los beneficios y / o desventajas de ambos?

Montones de gracias, así es como los configuro:

Demora de software:

void softwaredelay()
{
    int i;
    for(i=0; i<1000; i++)
    {/*Timer Stuff*/}
}

Retardo de hardware (específico para mcu PIC16):

void timerdelay()
{
    OPTION_REGbits.PSA = 0;
    OPTION_REGbits.PS.  = 0b111;
    OPTION_REGbits.T0CS =  0;

    INTCONbits.T0IF = 0;
    TMR0 = 0b11111000;
    INTCONbits.T0IE = 1;

    while(INTCONbits.T0IF==0)
    {/*Timer Stuff*/}
}
    
pregunta ezra_vdj

3 respuestas

7

Tienes que ir al banco (que está a la vuelta de la esquina) y lavar la ropa. Ir a la lavandería requiere que espere a que la lavadora se termine y luego esperar a que la secadora termine.

¿Cómo realizarías estas tareas?

En un día de descanso, puedes simplemente lavar la ropa y luego ir al banco. No es tan importante. A quién le importa.

Pero en un día ocupado, donde tienes otras cosas que hacer, como ver una película, estudiar o cualquier otra tarea, lo más eficiente es cargar la primera parte de la ropa y luego ir a la Banco, y luego cargar la segunda parte de la ropa. Ahora eres libre de hacer otras cosas. Eso es maximizar su tiempo para que pueda hacer otras tareas.

Ahora, para un microcontrolador o cualquier sistema integrado, lo mismo es cierto. Si no te importa, el poder, el tiempo o cualquier cosa, entonces ve con un retraso impulsado por el software. Es más fácil de implementar y puede escalar tan alto como desee con gran facilidad.

Si te importa la potencia, el tiempo, la eficiencia, entonces un temporizador de hardware es el camino a seguir. Mientras espera, puede irse a dormir o realizar otra tarea. Es un poco más complicado de configurar, y si varias tareas requieren demoras, es posible que se le agoten los temporizadores de hardware y luego tenga que recurrir a un sistema más complicado para administrar el tiempo y las demoras.

Si le importa algo que no sea la facilidad de uso: Hardware Timer

Si solo le interesa la facilidad de uso: Software

    
respondido por el efox29
2

Depende en gran medida de lo que quieras lograr.

Para una demora de bloqueo de software como la que ha configurado, no podrá dar servicio a las interrupciones y mantener un intervalo constante. Si agrega más código en el bucle, el retraso cambiará, de manera imprevisible o inconsistente si tiene bloques de flujo de control variable. Sospecho que nada de esto importa mucho para un programa blinky simple, pero usted preguntó acerca de las aplicaciones de tiempo crítico

    
respondido por el Loganf
2

El "retraso del software" es una solución ingenua. Nunca debe usar dicho código en ningún programa de microcontrolador porque nunca hay una razón para hacerlo: siempre tendrá temporizadores de hardware. Los "retrasos del software" no son profesionales, ya que tienen los siguientes problemas:

  • Bloquea la CPU para que no haga nada útil.
  • El tiempo es muy impreciso y depende de cómo se traduzca el código C al código de máquina. Para escribir "retrasos de software" confiables, es necesario desarmar el código C y verificar los tics de CPU según las instrucciones del ensamblador. Bastante tedioso y debe hacerse una y otra vez, tan pronto como se cambien las opciones de código o compilador.
  • Las interrupciones también harán que la sincronización sea incorrecta.
  • El retraso depende del reloj del sistema. Si se cambia el reloj, la demora también cambiará.
  • El optimizador puede eliminar todo el código de "retraso del software" si descubre que no hace nada. Es posible que necesite varios trucos inteligentes para evitar que esto suceda.
  • Mantiene el consumo de corriente de la CPU al 100%.

Si el bloqueo de la CPU no es un problema, es decir, si su programa no tiene nada útil que hacer mientras espera, debe configurar un temporizador de hardware y sondear ese indicador de temporizador como en su segundo ejemplo.

Para requisitos de tiempo real más difíciles, tendrás que usar interrupciones de temporizador.

Si el consumo de corriente es un problema y la MCU admite el modo de suspensión / activación, normalmente puede configurar la MCU para que entre en el modo de suspensión hasta que haya transcurrido el tiempo del temporizador.

    
respondido por el Lundin

Lea otras preguntas en las etiquetas