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.

12 comentarios:

  1. que tal Alvaro queria consultar para poder realizar el simulador aparte de el arduino se necesita el SIOC?? y el SIOC como se carga o a que se carga. gracias

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. El flight simulator (el de microsoft, o el X-Plane) tienen un interfaz propio para interacionar con el (el FSUIPC en el caso de FSX, creo) Sioc es un software muy comodo, es muy facil comunicarse con el, y ademas permite hablar con los dos simuladores (y con otros como de coches).

    El script en python lo utilizo como un "ethernet cutre" ya que el arduino no tiene, y SIOC espera conexiones de red, (si usasemos un arduino con wifi o ethernet no haria falta el script en python).

    Para usar SIOC lo tienes que instalar y configurar para el simulador que quieras y ejecutarlo despues de el flight simulator, en la pantalla que tiene veras como aparece la conexion al simulador, luego con el arduino conectado ejecutas el script de python y deberias ver como el script de python se conecta al servidor de SIOC.

    La gracia del asunto esta en el programa del SIOC, el es que el recibe la señal del arduino (he pulsado el boton N, he girado el encoder X... etc) y lo traduce en una orden para el flight simulator (flaps arriba, cambia la freq de la radio... etc).

    El programa en el SIOC cambia con el simulador, no es el mismo para FSX que para X-Plane.

    Hay mas informacion de SIOC (incluso un foro) en la pagina de http://www.opencockpits.com que son sus creadores.

    ResponderEliminar
  4. muchas gracias por responder, y con el python se compila el programa y se mantiene abierto?? o solo se compila una vez y listo?? y con el SIOC se hace lo mismo????

    ResponderEliminar
  5. Si, ambos, el programa en python es muy sencillo, abre una ventana de texto donde puedes ver que las comunicaciones con el arduino están activas, hay que cerrarlo y volver a abrirlo cada vez que reconfiguras SIOC, en cuanto a SIOC también tiene que estar abierto, es un programa mas complicado, tiene incluso una opción para ocultarse en la barra de tareas cuando esta funcionando y no tener la ventana por ahí.

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Debo agradecer muy profundamente por el aporte amigo Álvaro Alea, estoy en proceso de restablecer un FS-200, con tu aporte espero alcanzar el éxito, no se mucho de programación, pero vamos hacer el intento, ya que tengo mucho interés de usar este equipo con FSX. Gracias.

    ResponderEliminar
  8. Te felicito mucho por tu esfuerzo y tu ingenio. Creeme que has abierto el camino a varios que somos neofitos en la simulacion y en la electronica. Quisiera preguntarte ¿qué opinas acerca de lo que otros dicen de usar un teclado desmantelarlo y utilizarlo? honestamente sobre Arduino no sabia nada sino hasta que llegué a tu blog. Espero tu respuesta, ojala me puedas escribir por e-mail md.manuel@outlook.com

    ResponderEliminar
  9. Por cierto.. crees que esta modificación con arduino sea compatible con FS2004?

    ResponderEliminar
  10. La respuesta corta es "creo que si".
    La larga: Arduino habla con el servidor SIOC, y el servidor SIOC habla con el programa FSUIPC, que yo recuerde desde FS98 existe ese programa, por lo que debería funcionar con esa y versiones posteriores, aunque es casi seguro que sera necesario reprogramar el script en SIOC.
    Al menos en teoria.

    ResponderEliminar
  11. Álvaro, muchas gracias por tu respuesta, pues navegando por internet, encontré (tentativamente) el software original del Jeppesen FS200.. CREES que de algo me vaya a ser útil?.. mi intención sigue siendo utilizar arduino, pero te lanzo ésta pregunta para usar el aparato con FS2004.
    Te agradezco desde ya tus respuestas.

    ResponderEliminar
  12. Acabo de ver que tengo un comentario tuyo de junio sin contestar, lo siento, sobre lo del teclado, el fs200 tiene la mayoría de los interruptores dobles, y solo usa uno, por lo que usar el otro no es problema, pero no lo veo práctico, por que hay algunas funciones que requieren varias teclas y no puedes aprovechar los encoders, dicho esto vamos con lo del software original,
    No ,no te va a servir de nada,
    yo en su momento estuve buscándolo sin éxito, por que con el se podría llegar a hacer un software que no necesitase el arduino, pero requiere un trabajo importante de ingeniería inversa.

    ResponderEliminar