miércoles, 15 de diciembre de 2010

Oferta interesante para próximos inventos

Si algún enamorado de la electrónica y/o fan de Arduino está leyendo, seguramente habrá leído en algún foro que los accesorios del mando de la wii se pueden utilizar para proyectos. Por si acaso no lo sabéis el wii motion plus tiene 3 giroscopios y el nunchuck tiene 3 acelerómetros, además de un joystick y un par de botones.

La forma de utlizarlo en vuestros proyectos es bastante sencilla puesto que los dos accesorios usan para comunicarse con el mando el protocolo I2C. No os hace falta mucha teoría, sólo saber que casi todos (por no decir todos) los microcontroladores soportan I2C y que, por supuesto, arduino también lo hace. Para arduino existe la librería Wire.

Dejo algunos enlaces para saber cómo usarlos:
nunchuck y arduino
wii motion plus y arduino


Para el que no quiera desarmar el conector de los accesorios, existe un adaptador para usarlo de forma muy fácil y sencilla. Algunos enlaces de tiendas online que lo tienen:
bricogeek
sparkfun

Y ahora lo interesante. En las tiendas GAME, no sé si en todas las de España, está a la venta (de oferta) un mando nunchuck inalámbrico por 6,95€. El precio oficial del normal (que tiene cable) es de 19€ creo recordar. Yo ya me he hecho con uno y lo he abierto.




No sé si usarlo tal cual, es decir, como un mando inalámbrico, o salvajearlo un poco. Ya veremos.

Por cierto, el mando va sólo con una pila AAA. Esto quiere decir que seguramente tendrá un booster, un circuito que sirve para elevar la tensión, porque ni el acelerómetro que lleva va alimentado a esa tensión. El booster eleva la tensión pero conservando las leyes de la Física, es decir, de 1,5V y 1A no se pueden sacar 3000V y 100A. Hay que recordar que P=I*V en ambos lados y sumar las pérdidas.

Dejo un enlace de la gran web de Pablin sobre un montaje elevador de tensión. En la sección de electrónica hay multitud de montaje útiles.

viernes, 3 de diciembre de 2010

Programando

El código está dividido en ficheros y cada fichero corresponde al manejo de cada uno de los integrados. De este modo la correspondencia queda así:

- sonido.h  -> Librería para el manejo del ecualizador.
- DisplayIC.h DisplayIC.cpp -> Librería para el manejo del display y el teclado
- Radio.h Radio.cpp -> Librería para el manejar el estado general de la radio del coche
- TEA5767.h TEA5767.cpp tealibtest.pde -> Librería para el manejo del módulo de radio. Ya que este módulo es comercial, incluyo también un ejemplo de uso por si alguien estuviera interesado en la librería para algún proyecto.
- TimedFunc.cpp TimedFunc.h timedf.pde -> Librería para programar ejecución de funciones de forma cíclica con intervalo variable, programar funciones que se ejecuten sólo una vez pasado cierto tiempo y un ejemplo para usarla.

- radioMazda.pde -> el programa principal

Evidentemente no voy a explicar el código, pero si no sabéis programar con Arduino es suficiente decir que existen dos funciones principales setup() y loop() (que son llamadas por un main() que no es visible al usuario). La función setup() se ejecuta sólo una vez al comenzar y se encarga generalmente de configurar puertos, periféricos, variables, etc... La función loop() se ejecuta de forma infinita y es donde se programa todo el comportamiento de la placa.

Quedaría como algo así:

main()
{
   setup();
   while (1) loop();

}

El programa básicamente lo que hace es mirar el teclado de la radio y actuar en consecuencia. Además gestiona una interrupción para actualizar el reloj de la radio.

Aprovechando que la radio siempre tiene corriente, el reloj se mantiene en RAM y se actualiza con una interrupción. Cuando la radio está apagada el arduino pasa a modo bajo consumo en el que se apagarán todos los periféricos excepto el timer responsable de generar la interrupción. No es que el consumo de esta placa sea importante en este caso (recordemos que la fuente de alimentación es la batería del coche) pero nunca está de más el no desperdiciar los amperios!

El Arduino y la Radio

La placa que conecta el Arduino con la radio la hice sobre placa de perforada por comodidad. No era una placa difícil y así es más rápido.

Lo mejor del Arduino es que teniendo tiras de pines puedes hacer un "shield" (así es como llaman a las placas que conectas encima del arduino) bastante rápido. Los shields comerciales son "estacables" (dándole patadas al diccionario), es decir, puedes colocar unos encima de otros y siguen funcionando, aunque esto no vale con todos.

La placa debía disponer de:
- 2 conectores acodados para conectar las cintas planas que llevan las señales desde la radio hasta el arduino
- El placa del TEA5767
- Un conector para llevar la antena desde la radio hasta el TEA5767
- Un led verde. Imprescindible en cualquier placa que se precie es saber que está alimentada!!!

Una fotillo de como quedó antes de cortar la placa


Vista por debajo (las conexiones hechas con hilo de wrapping). Aquí se ve como se llevan las señales desde los conectores acodados hasta los puertos del Arduino.

Conexión del TEA5767 usando hilo de wrapping y tiras de postes hembra. Los dos condensadores que se observan son para quitar el posible nivel de continua de las señales de audio antes de llevarlos al ecualizador de la radio.

La solución del conector del cable de antena no es la más elegante pero funciona.

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.