domingo, 28 de agosto de 2011

Leds brillando

El segundo test con los dos integrados ha ido bien. Como había explicado en mi anterior entrada quería controlar 8 leds, uno para cada linea de datos con el chip PCF8574 así como también añadir el 74LS244 porque en la primera prueba el led se iluminaba muy débilmente y de esta forma poder controlar las 8 líneas de E/S que tiene el integrado.
El programa que he usado lo he encontrado en Internet, el autor lo ha creado para controlar el encendido de un led y sencillamente lo que hace es enviar un byte con todo a 1 en un periodo de tiempo muy corto, he empezado con 1000 ms y pasado este tiempo envía de nuevo un byte con todo a cero. Esto produce que los leds se enciendan todos a la vez y se apaguen todos también a la vez. Como punto de partida esta bien, y ahora quiero complicarlo un poco colocando un par de circuitos integrados PCF8574 y 74LS244 pero voy a hacer que un chip controle los leds simulando las salidas y el otro controle una serie de pequeños micro-interruptores simulando entradas. No se si podré montarlo todo en la Protoboard porque no tendré mucho espacio. Aquí dejo un vídeo con el resultado.







sábado, 27 de agosto de 2011

I2C-bus


Sigo trabajando con el Arduino exactamente en un circuito multi-IO que sirve para controlar diferentes entradas y salidas, similar al Loco IO. Este circuito esta basado en el I2C-bus.
Este es un bus basado en un protocolo de comunicación serie desarrollado por Philips Semiconductors usado por muchos circuitos integrados para comunicarse entre ellos. Lo que lo hace realmente interesante es que para su funcionamiento requiere sólo dos líneas, una de reloj (SCL) y otra de datos (SDA) junto a dos resistencias de pull-up con cada una de estas líneas.



En el I2C-bus existe un rol para el dispositivo maestro y otro rol para el dispositivo esclavo El dispositivo maestro inicia/termina la comunicación y es quien debe generar una señal de reloj (SCL) para sincronizar todos los dispositivos conectados al bus. En cuanto a la línea de datos (SDA) es del tipo bidireccional (el maestro puede mandar o recibir), por lo general sólo suele haber un maestro (el micro-controlador, en este caso el Arduino) aunque el protocolo soporta más de uno. Todos los circuitos integrados conectados a este bus tienen una dirección física distinta de la de  los demás, para que la comunicación solo se establezca de forma inequívoca con un esclavo/maestro determinado.
He utilizado el circuito integrado llamado PCF8574P , un chip de bajo coste que tiene un puerto cuasi bidireccional de 8 bit, la idea es expandir las pocas salidas que tiene el Arduino con estos chips, y de esta forma con solo dos lineas del I2C-bus podré expandir las lineas para E/S.
El PCF8574 tiene un consumo muy bajo de corriente e incluye las salidas tipo latch con capacidad de producir más corriente para conducir directamente LEDs. Por ultimo tiene una linea de interrupción (INT), que puede ser conectada a la lógica del micro-controlador Mediante el envío de una señal de interrupción sobre esta línea, la E/S remota puede informar al micro-controlador que hay datos entrantes en sus puertos sin necesidad de comunicarse a través del I2C-bus.

Utilizar este chip como expansor de 8 bits viene de un circuito creado por John Plocher. Ya he comentado en anteriores entradas sobre la página web de John. Ultimamente he visto que estaba en una convención X2011 anual de la NMRA en Sacramento, California realizando una presentación sobre aplicaciones de Arduino para el modelismo ferroviario. También tiene una página web donde nos podemos bajar la presentación completa que mostró en la convención X2011.
En el circuito de John aparece también el integrado 74LS244 un buffer octal para separar las lineas y dar nivel TTL a las lineas de E/S.
En la imagen se puede observar que he comenzado primero con el PCF8574P montada sobre la protoboard atacando a un paquete de 10 Leds. Inicialmente ha funcionado pero la intensidad del LED era muy baja- Voy a hacer los cambios y añadir el otro circuito para ver como funciona.