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.







miércoles, 20 de octubre de 2010

WTFTD ¿qué ... hacer?

Tras ver que no había salida simple para esto de la radio pensé que algo debía hacer para volver esta radio a la vida. Además existían poderosas razones: 1) mazda pedía +200€ por una radio nueva; 2) si compro una nueva tenía que ser 2DIN para ocupar el hueco entero 3) el coche es el que usa mi mujer (la razón principal) y quiere tener radio.

Después de estudiar los datasheets que encontré y usando una placa Arduino Mega que había comprado hace poco para otro proyecto, pensé que podía hacer que el Arduino fuera el micro de la radio. Lo tenía casi todo: control de audio, control del lcd y la botonera. Sin embargo todavía faltaba algo, y era que la radio funcionara como radio, es decir, que se escuche la FM (como mínimo).

Investigué un poco y encontré este modulito en ebay TEA5767 (datasheet) ya montado en placa y listo para usar por $4 más gastos de envío. Al final poco más de 7€.


listado de componentes

Los integrados más importantes que se pueden ver en la placa son los siguientes:
93C46 - memoria eeprom (supongo que para almacenar código de desbloqueo, emisoras grabadas...) datasheet
TA8260AH - amplificador 40W 4 canales datasheet
LC75854 - controlador de LCD datasheet
LC75384 - controlador audio (volumen, tono) datasheet
SAA6579 - demodulador RDS datasheet

Existe también un microcontrolador NEC y un integrado cerca de la parte de recepción de FM que supongo que será el PLL que controla la frecuencia de sintonización. De estos no pude conseguir datasheet.

Mi primera prueba fue desconectar la memoria EEPROM y ver que pasa. Desconecté la pata de salida y dejé la línea con la resistencia de pullup, de modo que leyera siempre 0xFF (algo así como si estuviera la memoria vacía). El caso es que no funcionó. Ni salía ERR en la pantalla. Totalmente bloqueada... incluso peor que al principio.

Segunda prueba.
Desoldar la memoria, hacer un backup del contenido y borrarla. Así quizás la radio "pensara" que está como de fábrica.
Tampoco funcionó. Pero pude leer el código que tenía la radio en la memoria (captura).

Incluyo el programa que hice para Arduino para leer la memoria y borrarla (y al final dejarla como al principio). (programa)



viernes, 8 de octubre de 2010

se bloqueó la radio del coche (bricked radio)

Si hay algún "freaky" del hacking en la sala, habrá entendido perfectamente el término "bricked". En español siempre se pueden decir las cosas de una manera más larga y compleja: "la radio se ha convertido en un ladrillo que no sirve para nada".

La cuestión es la siguiente: tras desconectar la batería del coche (quién me mandaría desconectar la batería para comprobar si volvía a encenderse el testigo fallo sistema motor del coche) la radio me pidió el código de desbloqueo. Todo iba bien, introduzco el código (1234 por si había dudas) siguiendo las instrucciones nada simples del fabricante. Y se me planta en la pantalla el siguiente texto "ERR". Después de varios intentos de quitar el mensaje de la pantalla, varias desconexiones de la batería para probar el reset universal. Renuncié. Di la radio por totalmente "bricked", es decir, ya no sirve para nada.

El coche es un mazda 323f  (como el de la foto pero con el volante al lado contrario)


Y la radio en cuestión es:

Estos son sus interiores (siento que la foto no sea antes de meterle mano a la placa):




primera entrada

Desde muy pequeño siempre me ha gustado abrir las cosas, verles las tripas y preguntarme cómo funcionan las cosas.  Todo ese juego de niños (y alguna que otra electrocución sin importancia) me llevó a convertirme en un amante de la Electrónica en particular... y de todo lo que sea susceptible de ser abierto e investigado.

Siempre estoy enredado con algo. Destornillador y soldador en mano. Aquí nunca se tira nada... por si acaso.

La labor de investigación realizada en mi último proyecto me llevó a pensar que quizás alguien pueda verse en la misma situación que yo y le podría servir algo de lo que he hecho. Así que ésta es la primera entrada de un pequeño diario de un simple enamorado de la Electrónica.