[Proteus versión 8.1]
Hasta ahora hemos visto en estas lecciones las capacidades de nuestro equipo Arduino para conectarse con el mundo exterior. Entradas digitales, entradas analógicas, salidas digitales, salidas analógicas (con la matización de que las implementamos utilizando la técnica de PWM) y comunicaciones vía serie. Dependiendo de la placa de Arduino que estemos utilizando para llevar a cabo nuestro proyecto, el microprocesador ATMEGA que incorpore tendrá más o menos pines utilizados para una u otra de estas funciones. Podemos consultar el esquema de todos los pines de nuestro microprocesador ATMEGA en el enlace de la sección documentos de nuestra web siguiente: http://huborarduino.com/index.php/herramientas/documentos/23-diagramas-de-pines-de-los-arduino.
En muchas ocasiones las necesidades de nuestro proyecto se podrán satisfacer con las posibilidades que nos brinda nuestro microprocesador. Pero no es raro (desgraciadamente con más frecuencia de lo que cabría esperar en un principio) que nos encontremos en situaciones donde el microprocesador se nos quede corto. En estos casos podemos optar por intentar utilizar otro microprocesador con más pines (aunque, ojo, nunca hay un microprocesador suficientemente grande que sirva para todo) u optar por la solución del tipo que vamos a analizar en esta y las siguientes lecciones de nuestro curso: expandir las capacidades de nuestro microprocesador utilizando periféricos con una función específica.
Esta opción que presentamos es muy habitual en todos los sistemas de automatización (los conocidos con el acrónimo de PLC) presentes en el mercado: Siemens, Omron, AEG, Schneider, Allen Bradley, Pep, etc. Basicamente consiste en tener una tarjeta principal (CPU) donde se aloja nuestro controlador del sistema y unir por un bus de datos una serie de tarjetas auxiliares de funciones definidas. Cada una de estas tarjetas contiene la electrónica (y los microprocesadores necesarios para ejecutar la lógica de funcionamiento de la tarjeta de ampliación y las comunicaciones con la CPU) específicos para llevar a cabo la tarea que se le encomienda.
Vamos a conectar nuestro equipo Arduino con los 'equipos periféricos' utilizando un sistema de comunicaciones del tipo bus serie. En el mercado hay distintas opciones para desempeñar estos trabajos. Nosotros vamos a utilizar una especificación concreta: el bus i2c. Hacemos esta selección porque es un bus que utilizan muchos dispositivos por lo que contaremos con un amplio abanico de soluciones específicas. Además, porque su funcionamiento e implantación, tanto de hardware como de software, es sencilla y económica. Y, finalmente, porque existen librerías estándar en Arduino que nos ayudan en esta tarea.
Para poder llevar a cabo nuestro trabajo, tenemos que ir recorriendo un camino compuesto de varias etapas intermedias que nos obligará a familiarizarnos con conceptos nuevos: uso de librerías en Arduino, utilización de un bus de comunicaciones serie, conocimiento del estándar i2c, exploración de los dispositivos disponibles y de sus características específicas, etc. Lógicamente según nuestro conocimiento y experiencia del mundo del control industrial, este camino puede ser muy rápido o un poco más largo.
Para darnos una idea de la enorme variedad de dispositivos i2c disponibles, podemos utilizar a modo de muestra los dos enlaces siguientes:
Dispositivos i2c de Philips Semiconductor
Dispositivos i2c de Texas Instruments
Podemos disfrutar comprobando que existen dispositivos para aumentar el número de las entradas y salidas digitales, ampliar las entradas y salidas analógicas, acceder a nuevos sistemas de comunicaciones serie, expandir el alcance del bus, controlar teclados, controlar leds, ampliar la memoria, medir la temperatura, medir la corriente y la tensión y un largo etc. más. No nos tenemos que dejar llevar por la euforia de las posibilidades que se nos abren, ni caer en el pesimismo pensando que el camino a recorrer sea técnicamente demasiado complicado. Vamos a recorrer todo el trayecto en diferentes fases, de una en una para comprenderlas bien, dominarlas y llegar a buen puerto. Como este curso siempre se ha marcado como objetivo ir dirigido a quien no sabe (nadie estudia un curso de algo que ya conoce) no tenemos más remedio que plantearnos abordar este tema desde el principio, paso a paso y dividiéndo nuestra tarea entre varias lecciones.
En ésta que nos ocupa ahora, sólo vamos a esbozar las posibilidades del sistema propuesto. Utilizaremos el siguiente esquema electrónico.
En primer lugar, como es lógico, está nuestro equipo Arduino. A continuación, preparamos el bus (en nuestro caso, el i2c, se compone de dos hilos). Por ahora nos sirve con considerar el bus como dos hilos que unen todos nuestros dispositivos i2c. Uno de estos hilos lo llamaremos SCL y el otro SDA. Estos dos hilos están conectados ambos a +5V por medio de una resistencia de 4k7 Ohms. La solución propuesta por nuestro estánar i2c sería como sigue:
En nuestro esquema de prueba, lo llevamos a cabo utilizando este montaje:
Conectamos a este bus, nuesto Arduino (pines AD4 y AD5) utilizando la técnica de los terminales de la siguiente manera:
Para nuestro primer ejemplo, vamos a utilizar como equipo periférico un chip de Phillips llamado PCF8574 que nos permite utilizar desde nuestro Arduino a través del bus i2c ocho salidas digitales. Como es lógico, para funcionar, tiene que estar conectado al bus. Además, en este caso, lo vamos a utilizar para controlar con sus ocho salidas digitales ocho leds. El montaje se recoje en la siguiente imagen:
Además hemos incluido el analizador del bus i2c incorporado en Proteus que nos permite 'espiar' todos los datos que circulan por nuestro bus. Es muy pronto para entender su utilidad, pero queremos presentarlo en esta primera aproximación, para que tengamos presente su existencia y que sepamos que contamos con potentes herramientas de depuración que nos ayudarán a solucionar los fallos que puedan surgir en la utilización de los periféricos i2c.
El software que corre en nuestro Arduino, no puede ser más sencillo. Todo el código se recoge en el siguiente listado:
Con muy poco esfuerzo estamos implementando nuestro módulo de expansión de ocho salidas digitales. Como ya dijimos, en próximas lecciones, destriparemos todo este código para entenderlo perfectamente y dominarlo. Pero, por ahora sólo vamos a limitarnos a activar la simulación y ver como las diferentes salidas digitales van encendiéndose y apagándose mostrando un contador descendente (un byte (desde 1111 1111 en formato binario hasta 0000 0000).
En la zona inferior derecha se puede observar la ventana de nuestro depurador del bus i2c donde van apareciendo toda la actividad que se produce en el bus. Tampoco en este momento sabemos interpretar los datos que nos muestra. Pero no tardaremos en aprender a utilizarlo y comprobar su utilidad.
Esperamos haber despertado vuestro interés y que animados por las posibilidades que nos abre el bus i2c nos acompañéis en las siguientes lecciones que dedicaremos a desgranar todo este trabajo.