Archive

Posts Tagged ‘avr’

Convirtiendo datos flotantes a cadenas (Arduino)

January 26th, 2012 No comments

Estaba batallando un poco para convertir tipos de datos, y la verdad me constó un poco el caér en cuenta que pasar de flotantes a cadenas dentro del entorno de programación del arduino (avr-gcc) no era tan directo como creí.

Afortunadamente la respuesta vino de los propios foros de Arduino, del foro viejo para ser preciso.

La función mágina es dtostrf y según la documentacion de la biblioteca funciona así:

char* dtostrf( double         __val,
               signed char    __width,
               unsigned char  __prec,
               char *         __s
)

Facil, no…? Mejor una explicación simple:

char* dtostrf( double        variableFlotante,
               signed char  tamañoMinimo,
               unsigned char presicion,
               char          *cadenaDondeGuardar
)

Esta función recibe la variable que queremos convertir (variableFlotante), el tamaño mínimo de la cadena resultante (tamañoMinimo) incluyendo el punto decimal y el signo negativo en caso necesario, el número de dígitos tras el punto decimal (presicion) y una cadena con suficiente espacio para guardar (cadenaDondeGuardar). Regresa un apuntador a la cadenaDondeGuardar.

Y un pequeño código de ejemplo:

...
char cadenaTemporal[6];
double temperatura;

temperatura = leerSensorTemperatura();
dtostrf(temperatura, 5, 2, cadenaTemporal);
hacerAlgoCon(cadenaTemporal);
...

Cuando menos tengo que decir que fue interesante :)

Categories: Manuscriptus digitalis Tags: ,

Programación AVR 01: Introducción

December 14th, 2010 3 comments

Esta serie de artículos son traducción que he tomado del sitio Hack a day. El pasarlo al Español es mi pequeño aporte :)

Nos gusta ver proyectos electrónicos hardcore con microcontroladores fortachones con cientos, si no miles de líneas de código en su centro. Pero todos necesitan comenzar de alguna manera.
Este tutorial pretente hacer confortable la programación de microcontroladores de la línea Atmel AVR. Incluso si nunca has tocado un microcontrolador anteriormente o te has cortado los dientes con docenas de proyectos con Arduino, esto te ayudará a llegar hasta el hardware y darte la seguridad de contruir cualquier cosa.

Conocimiento requerido

Aquí hay buenas noticias, he puesto la barra bastante baja. Necesitas conocimiento básico de instalar programas en tu computadora y saber usarlos. Necesitas una breve idea de como funciona un protoboard y se te aconseja que tengas un multimetro y sepas cómo medir voltajes con él. No tengas miedo de usar Google para investigar algunos puntos que no son explícitamente contestados aquí.

¿Qué es lo que un microcontrolador hace realmente?

Esta es una pregunta compleja. Para efectos de entendimiento tomaré la explicación más simple:
  1. Un microcontrolador toma algún tipo de entrada.
  2. Toma una desición basado en el programa que se le haya escrito.
  3. Las salidas son cambiadas basadas en la desición del punto 2.
El microcontrolador hace lo que le hayas programado hacer. Lo hace rápido y puedes estar seguro que lo hace.

¿Cómo es que trabaja?

Para este tutorial estaré discutiendo lógica digital. Eso quiere decir que todas las patitas de entradas y salida estarán basadas en un voltaje de 0 ó 5V. Esto produce nuestro 1 y 0 digital, con 5V como 1 y 0V como cero.

Entonces, si quieres encender un LED, sólo cablea su circuito a una terminal, has esa terminal una salida y establecela a un lógico alto (5 volts). Si quieres agregar un botón, conectalo a una terminal definida como entrada y programa al chip para medir el vltaje de esa terminal. Realmente es así de fácil, una vez que aprendas cómo escribir las órdenes correctas para que ese chip entienda tus deseos.

Una mirada al chip en si

He decidido utilizar un microcontrolador Atmega168. Es un chip poderoso pero no es tan complicado de usar como su hermano menor. Dejará suficiente espacio para que crezcas tus proyectos, mientras que permanece accesible (menos de $4.5 USD). He aquí su diagrama:

Esto es llamado generalmente distribución de patas (pinout, en ingles), pues muestra lo que hace cada uno de las 28 patas del chip. Todas estas terminales tienen múltiples funciones y por eso hay largas líneas de texto junto a cada una, excepto para cinco que tienen sólo un nombre. Estas son las terminales que tienen que ver con el voltaje y con la tierra (VCC, GND, AVCC, AREF y AGND), un punto importante con los microcontroladores.

Los circuitos integrados necesitan un voltaje de alimentación estable. Esto quiere decir que como parte de nuestro proyecto debemos construír un regulador de voltaje. Esto es fácil de lograr con un protoboard y deberias poder conseguir los componentes localmente. Tambien hay que destacar que existe un agujero semicircular en la parte superior del integrado. Es algo que encontrarás en la carcaza de plástico de este empaquetado de línea dual y es utilizada como referencia para que no lo conectes al revés.

Echa un vistazp a la distribución de terminales una vez más y fijate en las terminales que comienzan con PD. Debes ver ocho en total, marcadas como PD0 hasta PD7. Este es un ejemplo fantástico de la naturaleza de 8 bits de estos circuitos. PD se refiere a Puerto D, uno de los registros de entrada y salida. Todo en estos integrados se centra en 8 bits, esto es, una secuencia de ocho ceros (0) o unos (1) en diferentes combinaciones. Si deseas prender o apagar una característica específica, debes cambiar uno o más bits dentro de un registro de 8 bits. Cada vez que quieras cambiar una terminal, debes referenciar los ocho bits del registro. Aprenderemos mucho más acerca de esto, pero no hasta llegar a la tercera parte de la serie.

Programación

El ATmega168 es un microcontrolador programable. Pero mejor aún, es reprogramable. De hecho, cuando estes trabajando en un proyecto, lo más seguro es que lo reprogrames varias veces por hora.

Este circuito tiene un límite de 16 kilobytes de espacio de programación. En estos tiempos de iPods con 64 gigabytes, 16 kilobytes pueden sonar minúsculos. Pero en realidad eso es 16 kB de código máquina. Puedes hacer mucho con eso… creeme.

Vas a necesitar algún tipo de hardware para hacerle llegar el código a estos chips. Usualmente esto viene en forma de un programador AVR. En la segunda de este tutorial parte veremos varias opciones diferentes de programación y, entonces, construír y programar un circuito de pruebas.

Haz tu tarea

Para estar listo para el resto de esta serie de tutoriales, necesito que obtengas algunas herramientas. Debes tener algún tipo de computadora, debe ser Linux, Mac o Windows. Ella ejecutará el programa que llevará nuestro código, compilarlo en algo que el microcontrolador pueda usar y entonces decirle al programador cómo escribirlo en nuestro chip.

El compilador

Eventualmente vamos a escribir nuestro propio código para el AVR, que usa una arquitectura RISC. Pero vamos a hacer esto en una computadora con arquitectura x86. La herramienta necesaria para lograr esto es llamada compilador cruzado. Este es posiblemente la mejor razón de la elección del AVR para desarrollo, existe una excelente herramienta de cadena disponible que puede ser fácilmente instalada en multiples plataformas.

  • Usuarios de Mac: instalar CrossPack
  • Usuarios de Windows: instalar WinAVR.
  • Usuarios de Linux: usuarios de Debian y Ubuntu deben instalar el paquete gcc-avr que incluye la cadena de herramientas completa.
  • Otras distribuciones deben mirar la página AVR-libc toolchain por ayuda para compilar los paquetes.

Esta no es la úncia opcion. Muchos usuarios de Windows optan por el programa gratuito de Atmel AVR Studio. Esta es la única vez que hago referencia a esto, pues no tengo una computadora con Windows y nunca he tratado con ese paquete.

Software de programación

Nuestro software de preferencia para ejecutar el programador de hardware es llamado AVRdude. Si instalaste alguna de las cadenas de herramientas mencionadas anteriormente, seguro que ya tienes este programa. Abre una terminal o línea de comandos y ejecuta lo siguiente para estar seguros:

$avrdude -h

Esto mostrará la ventana de ayuda. Si consigues un error, debes verificar que se haya instalado correctamente la cadena de herramientas en el paso previo o ir y descargar el AVRdude tu mismo.

Que depara el futuro

Esto resume la entrega introductoria de esta serie.

  • Parte 2: En la siguiente entrega de esta serie veremos diferentes piezas de hardware que podrás usar para programar el microcontrolador AVR. He escrito un programa hola mundo y te llevaré por el proceso de construír el circuito en un protoboard, conectar el chip al programador y usar el AVRdude para escribir este simple firmware en el dispositivo. No quiero dejarte muy emocionado, pero esto incluye un LED parpadeante.
  • Parte 3: Un archivo HEXA precompilado fue usado para programar el microcontrolador AVR en la parte 2 de la serie. En esta porción veremos el código fuente en C que construyó este firmware. Tambien hablaré en profundidad sobre los periféricos disponibles para el chip y detallar el cómo usarlos. Terminaremos por agregar funcionalidad al programa original, recompilarlo y reprogramar el chip con una versión actualizada.
  • Parte 4: Ahora que has adquirido habilidad en la programación de AVRs, te mostraré como empezar a construír cosas divertidas con ellos.