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.




viernes, 8 de julio de 2011

Comunicación establecida


Como escribía en mi ultima entrada, por el momento he abandonado las pruebas con la placa locoIO, esto no quiere decir que más tarde vuelva de nuevo, pero creo que debo descubrir nuevas posibilidades. He comenzado a explorar un nuevo camino con Arduino. En Internet tenemos muchos lugares donde poder comenzar a buscar información. 

El sitio de Alex Shepherd donde hay bastante material y ejemplos para comenzar a trabajar. Alex ha escrito código de varias librerías y módulos para Arduino y otros chips AVR. En la pagina source forge me he bajado un zip que contiene todas las librerías y un ejemplo de una aplicación que permite monitorizar la actividad en la red Loconet.
El primer problema ahora es interconectar físicamente Arduino con la red Loconet. Para hacer esto hace falta construir una interface. 

La búsqueda por diferentes foros y grupos me ha ayudado ha encontrar una web de John Plocher. John es un desarrollador que ha participado en el proyecto JMRI, tiene un par de ejemplos en su pagina para Loconet y ha construido una interface para poder conectarse a Arduino. John la ha construido sobre la protoboard, pero en mi caso lo he echo sobe una placa de circuito impreso para prototipos también ha usado parte del código de Alex . Este es el esquema creado por John.



Este el circuito impreso con los componentes una vez soldados todas las conexiones que yo he construido para hacer las primeras pruebas de comunicación entre Arduino y Loconet.



En este punto ya podía hacer las primeras pruebas con el código de la aplicación Loconet Monitor de Alex. En lo primeros intentos no he conseguido compilar bien el código, al final después de leer y entender las lineas de código, he colocado bien las librerías y lo he compilado de forma correcta Arduino lo ha cargado esta vez sin problemas. Para poder ver los resultados hay que abrir la ventana Serial Monitor del IDE de Arduino.

Aquí inicialmente no he visto ningún tipo de actividad y he tenido que volver a repasar todos los cables de conexión de la placa de circuito impreso. Como no tengo osciloscopio ni analizador lógico, pues la tarea de buscar el posible fallo se hace a ciegas y de esta forma no he podido comprobar en la diferentes partes del circuito que estaba pasando.

Finalmente he recordado que ya tenia montado un circuito que conectaba con Loconet. La placa Loco IO. Esta placa se podia convertir si le quitaba el PIC y la podía aprovechar como interface para Loconet. Este es el montaje que he utilizado. Solamente dos cables que me permiten la comunicación.


 
Los pines D7 y D8 de Arduino son los Tx y Rx que se conectan a los pines 2 y 3 que usaba el PIC en la placa Loco IO. Esta ha sido una forma sencilla y rápida de conseguir una interface entre Arduino y Loconet sin los problemas de las conexiones que aparecen en la creación de una primera placa.

En las siguientes pruebas con el código de Alex todo estaba funcionado y ahora a través de Arduino puedo leer los mensajes que hay en la red loconet. Se ha conseguido un primera escala en el camino , ya he establecido la comunicación como se puede ver en esta imagen.


miércoles, 22 de junio de 2011

Firmware

Las pruebas con la Loco IO han llegado a su fin. He encontrado en Internet el sitio www.locobuffer.com que es donde fue creado el loco buffer y el Loco IO por primera vez. El autor John Jabour fue el creador original de locobuffer y del Loco IO, mas tarde, Hans deLoof continuo el desarrollo del firmware y fue añadiendo nuevas placas.
Explico toda esta historia porque después de algunas pruebas, he logrado determinar que el fallo esta el Firmware del PIC. He descargado el firmware original de la pagina de John que es la versión 1.35 y he conseguido programarlo con el Decoder Pro JMRI, pero no he conseguido todas las funcionalidades que actúen de forma correcta. Por ejemplo, las bobinas no consigo apagarlas en un determinado tiempo, y siempre se mantienen activas, En las pruebas he usado resistencias para simular las bobinas y de esta forma no dañarlas. Ahora entiendo que me llevaría mucho tiempo conseguir determinar y arreglar el problema y ademas no podría modificar este firmware si encuentro el fallo en esta versión de software.
Después de estas pruebas he enviado algunos emails a Hans DeLoof. En estos emails, él me decía que parecía probable que el PIC estuviese dañado pero le dije que había probado con 3 chips diferentes con el mismo resultado.
Luego me dijo que había diferencias con el firmware que estaba cargando con el que tenia en su web. Hice una minuciosa comprobación y he visto que son iguales. Por ultimo le he pedí alguna versión anterior pero no conseguí que me la enviase.
Comprar una nueva loco IO montada no me parece una buena opción y tampoco comprar un PIC grabado, no porque sea mas caro si no porque no estoy convencido de que esta sea la solución. Finalmente he decidido volver a Arduino y fabricarme yo mismo la placa multi-IO controlada por esta plataforma. Ya he encontrado mucha información en Internet para el desarrollo y ahora estoy en ello, explicaré mis progresos en futuras entradas.

domingo, 5 de junio de 2011

Vuelta al cole

Después de un largo periodo sin escribir ninguna entrada en mi blog, por fin he encontrado un poco de tiempo para poder volver a hacerlo.
Sigo con el circuito de Test que quería construir y que he construido. He decidido utilizar una madera con unas dimensiones más reducidas, para poder transportarlo de forma más fácil

 
El diseño es el mismo, esto es, un ovalo con un par de desvíos en una de sus rectas que une a otra recta paralela a esta. Este diseño me permite probar los módulos electrónicos que he estado construyendo. La idea de tener un escenario de Test es conseguir aprender a controlar el funcionamiento de todos los dispositivos electrónicos que después formaran parte de la maqueta final. Aquí además puedo conocer sus limitaciones, descubrir nuevas aplicaciones que a lo mejor puedo pasar por alto y también si surgen problemas intentar resolverlos antes de gastarme el dinero en placas, que más tarde pueden no funcionar de la forma correcta. Cuando todo esto lo tenga probado, puedo pasar a la fase del diseño de la maqueta final. Tendré un mejor conocimiento, más en detalle de lo que puedo hacer y de que elementos utilizar.

 Loconet es una red de área local (LAN) del tipo “peer to peer” esto se puede traducir como de vecino a vecino. Cada “peer” o vecino de esta red,envía a través de ella sus mensajes hacia la central digital que los esta esperando. La central en el momento que recibe uno de estos mensajes lo ejecuta inmediatamente Como tenemos una red “peer to peer” y estos vecinos a su vez son independientes en el acceso al medio, esto nos permite añadir nuevos “peer” o dispositivos de forma fácil.
El acceso al medio de los dispositivos en este tipo de red se denomina “event driven” esto significa que los diferentes "peer" solo acceden si tienen un evento que enviar y como hemos explicado la central esta esperando estos eventos. De esta forma, en esta red y con este tipo de acceso conseguimos un volumen pequeño de tráfico, por lo que no es necesario una red con una velocidad considerable. Esto es otra ventaja, porque podemos usar un cable normal, como el cable plano de 6 hilos y se pueden terminar con conectores RJ-12.

Los elementos electrónicos que he construido en placas de HDL, son el locobuffer, que me da comunicación serial con mi PC y la red Loconet, el loco IO que une el módulo de conmutación llamado driver module con Loconet y el PC.
Loco IO es una placa con 16 entradas/salidas y con conexión a Loconet, básicamente se puede usar los 16 puertos como entrada/salida y tu decides como quieres programarlos. Simplificando podemos decir que lo que hace este módulo es convertir señales de 0 V o de 5 V en mensajes Loconet.
En mi caso he programado las salidas 9,10,11 y 12 para controlar las 4 bobinas de dos desvíos Marklin. Para programarlo he usado el software que ha desarrollado HDL. El software ofrece muchas posibilidades de configuración En mi caso he configurado las salidas mencionadas y las he asignado una direcion a cada una de ellas.
El siguiente punto a tener en cuenta es como quieres que sea el tipo de señal que enviamos a los desvíos La elección han sido pulsos de una duración muy corta para activar la bobina del desvío. Estos pulsos pueden ser del tipo soft reset o de hard reset, pero en mis pruebas no he visto la diferencia entre ambos.
En la placa driver module que es donde están los transistores que reciben la señal de la LocoIO he colocado unos leds con dos colores para poder ver como el pulso activa el transistor que controla cada bobina del desvío He puesto leds amarillos y azules para cada par de bobinas, de esta forma puedo ver como se activa cada bobina cuando recibe el pulso enviado por el software de control.


Una vez que has configurado las salidas se deben escribir y leer en el PIC. Después de leerlas y para comprobar que se han escrito de forma correcta en el PIC. En la placa Loco IO se activan unos botones en cada una de las salidas programadas. Estos botones sirven para comprobar el funcionamiento de cada salida. Al pulsar sobre cada botón con el ratón, puedes observar como se activan las bobinas del desvío y se encienden los leds de colores durante un pequeño tiempo.


En el siguiente video se muestra como conmutan las bobinas de un desvío pulsando alternativamente sobre los botones que he explicado.


>

Ahora necesito comprobar el funcionamiento dentro de un software de control de trenes. Como soy un entusiasta del software libre, me he ido a la pagina web de JMRI y me he descargado su software y me lo he instalado en mi PC.

 JMRI es un proyecto que desarrolla software como herramientas de control de trenes por ordenador para los aficionados a este hobby. Quieren que sea usado por una gran cantidad de aficionados y esta escrito en Java porque desean que sea multiplataforma y pueda correr en cualquier sistema operativo. JMRI se define como un grupo informal de open-source software, esto significa que el desarrollo de sus herramientas de software es gratuito y no quieren obtener ningún tipo de beneficio económico.
Sus versiones que mantienen en su web están muy actualizadas y tienes una gran cantidad de centrales digitales soportadas donde poder elegir.
Después de instalarlo en mi PC y hacer algunas pruebas, he sido capaz de re-programar el decoder de mi locomotora, y controlar la Loco con su software. También he podido controlar los desvíos de una forma rápida y fácil.

 
Para hacer la prueba del control de mis desvíos solo fue necesario colocar la dirección del desvío y pulsando sobre los botones mostrados en la imagen y de esta manera se podía conmutar cada bobina. Quizás parezca algo trivial, pero para mi significo un gran logro.

También he probado el software Train Controller, este si es un software comercial y tiene un gran prestigio entre los aficionados. También he conseguido sin problemas, tener control sobre la locomotora cambiar las diferentes velocidades, y realizar cambios de dirección. Estoy empezando y me parece un hecho importante conseguir todo esto, en mis primeros pasos.


 
Pero como estamos en un escenario de test, todo no podía ser perfecto.
Entonces he tenido el primer problema. Durante el control de la locomotora, a los pocos segundos de rodaje, la loco se detiene de forma misteriosa Haciendo diferentes pruebas he visto que el causante era precisamente la placa Loco IO.
Para poder tener más luz sobre el problema he vuelto a usar una herramienta muy útil de JMRI. Esta herramienta es el Loconet Monitor. Con esta herramienta puedo ver todos los mensajes que se envían por la red loconet.

 
Veo que cada 20 segundos aparece un mensaje del tipo Emergency Stop y que detiene la loco. Si envías un mensaje Global Power ON hacia la central, la loco se vuelve a poner en marcha pero a los 20 segundos se vuelve a detener. He tocado parámetros en la central digital y en el software que programa la Loco IO pero sin ningún resultado positivo.
Estoy buscando en los foros y en Internet información, y también me he puesto en contacto con el creador de la placas HDL, que amablemente ya me ha ayudado en otras ocasiones.
En mis próximas entradas contaré como evoluciona la búsqueda de la solución.