Archivo de la etiqueta: AVR

Primera práctica con un microcontrolador.

Ayer en la asignatura de Informática Industrial realizamos la primera práctica de laboratorio, y la primera en la carrera en la cual hemos usado un microcontrolador.La práctica consiste en realizar un conversor de BCD a 7 segmentos usando un ATmega8535. El resultado final ha sido el siguiente:

Montaje de la Práctica 1 En principio el hardware necesario es muy básico, el microcontrolador con el puerto de programación (mejor así que tener que sacar y poner el microcontrolador cada vez que vayamos a modificar algo), Una display de 7 segmentos y 4 interruptores. Aunque para este montaje no es necesario el profesor ha insistido en colocar un driver triestado entre las entradas/salidas del micro y los elementos que vayamos a usar. Por último solo anotar que serán necesarias 8 resistencias limitadoras para los leds del display y 4 pull-up para los interruptores. El montaje se ha realizado siguiendo el siguiente esquema:

Esquema de la Practica 1 El software del dispositivo es mas bien sencillo, básicamente se tiene una tabla con las salidas necesarias para mostrar cada uno de los caracteres en el display y mediante un puntero a la dirección base de esa tabla iremos desplazándonos a la posición del caracter a mostrar según la entrada. El código usado es el siguiente:

;Directivas

.include “m8535def.inc”

.cseg

.org 0×60

Tabla:

.db 0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111

.db 0b01111111,0b01101111,0b01110111,0b01111100,0b00111001,0b01011110,0b01111001,0b01110001

ldi r21,0xff

out DDRA,r21 ;Configuramos PortA como salida

ldi r21,0×00

out DDRD, r21 ;Configuramos PortD como entrada

;Programa

inicio:

In r21,PIND ;Leemos el contenido del puerto D

Andi r21,0x0F ;Filtramos solo lo que queremos leer

Ldi r30,0xc0

Ldi r31,0×00 ;Cargamos el Vector a la base de la tabla

add r30,r21 ;Sumamos el desplazamiento a realizar

Lpm r21,z ;Cargamos el contenido del vector

Out PORTA,r21 ;Sacamos el valor por el display

rjmp inicio ;Saltamos al comienzo de la rutina

Ya se que no suelo poner mucho código ensamblador por aquí pero para estas practicas no nos permiten usar ningún lenguaje de alto nivel y en el fondo no es tan difícil. El código está comentado y el detalle de la función de cada instrucción lo podéis encontrar en el datasheet.

Compilar, Programar y grabar AVR en linux graficamente

Esta semana nos han indicado que una de las practicas de Informática Industrial debía realizarse en C utilizando el compilador WINAVR o AVR-GCC. Después de varios días dándole vueltas a google para no tener que usar ninguna maquina virtual para los desarrollos he conseguido hacemos con un entorno de trabajo totalmente productivo para microcontroladores ATMEL AVR, en este caso para el ATmega8535 pero totalmente valido para los ATMega328 y ATMega168 que utiliza Arduino, de modo que podamos programar nuestros Arduinos de manera mas eficiente.

El pack necesario consta de diversos paquetes software, algo de hardware y un pc claro:

Obviando que para programar un micro necesitamos una tarjeta con la que desarrollar (por ejemplo podemos usar un Arduino) necesitaremos:

  • Un programador compatible con avrdude o avruisp: Yo uso un AVR ISP V2 que compre en eBay hace tiempo pero si quieres dar un paso mas en el uso de herramientas libres puedes usar el ATMEL AVR OSP (Open Source Programer). Obviamente sera necesario instalar el paquete de avrdude o avrusip (Incluso ambos si nos gusta investigar).
  • Un compilador con sus respectivas librerías y complementos:  gcc-avr con avrlibc. Con ello crearemos los códigos en C y serán traducidos a su correspondiente ensamblador y binarios. avr-libc nos ayudara a realizar las configuraciones, usar interrupciones y otro hardware más fácilmente como podéis ver en su documentación.
  • Y por ultimo un IDE para unirlos a todos y… (no, no sigáis por ahí…) …hacernos la vida más fácil. Para ello vamos a usar KontrollerLab.

La mezcla de todos estos elementos tiene este resultado:

IDe totalmente funcional.

Por último una cosa más, para facilitarme la distribución de los pinguinos he abierto una tienda en ebay donde podéis comprarlos: Robótica RoBoOpS. ¡Espero que pronto pueda tener más productos!