viernes, 19 de noviembre de 2010

Comunicaciones

La comunicación del Arduino con los integrados de la radio es del tipo serie y el protocolo es propietario, esto es, inventado por Sanyo. El protocolo es parecido al SPI con varias salvedades:
- en el SPI el número de bits transmitidos/recibidos es múltiplo de 8
- y en el SPI la transmisión y la recepción son simultáneas.
En este caso la recepción es posterior a la transmisión, y el número de bits es raro (180, 57, y otros números...).

El  caso es que este tipo de protocolos donde existe un maestro y varios esclavos permite compartir el bus de datos. Esto se hace gracias a que el esclavo sólo "habla" cuando el maestro lo "pide" y sólo "habla" el esclavo que el maestro "escucha". ¿Cómo se hace esto? Cualquier esclavo que no esté seleccionado con la señal ENABLE deja su línea compartida en estado de alta impedancia.

De este modo, el número de líneas que se utilizan para las comunicaciones con N esclavos son: (N) ENABLES, (1) CLK, (1) DO y (N) DI.

Todo esto está muy bien. Pero ¿por qué el diseñador usó líneas de comunicación separadas para cada integrado pudiendo compartirlas? Mi opinión: para qué complicarse la vida. La regla de oro: KISS (Keep It Simple, Stupid!) aplicable a la mayoría de los aspectos de la vida.


Puesto que yo hice lo mismo para comunicar los integrados con el Arduino, sólo me queda una solución para hacer el protocolo: "BIT-BANGING". Dicho en español: "A PELO". Es decir, usar software para emular un periférico eminentemente hardware como un puerto SPI, I2C o un puerto serie.  Se van poniendo las señales 1 y 0 en los pines de comunicaciones al ritmo del reloj que también vamos dictándo nosotros y después leemos la entrada manteniendo la señal de reloj.


Conexionado

Antes de conectar el Arduino y la radio hay que retirar las conexiones del antiguo microcontrolador NEC de la placa. ¿Cuál es el proceso?
1) Localizar el pin en el integrado controlado, es decir, el de audio o el del display.
2) Seguir la pista como se pueda hasta el micro.
3) Retirar algún componente intermedio que corte la conexión o cortar la pista o levantar la patilla del integrado. Indicado en orden de dificultad.
4) Soldar un cable para llevar la señal donde la necesitemos.
5) Volver al paso 1) para el siguiente pin si existe o FIN. (Dedicado a los informáticos).

Estos pasos requieren de buena vista, un polímetro para medir continuidad con las puntas bastante finas y MUCHA paciencia.
Para el paso 2) fue una suerte que la placa solamente sea de 2 caras porque si fuera de más hubiera sido mucho más difícil o casi imposible. También fue una suerte que el que diseño la placa no escatimara en componentes.  Todas las líneas estaban conectadas a través de resistencias limitadoras de corriente. No son absolutamente necesarias para conectar dos integrados que aceptan los mismos niveles de tensión...  pero sí recomendables.

Algunas fotos del proceso:

La entrada de audio al integrado que controla la ecualización.


Las señales de STANDBY y BEEP al amplificador. STANDBY controla el apagado del amplificador cuando se retira la llave del contacto. Cosa curiosa: el amplificador está alimentado siempre. Esto casi me cuesta tener que aplicarle un "biberón" al coche. La señal BEEP nos permite introducir cualquier señal MONO directamente al amplificador sin pasar por el integrado de ecualización.

Las señales de comunicaciones del frontal.Ayudo bastante que el diseñador dejara la leyenda escrita en la placa!!!


La señal ACC que nos dice cuando está la llave en posición ACC (corriente en los accesorios). A esta señal hubo que ajustarle el nivel de tensión para poder llevarla al Arduino. Opté por hacerlo en el propio cable con un transistor y dos resistencias.

La alimentación +5Vdc y GND.

 La comunicación con el ecualizador.










miércoles, 10 de noviembre de 2010

Poderoso Arduino Mega

La elección del Arduino Mega para mis proyectos fue acertada. Os detallo algunas de las características que lo hacen un buen candidato: 16MHz (llega a 20MHz), 8Kb RAM, 128Kb Flash, todos los puertos digitales accesibles en la placa, 16 entradas analógicas, 12 salidas PWM y 3 puertos serie. Un paraiso para quien esté acostumbrado a trabajar con micros pequeños.

Es un proyecto opensource que originalmente se fabrica en Italia y sale por unos 45€ (el arduino mega original). Del proyecto Arduino existen multitud de sabores y colores, por si alguien no lo conoce todavía este es el enlace arduino. Además existen algunos fabricantes chinos que también lo hacen, por si alguien quiere probar el lado oscuro.

En cualquier caso, los 54 pines disponibles y esa gran cantidad de flash  para programas me venían ni que pintados para este proyecto.

El esquema de conexiones de la placa con la radio será el siguiente:
- 4 pines para control del LCD y parte de la botonera. Salidas: CLK, DATAOUT, ENABLE. Entradas: DATAIN.
- 4 pines para el control de los mandos rotatorios. Entradas: VOLA, VOLB, VOL1, VOL2.
- 3 pines para el control del audio. Salidas: CLK, DATAOUT, ENABLE.
- 2 pines para el amplificador. Salidas: STANDBY, BEEP.
- I2C para el control del módulo de radio TEA5767.

Se necesitan Vdd y GND de la radio para alimentar la placa. Y además se necesita saber cuándo apagar la radio porque la alimentación de la radio del coche es permanente y debemos saber cuándo debemos encenderla (mando ACC de la llave del coche). Por suerte esa señal está disponible como un positivo +12V en la radio.