sábado, 29 de agosto de 2015

Jeppesen FS-200 - ¿Version 2?

Curioseando por internet he encontrado en ebay a la venta un panel FS-200 ¡CON SU SOFTWARE!,
Espero que el comprador se acuerde de mi.
Rápidamente me ha llamado la atención la foto, tenia "algo diferente".


Si lo comparamos con las fotos que puse aqui antes:


Vemos que tiene pequeños cambios estéticos, en general me gusta mas, los "cuadrados negros" tienen mas sentido, y ha mejorado la legibilidad de algun cartel, y una importante funcionalidad añadida:
Pulsando a la vez dos de las tres teclas de debajo de los encoders de frecuencia, podemos usarlo para cambiar la radio y el transpondedor.

Unos pequeños cambios en el script de SIOC, que puedes descargar de este enlace, y ya tenemos la nueva funcionalidad.

He aprovechado ademas para hacer un poco de limpieza del script, limitando a un solo bloque de números las variables, para hacerlo "mas compatible" con otros añadidos, y simplificado un poco algunas programaciones, para que sea mas facil leerlo y modificarlo.
Ademas de cambiar la frecuencia de COM1 pulsando NAV1 y NAV2 a la vez, y la del transponder pulsando NAV2 y ADF a la vez, he asignado el boton de ADF ACTV-STBY al COM1, ya que en el fsx no hay frecuencia del adf en standby.

viernes, 28 de agosto de 2015

Jeppesen FS-200 - PLAN C - Funcionando completo con FSX,

Lo de plan C es por que el plan B no funciono, mi idea era sustituir únicamente el microcontrolador sin modificar físicamente el equipo, finalmente tuve que realizar 3 soldaduras (bueno, alguna mas, pero es que algunos componentes ya son demasiado viejos).

Al final del articulo pongo las conexiones entre el arduino y los componentes:

La alternativa a sido utilizar un arduino mega, y mediante un cable plano y este conector de la marca Kobicomm, referenci151-2P40-E , sustituir al microcontrolador (cuando yo lo pedi aun no estaba descatalogado y los vendian de uno en uno, una alternativa seria el Harting 09 17 040 9622 y siempre se pueden soldar los 30 cables por la parte de atras de la pcb.


Detalle del montaje y conexión al arduino mega.

Detalle de como plegar los cables para poder montar la placa de nuevo.

Como mas adelante se vera, he eliminado completamente el cable y la fuente de alimentacion, ahora solo necesita un usb. si teníais el joke y pedales, necesitareis otra manera de conectarlos al pc, los convertidores de Joy analógico de 15pines a usb son bastante asequibles de todas formas.
Separadores de nylon, con pegamento de contacto, seguro y fácilmente quitable sin dejar rastro.


Vista de todo montado, se observa los cables de las analogicas, y que tuve que limar el conector usb para que pasase por el agujero de la caja.

Una vez cableado todo, me dispuse a programar el arduino, primero los interruptores, que no dieron ningún problema.

Luego los encoders, no tengo claro como funcionan (hay 3 registros de 8 bits para los encoders, el que genera la interrupción, y las patillas A y B de cada encoder, si bien todos los registros se leen correctamente desde arduino por pooling, cuando se genera la interrupción, el puerto B siempre se lee como 0xFF) en cualquier caso, los encoders funcionan, al menos en el 97% de las veces, (de vez en cuando leo algun encoder al revés).

Por simplificar utilice la patilla de interrupción 2, no queda tan compacto, pero me simplifica la programación.

Lo que no conseguí, fue comunicar con el chip ADC, realmente no tengo mucha experiencia en comunicaciones SPI, pero el analizador logico me decia que todo era correcto, no descarto que mi equipo tenga el chip mal.

Asi que toco el plan C, cablee las entradas del ADC directamente a las patillas analógicas del arduino, no es que me haga mucha gracia gastar patillas, y ademas tengo un ruido muy muy alto en la conversión, de los 10 bits de resolución, he tenido que descartar los 4 inferiores, y aplicar un filtro, y aun asi baila un poco.
Probablemente debería cambiar los condensadores y los potenciometros, apantallar los cables. pero bueno, para la demo era suficiente la resolución que obtuve.

El programa que corre en el arduino es bastante sencillo, cuando encuentra un cambio en algun mando, lo publica por el puerto serie, utilizando el protocolo IOCP.

Por ahora es unidireccional, pero en el futuro me gustaría al menos añadir varios paneles LCD, a través del bus I2C, para poder mostrar la información de radios, AP, etc...

Mi antiguo programa en python hace de enlace entre el puerto serie y el programa SIOC

Y la programación del SIOC hace el resto, poco que destacar, quizá la parte de programación de los encoders, que SIOC solo esta pensado para utilizar con encoders conectados a las placas opencockpits,

Hay una parte que no me ha gustado como quedo, los botones de cambiar la altura del AP, y el cursor de HDG del AP no he encontrado la manera de pasarselos al FSX, por lo que he tenido que recurrir a un truco, en lo unico que se nota es que ese encoder va un poco mas lento que los demás.

Hay varios botones que han quedado sin utilizar, pero es que no se muy bien para que usarlos, en términos generales el concepto es el mismo que para el resto de los botones, estoy abierto a ideas sobre como usarlos.

Otro día publicare el código SIOC para el X-Plane.

Ahora los enlaces a los programas:
Descargar Codigo para Arduino
Descargar Codigo para SIOC
Descargar el programa Arduino2iocp en python

Y el video de rigor de su funcionamiento:


Y ahora las conexiones que utilice entre el arduino y la placa:

Arduino -> Zocalo de 40 pines del MC68HC705C8A
 2  ->  2
30  ->  4
31  ->  5
32  ->  6
33  ->  7
34  ->  8
35  ->  9
36  ->  10
37  ->  11
22  ->  12
23  ->  13
24  ->  14
25  ->  15
26  ->  16
27  ->  17
28  ->  18
29  ->  19
GND ->  20
48  ->  23
49  ->  24
47  ->  25
39  ->  26
40  ->  27
41  ->  28
50  ->  31
51  ->  32
52  ->  33
VCC ->  40

Arduino -> Patillas del chip CDP68HC68A2E
 A8 -> 11
 A9 -> 12
A10 -> 13

Una explicacion rapida:

Conectamos masa y positivo a sus respectivas patillas, arduino inyecta el voltaje desde aqui, y no hace falta fuente de alimentacion.
Unimos la patilla 2 del chip a la 2 de arduino, es la señal de interrupcion de los encoders.
El puerto B del chip lo conecto al puerto A del arduino (estado de la interrupcion de los encoders).
El puerto A del chip lo conecto al puerto C del arduino (datos desde el multiplexor de los botones)
Los cuatro bits inferiores del puerto C del chip los conecto a PG0-PG3 y PL2 para gestion del multiplexor.
PC4 se controla desde PL0 para resetear el registro de interrupciones.
PL1 del arduino va conectada al SS del chip ADC.
MISO, MOSI, y SCK se conectan al chip ADC para gestionar la comunicacion SPI
Y como no funciono conecte las entradas A8,A9 y A10 a las patillas 11,12 y 13, salida de los op-amp y entradas del ADC a las entradas analogicas de arduino.

sábado, 22 de agosto de 2015

Horizonte Artificial con 2 servos.

Despues de Casi 5 años rodando por encima de mi mesa, este verano me he decidido a terminar, al menos el prototipo de horizonte artificial para el panel del avion.

Este horizonte utiliza dos servos de modelismo de 9gr. y la idea es conectarlo a una tarjeta de servos de opencockpits.

Esta muy limitado, aproximadamente a 45º en cada dirección, pero tampoco vamos a hacer acrobacias con una cessna...

El aspecto es un poco cutre, pero al fin y al cabo son 2 servos (6€) un monton de palitos,1 hoja impresa y un monton de silicona caliente, no hay que olvidar que es un prototipo, espero para navidades tener una version buena, con el tamaño adecuado, que parezca de verdad, etc, etc...

Os dejo un par de fotos del despiece, el archivo en formato sketchup por si quereis trasetear y un pequeño video.

Otro dia ya pondre el script que hay que utilizar en SIOC para controlarlo.