(EN) Note and bill acceptors. Innovative Technologies parallel protocol (NV10) to JCM parallel protocol (EBA) in Franco slotmachines.
(FR) Lecteurs de billets. Protocole parallèle de Innovative Technologies (NV10) à protocole parallèle de JCM (EBA) en machine à sous de R. Franco.
(PT) Leitor de notas NV10 por noteiro EBA en máquinas slots de Recreativos Franco. Protocolo paralelo de Innovative Technologies a parelelo de JCM.
-------------------------------------------------------------------------------------------
PARA REPASAR y fuentes: Pinguino, lector de billetes NV10 (búsqueda en google por "manual nv10"), billetero EBA11 (búsqueda en google por "europe bill acceptor eba - 10 - xx"), máquinas de Recreativos Franco.
Desde mayo del 2013, en la zona euro, circula un nuevo billete de 5 euros. En 2014 se lanzará uno nuevo de 10 euros, y supongo que en posteriores los demás. Esto supone el tener que reprogramar todos los lectores de billetes en las máquinas que manejan dinero. Algunos de estos billeteros pueden estar catalogados como material obsoleto y por tanto sin soporte técnico, ni actualizaciones de software.
En concreto, el problema que ha dado pie a esta entrada, han sido máquinas tragaperras de Recreativos Franco. Se trata de máquinas bastante antiguas. Algunas con más de diez años, que como gustan, se han mantenido instaladas. Originalmente, la gran mayoría de estas máquinas, montan un billetero EBA 10 o 11, el cual es material obsoleto. No hay software para reprogramarlos para que admitan estos billetes nuevos. Así que hay que sustituirlos por otro "descendiente" más actual como el EBA 20, o actualmente Franco monta billeteros ICT en sustitución de los anteriores.
Esto puede suponer un gasto importante en billeteros nuevos.
Sin embargo, al mismo tiempo, otros fabricantes están dejando los NV10 de Innovative Technologies (IT), y montando en sus nuevas máquinas billeteros con pagadores de billetes NV11. Y por tanto, hay cierto parque de NV10 usados libres.
Por otra parte es bastante más fácil encontrar documentación técnica de Innovative Technologies (IT) que de JCM.
Así que me ha parecido interesante el ejercicio de intentar montar una tarjeta que pase del protocolo que usen los billeteros IT, al que entiendan las máquinas de Franco que llevan montado un EBA de JCM.
|
NV10 IT - EBA11 JCM |
El resultado creo que ha sido totalmente práctico y operativo, mejor que algunas otras soluciones que he visto, pero no deja de ser un ejercicio personal. Aunque ha sido probado satisfactoriamente en varias máquinas (varios tipos de Gnomos, varias Santa Fe, Diligencia, Moky Raky, ...) y estoy prácticamente seguro de que funcionará en cualquier tipo de máquina de Recreativos Franco que pueda montar un EBA 10 o EBA 11 en protocolo paralelo de jcm. Está claro que no puedo responder de posibles errores y repercusiones. Si alguien llega a usarlo en alguna explotación de máquinas me gustaría saberlo y los resultados, satisfactorios o no.
Me limitaré a exponer el proceso que yo he seguido. En ningún momento he usado información confidencial y todo lo que expongo se puede encontrar por internet públicamente. Pondré enlaces aunque no puedo asegurar sus permanencia y validez con el tiempo. Hay cierta información sensible que yo he ido deduciendo. Si alguien está interesado, podrá ir siguiendo mi mismo proceso de investigación, para conseguir los datos exactos. Yo supongo que hay ciertas cosas que no debería exponer directamente por seguridad práctica para mi propio proyecto y porque el propio fabricante Franco, por alguna razón no las publica abiertamente.
Por partes:
¿Qué microcontrolador usaré?
La visión ha sido clara desde el principio. Adaptar un protocolo a otro necesita de un algoritmo y por lo tanto de un microcontrolador. Por facilidad de programación pensé en un
arduino, o un
pinguino. Como se trataba de hacer una tarjeta para un fin en concreto he pensado que el pic de pinguino me ofrecía todo lo necesario en un chip. Asi que la idea fué, montar, en principio, un prototipo con
mi pinguino pic, sobre una protoboard, con la idea, de que una vez programado y bien testeado el circuito, poner el pic con su reloj y solo las conexiones que me interesasen, sobre una tarjeta, sería sencillo.
Sin leds, ni reset, ni conector usb, el circuito de un pinguino se simplifica mucho y se reduce al mínimo.
|
Pinguino a la mínima expresión: muy fácil y potente usar un pic. |
Echad un vistazo a los esquemas en
http://wiki.pinguino.cc/index.php/PIC18F2550_Pinguino
http://www.hackinglab.org/pinguino/index_pinguino.html https://github.com/PinguinoIDE
Observad que el pin 6 lo coloco a masa. Así fuerzo que el programa arranque al principio y el pic no espere unos segundos por una programación nueva. Esto me obliga a usar la versión 1 del bootloader en mi pic.
Ojead
http://sites.google.com/site/pinguinotutorial/bootloader
He observado, según explicaré después, que no puedo esperar 5 segundos (como hace la versión 2) a que el programa de mi tarjeta comience a funcionar después de alimentarlo.
Hasta aquí creo que queda clara mi idea original que tenía en la cabeza.
¿Cómo va montado el EBA original el la máquina?
Aquí es interesante ver el esquema. A fecha de hoy puedes echar un vistazo a
manuales de servicio de máquinas de Franco en su web.
(3ª versión de una Gnomos, por ejemplo, placa de monedero/billetero, pag.47). No sé lo que durará este enlace (a Noviembre2020, ya no existe -intenta aquí la hoja en cuestión <<Derechos de R.Franco>>-) así que trataré de ser gráfico y didáctico en mi explicación.
En la placa control del billetero hay dos conectores para billeteros. El lector de billetes tipo EBA se conecta a 26 pines en un conector IDC (dos lineas de 13 pines). Un segundo conector de 16 pines en linea podrían conectar un "billetero smyle" (¿tal vez un NV4 de IT?).
Tenemos las mismas señales en los dos conectores. Centrémonos en el EBA y las primeras suposiciones:
+12V para alimentar el billetero (pines 1 y 3)
+5V para referenciar señales activas a nivel bajo.
GND para alimentación y de referencia para ciertas señales (pines 2,4,6,8,10,14, y 24)
VEND1 (5),
VEND2 (7),
VEND3 (9) como indicadores del billete reconocido.
ABN (13),
STKF (23),
PRES (26) que en principio no tengo claras (sigue leyendo).
INHIB (16) para habilitar o deshabilitar la aceptación de billetes.
ACK (20) para algún tipo de reconocimiento o confirmación.
REJ (20) que en principio tampoco sé para qué pero suena a "reject" (rechazo).
Todas las señales están controladas por un PIC18F458.
REJ directamente.
INHIB y
ACK a través de un driver ULN2803. El resto (
VEND1,
VEND2,
VEND3,
ABN,
STKF,
PRES), también gobernadas por el pic, pero forzadas, a falta de pic, a nivel alto mediante resistencias de pull-up.
Esta diferencia ya nos hace presuponer que
INHIB,
ACK, y
REJ son salidas "decididas" por el pic de la máquina para enviar al billetero, y
VEND1,
VEND2,
VEND3,
ABN,
STKF, y
PRES son entradas para el pic "decididas o gobernadas "por el billetero hacia la máquina.
¿Cómo funciona el NV10 en paralelo?
En principio este es el lector de billetes que conozco mejor. Hay manuales claros que describen exactamente su funcionamiento.
Échale un vistazo a las páginas 10, 11, 12, y 32 de este enlace.
Pero por si rompe, un resumen:
Cuatro
señales de crédito (pines de 1 a 4), señal
busy (pin 9),
escrow (pin 10), cuatro
señales de inhibición correspondientes a cada señal de crédito (pines de 5 a 8). Alimentación de
+12v (pin 15) y
masa (pin 16).
A tener en cuenta que usaremos la opción "escrow" porque necesitamos que una vez reconocido el billete la máquina decida si se acepta o no.
Así que el proceso debería ser más o menos así:
En reposo, las señales de crédito estarán a nivel alto (no hay billete reconocido), busy a nivel alto mientras el billetero está inactivo, habremos puesto la línea de escrow a nivel bajo a la espera de una señal de crédito, y la señal de inhibición según queramos que puedan introducir billetes o no.
Si habilitamos el billetero y se introduce un billete, la señal busy bajará, se arrastrará el billete, se analiza y emite una señal de crédito bajando el pin del canal al que se haya asociado ese billete previamente en la programación del billetero. Si la máquina decide aceptar el billete, subirá a nivel alto la señal escrow, y el billetero confirmará el proceso repitiendo la señal del crédito, introduciendo de todo el billete, y subiendo busy al acabar. Deberemos bajar el escrow para volver a empezar. Si la máquina decide rechazar inhabilitará el billetero con la señal inhib correspondiente, o al cabo de 30 segundos sin completarse satisfactoriamente el proceso el billete será devuelto.
Pero,
¿cómo funciona el billetero EBA11?
Aquí es donde empieza el rompedero de cabeza, las suposiciones, la prueba y el error hasta ir aclarando ideas.
Cuando la máquina arranca, chequea de alguna forma la presencia del billetero. Si este no está conectado o no es el apropiado indica "error de billetero". Así que lo primero que me interesa ver, es que hacen las salidas del billetero al arrancar. Hemos comentado ya el conexionado del billetero EBA. Así que monitorizaré las salidas con unos leds polarizados en principio a nivel alto (primer ruido y encendido en el vídeo) y luego alimentaré el billetero (segundo clic) y nos fijaremos en que hacen los leds. Led encendido, nivel alto. Led apagado, nivel bajo. Y cuando acaba la secuencia de arranque por el ruido del motor del billetero.
Siento que el vídeo esté muy oscuro y sean poco gráficas las conexiones sobre una protoboard. Me interesaban las lucecitas y el vídeo para intentar temporizar la secuencia. Ahora, unos meses después de las primeras pruebas, cuando edito el blog, es el único vídeo que conservo, pero me parece muy gráfico.
Como me temía el billetero hace algo con sus salidas, que la máquina podría comprobar, durante el arranque. Este puede ser un primer objetivo del proyecto. Conseguir que la máquina arranque pensando que tiene un billetero EBA, solo con mi pinguino.
También necesito tener claro como es el proceso de aceptación o rechazo de un EBA11. Asi que además de los leds a sus salidas conecto las entradas ACK, INHIB y REJ a unos interruptores que me permitan ponerlas a nivel alto o bajo. Y voy probando hasta conseguir que el billete sea aceptado y observando el comportamiento de sus salidas. Después de los primeros apuntes y algún problema de programación final creo que puedo describir el proceso:
El billetero EBA en reposo permanece con sus salidas Vend1, 2, y 3 a nivel alto. Estas son las salidas que marcarán el billete introducido.
La salida Abn está a nivel bajo y sube si hay algún error. Sólo he conseguido resetear esa salida reiniciando el billetero.
La salida Stfk siempre está a nivel bajo. Entiendo que debe de ser un indicador de que el staker o acumulador de billetes está lleno. Pero tal como he probado yo el eba, no hay acumulador de billetes, y la máquina original no monta un apilador eba. El apilador, si lo hubiese, lo maneja la cpu de la máquina huésped. Por lo tanto de esta salida me olvido.
La máquina polariza la salida Pres a nivel alto. Pero según el manual esto no se usa en protocolo paralelo. Es algo que no maneja el billetero. Pres suena a "presencia". Haré unos comentarios sobre esta señal en otro párrafo. De momento seguimos con la exposición del funcionamiento.
Como entradas tenemos Inhib, Ack, y Rej.
Si Inhib está a nivel alto el billetero no admite billetes.
Si Inhib está a nivel bajo el billetero admite. Introducimos un billete y las salidas Vend 1, 2 y 3 pasan a nivel bajo (habrá que hacer un comentario sobre esto en otro momento) mientras el billete es transportado. Cuando el billete llega al final y es reconocido, las señales Vend1, 2, y 3 indican de que billete se trata. En nuestro caso, y respectivamente, 0-1-1 corresponde con 5 euros, 1-0-1 con 10 euros, y 0-0-1 indica que el billete es de 20 euros.
El billete permanece un rato esperando a que Ack que estaba a nivel alto, baje y vuelva a subir, confirmando que debe aceptar y pasar de todo el billete. O a que lo haga Rej y el billete será rechazado. Mientras el billete es transportado para aceptar o rechazar Vend 1, 2, y 3 vuelven a ponerse en 0-0-0. Si el billete es aceptado y no hay error. Se confirmará la aceptación volviendo a poner el código del billete en Vend1, 2, y 3 y el proceso volverá a empezar con el billetero en reposo después de que volvamos a hacer una bajada-subida del Ack.
Desarrollo, montaje y otros comentarios técnicos.
Al final, con mi Pinguino, montado sobre un protoboard, paso a la faena, programando y haciendo pruebas. La primera satisfactoria es imitar la misma secuencia al arranque y que la máquina no de "error de billetero", pensando que efectivamente tiene un EBA11 instalado. Esto me anima a seguir...
|
NV10 a EBA, prototipo con pinguino sobre protoboard |
Las señales a usar, han sido, en un principio, todas las descritas. El patillaje del pic es suficiente y he montado unos leds para poder monitorizar diferentes partes del programa que me facilitasen su seguimiento y corrección. Aunque en la fotografía puedes ver un Arduino UNO, no se usa para nada. Tampoco el bus de 10 cables. Simplemente ya los tenía insertados en esa protoboard con unos pines curvados que prefiero no desmontar.
No te fíes demasiado de la foto. No es el montaje definitivo. Aún se han corregido detalles, como valores de resistencias; alguna señal de crédito del NV10 sin polarizar que daba lecturas falsas; la variación de la señal de algún pin, posteriormente, para hacer coincidir la conexión serie del nv10 a los pines de comunicación serie del Pinguino, pensando en posibles mejoras (comunicando en serie el nv10 con el pinguino mejoraría la seguridad...), etc.. Por eso, precisamente, esto es un prototipo en fase de desarrollo...
Se ha ido mejorando tanto el conexionado, como el programa. Aquí te expongo ahora el producto final, y probado.
Pero antes unos comentarios técnicos pendientes, que he ido descubriendo al ir enfrentándome con el desarrollo, y de los cuales he insinuado algo antes, en esta entrada:
El
bootloader cargado en el Pinguino es la versión uno, porque permite arrancar el programa inmediatamente, sin esperar un tiempo a la carga de un programa nuevo, con la patilla 6 puenteada a masa. Para que la máquina piense que tiene un EBA, necesito imitar el arranque del billetero, en el mismo momento que se enciende la máquina.
Sobre la señal
PRES:
Si observas el manual del EBA, verás, que el pin 26, que corresponde a la conexión de la señal PRES sobre el billetero, no se usa en paralelo. Y en caso de usar el billetero como serie, (que no es el caso) sería una entrada, y por lo tanto para decirle algo al billetero. Esto me ha llevado a pensar que no se trata de comunicar con el billetero sino de una señal para que la máquina sepa que tiene un eba conectado. La prueba es que si soltamos la conexión del pin 26 la señal Pres sigue a positivo y todo funciona igualmente.
Lo curioso es lo que pasa si ponemos la señal a masa. La máquina, cuando arranca, indica "error de billetero" (en la mayor parte de los modelos). Sabe que no tiene un eba, pero acaba arrancando igualmente, y activa la luz de aceptación de billetes. Si das un pulso a masa por VEND1, 2 ó 3 se marca un billete en el display. A la espera de confirmar con otro pulso para aceptarlo. Esto permitiría instalar un nv10 casi directamente, pero en mi opinión, con una seguridad ante ruido y fraudes muy pobre. Con mi tarjeta se cotejan más de una señal, y se controla la longitud de los pulsos, dificultando mucho que el ruido pueda afectar a más de una linea en el mismo momento y de forma distinta. Mi imaginación se atreve a deducir, que se trata de un proceso de programación que el fabricante a dejado a medias, y descartado por la instalación de billeteros EBA.
El protocolo paralelo del billetero EBA es más seguro. Y he aquí, otro comentario pendiente. Cuando el EBA marca el
código del billete introducido mediante las tres señales Vend, no lo hace con las tres al mismo tiempo, sino que hay un
desfase entre el cambio de cada una, que la máquina de alguna forma comprueba. Esto me ha traído un poco de cabeza hasta darme cuenta de ello. Tampoco cuento exactamente como es este desfase porque no interesa por motivos de seguridad, y como tampoco se trata de algo que haya encontrado ya documentado supongo que podría tener también su perogrullo legal. Si te interesa, sé consciente de ello y míralo con un osciloscopio, por ejemplo.
El circuito en cuestión.
Finalmente expongo el circuito. Lo he realizado con Kicad.
|
Esquema final de mi tarjeta para adaptar un NV10 en sustitución de un EBA11 |
Y algunos detalles de su realización práctica. He montado una tarjeta que sea factible de realizar en plan doméstico.
|
Colocación de los fotolitos para hacer pcb de doble cara |
|
|
|
|
|
|
Detalle de mi circuito impreso de doble cara |
|
Vista de tarjeta para adaptar NV10 por un EBA |
Se trata de hacer una placa de doble cara. Las vías (puntitos
blancos) han de ser soldadas, en primer lugar, y uniendo ambas caras.
Fíjate en un detalle, a tener en cuenta, que a mí me ha dado problemas:
el pad marcado debe de ser soldado por las dos caras porque también hace
de vía.
|
Recreación aproximada 3D de mi placa NV10-EBA |
En mi montaje real he montado el circuito integrado pic sobre un zócalo. En la simulación con Kicad las figuras del cristal y algunos condensadores han sido escogidas por aproximación. Igual que los conectores IDC. El conector de 16 pines va directo al NV10 que montemos. El de 26 pines va a la conexión en donde iría el EBA en la máquina, sobre la placa controladora de billetero. Las uniones han sido sobre cable plano. Cada conector con su muesca correspondiente al pin 1 sobre el cable marcado. El cable que va al NV10 debería ser lo más corto posible para evitar ruido. El largo que sea el que sale hacia la máquina, con protocolo más complejo.
|
Vista de mi montaje final y soldadura importante |
Para hacer la tarjeta,
puedes descargar el archivo .pdf con los fotolitos, desde este enlace. Cuando imprimas asegúrate de no reducir ni escalar la imagen con margenes ni ajustes. Tienes que imprimir al 100%, sin ajustes, para que los tamaños se correspondan, y coincidan bien las perforaciones con los pines reales. La primera hoja es la parte de las soldaduras y las pistas principales. Si optas por hacer una sola cara, es ésta. La otra, podrías solucionarla con bastantes puentes. La segunda hoja es la parte donde se montan los componentes.
Si te interesa puedes
descargar mis últimos archivos del desarrollo con kicad. Si los modificas y/o usas de forma pública me gustaría que conservases indicaciones del origen. Y agradecería un email o un comentario. Nunca de forma comercial, y mucho menos sin permiso expreso. Gracias.
Para
grabar el pic te ofrezco el archivo de la última versión que he hecho y probado. Es en formato hexadecimal de intel, creo que es lo más común con pics. Puedo pasarlo también en binario, y Srec de motorola, pero prefiero ahorrar espacio de mi servicio de alojamiento de archivos. Si tienes problemas para copiarlo o grabar el pic coméntamelo por correo. Lo hablaríamos y puntualmente podría incluso grabarlo y enviártelo. No creo que la demanda me supere...
No ofrezco el código fuente del programa por razones (que me parecen evidentes) de seguridad para mi propio proyecto, pero os animo a que una vez construido el hardware experimentéis con vuestro propio software. Creo que las ideas principales están sobre la mesa.
Solo dos comentarios más:
Sobre la programación del NV10 . Yo he usado uno programado con la versión firmware 3.24 y archivo EUR2117; con los billetes de 5euros programados por el canal 1, los de 10 por el canal 3, y los de 20 por el canal 4; el de 50 inhibido por el 2. Configurado para funcionar en paralelo. Pero si no tienes la posibilidad de programar uno, pero sí dispones de él, comentar que si lo pones a funcionar en paralelo, y te las arreglas para que coincidan las señales de cada billete con el canal adecuado te funcionará con casi cualquier programación.
Y sobre que, aunque todo ha sido desarrollado y probado con NV10 de IT, debería también funcionar con un NV9, configurado para comunicar en paralelo y programación similar. También con un NV8, pero este último no podrás programarlo para que acepte billetes nuevos, por obsoleto.
Y nada. Si lo probáis me gustarían comentarios...