Índice general Foros Digital, Electricidad e Informática TCO XpressNet con Arduino

TCO XpressNet con Arduino

Moderador: 241-2001


Nota 10 Sep 2018 21:17

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola

Aunque esto arranca de otro hilo sobre el bus XpressNet, viewtopic.php?f=7&t=63679 , abro este nuevo para poner mis avances sobre el TCO que estoy preparando.

Copio parte del hilo anterior donde se recogen mis planteamientos iniciales:

Como comenté, he seguido dándole vueltas a esto, pensaba poder dedicar bastante tiempo a ello, pero, aunque en periodo vacacional, no ha sido así, mas o menos es que “uno planea y la familia dispone”, pero todo llegará.

Tengo una serie de sketchs que hacen cosas por separado, ahora esta cogido con hilos, pero mas o menos veo que la cosa discurrirá por estos caminos.

Esto es lo que quiero llegar a conseguir:

Usar expansores E/S PCF8574, para no depender de los puertos del Arduino, , cada uno aporta 8 puertos E/S, para leer teclas o manejar LEDs

A cada tecla se le asignará una acción, normalmente ejecutar una ruta, una ruta será una secuencia de órdenes que se enviarán a la central para controlar accesorios (desvíos, semáforos, etc.)
Las acciones a ejecutar pueden ser:
Ejecutar una ruta cambiando el estado de uno o más accesorios (p.e. manejar un accesorio con una tecla que cambia su estado alternativamente)
Ejecutar una ruta asignando un estado concreto de uno o más accesorios (p.e. manejar un accesorio con dos teclas o mover un conjunto de accesorios que formen una ruta entre dos puntos)
Ejecutar una ruta “reset” para inicializar todos los accesorios
Ejecutar varias rutas a la vez
Controlar el estado de la central on/off (paro emergencia)
Se definen accesorios y rutas “virtuales”, esto es, tomando una dirección DCC que esté libre en el trazado, se le puede ejecutar una ruta, al enviarle una orden desde el mando de la ventral, se ejecutará como si se pulsara una tecla en el TCO
Habrá una dirección de accesorio “virtual”, que al recibir una orden (on/off) desde el mando de la central, se habilite o deshabilite el teclado del TCO, para evitar conflictos si estamos controlando el trazado desde un PC, los LED’s siguen funcionando normalmente
Se podrá invertir el estado de un LED con respecto a su desvío para presentar en el TCO es la posición real.

Iré publicando mis progresos.

Saludos; Salus

Nota 10 Sep 2018 21:18

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Lo que me quedaba por poner en marcha, "aparentemente" ya me funciona, y digo aparentemente porque estoy probandolo actualmente

El hardware ya lo tengo definido, según el "pulpo" que veis en la foto
El Arduino con el MAX485 para la conexión a la central vía XpressNet, los módulos espansores PCF8574, las teclas y LED's oportunos, y un montón de cables.
Me queda diseñar una plaquita para hacer el montaje, y terminar de ajustar el sketch, aún hay cosas por definir.

Espero tener más cosas para el fin de semana

Saludos
Adjuntos
Pulpo.jpg

Nota 11 Sep 2018 07:59

Desconectado
Mensajes: 581
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Si me permitís, voy a echar unas cuentas 'en voz alta':

Con los tres expansores (3 x 8 = 24) más los 15 pines libres en el Arduino (descontando tres para el MAX485) supongo que en la foto vemos ya 39 pines para usar como entradas y salidas. Si cada desvío necesitara dos (pulsador y pareja de leds indicadores) y generara la conveniencia de instalar dos señales rojo-verde en la vía (dos pulsadores y dos parejas de indicadores más en el panel), cada desvío requeriría 6 pines, lo que significa que ya tendrías para una estación de 6 desvíos, que son suficientes para una vía principal, dos secundarias y dos de apartado, por ejemplo.

El 'pulpo' no es tan aparatoso como el 'espagueti' que requeriría un panel tradicional, sobre todo considerando que este panel y su maqueta estarán unidos por un simple cable de teléfono de 4 hilos.

Y de la habilidad que demuestran todas tus creaciones previas solo cabe esperar que el 'pulpo' acabe siendo de lo más discreto.
¡ Ánimo !


[Nota: como ves, Salus, mi concepto de panel es el de 'un pulsador para cada accesorio de la maqueta' y no tanto de rutas y otras acciones preconcebidas, como tu planteas. Debe ser que todavía estoy en la época del 'todo manual' para que el operario no se aburra y tenga que pensar :lol: , aunque el proyecto en el que ando ahora es uno justo como el que tu planteas, con estados viables y acciones correspondientes, todo rígidamente predefinido.]
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria

Nota 11 Sep 2018 10:49

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola Norber

El “pulpo/espagueti”, ha ido evolucionando según los requerimientos de las pruebas de cada parte del sketch, este es su estado actual, espero que las siguientes pruebas las haga con montajes en las placas que he de hacer.

Cuando comentas, un pulsador y semáforo por vía, cuál sería la operativa:
- Usando un sw de gestión para que reciba que el semáforo pasa a rojo y pare los trenes (esto lo había hecho hace tiempo, pero es un mix manual/automático)
- Activando un generador de frenada o el ABC de LENZ, para esa vía
- Activando un relé que corte la tensión de la vía
- Otra…..

Por otra parte lo que intento hacer es algo parametrizable para mover un desvío con un pulsador o dos, tener rutas o no, usar los virtuales (rutas o desvíos) u otras funciones….. según gustos/necesidades de cada uno


Saludos ;)

Nota 11 Sep 2018 15:56

Desconectado
Mensajes: 581
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
sls_h0e escribió:
... espero que las siguientes pruebas las haga con montajes en las placas que he de hacer.

Tus montajes anteriores han sido siempre buenísimos. Espero ansioso tus ideas al respecto.

sls_h0e escribió:
Cuando comentas, un pulsador y semáforo por vía, cuál sería la operativa:

Me gustan los paneles en los que los botones 'blancos' pulsados de dos en dos establecen rutas predefinidas en el código, mientras que los botones 'negros' conmutan desvíos y los botones 'amarillos' conmutan señales de dos o más aspectos (cada pulsación un aspecto, como en rueda). Creo que esto se parece algo a los paneles de algunas estaciones actuales.

sls_h0e escribió:
...lo que intento hacer es algo parametrizable para mover un desvío con un pulsador o dos, tener rutas o no, usar los virtuales (rutas o desvíos) u otras funciones….. según gustos/necesidades de cada uno.

En el fondo creo que hablamos de la misma idea. Las variantes son muchas.

Además de rutas predefinidas en el código, me parece que el usuario debe poder manipular siempre cada accesorio individualmente. Esto eleva el número de botones, pero da la flexibilidad que se precisa en las maquetas.
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria

Nota 14 Sep 2018 06:30

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola
Ya están hechas las placas, para la electrónica y el panel
Dejo unas fotos
Adjuntos
IMG_0662.JPG
IMG_0663.JPG
Placa 1.jpg
Placa pistas.jpg

Nota 14 Sep 2018 07:58

Desconectado
Mensajes: 581
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
¡Anda! ¡Qué de sorpresas!
No me imaginaba, para nada, esta solución, pues creía que habría cables entre una y otra, pero reconozco que es muy ingeniosa, ciertamente.

He deducido que la placa del micro encajará debajo de la del panel. Lo que no acierto a entender es cómo la 'pincharás' pues parece que irá por el lado de las pistas... Mmmmm.... ¡¡Vamos aprendiendo cosas, muchas gracias!!
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria

Nota 15 Sep 2018 12:46

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola
El montaje ya está terminado, ahora a cargar el sketch y ponerlo en marcha.
Saludos
Adjuntos
IMG_0667.JPG
IMG-0668.JPG

Nota 15 Sep 2018 21:43

Desconectado
Mensajes: 108
Registrado: 28 Oct 2015 09:35
Hola, muy interesante el tema.
Seguiré atentamente el tema ahora estoy también con ello.
He estado viendo el sketch de nuestro compañero Sam95.fr, sobre todo por el tema de definir las entradas y sus lecturas en el programa.

Mas o menos las ideas son muy parecidas, la que tengo en mente es la de estar estacionada una composición y al cabo de unos minutos (segundos en la maqueta) que el desvío cambien automáticamente a una vía libre, esto no se, si realmente sucede en la realidad o solamente cambia cuando entre por la estación otra composición (posiblemente esto no sea las funciones de un TCO como tal).

Me imagino que habrás estudiado el tema de trabajar con un arduino Mega por el tema de las E/S, pero viendo el avance que has hecho te ha quedado genial.
Ya nos contarás como evoluciona ese sketch y como te funciona, una consulta los leds los enciendes con el sketch del arduino o con los interruptores?

Estaré pendiente del avance, muchas gracias a todos por compartir estas ideas.
Saludos.

Nota 16 Sep 2018 06:07

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola Pablo

El problema de gestionar los pins de Arduino (mega/uno...) para leer el estado de las teclas del TCO es el mismo en todos los casos, mientras el proceso está revisando el estado de cada pin, no está escuchando el bus XpressNet y se pueden perder ordenes de cambio de accesorio, esto es mas crítico cuantos mas pins a revisar.

Los LED se cambian al identificar una instrucción de cambio de accesorio en el bus XpressNet, originada por la central a petición de cualquier mando o desde un pulsador del TCO

Saludos
Última edición por sls_h0e el 16 Sep 2018 06:09, editado 1 vez en total

Nota 16 Sep 2018 21:42

Desconectado
Mensajes: 108
Registrado: 28 Oct 2015 09:35
Gracias sls_hoe.
No había caído en ese tema, pensaba que podía estar dando siempre prioridad a la lectura de la información de la señal de la XpressNet.
Por el precio no vale la pena estar exprimiendo algo que te puede dar problemas de formas aleatorias en la lectura.

En el caso mío, la información que envío a la centralita cambia el estado del accesorio en la pantalla, pero al revés no, es decir el arduino no lee los cambios que puedo hacer desde el mando de la centralita, o desde la tablet.
Sigo sus progresos.
Saludos

Nota 17 Sep 2018 17:25

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola

Este es el esquema básico que he usado
Saludos
Adjuntos
MY_TCO_SCH.jpg
MY_TCO_SCH.jpg (138.68 KiB) Visto 762 veces

Nota 19 Sep 2018 15:40

Desconectado
Mensajes: 888
Registrado: 21 Mar 2014 12:52
sls_h0e escribió:
... mientras el proceso está revisando el estado de cada pin, no está escuchando el bus XpressNet y se pueden perder ordenes de cambio de accesorio, ....

Hola.

Aunque no conozco el código que lee de la línea XPpressNET, creo que no es correcto lo que dices, supongo que dicha lectura utiliza una interrupción (pin SPI con interrupción activa), en ese caso, cada vez que llegue un cambio de polaridad en dicho pin, se produce una interrupción para procesarla, siguiendo luego con lo que estaba haciendo, por ejemplo, leyendo el teclado.

Si no estoy en lo cierto, corregidme, pero si no se hace así, la programación de cualquier cosa sería muy difícil sin alterar el procesado de la información XPressNET

Por otra parte, veo que utilizas los circuitos PCF8574P como expansores de e/s y conectas el pin de interrupción en el puerto D3 del Arduino, si este también utiliza interrupciones, sí que puedes tener interacciones entre la interrupción del XPressNET y la de estos circuitos (ahora mismo no sé cual tiene prioridad), yo tengo un problema con LocoNET y es que se me pierden algunas tramas LocoNET y Norber me ha apuntado a la librería Wire.h (I2C)

Estos circuitos PCF8574P, ¿son para los led?
entonces los puertos 6 al 13 ¿son para los pulsadores? ¿estos están en matriz? (4x4 = 16 pulsadores)

Un saludo.

Nota 19 Sep 2018 15:48

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola

La función que escucha el bus ha de ser llamada de forma recurrente para que active otras funciones que devuelven información, a mi entender no se activa mediante una interrupción, si fuera así solo habría que inicializarla una vez, pero no tengo conocimientos suficientes para analizar esto en el librería.
A cada E/S del PCF se puede conectar un LED o una tecla, las salidas de los pines del arduino las uso para encender un led de estado, central on/off, bloqueo…, solo uso 2, las demás están en el conector pero sin conexión
Saludos

Nota 19 Sep 2018 16:40

Desconectado
Mensajes: 888
Registrado: 21 Mar 2014 12:52
Vale, el comportamiento que describes es igual que el de la librería LocoNET.h que utilizo yo.
Al inicializarla, toma el control del pin de entrada (RX1), que es un pin SPI y asocia su interrupción a una rutina "fantasma" que cada vez que es invocada, va construyendo una trama en una memoria temporal.

La función que dices que hay que llamar periódicamente,
sls_h0e escribió:
La función que escucha el bus ha de ser llamada de forma recurrente ...
mira a ver si hay una trama completa y válida en esa memoria temporal y si la hay, la descodifica y según lo que haya descodificado, invoca a una de una serie de funciones de "callback"
sls_h0e escribió:
... active otras funciones que devuelven información ...
que tu redefines para programar cómo actúas en cada caso (la definición por defecto de estas funciones no hace nada)

Y ahí, si que estoy de acuerdo, si tardas más entre llamadas a la función periódica que lo que dura la recepción de una trama "XPressNET" entonces puede ocurrirte que la siguiente trama se sobreescriba con la primera y pierdas ésta (o incluso las dos).

La pregunta es ¿cuanto tiempo dura la transmisión de la trama más pequeña? y ¿cuanto tiempo transcurre entre llamadas a la función periódica.

Supongo que la función micros() podría ayudar.

Un saludo.
(editado: corregido "pis" por "pin" :) lo siento)
Última edición por El Matao el 20 Sep 2018 12:39, editado 1 vez en total

Nota 20 Sep 2018 08:11

Desconectado
Mensajes: 581
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Si la gestión de los expansores de puertos, la que se produce una vez detectada la interrupción que indica que ha habido cambio en alguna entrada, retrasara inaceptablemente la ejecución del código de manera que se perdiera por ello algún mensaje XpressNet, una solución podría ser esperar a gestionar los expansores hasta justo después de que 'nos' toque hablar en el bus, porque así estaríamos seguros de no perder un mensaje dirigido a 'nosotros'.

En ese caso se correría el riesgo de perder un mensaje de los que conviene 'espiar' para que el TCO reaccione a las órdenes del otro accesorio que haya podido ordenar algún cambio que deba reflejar el TCO.

La alternativa sería justo la dual: gestionar las pulsaciones justamente en algún momento en el que 'nos' toque hablar en el bus (uno de cada 5 por ejemplo) en la esperanza de que, al no recibir respuesta, la central nos repita el mensaje un tiempo después, y así no perderíamos el mensaje, solo un 'turno de palabra'.

Pero mejor probar, porque a lo mejor no hay que hacer nada de todo eso.
Ánimo!!
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria

Nota 26 Sep 2018 10:27

Desconectado
Mensajes: 61
Ubicación: Martorell (Barcelona)
Registrado: 16 Feb 2010 23:30
[quote="sls_h0e"]Hola

El montaje ya está terminado, ahora a cargar el sketch y ponerlo en marcha.
Saludos[/q

Felicidades por el trabajo, esto es lo que hacia tiempo estaba buscando, os sigo de hace tiempo pero me da corte participar estais en un nivel que no veas, yo ya no llego.
Seria posible disponer de los dibujos de los pcb´s para empezar a fabricarmelos.

Es cierto que lo maximo en pulsadores es de 16 ?

Para 32 servos entiendo que tendria que montar dos juegos ?


Saludos a todo este grupo y gracias por lo que haceis
Central Multimaus Roco.
Interface GenLI.
Decos Servopoint Opto.
MicroServos china 9 grs. sg90.
Software ROCRAIL.
Portatil Acer Aspire 5310.
Tablet Samsung.

Nota 26 Sep 2018 13:29

Desconectado
Mensajes: 45
Registrado: 24 Abr 2016 20:03
Hola

El circuito impreso lo publicare, después de verificar todo, estoy en ello pero por asuntos laborales estaré un par de semanas sin trabajar en ello.

Por aquí hay quien “hila” muy fino, pero no es mi caso, soy un neófito con el C++

El montaje consta de varias placas:
A - La principal con la electrónica común para cualquier TCO, la entrada del bus Xpressnet con el MAX485, la alimentación, el Arduino y 4 PCF’s, esto es 4x8=32 E/S, cada E/S puede ser configurada para encender un LED o leer una tecla, esta placa es “universal” para montar un TCO, en mi caso la conecto directamente al panel pero se pueden conectar cables a los pins para conectar las teclas y LEDs.
B – El panel, donde están los LED’s, los pulsadores y sus resistencias, al estar la placa principal conectada mediante los pins directamente, no ha ningún cable entre las placas, evidentemente esta placa es específica a cada TCO.
C – Hay una tercera placa, (no hay foto) es una ampliación con 4 PCF’s mas, se pueden concatenar 3 placas de ampliación que hacen un total de 16 PCF’s, esto es 16x8=128 E/S

Saludos

Nota 09 Oct 2018 19:58

Desconectado
Mensajes: 97
Registrado: 17 Nov 2008 18:53
Hola

Aquí un "vidrio", espero os guste

https://www.youtube.com/watch?v=Dxb_LwzCjn8

Saludos

Nota 09 Oct 2018 22:28

Desconectado
Mensajes: 581
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Enhorabuena!! Ya lo tienes!
Bravo!! :D :D :D
Y con su bloqueo de panel y todo. Qué maravilla
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria

Siguiente

Volver a Digital, Electricidad e Informática

Síguenos en Facebook Síguenos en Google+ Síguenos en Instagram Feed - Nuevos Temas
©2017   -   Información Legal