Tutorial: Circuito con microcontrolador Avr

Introducción

Recibí una petición en el foro va-de-retro.com de hacer un tutorial para el grabador de EEPROMs del post anterior, así que voy a hacer un tutorial de cómo hacer un circuito mínimo con el microcontrolador, que puedes usar como base para circuitos más complejos, y al final haré una descripción de cómo conectar el microcontrolador al zócalo ZIF para crear el grabador de EEPROMs.


El circuito que describe este tutorial tiene un único chip, el microcontrolador AVR ATMEGA 1284P-PU (yo uso los -PU porque son más baratos, no sé cual es la diferencia con la otra variante, el 1284P a secas). Lo único que va a tener conectado es uno de esos módulos “Serial USB to TTL converter” que se encuentran en Internet, por lo que necesitarás uno. El módulo sirve para la comunicación con el PC (escribiremos un “Hola mundo” por el puerto serie), y para programar (grabar) el microcontrolador. Para poder programar el microcontrolador por el puerto serie necesitas que el micro tenga ya grabado el bootloader, y para ello necesitas un programador ISP, pero eso es harina de otro costal, no lo trataré aquí (ver mi programador ISP)


El procedimiento descrito aquí sirve también para la mayoría de microcontroladores Avr (y para los PIC también es muy parecido) Por ejemplo yo uso mucho los micros ATMEGA 328P, que son los que llevan la tarjetas Arduino Uno. Sólo cambia la colocación de los pines, pero son los mismos.


Es posible hacer estos circuitos en una placa de prototipado, a veces es útil para probar algo si el circuito no ha de durar y quieres reaprovechar componentes.


Este tutorial asume que sabes soldar y es posible que omita muchos detalles del proceso no tan obvios a los principiantes. Dicho sea de paso eximo cualquier responsabilidad por el uso que hagas de esta información, vamos el disclaimer de siempre.

El hardware

Aquí el esquema (aunque ponga Atmega644 nosotros usamos el 1284, que tiene más memoria pero el mismo patillado):


InterfazSpectrum1_10


Los componentes pasivos que se necesitan para hacer funcionar el microcontrolador son realmente muy pocos:


Circuito del reloj: Un cristal de 16.000 MHz y dos condensadores de 22 picofaradios.


Circuito del reset: Un pulsador y una resistencia de 10 KOhm.


Desacoplo: Un condensador de 100 nanofaradios (0.1 microfaradios)


Finalmente hará falta un conector de 4 pins para conectar el módulo USB, un zócalo de 40 pines para el microcontrolador, cable y la placa donde realizar el circuito. En la siguiente imagen se muestran todos los elementos. Ignora el conector de abajo a la izquierda, es un conector de expansión de Spectrum que usaré, ya que este circuito en concreto va a ser un interfaz para Spectrum…


InterfazSpectrum1_1


El primer paso que he hecho es soldar el conector del Spectrum , pero como digo esto no viene al caso. Después he soldado el zócalo del microcontrolador en la posición que me ha parecido adecuada, sólo las cuatros esquinas, el resto de pines los voy estañando conforme hago conexiones. Como sabrás los chips con el encapsulado DIP (Dual In-line Package, o sea los pines en dos líneas) tienen una media luna en uno de los extremos que indica la parte superior, tanto en el chip como en el zócalo. Esta parte queda a la derecha de la placa en la imagen.


A continuación sueldo el circuito del reloj. Esto es, el cristal que resuena generando la señal de reloj (clock o CLK) y sus dos condensadores. El cristal se podría poner en zócalo, pero es poco usual cambiar el cristal debido a que en el ecosistema Arduino 16 MHz es la norma. Por tanto lo sueldo directamente, en los pines 12 y 13:


InterfazSpectrum1_2Visto por debajo, antes de soldar, se ve en la siguiente imagen cómo hago las primeras conexiones del circuito sin usar cable, sólo doblando las patillas y recortándolas. Una de las patillas de los condensadores la dejo larga a lo largo del borde porque es la masa y me servirá para conectar ahí diferentes puntos que tengan que ir a masa.


InterfazSpectrum1_3Aquí ya hechas las soldaduras:


InterfazSpectrum1_4El siguiente componente que sueldo es el condensador de desacoplo. Éste es un condensador de 100 nanofaradios (0.1 microfaradios) que se pone entre alimentación y masa, lo más cerca posible de éstas. En este caso son los pines 10 y 11. Al condensador le he tenido que doblar una de las patillas porque tenía tres agujeros de separación y lo necesitábamos de dos:


InterfazSpectrum1_5


Ahora sueldo el botón de reset y su resistencia de 10 KOhm que va entre alimentación (es una resistencia de pull-up) y el pin 9, y también el conector de 4 pines para la comunicación, a la izquierda:


InterfazSpectrum1_6


Soldamos ahora los cables que vamos a necesitar. En la siguiente imagen, el cable verde une el botón con el pin de reset. También se ve el puente que une uno de los pines del conector a la línea de masa.


InterfazSpectrum1_7En esta imagen ya se ven todas las conexiones hechas. El cable negro une los dos pines de masa del microcontrolador (es necesario unir los dos a masa) Luego están los tres cables desde el conector de comunicaciones: alimentación (pin 10), RX (pin 14) y TX (pin 15) El puerto serie usa dos pines, uno para Recepción y otro para Transmisión. El RX del microcontrolador va al TX del módulo y viceversa.


InterfazSpectrum1_8


Y aquí ya está listo el circuito, con el micro con el bootloader grabado, listo para ser programado por primera vez. Nota: Una comprobación importante antes de conectar un circuito nuevo a la alimentación es medir con un polímetro la resistencia entre los pines de alimentación y masa. Tiene que dar infinito en este caso, si da 0 ohmios es que hay un cortocircuito.


InterfazSpectrum1_9

El software

Ahora viene la parte del software. Instala el IDE de Arduino y el añadido para poder programar el Atmega 1284P, Mighty1284P. Éste último se descomprime en la carpeta “hardware” del IDE de Arduino.


Ejecuta el IDE. Primero selecciona la “tarjeta” en el menú “Herramientas” -> “Tarjeta” -> “Mighty 1284p 16MHz”.


Ahora copia y pega este código en el editor:

void setup() {

Serial.begin( 19200 );

Serial.println(“Hola Mundo!!!”);

}

void loop() {

if ( Serial.available() > 0 ) {
Serial.write( Serial.read() );
}

}

Este programa inicializa el puerto serie, luego escribe la típica cadena de “hola mundo”, y luego en el bucle principal cuando se recibe un byte por el puerto serie lo vuelve a enviar, de forma que hará un eco.


Ahora pulsa el botón de compilar, debería decir “Compilación terminada”. Enchufamos ya el módulo USB al ordenador y comprobamos en el menú “Herramientas” -> “Puerto Serial” que está seleccionado el nuevo puerto serie (probablemente COMn en Windows y /dev/ttyUSB0 en otros sistemas)


Ya estamos listos para programar. Para ello, se pulsa y se mantiene apretado el botón de reset de nuestra placa. A continuación le damos al botón de programar (“Cargar”) en el Arduino IDE y acto seguido soltamos el botón de reset. En seguida se tendrían que poner a parpadear los leds del módulo USB, y terminada la programación (que es muy rápida para un programa tan corto), el IDE debería decir “Carga terminada”.

Testeo

Ya se está ejecutando el programa, con lo que abrimos el terminal (botón “Monitor Serial”), nos aseguramos que la comunicación está en 19200 baudios, y reiniciamos de nuevo nuestra placa para ver el hola mundo. Tardará 10 segundos en aparecer, que es el tiempo que espera el bootloader después de un reset. Cuando aparece el mensaje “Hola, mundo!!!” ya podemos escribir en la terminal y veremos el eco que hace el microcontrolador.

Cómo hacer el grabador de EEPROMs

Una vez hecho este circuito básico, realmente hacer el programador de EEPROMs sólo es hacer las 25 conexiones entre el microcontrolador y el zócalo Zif donde se coloca la EEPROM a programar: 15 líneas de dirección, 8 de datos y dos de control (/OE y /WE).

Pin  Microcontrolador  Memoria
D0 40 11
D1 39 12
D2 38 13
D3 37 15
D4 36 16
D5 35 17
D6 34 18
D7 33 19
A0 22 10
A1 23 9
A2 24 8
A3 25 7
A4 26 6
A5 27 5
A6 28 4
A7 29 3
A8 1 25
A9 2 24
A10 3 21
A11 4 23
A12 5 2
A13 6 26
A14 7 1
/WE 17 27
/OE 16 22
/CE 20 –> a masa.
VCC 28 –> a alimentación.
GND 14 –> a masa.

Obviamente se programaría con el sketch que puse en el post anterior del grabador de EEPROMs.


Y eso es todo por ahora. Ya postearé sobre el Harlequín y esta interfaz para Spectrum cuando haya noticias…


Hasta la próxima!