Si aún no eres usuario, puedes crear una cuenta o entrar
Arduino: Función digitalWrite más rápida

Todos los amantes de Arduino conocemos la función digitalWrite que se utiliza para activar las salidas digitales. Muchos la hemos utilizado para manejar pantallas LCD por ejemplo o incluso distintos drivers que necesitan de distintos pines digitales para su funcionamiento y por norma general la velocidad de ésta función no es precisamente rápida. Lo podemos notar en proyectos donde necesitamos manipular un puerto entero de forma rápida. Pues bien, ésta función toma más de 50 ciclos de reloj para su ejecución, lo cual es demasiado si queremos velocidad. Os dejo un pequeño trozo de código de Bill que muestra cómo manejar el puerto directamente y ejecutar lo mismo pero en tan sólo 2 ciclos de reloj. Recordemos que Arduino no es más que una plataforma montada alrededor de un pequeño chip AVR y podemos utilizar código nativo :)





Las pruebas se han realizado sobre un Arduino Atmega328 a 16 MHz.

Éstos son los 3 métodos utilizados para la prueba de rendimiento:

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

Y las macros correspondientes:

#define CLR(x,y) (x&=(~(1<<y)))

#define SET(x,y) (x|=(1<<y))

#define _BV(bit) (1 << (bit))

Resultados de la prueba:

En la siguiente prueba, se invierte el estado de un pin. Las funciones utilizadas son éstas:

 

  • digitalWrite(pin, !digitalRead(pin))
  • PORTB ^= (_BV(0))
  • sbi(PINB,0)

#define sbi(port,bit) (port)|=(1<<(bit))

Los resultados:

Se puede ver claramente que para operaciones de éste tipo es mucho mejor utilizar la gestión de puertos directa. De hecho, podreis ver más información sobre éstos métodos en la própia página de arduino aqui.

Fuente: billporter

Comparte esto con tus amigos!

Comentarios:



Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Manuel Jiménez
Colaborador
Pablo Toimil
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:

Páginas amigas:

Aqui tienes una selección de las páginas que más nos gusta visitar


© BricoGeek.com 2005-2012

Demuestra lo que sabes hacer!