

|
IOCards paso a paso
por Claude Kieffer http://www.simucockpit.com Traducción : Michel Alcantara |
|
|
|
|
|
|
|
El diseño IOCards es un
conjunto de tarjetas electrónicas cuyo objetivo es de gestionar las
funciones de una cabina : controlar el Flight Simulator por medio de
interruptores, pulsadores, encoders rotativos, etc...mostrar en los displays
las frecuencias que se usan en vuelo y los parámetros del piloto automático,
control de servo-motores o de motores paso a paso, emulador de teclado,
etc...
IOCards es un diseño no comercial. Fue posible su desarrollo gracias a Manuel Vélez, el principal y benévolo diseñador. Se puede hacer el pedido de las placas IOcards en kit, o montadas y testeadas, en la pagina Web de Opencockpits . Se venden todas las tarjetas a precio de costo sin lucro... Este
tutorial no dispensa la lectura preceptiva de los anexos que se
pueden bajar en la página Web de OpenCockpits. Sobre todo los anexos I
y II.
|
|
|
|
La placa Master es el
corazón del sistema IOCards. Proporciona entradas, a las que se pueden
conectar cualquier tipo de interruptores, y también salidas que pueden
encender Leds testigos o mostrar información en los displays.
Inicialmente, solo podía funcionar la placa Master si se conectaba al puerto paralelo del ordenador. Esto aun es posible... a la condición de que su ordenador lleve todavía ese tipo de puerto. La verdad es que el puerto paralelo va siendo cada vez más escaso desde que las impresoras llevan todas el USB. Hoy en día resulta mejor conectar la placa Master en el puerto USB. Por eso se necesita una placa adicional pero merece la pena por cantidad de razones.
|
|
|
|
Por
supuesto, para el montaje de la placa USB seguiremos exactamente las mismas
fases que para la placa Master.
|
Empezaremos soldando los componentes los mas pequeños : las resistencias, los condensadores, y luego los zócalos de los integrados. Se acuerde que el condensador C1 que lo dan para 220 nF (o 0,2 µF) en la nomenclatura esta proporcionado para O,1 µF. El valor correcto es este último. |
|
|
|
|
|
|
La placa
Display II
|
La tarjeta
emuladora de teclado USB Keys
|
|
|
|
Cada uno tiene su método
para evitar de hacerse un lió con la multitud de cables que salen de las
placas IOCards. Yo personalmente, recurro a cables planos de 40 hilos que
van distribuidos por toda la cabina. Cada panel del cockpit (así como el del
tren de aterrizaje, el EFIS, etc.…) debe ser independiente y fácilmente
desmontable. Así pues, los hilos de los interruptores, de los leds así como
de los displays de cada panel deberán ser reunidos y engarzados en un
conector macho HE10 de 2 x 20 pines (es muy fácil conseguirlos en las
tiendas de electrónica). Mi método es el siguiente : la placa Master proporciona los conectores HE10 machos J3 y J4. En cada uno, conecto un cable plano de 40 hilos con un conector hembra. Uno va hacia la parte derecha del cockpit y otro hacia la izquierda. Al llegar el cable plano cerca de un modulo (por ejemplo el del tren de aterrizaje), se le conecta con una pinza de grimpar un conector HE10 hembra. Entonces como los hilos del panel del tren de aterrizaje están soldados en un conector HE10 macho pues solo falta que conectarlo al conector hembra que hemos grimpado. Bueno, tengan en cuenta que solo se utilizaran 10 hilos del cable plano para este módulo. Los demás siguen mas lejos, por ejemplo hasta el EFIS que necesita él 15 hilos. Y así seguimos puesto que se pueden grimpar varios conectores HE10 hembras al cable plano. Cada conector hembra corresponde a un panel. Esta manera de proceder tiene varias ventajas : queda claro el cableo. También así es más fácil modificarlo y extenderlo. Digamos que el inconveniente es que hay que grimpar los conectores y es mejor tener una pinza especial para ello. También le puede dar a uno la impresión de derroche puesto que llevan pocos hilos algunos conectores. Pero, resultan baratos los conectores HE10. Con estas fotos resulta mas explícito : |
|
|
|
|
|
|
Bueno, ya tenemos montadas
nuestras placas, y listos los cables. Primero tendremos que comprobar que
todo funciona correctamente. Para eso, necesitamos una alimentación de 5 V
cc. Se remitan al "Anexo I", pagina16, si quieren utilizar una fuente de
alimentación de ordenador. Hay mas soluciones. Deben de tener en cuenta de
que las placas IOCards consumen poca corriente. Lo que mas corriente
consumen son los Leds y los displays que se pueden conectar. Un Led consume
aproximadamente 10 miliamperios, un display de 7 segmentos (solo una "cifra"
para mostrar una frecuencia por ejemplo) puede consumir 10 veces más. Para
estar cómodos, una alimentación de 5 V 2 amperios será suficiente.
Cuidado : algunas alimentaciones tienen una "corriente de fuga " bastante elevada y eso puede dañar algunos integrados. Para evitar ese riesgo, siempre hay que utilizar un enchufe con toma de tierra para conectar esas alimentaciones a la red. El "Controlador". El programa "Controlador" que forma parte del conjunto del software IOCards, pues como parece lógico, nos va a servir para comprobar el correcto funcionamiento de la placa Master y también para localizar las entradas y las salidas. Parece interesante reunir los programas y los ficheros en una carpeta única, por ejemplo en Program Files \IOCards. Antes de todo, ejecuten el fichero Controlador.ini que se encuentra en la carpeta IOCards. A continuación pueden ver lo que debe mostrarnos. Si algunas líneas son diferentes, modifíquelas :
[ fichero de configuración
para el programa CONTROLADOR ]
[ Uso de Expansión USB ]
[ Múltiples USBs ]
[ Número de periférico para
el USB ]
[ Activar en modo SIMULADOR
yes/no]
[ Numero de tarjetas Master
inter-conectadas ]
Ahora vamos a ejecutar el "Controlador".. Hacemos un clic en el botón COMENZAR : el programa muestra la pantalla tal y como sigue. Solo nos interesa por el momento la parte rodeada de rojo :
Nada debe de aparecer en la casilla Entradas. Ni tampoco en la subventana blanca. Si sale alguna serie de cifras en dicha subventana puede significar que hay un cortocircuito en las entradas de la placa Master o un cable de conexión defectuoso. Activamos ahora una entrada. Prepare un trozo de cable plano de 40 pines de 30 centímetros. En un extremo del cable, grimpe un conector HE10 2 x 20 hembra. Cuidado con el hilo de color (el n°1) que debe de encontrarse del lado del triangulo chiquitín grabado en el HE10). Al otro extremo del cable desprenda los 10 primeros hilos, pele los y conecte un interruptor de bascula entre el hilo de color (n°1) y el hilo n°10. Para activar la entrada n°1, conecte el HE10 en el conector J3 de la placa Master (abajo, en la izquierda), y cierre el interruptor : inmediatamente aparecerá el 001 en la casilla entradas y 001- en negro en la subventana blanca. ¡ Perfecto ! La entrada n° 1 funciona. Deje soldado el interruptor con los hilos que nos hará falta mas tarde. Vamos a comprobar ahora el correcto funcionamiento de las 8 entradas siguientes. Tengan en cuenta el aspecto práctico que ya hemos comentado en la página 15 del anexo I : las entradas físicas o pines no corresponden siempre numéricamente con las entradas lógicas. A continuación exponemos un diagrama con las correspondencias : Conector J3:
Conector J4:
Como ya lo pueden ver, las entradas van por grupos de 9. La primera entrada lleva el numero 000. En total, los dos conectores J3 y J4 proporcionan 72 entradas. Se activan las entradas al unir uno de los pines de un mismo grupo con el pin de tierra (GND) del mismo grupo. Hemos descubierto que se activaba la entrada 001 al unir con un interruptor el pin 1 con el pin 10 del conector J3. Igualmente, se activara la entrada 009 uniendo los pines 17 y 20, etc... Ahora podemos testearlas entradas 000 a 008 uniendo los hilos pelados de nuestro cable plano de 40 hilos con el hilo de masa n°10. Si todo funciona, es decir si cada entrada esta localizada correctamente en la subventana blanca lo demás también funcionara bien. Por supuesto nada nos impide que hagamos lo mismo con el conector J4. De momento solo haremos esto con el Controlador. |
|
|
|
Config IOCard Lo mismo que el programa anterior, ConfigIOCard tiene un fichero de configuración : ConfigIOCard.ini Este fichero es muy importante y debe mostrarnos lo siguiente. Modifíquenlo si es necesario :
[ fichero de configuración
para el programa IOCARD ]
[ Múltiples USBs ]
[ Número de periférico para
el USB ]
[ Número de A/D a usar de la
placa de Expansión USB ]
[ Dirección IP local para el
protocolo IOCP (UDP) ]
window = "a.txt - Bloc de notas"
La pantalla inicial al ejecutarlo es la siguiente :
Este programa es el que utilizamos para crear todas las instrucciones de programación que vamos a usar. Iremos despacito. Nos vamos a plantear un primer objetivo muy modesto : seleccionar el mando del tren de aterrizaje. Nada más. Para su funcionamiento interno, el Flight Simulator utiliza "variables". Todas las funciones del simulador, y no solo las que tratan del vuelo, se refieren a una variable. Peter Dowson ha conseguido desmenuzar el código de Flight Simulator y ha sacado la lista de esas variables. De este modo, un software tal como IOCard puede gestionarlas y por mediación de FSUIPC se podrán enviar a FS. Solo se les da una dirección…¡ Y allá van ! La lista de las variables de Flight Simulator van incluidas en la documentación de IOCards, en el anexo IV, y también en la web de Peter Dowson. Hay centenas (el anexo IV consta de 43 páginas), pero tranquilos porque si dejamos de lado las variables que tratan del servicio meteorológico, de las coordenadas geográficas, o de las características físicas de un avión, lo que compone realmente una cabina es bastante menos importante.
Volvemos a Config IOCards. En la pestaña "Variables" podemos ver las columnas siguientes :
NOMBRE : aquí pondremos el nombre que queremos darle a la primera VARIABLE que nos interesa. Para el tren de aterrizaje, podremos llamarla TREN o GEAR por ejemplo. Este nombre se va a asignar a una dirección y a partir de ahora se podrá utilizar únicamente para definir la función retraer o sacar el tren de aterrizaje, y nada mas. Por eso es importante elegir un nombre suficientemente representativo. Por ejemplo, si llamamos a una variable FRENO, es cierto que no vamos a saber al cabo de un poco tiempo si se trata del freno izquierdo, del derecho o del freno de parking. En la columna NOMBRE, pondremos GEAR por ejemplo. Acabamos de definir un nombre de VARIABLE. DIRECCIÓN : La dirección que debemos utilizar para la variable que hemos definido nos la proporciona Peter Dowson en la lista de offsets fsuipc (Anexo IV). No podemos poner la que queramos, nos tenemos que remitir a las definidas en las fsuipc. En la lista, podemos ver "Gear Control". Pues esa es la que necesitamos.
Nos tenemos que remitir a la dirección 0BE8. Pero todavía falta algo : tenemos siempre que anteponer el signo $ a cada dirección. Entonces en la columna DIRECCIÓN, pondremos : $0BE8 LONGITUD : es el número de "bytes" que tiene cada variable (es decir el nombre de "palabras" de 8 bits). Confiamos en la palabra de Peter Dowson y pondremos la longitud que nos da y que en este caso para el tren de aterrizaje será 4. De momento dejaremos de lado las dos columnas siguientes : Entonces
tenemos : Para nuestro mando del tren de aterrizaje, vamos a utilizar un interruptor "normal" de tipo micro-switch, con una posición Cerrado y una posición Abierto. Hacemos un clic en la pestaña SW-NORMAL.
NOMBRE : No debemos de confudirlo con el NOMBRE anterior. Aquí vamos a darle un nombre al interruptor del tren de aterrizaje y no a la variable del tren. Por ejemplo tomaremos GEAR_SW, o INTER_TREN. ENTRADA : Pues nada más informaremos aquí el número de la entrada de la placa Master sobre la cual conectaremos el interruptor del tren de aterrizaje. Puede ser la primera, la que lleva el numero 0, o la entrada n°1. Pongamos el n° 1 por ejemplo. VARIABLE : Aquí volvemos a encontrar de nuevo el nombre de la VARIABLE que hemos definido en la pestaña anterior. No hay que cambiarlo. Habíamos elegido GEAR, pues pondremos GEAR en esa columna. Consejo : para evitar errores cuando recopiamos el nombre de la variable, porque sin lugar a dudas, sería causa para no ser reconocida, hagan un doble clic en la columna Variable. Entonces, saldrá la lista de las variables que ya hemos utilizado y solo tendremos que escoger. VALOR_ON y VALOR_OFF : esta parte sí que es interesante. Aquí tenemos que indicar que valor debe tomar la variable cuando el interruptor este cerrado (Valor_ON/Key) y cuando este abierto (Valor_OFF/Key). Tenemos varias opciones, según el tipo de control. Ya veremos algunos ejemplos luego. Para el tren de aterrizaje, la solución más sencilla consiste en poner ON=1 y OFF=0, entonces interruptor cerrado = tren de aterrizaje sacado, y interruptor abierto = tren de aterrizaje retraído. Nada más. El programa entiende perfectamente lo que significa 0 y 1. Es su lengua materna. Bueno, también podemos tratar esto de forma diferente. Fijense de nuevo en la linea de la Offset de Peter Dowson : ¿ Y que vemos ? Gear Control: 0=UP, 16383=Down. Es otra manera de llegar al mismo resultado, porque de hecho no lo sabemos, pero cuando retraemos el tren de aterrizaje con OFF=0, la variable ella misma, sin decirnos nada, toma el valor 0. Y curiosamente, cuando sacamos el tren de aterrizaje, con ON=1, esa variable "Tren" toma el valor 16383. Entonces podríamos en vez de poner 1 en la columna Valor_ON y 0 en la columna valor_OFF, poner 16383 en la primera y 0 en la segunda. Sucedería exactamente lo mismo. Al haber definido una variable y un mando por medio de un interruptor, acabamos de programar la primera entrada en la placa Master. Ahora tenemos que hacer dos cosas muy importantes : 1° Acaba de recibir el programa Config IOCard las informaciones de un fichero importante, el ".dat". Ese es el fichero al que el programa principal, IOCard.exe, se va a referir para saber cual es nuestra programacion. Pero antes, hay que grabarlo, porque de momento, como pueden verlo arriba de la ventana de Config IOCard, se llama "sin_nombre.dat". Ejecutamos entonces Ficheros/Guardar como y salvaguardamos ese nuevo fichero.dat con un nombre cualquiera, aeris.dat o... mi_avión.dat . Se guarda este nuevo fichero.dat junto con los demás, que dimos como ejemplos, en la carpeta de IOCard. 2° Muy importante : también debemos informar IOCard.exe que es con este fichero .dat que debe actuar. Para ello ejecutamos de nuevo el fichero ConfigIOCard : al llegar al las últimas líneas de este fichero esta el grupo de líneas siguiente :
[ Nombre y localización del
fichero de configuración ] Cambie la última línea y ponga ConfigFile=.\aeris.dat (o ConfigFile=.\mi_avion.dat) De ahora en adelante IOCard sabe que es ese fichero de configuración al que tendra que referirse. Observe que “\" ante le nombre de vuestro fichero significa que el fichero.dat se encuentra dentro de la misma carpeta que IOCard.exe Solo nos queda que ejecutar el Flight Simulator, y IOCard.exe cuya ventana debe indicarnos que ha encontrado entre otras cosas FS2004 y FSUIPC. Minimice IOCard en la barra de tareas. Cargue un avion con tren retráctil, como el 737. Los hilos 1 y 10 del conector J3 permanecen soldados en el interruptor de las primeras pruebas que hicimos. Cierren el interruptor y entonces van a oír como un chillido. Eso es para recordarnos que no se retracta el tren de aterrizaje de un avión cuando esta en la pista...¡ Perfecto, ya funciona ! Si quiere ser el testigo visual de ese milagro de la informática, ponga la vista exterior. Coloque su avión a 10 000 pies en el modo desplazamiento, y suelte el modo slew : antes de que tome el avión una posición peligrosa, fíjese en el tren de aterrizaje que esta sacado. Ponga el interruptor en la otra posición y... ¡ Se retracta ! En cuatro fases : definir una variable, definir una entrada, grabar un fichero .dat y configurar ConfigIOcard para ese “.dat” hemos programado la primera función del sistema IOCard. A manera de ejemplo, pueden ahora programar el interruptor de la batería. La dirección de su variable es $3102, la longitud 1 y lógicamente el Valor_ON será 1, y el Valor_OFF será 0. Habrán notado que cuando ejecutamos de nuevo el programa ConfigIOCard, nos muestra una página blanca : Hay que abrir el fichero.dat que queremos utilizar en Ficheros \ abrir.¡ Y no olviden de salvaguardarle cada vez que se modifique algo ! La programación del interruptor de la batería es especialmente concluyente : resulta mucho más realista controlarlo con un interruptor que con el teclado o con pulsadores. ¿ Que os parece si añadimos el freno de parking ($0BC8) ? Comentario 1 : algunas funciones exigen activar un pulsador- y no un interruptor de báscula. Por ejemplo para la función SLEW (desplazamiento, Y). Una presión, se le activa, otra presión en el mismo pulsador, se le desactiva. Se informa IOCard de esta modalidad poniendo un P como Pulsador en la columna TIPO de SW_NORMAL. Haga una prueba con $05DC, que es la dirección de SLEW. Comentario 2 : Cuando modificamos algo en el fichero ConfigIocard, siempre hay que salvaguardar ese fichero con Fichero \ Guardar. Pero si esta ejecutándose también IOCard.exe, para que sean efectivas las modificaciones, hay que hacer clic en RECARGAR. Comentario 3 : Algunas veces la ventana de inicio de IOCards nos indica errores, y no puede ejecutarse el programa. Los errores más frecuentes son : “no es un valor entero”: cierren IOCards con SALIR, ejecútelo de nuevo y no haga clic en el botón RECARGAR, sino en EMPEZAR.
También
podemos tener "Variable errónea en la linea de salida". Eso ocurre
principalmente cuando una o varias líneas de programación han sido abiertas
con ADD, pero dejadas en blanco. Supriman las casillas vacías, vuelvan a
ejecutar IOCards y todo volverá a la normalidad. |
|
|
|
Ya hemos visto que algunas variables tienen valores ON-OFF que pasan de 0 a 16383. Así es el ejemplo del tren de aterrizaje. Podría ser lo mismo para los frenos. También es así para el mando de los flaps con la dirección $0BDC (página 14 del anexo IV). Se puede leer : "Flaps control: 0=UP, 16383= Full". En el ejemplo de los flaps, esto nos da posibilidades interesantes. Es que podemos perfectamente asignar, por ejemplo, tres interruptores a la variable de los flaps. Correspondiendo cada uno a una posición. Un mando de flaps con 3 posiciones, es lo que se suele encontrar en el Beech 1900D, Baron 58, ATR 72 etc. Es muy corriente. El primer interruptor corresponderá al valor ON=0, es decir Flaps UP. El tercer interruptor correspondera al valor ON= 16383. Es decir que cuando cerramos este interruptor (valor ON) la variable tomará el valor 16383, y los flaps totalmente sacados. En cuanto al interruptor del medio, le daremos un valor ON de la mitad de 16383, o sea, redondeando, 8191. Así tendremos 3 grados de calaje, por ejemplo 0 - 15° - 30°. En el aspecto físico esos interruptores pueden ser micro-switches, pero también pueden ser los contactos de un conmutador rotativo de 12 posiciones. Cada uno de los contactos ira unido a una entrada de la placa Master, el punto del medio ira unido a la tierra del mismo grupo. Para nuestra prueba de programación, utilizaremos las entradas 0, 4 y 5 Con este principio de programación, ya no es necesario detectar el sentido de rotación de la palanca de los flaps. El interruptor de la posición 2 corresponderá a flaps=2. En la pestaña VARIABLES ConfigIOCard nos muestra, de ahora en adelante lo siguiente :
En cuanto a la pestaña SW-NORMAL, ahora nos muestra lo siguiente :
Así pues
notaremos lo siguiente : |
|
|
|
El ejemplo anterior es
bastante sencillo : 0, 15, 30. Ya nos figuramos que el valor 15 es la mitad
del valor 30. Las cosas son más complicadas cuando tenemos más grados de
calaje.
En todos los casos, el valor de la variable $0BDC será 0 para la posición FLAPS UP y 16383 para la posición FLAPS DOWN. La regla general es que el "paso" de cada grado de flap (aumentación del valor de la variable de un grado al otro) esta dividido con regularidad sobre todo el recorrido. Si el despliegue efectivo de los flaps no se hace con regularidad de un grado al otro, el fichero Aircraft.cfg se encarga de hacer lo necesario. Cálculo del paso : se divide 16383 por el número de grados -1. Ejemplo
: un 767 con 7 grados de calaje de flaps, de 0 a 30. Dividiremos 16383 por 6
lo que nos dará 2730 para cada paso.
Bueno, podríamos dejarlo esto así ya, pero vamos a aprovechar para ver como funcionan y que útiles son los botones LEER y GRABAR en la parte inferior de ConfigIOCards :
Estas funciones permiten visualizar los valores que toman las variables cuando cambia algo en Flight Simulator, un grado de flaps por ejemplo, (botón LEER) y inversamente cuando se pone un valor en la casilla Valor, se le puede enviar a Flight Simulator para ver como interactúa (función GRABAR). Vamos a ver lo que ocurre con el control de los flaps. La variable $0BDC tiene que estar introducida ya en la lista de las variables.
Ejecutamos FS con el B777 inicial, lanzamos ConfigIOCards con un fichero .dat
que lleve 7 grados de calaje de flaps. En la pantalla de ConfigIOCards, la ventana de derecha se encuentra vacía. Hacemos clic en LEER : nos muestra los valores de todas las variables que hemos previsto :
Solo la última línea: FLAPS nos interesará para nuestro ejemplo. De momento marca el valor decimal 0. Con FS,
ponemos los flaps en el primer grado : flaps 1. En ConfigIOCards, hacemos
clic en LEER : el valor que muestra es 2730. Comprobación contraria. Tenemos tres casillas vacías : Offset, Longitud y Valor. En Offset, ponemos la variable $0BDC de los flaps, la longitud es 4, y en Valor ponemos 2730.
Hacemos clic en GRABAR y observamos lo que pasa en FS : los flaps se ponen en la posición 1. Además, si hacemos clic en LEER, el nuevo valor que mostrará es 2730. Así podemos comprobar el funcionamiento correcto de los flaps controlando directamente las variables en FSUIPC, sin tener que tocar la palanca de control de los flaps. Si luego salían de capricho los flaps, no se podrá aún sospechar la programación. Solo tendremos que ir investigando el cableo. Esta función LEER / GRABAR resulta muy útil para comprobar o comprender el funcionamiento de cualquier variable de FSUIPC.
|
|
|
|
Algunas veces, daremos con
variables un poco "raras". No cambian su valor de manera global sino
interactuando en uno de sus "bits" (cifras o letras que la componen).
Tenemos aquí un buen ejemplo con la dirección $0D0C : las luces y los varios faros de un avión.
Con solo una dirección, tenemos 10 luces. La selección se hará cambiándose el valor de 0 a 1 del bit n°0, del n°1 etc. La verdad es que es muy fácil, además nos limitaremos a las 6 primeras luces. En ConfigIOCard, la definición de la variable se hara como de costumbre. Llamaremos a esta variable LIGHTS:
En la
pestaña SW-NORMAL, tendremos un interruptor. Lo que significa una entrada
para cada dispositivo de luz en la Master. Añadimos las lineas necesarias
con los botones ADD, DELETE e INSERT, debajo de la ventana de ConfigIOCard.
Para que sea más fácil el cableo, vamos a unir todas estas entradas en el
grupo "azul" de las entradas de 009 a 017 (vean el diagrama anterior). La
masa comun es el pin n° 20.
Todos los valores _ON mostraran 1 y todos los OFF 0. Es lógico. En cambio, hay que interactuar en solo un Bit. Por eso está la letra B en las columnas valor_ON y OFF. El + o el - que nos informa de la acción que tenemos que hacer, activar o desactivar, y por fin, la cifra de 0 a 5 en nuestro ejemplo corresponde al bit cuyo valor habrá que modificar. ¿ Cual es ? No lo dice Peter Dowson : cuando queremos encender las luces de navegación, habrá que interactuar en el bit n° 0, si son las luces de aterrizaje, será en el bit n°2, etc... Esto resulta muy sencillo y muy eficaz porque ya veremos pronto, con el uso, que cada interruptor de báscula estará "hacia abajo". Por ejemplo, las luces están siempre encendidas, aunque hayamos lanzado FS con una situación donde estaban apagadas. Y cuando ponemos la palanca "hacia arriba" se apagan siempre. Así se acaban los líos que resultan con los controles mediante teclas o interruptores (ON)-OFF-(ON). Comentario : Hay mas variables con varios valores en la lista de Dowson. Fíjese por ejemplo en la 2F80, para el Auto-Brake. Aquí Peter Dowson ya no da valores de bits para cambiar, sino valores absolutos: 0= RTO, 1=OFF, 2=Brake 1 etc... Es otra manera de definir los "valores ON" de una variable, y en este caso tendremos un interruptor (de hecho una posición de un conmutador rotativo) para cada una de las posiciones con valor ON =0 para la posición RTO, o 1 para la posición OFF etc... Tanto mas cuanto que se pueden asociar a esas funciones diodos LEDs testigos para indicarnos el estado de los controles. Para que no se nos olvide de apagar las luces de aterrizaje cuando vamos volando en crucero. Pues trataremos ahora ese tema… Ya no vamos a enviar instrucciones a Flight Simulator, sino que nos va a mandar él informaciones. Dejamos de lado los Inputs, y vamos ahora con los Outputs.
|
|
|
|
La placa Master
proporciona dos conectores de salidas : el J2, en la izquierda, es un
conector HE10 macho de 40 pines. Nos proporciona las 38 salidas n°11 a 48. ¡
No lo confundan con el J1 de derecha ! También nos proporciona salidas,
pero son para la placa de displays. Arriba, en la derecha, el P2, es un
conector DB9 macho que proporciona las 7 salidas n°49 a 55.
Para comprobar donde se localizan las salidas en el conector J2, utilizaremos de nuevo el Controlador, pero al revés. Cuando probemos las entradas, conectemos los pines 1 a 10 y comprobemos que se trataba efectivamente de la entrada n°001, lo que suponíamos. También se pueden conectar los hilos de la mejor manera posible en la cabina y buscar después con el Controlador a que número corresponde tal o tal conexión. Apuntamos entonces ese número, que se introducirá en el fichero de ConfigIOCard, en cualquier orden. Eso es lo que haremos aquí. La disposición de las salidas en los pines del conector J2 es muy diferente de la de las entradas en los conectores J3 o J4, pero mas sencilla. En efecto, el pin n°1 corresponde al +5 v, y el 2 a la masa. ¿Y los otros pines? Vamos a verlo con el Controlador. Volvemos a tomar el cable plano de 30 cm que habíamos preparado. Desoldamos el interruptor. Soldamos una resistencia de 270 o 330 ohmios en la patilla corta de un diodo LED. No se olvide : el hilo más corto es el NEGATIVO, el hilo más largo de la LED es el POSITIVO. Soldaremos el otro extremo de la resistencia al hilo n° 2 (pin 2) del cable plano, o sea a la masa. Para evitar un cortocircuito, pegaremos con cinta adhesiva el hilo n°1 (de color) , que corresponde al +5voltios a lo largo del cable plano. La otra patilla del LED ira soldada a cualquier de los otros hilos, por ejemplo al hilo n°3. El Controlador nos dirá a que salida corresponde este empalme.
Arrancamos
el Controlador (botón START) . En la casilla IN/DPLAY, ponemos 11, el
n° de la primer salida. Hacemos clic en ON. Si el diodo se enciende pues ¡
Que suerte ! Eso nos indica que el hilo n° 3 corresponde a la salida n°11.
Hacemos clic en OFF para
interrumpir el diodo, y ponemos 12. Hacemos clic de nuevo en ON, el diodo no
se enciende. Es normal. Tenga en cuenta que solo se puede apagar el diodo con OFF si el n° marcado corresponde a la salida activa. No se puede, por ejemplo, cuando la 15 está activa hacer clic en -ON para volver a 13 y hacer clic en OFF. Así no funcionara, habrá que volver de nuevo a 15 para hacerlo. Así pues podemos dar con los números de las salidas que ya están conectadas. Supongamos que nuestro diodo LED este ahora conectado en la salida n°20, una cifra a ciegas. Cerramos el Controlador, y abrimos ConfigIOCards. Cargamos nuestro fichero.dat y abrimos la solapa OUTS_CONFIG, o configuración de las salidas.
En la columna NOMBRE, daremos un nombre a la salida. Por ejemplo, LED_LDG_LIGHTS para diferenciar correctamente el nombre de la entrada del interruptor y el de la variable. En la columna N.Salida pondremos el número de la salida que queremos activar al cerrar el interruptor LDG_LIGHTS. El n°20 en nuestro ejemplo. En la columna Variable, daremos el mismo nombre de la variable que pusimos en la solapa VARIABLES. En nuestro caso : LIGHTS. Cuidado con no programar una salida LED para una variable que no estuviera en la lista VARIABLES. Resultaría un error ("Variable errónea en la linea de salida") en la ventana de lanzamiento de IOCards. Por fin, en la columna Valor ON, indicaremos que valor de esta variable va activar la salida 28 y encender nuestro LED. En la solapa SW_NORMAL, había que activar el bit n°2 para encender las luces. Entonces pondremos aquí B2 (y no B+2). ¡ Nada más ! Salvaguardamos nuestro fichero.dat y cerramos ConfigIOCard. Arranquamos Flight Simulator. Mejor de noche. Abrimos IOCard.exe. Cerramos el interruptor de la entrada 11 poniendo un hilo entre los pines 12 y 20 del conector J3. Entonces vemos que las luces se encienden y que el diodo LED también se enciende. Hemos
hecho un LED testigo para el interruptor de las luces de aterrizaje. Solo
nos queda hacer lo mismo para los demás interruptores de LIGHTS, incluso
para la calefacción del Pitot, el Yaw Damper, la posición "spoilers
armados", bueno, todo aquello que no salta a la vista y que necesita un
testigo visual para recordarlo. Los diodos LEDs van muy a menudo incluidos en los pulsadores de forma rectangular. Entonces se ponen 2 o 4 en cada pulsador. Comentario 1: Cada vez que añadimos una salida LED, es bueno comprobar que la VARIABLE existe bien en la primera pestaña y que hemos escrito correctamente su nombre (causa n°1 de los errores). Comentario 2: cuando sí que la variable existe, el LED que hemos configurado en salida se enciende cuando accionamos un interruptor. Pero, por supuesto, también cuando controlamos la acción con el teclado, y también con la tarjeta emuladora USB Keys. Eso significa que si resulta más práctico controlar Slew por ejemplo con la tecla Y generada por USB Keys, no es necesario tener un interruptor programado en la pestaña SW_NORMAL. No obstante podremos poner un LED de control.
|
|
|
| La tarjeta de expansión USB aporta 4 entradas A/D (analogico/digital) para potenciómetros que pueden gestionar por ejemplo, los gases o los aero-frenos. Lo primero que debemos de hacer es, por supuesto, extraer el offset de la lista de Dowson. Para las palancas de gases divididas en dos partes nos da $088C para la palanca n°1, $0924 para la palanca n°2, y $0BD0 para los spoilers.
En la pestaña VARIABLES, pondremos un nombre para esas variables, por ejemplo THROTTLE_1, THROTTLE_2 y SPOILER, luego su dirección, su longitud, 2 y 4. En la columna FUNCION vamos a informar para que van a servir esos ejes : podemos tomar de nuevo el mismo nombre que el de la variable, como THROTTLE_1, o un nombre diferente, como SPOILER_CTRL. Esos nombres son solo un punto de referencia para nosotros. Abrimos ahora la pestaña DEF.FUNCIONES : se supone que esas variables varían del valor 16384 al valor 0.
Si valor > significa : si el valor es superior a. Bueno, diremos superior o igual porque parece difícil para una variable límite de 16384 de tener un valor superior a ese número. Tenemos que entender que el Valor > se refiere al estado del potenciómetro y en tal caso podemos leer : "si el valor que nos da el estado del potenciómetro es superior o igual a 16384, " Entonces Valor= " entonces el valor de la variable será 16384. Es decir los gases o los spoilers a tope. Al contrario, Si Valor< , si el estado del potenciómetro es inferior o igual a 0, entonces la variable tendrá que tomar el valor 0 Finalmente, queda la columna Valor=valor por : es un coeficiente multiplicador que deriva del hecho que el convertidor Analógico / Digital funciona con 8 bits. Para explicar de manera sencilla, diremos que el valor de referencia es 64,25, cuando los valores topes son 0 y 255. Cuando aumentamos ese valor y que ponemos 80.3137 por ejemplo, cambiamos el tope alto del potenciómetro, es decir que lo calibramos, entonces llegará al valor máximo de la variable antes de llegar a su valor máximo en ohmios. Última fase, vamos a la pestaña ENTRADA ANÁLOGICA :
En NOMBRE informamos un nombre cualquiera para definir nuestro eje analógico. Nada nos impide de utilizar de nuevo THROTTLE_1 y 2, y SPOILER_CTRL. En la columna ENTRADA INICIAL, pondremos el número de la entrada analógica de la tarjeta USB. Eso de la manera siguiente : #1 para la entrada n°1, la que se encuentra al lado de la salida USB hacia el PC, luego #2, #3 o #4 si tuviéramos un cuarto. En la columna VARIABLE, tomaremos exactamente el nombre de la variable que hemos definido en la pestaña VARIABLES. Después,
definimos el recorrido del potenciómetro, que va de 0 a 255. Si debe de ser
linear, como tiene que ser para nuestros tres ejemplos de ejes, en el medio
de su recorrido, tendrá 255:2=127. Para determinar cual es el recorrido de un potenciómetro en una instalación particular, podemos referirnos al Controlador : abajo se encuentran los valores A/D [1], A/D [2], etc... Ponemos las palancas en el tope alto e inferior, y copiamos el valor indicado aquí en Left y Right Pos. Grabamos las modificaciones en el fichero.dat. También tenemos que ir al fichero IOCard.ini y en las líneas [Número de A/D a usar de la placa de expansión USB] indicaremos el número de entradas analógicas que debemos de utilizar : en nuestro caso serán 3. Solo nos queda ejecutar FS, IOCard.exe y comprobar que en el 737, por ejemplo, estos tres ejes funcionan normalmente...
|
|
|
|
Una de las funciones de
IOCards es, por supuesto, poder mostrar y modificar los datos
(frecuencias NAV, COM, altitud, transpondedor, etc...) Todos esos datos tienen un punto común : se modifican en la cabina por mediación de un encoder rotativo. Girándolo en un sentido se aumentaran valores y girandolo en el sentido opuesto se disminuiran. Según el principio de funcionamiento, hay varios tipos de encoders.
Mucho mas sencillos e igual de eficaces, están los encoders de "tipo Gray" como el CTS 288. Son muy fuertes (totalmente de metal), poco voluminosos y se pueden conseguir en la Web de OpenCockpits. Este tipo de encoder no necesita la tarjeta Encoder II. Se conecta directamente en la placa Master y necesita dos entradas. Es una solución excelente que se puede utilizar para una cabina entera si tiene uno bastantes entradas libres en la Master u otra Master. También
existen encoders "mecánicos", que se pueden conectar directamente en una
placa emuladora de teclado : por ejemplo el MRP1-20 y el MRP 11 de Knitter
Switches. Son bastante baratos pero me parecen personalmente un poco
frágiles. También
existe un encoder muy particular : el que puede fabricarse cada uno en unos
minutos con un conmutador rotativo de 12 posiciones. Y además no son caros.
Lo primero que tenemos que hacer es cortar el tope de la posicion n°12, para que pueda el conmutador dar todas las vueltas que se necesiten. Después, uniremos las patillas como no los muestra el diagrama siguiente :
Las salidas 1,2 y 3 serán conectadas a tres entradas contigüas de la placa Master. La patilla del centro ira soldada al pin de tierra del mismo grupo. Vamos a hacer nuestras primeras pruebas con este encoder muy básico.
Volvemos a ConfigIOCard
Bueno ya sabemos que antes de todo hay que abrir la solapa VARIABLES. Tenemos que indicar ahora para que queremos usar nuestro encoder. Pues lo utilizaremos para que nos muestre la frecuencia de la NAV1. Hechamos un vistazo a la lista de Peter Dowson, y damos con lo que estamos buscando : es exactamente la direccion $0350. En la columna Nombre, le daremos un nombre a la funcion de nuestro encoder, por ejemplo ROT_NAV1 (ROT significa rotativo...) La dirección es $0350, y l longitud 2. Columna FUNCION : a algunas funciones asignadas a un encoder, se les puede dar un nombre libremente. Eso es lo que hicimos para los ejes analógicos. (TRHOTTLE_1 por ejemplo). Sin embargo, hay funciones muy corrientes de las cuales forma parte la NAV1, que necesitan un tratamiento especial. Para comprobarlo, haga clic en la columna FUNCIÓN : se desenrolla entonces una lista. Vemos NAV : hacemos clic en la línea de explicación de esta función "permite seleccionar un VOR..." y la función NAV aparece en la casilla correspondiente de nuestra variable. Hay que acostumbrarse a buscar siempre en la lista de funciones porque el hecho de hacer clic en una función predefinida ocasiona frecuente y automáticamente cálculos internos indispensables. Así sería el caso para ALT que tiene límites, o QNH que carga una fórmula de cálculo. Nos
queda la columna "VALOR INICIAL". Aquí indicaremos que valor tendrá
que mostrarse en los digitos de 7 segmentos en nuestra cabina. Ya sabemos
que la frecuencia NAV inicial es 108.00. Entonces, para evitar de comenzar a
000.00 y estar mucho tiempo girando el encoder hasta llegar a 118.60 (por
ejemplo) podemos escoger el valor 108.00 como valor inicial. Pero nada
impide de iniciar con la frecuencia del VOR de su aeropuerto preferido. Por
ejemplo 118.60. Un comentario importante : todas las frecuencias NAV, COM
etc... siempre empiezan por un 1. Entonces resulta inutil de mobilizar los
recursos de las IOCards para mostrar una cifra que no va a cambiar nunca. El
1 del primer "digito" (cifra de nuestro display) va a ser fijo. Es muy facil
: nada más habra que unir los 2 segmentos del digito que forman la cifra 1
en un display de 7 segmentos a la alimentación de 5 voltios. Permanecerán
siempre encendidos (ya veremos esto luego).
Vamos a ver ahora la pestaña SWR/ENCODERS
ENTRADA INICIAL : puesto que un encoder es un grupo de interruptores, tendremos que asignarle entradas en la placa Master. Necesita tres y que sean contigüas. Un vistazo en la solapa SW-NORMAL para recordarnos que habíamos utilizado las entradas hasta la n°18. Logicamente, tendríamos que tomar las 3 siguientes. Pero es imposible. Porque la 19 forma parte de un grupo (el grupo azul en el diagrama del conector J3 que vimos mas arriba), la 20, es la masa del grupo, y la 21 se encuentra en el grupo siguiente, el marrón. Ahora bien, necesitamos 3 entradas del mismo grupo, para tener una masa comun. Dejaremos entonces la 19 e indicaremos en Entrada inicial 21. El programa deducirá él solo que como necesitamos 3 entradas, debe automáticamente dejarnos la 21, la 22 y la 23. En la columna VARIABLE, vemos de nuevo el nombre que hemos dado a la variable 0350, es decir ROT_NAV1. La columna ACELERACION la descubrimos ahora. Indicaremos aquí si los giros del rotativo seran muy rapidos o no. Habra que hacer pruebas. Si vemos que al girar el rotativo rapidamente, se hace un lío el programa tendremos que aumentar la cifra para conseguir una buena rapidez de acción. Con nuestro encoder casero, no se pueden dar giros muy rápidos. Será suficiente el valor 1. Con un encoder de tipo 32 posiciones seguramente que pondríamos 8. La
columna CTE.INC es "la incrementacion". Es decir el valor que
sumaremos o restaremos a la variable asociada por cada clic que realicemos
en el rotativo de nuestra NAV1.
Por fin en la columna TIPO, indicaremos que tipo de encoder utilizamos. Si es un encoder mecánico, como el conmutador de 12 posiciones modificado, no pondremos nada. Si es un Gray, pondremos 2 Si es un encoder de desfasage que necesita la tarjeta Rotary Encoder II, indicaremos 1. El
primer encoder gestionará la parte decimal, le llamaremos ROT_NAV_1_DC, su
incrementación será de 25 en 25, entonces -2. Se conectarán sus salidas a
las entradas 21,22 y 23. Nuestros dos encoders pueden ser separados, o concéntricos según el principio de fabricación desarrollado por Pedro Bibiloni en OpenCockpits. Muchos
aviones llevan pilotos automáticos cuyo control lo gestionan solo encoders.
Muestra la información directamente el instrumento. Así es en el Beech 350,
1900D etc... En este caso, nuestros encoders sencillos serán suficientes.
|
|
|
| Existe un surtido importante de digitos. Frecuentemente se encuentran digitos de cifras rojas, a veces denominados "HER" que significa High Efficiency Red. Esta por ejemplo el modelo HDSP-7503 cuyas cifras miden 7,6 mm de alto y el cuerpo 12,7 mm de alto. Estas dimensiones resultan ideales para los digitos de las radios, MCP etc... Es mucho mas difícil encontrar digitos de cifras amarillas salvo en… OpenCockpits. Una buena idea que han tenido ha sido de comprarlos en gran cantidad y de proponerlos a la venta en su catalogo de productos. Estos dos tipos de displays convienen bien para los circuitos impresos para 3 y 5 digitos que podéis conseguir en OpenCockpit. En ambos casos, se tratan de dígitos de cátodo comun, condición indispensable para poder utilizarlos con la placa Display II multiplexada de IOCards. Tambien tenéis que tener en cuenta, al momento de elergilos, que para poder usar los circuitos impresos de OpenCockpits, los cátodos comunes deben de estar localizados en los pines 1 y/o 6 del dígito. A continuación el diagrama interno de un HDSP-7503 que reune las condiciones anteriores.
Todos los segmentos "a" de todos los digitos están unidos entre si y conectados a la patilla "a" de la regleta situada arriba a derecha. Y asi para todos los demás b, c etc... El cátodo común de cada digito va unido a uno de los pins de la regleta del lado derecho. 16 pines, es decir 16 digitos por placa Display. El conector de 40 pines va unido con un cable plano de 40 hilos al conector J 1 de la placa Master. Las pruebas. Igual que con cualquier LED, no se pueden conectar directamente los segmentos a una fuente de alimentación de 5 voltios. Hay que colocar una resistencia de unos 330 ohmios en serie para que baje la tensión a unos 2 voltios. Sin embargo, cuando conectemos los dígitos a la placa Display, no hara falta ninguna resistencia, puesto que la placa proporciona la tensión adecuada salvo algunos casos particulares que ya veremos. Antes de soldar sobre el circuito impreso, podemos comprobar la disposición de los segmentos conectando el catodo comun al – de una alimentación de de 5 voltios, y sucesivamente cada uno de los hilos de anodos al + con una resistencia de 330 ohmios. Más vale comprobar los dígitos antes de soldarlos porque la verdad es que a veces algunos están defectuosos. Tambien es util apuntar las correspondencias, por ejemplo : el segmento a al pin x, el b al pin y etc... Y lo mismo para los cátodos. Una vez los digitos soldados resulta más difícil localizarlos. Pero podemos observar que los circuitos impresos están muy bien diseñados porque se suceden los números.
Mostrar una frecuencia. Los preliminares. Como hemos definido un encoder para la frecuencia NAV1, pues lo mas logico es utilizarlo, tanto mas cuanto que este ejemplo es el mas complejo. Sería más facil, para el montaje, mostrar el rumbo con 3 cifras, sin punto decimal y sin cifra fija… Resulta
mucho más facil el montaje de los displays si se utilizan los
circuitos impresos de OpenCockpits que son de doble cara y soportan 3 ,5 o
6 digitos. Como solo cuestan unos euros no vale la pena fabricarlos. Por
supuesto, van unidos entre si todos los segmentos y se conectan a una
regleta de tipo HE14 de 8 pines (claro que son 8 con el punto decimal). Los
cátodos van unidos a un HE14 de 3 o 5 o 6 pines. La cifra fija : es lo mismo. En todos los casos, les frecuencias empiezan por 1. Entonces, encenderemos permanentemente los segmentos b y c del dígito de las centenas uniéndolo al +5 voltios. También hay que aislarlo de los demás dígitos. Aquí tenemos dos posibilidades : sea unimos cada uno de los segmentos con una resistencia de 330 ohmios, sea unimos los dos segmentos en serie y conectamos el que esta más alejado de la masa al +5 voltios con una resistencia de 150 ohmios aproximadamente. Los puristas pondrán resistencias ajustables en vez de las fijas para poder ajustarlas con la misma intensidad luminosa que los otros dígitos. El - 5 voltios será el pin 1 o 6, común con los otros segmentos. Soldar en el circuito impreso es sencillo, la única precaución que debemos tomar es de comprobar que los puntos decimales se encuentren todos abajo a derecha. La programación. Ejecutamos ahora ConfigIOCard. Ya hemos definido la VARIABLE de la NAV1, $0350, pero va asociada a encoders rotativos. Vamos a definir de nuevo esta variable $0350, dándole una especificad, es decir que nos muestre información : la llamaremos DIS_NAV_1 (Display). Vamos a
abrir ahora la página DISPLAYS 7S: Atención : Resulta que la placa Display gestiona en primer lugar las cifras menos significativas, es decir las que se encuentran más a la derecha. Si tomamos por ejemplo el rumbo, que lleva un digito para las centenas, uno para las decenas y uno para las unidades, la "primera cifra" para la placa Display es la de las unidades, que entonces se conectará a la salida 0, luego las decenas a la salida 1 y las centenas a la 2. Empezamos entonces siempre por el final. En el caso contrario, en vez de mostrar el rumbo 349 mostraría 943. Igualmente, mostraría 570.11 una frecuencia NAV en vez de 110.75.
Así podremos observar la página DISPLAYS 7-S de Config Iocards :
Un circuito montado quedará así :
Nada más nos queda conectar los hilos y admirar el resultado de nuestro labor :
No es que sea estupenda la fotografía pero se puede observar que el 1 (fijo) es más luminoso que los otros segmentos. Esto es normal puesto que va alimentado permanentemente mientras que los otros dígitos los muestra la placa Displays uno después del otro. Para que resulte más bonito, podemos alimentar los dígitos del 1 fijo mediante una resistencia de valor más alto, preferentemente, si tenemos sitio, un potenciómetro. Además, se recomienda añadir esta resistencia para que dure más este dígito. Sea lo que sea, girar un encoder y ver cambiar una frecuencia en "su" display es algo mágico…
|
|
|
|
Con esto hemos visto lo
esencial de las IOCards.
Puesto que fui escribiendo estos apuntes a medida que iba experimentando este proyecto, mi conclusión personal es que una persona como yo que no entendía absolutamente nada de programación de las IOCards puede salir de apuros sin gran dificultad. Claro que sin la ayuda de unos amigos con más experiencia las cosas hubiesen resultado más complicadas para mí y mucho mas largas. Toda la documentación de IOCards que salio al principio tiene el mérito de existir pero, a lo largo, se ha ido volviendo obsoleta. En mi opinión es demasiado generalista y no lleva bastantes ejemplos concretos. Espero que puedan ser estos apuntes una ayuda para todos aquellos constructores que decidirán elegir IOCards. Con las IOCards se pueden hacer muchas más cosas que las que hemos tratado en este tutorial. Como se trataba aquí de los primeros pasos, hemos dejado de lado cosas muy interesantes tales como el control de servos, de motores paso a paso, de displays LCD. No he mentado la utilización del Controlador para comprobar los displays, ni las variables "Libres" que podemos asignar como guste, ni tampoco de las funciones que permiten parar un display o un encoder cuando otro tiene que tomar el relevo, ni de las frecuencias en stand-by que se pueden transformar en activas, ni tampoco de muchas más cosas que pueden resultar muy útiles. Pero cuando uno ha entendido las bases, no es difícil de seguir mas adelante. Tampoco he hablado del protocolo SIOC, que es otro medio de poner en relación IOCard y Flight Simulator. El SIOC es más orientado a "programadores" y es capaz de funciones lógicas inéditas. Las placas IOCards, sin dejar de lado el emulador de teclado USBKeys que desde mi punto de vista es imprescindible, permiten de gestionar todas las funciones de una cabina. Son a la vez fiables y de una robustez notable. Son capaces de encajar sin daños todas les errores de programación. Cuando uno se da cuenta de que Iocards son un proyecto freeware, lo menos que podemos hacer es agradecer muchisimo a Manuel Vélez el haber puesto a nuestra disposición esta herramienta.
|
| Por Claude Kieffer |
|
|
|
|