El ATMega168 tiene toneladas de hardware con varios periféricos incorporados. Vamos a explorar la comunicación serial. A esta altura han programado el “hello world”. Tienes tu micro en una protoboard y corriendo a 16mhz. Tienes funcionando el WinAVR. Ya hemos logrado control de un LED. Ahora es tiempo de enviar datos seriales de desde y hacia el micro.

No soy un gran programador. Sólo quiero que mi función printf haga lo que deba hacer. No uso ningún emulador de hardware, hago debug con comandos printf. Seguro, pueden haber limitaciones con esto, pero para el 90% de las aplicaciones es posible depurar con comandos printf.

Primero, una rápida reseña histórica del RS232. ¿Qué es RS232? Sólo es un nombre para un estándar que se ha propagado de generación en generación de computadores. Los primeros computadores tenían puertos seriales que ocupaban RS232, e incluso los computadores actuales tienen puertos seriales (o al menos puertos USB que actúan como puertos RS232). Una mirada al pasado, la información serial necesitaba ser pasada de aparatos como impresoras, joysticks, scanners, etc hacia el computador. La manera más simple de hacer esto era pasar series de 1s y 0s al computador. El computador y el dispositivo acuerdan una velocidad de información –bits por segundo-. Un computador pasará los datos de una imagen a una impresora a 9600 bits por segundo y la impresora escuchará este flujo de 1s y 0s, esperando un nuevo bit cada 1/9600 = 104us (104 microsegundos, 0.000104 segundos). Mientras el computador entregue los bits a la velocidad predeterminada, la impresora podrá recibirlos.

Un zoom a la actualidad. La electrónica ha cambiado un poco. Antes se utilizaban aparatos de relativamente alto poder y alto voltaje, -12V a 12V. Los aparatos modernos no operan a voltajes tan altos. De hecho, ATMega168 corre entre 0V y 5V. ¿Entonces como hacemos hablar el RS232 a nuestro micro de 5V con voltajes de +/-12V? Este problema fue solucionado por los fabricantes de integrados del mundo. Fabricaron un IC que es genéricamente conocido como el MAX232 (¿casi RS232 o no?).

El MAX232 es un IC originalmente diseñado por una compañía llamada Maxim IC que convierte las señales de +/-12V del RS232 a señales de 0/5V para que nuestra ATMega168 pueda entenderlas. También aumenta el voltaje de nuestra ATMega168 al voltaje de +/-12V que necesita el protocolo de RS232 para que el computador pueda entender nuestra ATMega168 y viceversa. Para hacer que nuestro ATMega168 envíe caracteres seriales a un computador necesitamos enviar estas señales a través de un circuito MAX232, para que el computador reciba señales de RS232 a +/-12V. No te preocupes si estás ocupando un chip que diga “ICL232” o “ST232”, estos son genéricos de MAX232. Las funciones son todas las mismas y prácticamente tienen los mismos pines de salida.

El circuito MAX232 que será instalado en la breadboard se ve así:

image001gr

Circuito MAX232 en Eagle, esquemático / PDF

Este integrado MAX232 usa tres condensadores de 0,1 uF (C5, C6, C7) para funcionar (lee sobre “Multiplicador de tensión”). Tienes que instalarlos. El cuarto (C8) es lo que se conoce por “condensador de desacoplo”. Como el integrado MAX232 conmuta varias señales (desde +/- 12V a 0/5V) usa pulsos de corriente. Debido a que necesita estos pulsos de corriente en ráfagas, él puede perturbar tu alimentación de 5V. El condensador C8 de 0,1 uF ayuda a “desacoplar” o remover el efecto negativo de este integrado (intercambiando cargas hacia y desde) de tu alimentación. Este condensador de desacoplo debe ser situado cerca de los pines de VCC y GND del IC. Esta configuración ayuda a disminuir el ruido en tu fuente de poder. ¿Vas a hacer funcionar tu protoboard sin esos condensadores de desacoplo? ¡Seguro que sí! ¡No los uses! Pero llegará el día en que algo dejará de funcionar y no tendrás idea el porque. ¿Podría ser mi código? ¿Tengo un cortocircuito en algún punto? ¿Una desconexión? ¿O a lo mejor no tengo suficientes condensadores de desacoplo?

Un condensador de desacoplo está destinado a proveer de una veloz ráfaga de energía si la alimentación no es suficiente, es como una especie de sistema UPS para tu integrado. Mientras mas lejano este el condensador de desacoplo del IC, menor es su habilidad para proveer esta ráfaga de energía (los cables largos tienen cierta capacitancia inherente). Es una buena práctica de la ingeniería siempre tener al menos un condensador de 0,1 uF cerca de cualquier IC. Colocarlos a un centímetro de los pines de VCC y GND es lo correcto. Colocarlos en todos lados de tu protoboard no es perjudicial, pero no serán de mucha utilidad.

JP2 es un conector DB9. Es llamado conector DB9 porque contiene 9 pines y es usado universalmente para conexiones seriales. Necesitarás tener un cable serial macho a hembra para conectar el DB9 de tu protoboard a tu computador. El extremo “macho” del cable tiene los pines metálicos, el extremo “hembra” tiene el plástico de color negro o azul que recibe los pines. Si miras de cerca a un conector DB9 real, verás unos pequeños números cerca de los orificios.

¿Entonces que hace todo esto? El ATMega168 enviará señales de 5V al MAX232. El MAX232 pasa a convertir esas señales de 5V a señales RS232 de +/- 12V que el computador pueda entender a través del puerto DB9 que posee atrás de la carcasa. Reconocemos que esto puede ser un poco difícil de configurar en un principio. ¿Creerás que una vez lo has configurado éste será tu salvación? ¡La conexión serial lo es todo! La necesitarás en casi todas las aplicaciones que desarrolles.

image002

Protoboard con un MAX232 y una gran conexión de retorno instalada.

Una vez que todo este conectado, necesitarás abrir un programa de terminal. Si estás ocupando Windows, puedes abrir el “Hyperterminal” incluido, normalmente localizado en programas ? accesorios ? comunicaciones. Para la gente de linux y apple, probablemente sepan como llegar a un programa de terminal.

Todos los programas de terminales tienen básicamente las mismas funciones: hacer comunicación serial. Todo lo que necesitas especificar son algunas reglas simples para que tu micro corra de forma satisfactoria con tu computador. Veamos las Imágenes del Hyperterminal:

image003

Llama la sesión como quieras

image004

Lo más común es que tu puerto serial sea COM 1

image005

Quieres 9600bps con 8-n-1 sin control de flujo

La configuración principal son 9600bps y 8-N-1. Esto significa que el micro y el PC acuerdan hablar a 9600 bits por segundo (bps) y que cada byte tendrá 8 bits de data, sin bit de paridad, y con un solo bit de parada. Este 8-N-1 es bastante común y básico. Si te gusta el dolor, infórmate sobre la paridad, bit de parada de 1.5 y 5 bits de data. Nadie ocupa eso realmente en el mundo de las protoboards.

Ok, ya tienes el Hyperterminal abierto y corriendo. Ya tienes tu MAX232 (o circuito equivalente) conéctalo y dale poder. Antes de conectar el cable a tu micro, prueba que los circuitos del MAX232 funcionen. La forma mas fácil de probar si funciona es conectar el TX con el RX. Esto se llama bucle de retorno (el cable grande amarillo en la última foto) cuya función es hacer que lo que se envíe por TX se devuelva hacia RX. Bastante autoexplicativo, sólo sigue adelante:

Cuando presionas la letra “A” en tu PC por la ventana del Hyperterminal, una serie de 1s y 0s se generan y salen a través del Puerto serial en la parte trasera de tu PC (8 bits: “01000001” para ser especifico =65d = 41h, ve www.asciitable.com para mas información) estos 0s y 1s llegan a la MAX232 en tu protoboard quien se encarga de cambiar estas señales RS232 a TLL. Los 0s y los 1s luego salen por el pin R1OUT. Debido a que juntaste los pines TX y RX (R1OUT debe ser cortocircuitado a T1IN) estos 0s y 1s son enviados de vuelta al MAX232 y llevados al cable serial DB9. Después de llegar al computador, él ve estos 1s y 0s y dice OH! , hay un dispositivo pasándome el carácter ASCII “A”. El computador luego muestra el carácter “A” en la pantalla del Hyperterminal. Esta es la esencia de una prueba de bucle de retorno. Si todo esta correcto, deberías poder presionar cualquier tecla de tu teclado y ver esas letras replicadas en la ventana del terminal. Tira el jumper hacia fuera y las letras deberían para de replicarse. ¿Lo tienes? ¡Úsalo! En el futuro, cuando necesites probar una interface serial, cortocircuita TX y RX para asegurarse de que las cosas estén funcionando de manera correcta.

Bien, Ya tienes el MAX232 funcionando correctamente. Ahora conecta los pines TX y RX del ATMega168 al circuito MAX232.

image006g

Circuito de un ATMega8 con fuente de poder y MAX232 en Eagle, esquemático / PDF

Debes haber notado que C9 aparece mágicamente al lado del ATMega168 en el esquema de arriba. Este es un condensador de desacoplo de 0,1 uF para el ATMega168. Un condensador de 0,1 uF instalado cerca de los pines VCC y GND del ATMega168 ayudará a reducir el ruido desde la fuente de poder que pueda ser inyectada en la ATMega168. De nuevo, tu protoboard correrá perfectamente sin los condensadores de desacoplo pero quiero que te acostumbres al hábito de usar los 0.1uF en todo momento.

image007

Conexiones TX y RX entre el MAX232 y el ATMega8

Algunos astutos notarán que en la imagen (invertida) el IC MAX232 es actualmente un SP3232(EBCP). ¿Qué es un “SP3232”?, es el Sipex genérico para el MAX232. ¿Notas el “3” frente al 232? Los integrados MAX232 originales eran diseñados para interconectar 5V lógicos a RS232. Como los circuitos comenzaron a operar con voltajes menores (3.3 volts por ejemplo), los fabricante de estos IC tuvieron que rediseñar los MAX232 para hacerlos más eficientes, poder tomar voltajes menores y aumentarlos a 12V para el RS232. De ahí nace la designación “SP3232”. Este IC puede recibir señales TLL de 3V y satisfactoriamente convertirlas a RS232. Estamos operando nuestra protoboard a 5V pero podemos correr el MAX232 desde 3V a 5V sin problemas.

Trivia: En la imagen anterior, ¿Qué integrado es de una familia más antigua? Estos ICs tienen unos códigos de fecha de producción simples: 0641 y 0625 que significan que ambos fueron fabricados en el 2006, en las semanas 41 y 25 de ese año.

Ya tienes un hardware que puede generar instrucciones printf. ¡Vamos a enredarnos con códigos ahora!

Comentario de un lector:

“Los amigos no dejan que sus amigos usen Hyperterminal. Es un programa apestoso. TeraTerm funciona mucho mejor.”

Estamos de acuerdo. Hyperterminal tiene hartos bugs y se pega seguido. TeraTerm es mucho mejor. Sin embargo, prácticamente todas las instalaciones de Microsoft en el planeta tienen Hyperteminal incluido, estamos obligados a usarlo para introducir fácilmente a los lectores a las comunicaciones seriales. En general, una vez que ya domines la valla serial, deja de usar Hyperterminal y comienza con TeraTerm.

Para armar el circuito de esta lectura necesitarás los mismos elementos de las lecturas anteriores e incluir un integrado MAX232, 5 condensadores cerámicos de 0,1 uF más un conector DB9 y un cable serial que puedes adquirirlos en nuestra tienda www.mcielectronics.cl
Estas lecturas son una traducción al español del tutorial “Beginning Embedded Electronics Tutorials” desarrollado por SparkFun Electronics. Traducido para Ingeniería MCI por Julián Aguayo. Revisado y corregido por Paul Aguayo.

Estamos abiertos a comentarios! Reporta tus tips, comentarios o recomendaciones a [email protected].