Arduino: ¿alternativas más rápidas a digitalread () y digitalwrite ()?

12

¿Cuáles son las alternativas más rápidas para llamar a las funciones Arduino digitalread() y digitalwrite() ? Se aceptan soluciones específicas de AVR o de chip.

    
pregunta Mark Harrison

5 respuestas

18

Acceda a los puertos digitales directamente!

  

Los 3 métodos que probé fueron

     
  • digitalWrite (pin, LOW); digitalWrite (pin, HIGH);
  •   
  • CLR (PORTB, 0); SET (PORTB, 0);
  •   
  • PORTB | = _BV (0); PORTB & = ~ (_BV (0));
  •   

[...]

  

     

Como puede ver, digitalWrite toma alrededor de 56 ciclos para completarse, mientras que el direccionamiento directo del puerto toma 2 ciclos. ¡Esa es una gran diferencia en el tiempo para los programas que tienen muchas operaciones de IO!

    
respondido por el Marty
7

Esta biblioteca es una buena alternativa: enlace

    
respondido por el lukamicoder
2

Como se sugirió anteriormente, acceda directamente a los puertos digitales. ¡Pero con estilo!

Al escribir valores codificados directamente en los registros de hardware, pierdes legibilidad y portabilidad.

He publicado en Github una herramienta que llamé HWA que te permite usar una interfaz orientada a objetos para el hardware que no requiere un compilador de C ++ y produce un código binario de alta eficiencia.

HWA está ahí: enlace

    
respondido por el duparq
1

La gente en Arduino.SE ya han discutido y probado esto . Como resultado, digitalWriteFast() no es de mucha mejora con respecto al digitalWrite() regular. Sin embargo, el acceso directo al puerto es entre 35 y 40 veces más rápido que digitalWrite() .

    
respondido por el Dmitry Grigoryev
0

Utilice el ChipKit Uno32. Es mucho más rápido que el AVR Arduinos basados en. También se ocupará de sus problemas de tiempo.

    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas