Índice general Foros Digital, Electricidad e Informática Interface programable XpressNet

Interface programable XpressNet

Moderador: 241-2001



Desconectado
Mensajes: 30
Registrado: 06 Dic 2010 17:09

Pablob escribió:
Muchas gracias por el comentario.
Si no te entiendo mal, uno de tu objetivo es desde el multimaus controlar los servos.

Si es así, mírate el hilo sobre Decodificar DCC para 8 señales con Arduino, ya que con el programa que Norver colgó y unas pequeñas modificaciones puedes conectar el multimaus con el arduino tanto el nano como el mega. A partir de aquí, ya vas a tener un estado lógico en tu placa y vas a poder hacer lo que tú quieras con ese estado, encender luces, control de los semáforos, servos etc., lógicamente programando un poco esos estados. En el caso mío, el Deco Servo como los defines, yo me lo he saltado, ataco todo directamente desde el arduino, servo, los relés para los semáforos...etc
Una consulta, como ajustas el desplazamiento y la velocidad con esa placa, es complicado?

Un saludo..


Lo voy a mirar, pero no creo que me valga, por que yo no quiero descodificar DCC, sino XpressNet. Yo no voy a utilizar el booster...Solo el mando, creo que lo he aclarado suficientemente en el anterior post...

No entiendo esta frase: "En el caso mío, el Deco Servo como los defines, yo me lo he saltado, ataco todo directamente desde el arduino, servo, los relés para los semáforos...etc"

En la misma página que enlacé, a un par de clicks de ratón..., está la explicación de ajustes del servo. Es ésta: https://learn.adafruit.com/16-channel-pwm-servo-driver/using-the-adafruit-library

Espero que te sirva. Saludos.
Zafariles, el sueño a escala o cómo construir una gran maqueta de trenes.
Síguelo en: http://zafariles.blogspot.com


Conectado
Mensajes: 150
Registrado: 28 Oct 2015 09:35
Entendido, por defecto entendía que era el conjunto completo el multimaus +booter, no era solamente el mando.

Al tema de la frase era por esta línea tuya

[MLTIMAUSE]------------>[ARDUINO]-------------->[DECOD.DE SERVOS.]

Yo ataco directamente al servo desde el arduino, no tengo el decod.
Un saludo


Conectado
Mensajes: 150
Registrado: 28 Oct 2015 09:35
Hola zafariles.
No se si es esto lo que estas buscando, me cuentas

http://pgahtow.de/wiki/index.php?title=XpressNet


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
zafariles escribió:
No me explico o no me entiendes...
Si se puede este esquema:
[MANDO MULTIMAUS]---(XpressNet)--------->[ARDUINO]-------------->[LED Y PULSADORES] (Esto es lo que tu has conseguido, si no me equivoco)
Se debe poder este:
[MANDO MULTIMAUS]---(XpressNet)--------->[ARDUINO]-------------->[DECOD.DE SERVOS.]------------->[SERVOS...]

Repito: el protocolo XpressNet está diseñado para que los accesorios le pidan a la central que actúe, y ésta lo hace siempre mediante la señal DCC. Creo que no hay manera de que sea la central la que le ordene acciones a un accesorio a través del XpressNet.
Lo aclaro:
- Los pulsadores de mi panel de mandos le piden a la central que modifique una señal o un desvío.
- Los leds de mi panel reaccionan cuando algo le pide a la central que varíe su señal o desvío asociado.
- No he visto en el protocolo cómo conseguir que la central ordene nada a ningún accesorio.

Nada impide que los accesorios le pregunten constantemente a la central por el bus XpressNet cómo deberían estar y, si comprueban que están en 'mala' posición, reaccionen en consecuencia cuando obtengan la respuesta. Pero eso sobrecargaría el bus con preguntas incesantes desde cada señal o desvío a la central, y ésta no podría responder a todos ellos en un tiempo razonable. El bus XpressNet no creo que deba usarse así.

Por otro lado, este hilo no debería desviarse a problemas de servos temblorosos, pues hay otros hilos sobre la cuestión mucho más adecuados. Gracias.
Saludos

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


Desconectado
Mensajes: 30
Registrado: 06 Dic 2010 17:09

Pablob escribió:
Hola zafariles.
No se si es esto lo que estas buscando, me cuentas

http://pgahtow.de/wiki/index.php?title=XpressNet


Sí esto es, veo que tú sí comprendes mi idea. De todas formas, voy a ir por el lado de Nicolas Zinn, a ver si lo consigo con un Arduino Uno...
https://github.com/nzin/xpressnet_arduino

Saludos.
Zafariles, el sueño a escala o cómo construir una gran maqueta de trenes.
Síguelo en: http://zafariles.blogspot.com


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

Estoy intentando poner el TCO en marcha, me parece muy útil según lo que comentáis
Pero no consigo que funcione, he cambiado el pin de entrada desde el max (en el esquema pone 7 y en el código el 2) y ajustados los pins para los pulsadores y leds
Supuestamente cada pulsador ha de encender/apagar su led, esto es enviar ordenes de cambio al decoder, y si cambiamos desde el lokmaus también cambiará el led, pues no hace nada

Alguna idea?

Saludos


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Supongo que estás usando el código que puse hace tiempo y que figura una página más atrás. Si es así, lamento decirte que hace tanto que apenas lo recuerdo, pero:

- El pin 2 es el correcto, sí.
- Lo fácil es conseguir pedirle a la central que cambie el accesorio a las órdenes del pulsador conectado al Arduino. El código debería hacerlo así sin modificaciones.
- Lo difícil es lograr que el Arduino también cambie cuando es el Lockmaus el que se lo pide a la central. Pero se puede hacer. Es justo la aportación que le hice a P. Gathow en el código de la z21f y que es lo que le falta a este código. La filosofía es sencilla: el Arduino debe escuchar también los mensajes que otros dispositivos ponen en el xBus, no solo los 'GeneralBroadcast'. Si oye un mensaje que empieza por 0x52 entonces es una petición a la central de cambiar algún accesorio. Luego hay que decodificarlo entero por si ese accesorio es uno de los controlados por el Arduino, momento en que se debe procesar el mensaje y hacer el cambio de leds.

¿Esa es la idea que pedías? Espero haberte ayudado.
Saludos

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


Desconectado
Mensajes: 60
Registrado: 24 Abr 2016 20:03
Hola
Muchas gracias por la pronta respuesta, me pongo a mirar en código de la z21f.
Saludos


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

No ha habido forma de hacerlo funcionar, hasta que he cambiado la central y he conectado un LZV100, entonces lo ha hecho a la primera con la versión de software que hay en este hilo.
Actuando con los pulsadores consigo mover los accesorios pero los leds no se activan siempre, a veces falla, también según la pulsación se envían ordenes repetidas, veré como sigo

Saludos


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Me alegro de que progreses. :)

¿Qué central no funcionaba? Yo solo tengo Multimaus y con esa iba bien en su día, hace casi dos años ya...

Lo de lograr cambios en los accesorios ya te comenté que era inmediato. Pero lo de que no se te enciendan los leds asociados al Arduino es cosa rara. Recuerdo que eso también funcionaba bien.... He releído un poco el código y básicamente lo que hace es leer continuamente los pulsadores, y cuando se detecte que un determinado pulsador se ha leído 250 veces seguidas como 'pulsado' entonces se solicita a la central el cambio del accesorio que tiene asociado, e inmediatamente se le pregunta a la central el estado de ese accesorio. La respuesta de la central es la que hace conmutar los leds vinculados a ese accesorio.

Este código/experimento me sirvió para entender el XpressNet. Con este programa no solo conseguía comunicar con la central pidiéndole cambios de accesorios, sino que también confirmaba que la central había procesado la orden de cambio, aunque fuera a costa se sobrecargar el xBus pidiéndole que me lo confirmara.

Las asociaciones de que hablo se hacen al principio del código, pero esto probablemente lo has deducido ya:

Asociaciones.png
Asociaciones.png (53.77 KiB) Visto 1822 veces

Se supone que para controlar el accesorio nº 102, por ejemplo, tienes colocado un pulsador entre el pin 3 y GND del Arduino, y tienes también un par de leds en serie con sus respectivas resistencias entre +5V y GND, con el punto medio de la serie conectado al pin 4 del Arduino. Al arrancar, el led que esté conectado entre el pin 4 y GND tiene que encenderse (porque en setup inicio el pin 4 con valor alto). Al pulsar y poner a masa el pin 3 durante un instante se tiene que producir el baile de datos con la central (petición de cambio del accesorio nº102 + petición de estado del accesorio nº102) y entonces el pin 4 cambia de estado y se enciende el otro led.

En esta foto esquematizo cómo están conectados los leds a un mismo pin (el 4 en nuestro ejemplo). El cable rojo es +5V, el negro es GND. El amarillo va directo al pin de Arduino. El pulsador o el MAX485 no salen porque este montaje corresponde a otro tipo de invento totalmente distinto, pero los leds irían igual.

ASALAF_17_decoder.png
ASALAF_17_decoder.png (470.1 KiB) Visto 1821 veces


Y así lo dejé funcionando, de eso estoy seguro.

Lo que no supe hacer entonces fue lo de escuchar las peticiones a la central de cambio de ese mismo accesorio nº102 hechas por otro mando del xBus. Eso lo conseguí en el código de la z21f.

Y una anécdota: Notarás, si lo estudias, que el código de la interface z21f tiene partes idénticas al del código que ahora comentamos y que no era mío, sino de un australiano. El sr. P. Gathow (autor del código de la z21f) no lo menciona, pero yo quiero que conste que la parte del código que descifra el protocolo XpressNet salió del código de John Alexander Stewart, y sus méritos no hay que olvidarlos.
Saludos

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


Desconectado
Mensajes: 60
Registrado: 24 Abr 2016 20:03
Holaa

No me funcionaba con el multimaus de Fleischmann y el booster 10764

Habia montado el circuito sobre una placa protoboard varias veces, al pensar que era un error de cableado, por último al cambiar a la Lenz funcionó a la primera

Hasta el fín de semana no me puedo poner con ello, pero seguiré ya que quiero que funciona con el multimaus.

Muchas gracias por tu respuesta e indicaciones, seguiré en ello.

Una duda, el protocolo por defecto de roco, enumera los accesorios 4 unidades por debajo del protocolo lenz, recuerdo que en la central de P.Cañada hay una CV para cambiar el modo de funcionamiento.
¿Como se gestiona esto en el protocolo del TCO/z21f?


Saludos


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Extraño que con el Multimaus no funcionara... Es justo con lo que pruebo yo, y con ese mismo booster también.

Sobre el decalaje de ±4 pues es algo que nunca recuerdo. Prueba las tres opciones (no se tarda apenas): para controlar el accesorio '7' por ejemplo, prueba con el '3', con el '7' y con el '11'. Y cuando salgas de dudas lo pones por aquí, por favor: quizá nunca me acuerde de cómo va esto, pero sí me acordaré de venir a leerlo a Forotrenes :lol: .

Suerte!
Saludos

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


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

La dirección #1 que se controla desde la central Lenz corresponde a la dirección #5
Lenz agrupa las direcciones de accesorio DCC en bloques de 4, el primer bloque es el #0 con las direcciones 1,2,3,4 el segundo bloque es el 1 con las direcciones 5,6,7,8 y así sucesivamente
Roco también agrupa las direcciones de accesorio DCC en bloques de 4, pero el primer bloque es el #1 con las direcciones 1,2,3,4
Por ello el decalaje de direcciones, la primera dirección del bloque 1 es la #1 para Lenz y la #5 para Roco (+4)

Por otra parte, el código del decoder de 8 semáforos, tampoco me funciona con Lenz
sucesivamente

Hace tiempo preparé un decoder con Arduino para dos semáforos de 3 luces, el código no es tan elaborado como en el decoder de 8 semáforos (el que lo ha hecho sabe mucho), el más "pedreste" pero he verificado que funciona con ambas centrales, lo podéis ver aquí http://ctms1.com/forum/viewtopic.php?t=4157

¿Alguien ha probado es decoder de 8 accesorios o el TCO con una central que no sea Roco?

Saludos


Desconectado
Mensajes: 255
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
sls_h0e escribió:
Hola

¿Alguien ha probado es decoder de 8 accesorios o el TCO con una central que no sea Roco?

Saludos


Yo le tengo funcionando el decoder de 8 accesorios, semáforos de dos señales, con una central Digikeijs DR5000


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

Sigo a vueltas con el TCO, he retomado el tema que deje parado por falta de tiempo.

He mirado varios sketch's que he encontrado y en todos la posición inicial de los accesorios cuando arrancamos, se obtiene a base de enviarles una orden de cambio de posición, con ello inicializamos los LED y registramos la posición de cada accesorio controlado.

A mi entender lo ideal, sería preguntar a la central el estado de cada accesorio sin tener que enviarle una orden.

Alguien ha trabajado o conoce como hacerlo?

Saludos


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Lo de preguntar a la central el estado de cada accesorio simplemente requiere esperar el 'turno de palabra' en el bus y cursar entonces la pregunta adecuada, escuchando la consecuente respuesta. Y en el siguiente 'turno' se vuelve a preguntar y así. Dependiendo del número de dispositivos XpressNet en el bus y del número de accesorios en el TCO, en unos segundos está resuelto. Multimaus sí 'recuerda' la posición última de cada accesorio, pero no sé si otras centrales también lo harán.

Me parece que un panel que yo hice (el que no terminé, más atrás en este mismo hilo) tardaba unos 10 s en arrancar así (contando desde que daba tensión a la maqueta, lo que incluye el tiempo de inicio de la fuente de alimentación, de la central y el establecimiento del bus XpressNet). Era bonito ver cómo cambiaban las luces del panel poco a poco. El panel no ordenaba, creo, ningún cambio a los accesorios, y confiaba en la 'memoria' de la central.

Ese tiempo depende del número de aparatos en el bus (en mi caso eran 5) y del número de accesorios a preguntar a la central (unos 30 aprox). Supongo que con hacerlo una vez al iniciar el TCO vale, pero tengo la impresión de que a mi no me bastaba, aunque no recuerdo por qué. Supongo que me faltaba 'espiar' en el bus las conversaciones entre la central y los demás dispositivos para que en el panel se reflejaran también los cambios introducidos por ellos, pues sin este 'espionaje' el panel se queda sin actualizar. Mi memoria es muy mala :oops: .

Suerte y nos cuentas!
Última edición por Norber el 29 Jul 2018 09:02, editado 1 vez en total
Saludos

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


Desconectado
Mensajes: 60
Registrado: 24 Abr 2016 20:03
Gracias

Estoy usando la librería xpressnet, lo de escuchar las ordenes que pasan por el bus lo he visto y parece que funciona.
Sigo con ello a ver si puedo leer de la central

Norber, gracias por tu pronta respuesta

Saludos

PS: Estoy usando este sketch como punto de partida partida

/*
XpressNet for Arduino

Showing the funktion of the Library for a Switch control
The circuit:
* LED and resistor attached from pin 13 to ground
* LED and resistor attached from pin 12 to ground (switch staight)
* LED and resistor attached from pin 12 to +5V (switch turn)
* pushbutton attached to pin 2 from +5V and 10K resistor attached to pin 2 from ground

* * Note: on most Arduinos there is already an LED on the board
attached to pin 13.

*/

#include <XpressNet.h>
XpressNetClass XpressNet;

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
byte LedPin = 13;

byte SwitchLedPin = 12; //Signalisiert den Weichenzustand

byte ButtonSPin = 2; //Taster zum Abschalten der Gleisspannung
byte ButtonTurnPin = 3; //Taster zum Abschalten der Gleisspannung

byte lastButtonSState = HIGH; // variable for reading the Button status
byte lastButtonTurnState = HIGH; // variable for reading the Button status

unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
//--------------------------------------------------------------
// XpressNet address: must be in range of 1-31; must be unique. Note that some IDs
// are currently used by default, like 2 for a LH90 or LH100 out of the box, or 30
// for PC interface devices like the XnTCP.
#define XNetAddress 30 //Adresse im XpressNet
#define XNetSRPin 5 //Max485 Busdriver Send/Receive-PIN

#define SwitchAdr 18 //Adresse der Beispielweiche

//--------------------------------------------------------------------------------------------
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(LedPin, OUTPUT);
digitalWrite(LedPin, HIGH);

pinMode(SwitchLedPin, OUTPUT);
digitalWrite(SwitchLedPin, LOW);

pinMode(ButtonSPin, INPUT);
digitalWrite(ButtonSPin, HIGH); //Pull_Up
pinMode(ButtonTurnPin, INPUT);
digitalWrite(ButtonTurnPin, HIGH); //Pull_Up

XpressNet.start(XNetAddress, XNetSRPin); //Initialisierung XNet-Bus
}

//--------------------------------------------------------------------------------------------
// the loop routine runs over and over again forever:
void loop() {
XpressNet.receive(); //permernet update the library

CheckButton(); //check if Button push

//Ask for switch state
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
XpressNet.getTrntInfo(0, SwitchAdr);
}
}

//--------------------------------------------------------------------------------------------
void CheckButton()
{
// read the state of the pushbutton value:
//Gerade
if (digitalRead(ButtonSPin) == LOW && lastButtonSState == HIGH) { //down
lastButtonSState = LOW; //save state
digitalWrite(SwitchLedPin, HIGH);

XpressNet.setTrntPos(0, SwitchAdr, B1000); //switch 18 gerade
}
if (digitalRead(ButtonSPin) == HIGH && lastButtonSState == LOW) { //up
lastButtonSState = HIGH; //save state
}
//Abzweigen
if (digitalRead(ButtonTurnPin) == LOW && lastButtonTurnState == HIGH) { //down
lastButtonTurnState = LOW; //save state
digitalWrite(SwitchLedPin, LOW);

XpressNet.setTrntPos(0, SwitchAdr, B0000); //switch 18 turn
}
if (digitalRead(ButtonTurnPin) == HIGH && lastButtonTurnState == LOW) { //up
lastButtonTurnState = HIGH; //save state
}

}

//--------------------------------------------------------------------------------------------
void notifyTrnt(uint8_t Adr_High, uint8_t Adr_Low, uint8_t Pos)
{
if (Adr_Low == SwitchAdr) {
if (Pos == B10)
digitalWrite(SwitchLedPin, LOW);
if (Pos == B01)
digitalWrite(SwitchLedPin, HIGH);
}
}


//--------------------------------------------------------------------------------------------
void notifyXNetStatus (uint8_t State)
{
digitalWrite(LedPin, State);
}


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Si te fijas, la librería XpressNet de Gathow (supongo que estás usando la de la z21f, que en el fondo es la de Alexander Stewart...) ya 'espía' las conversaciones ajenas sobre accesorios en el bus. No sé si después el chico metió también lo de espiar los comandos para locomotoras, algo que yo no necesité y no modifiqué...

De manera que el TCO sólo requiere, en el arranque (setup) un pequeño bucle que vaya pidiendo información a la central sobre los accesorios a reflejar en el panel. Si la central se acuerda bien de cómo quedaron en la última sesión, no hará falta más. De lo contrario, deberás adoptar el otro método, el de ordenar un cambio al inicio para así estar seguro de que el panel trabaja a partir de un estado inicial cierto.
Saludos

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


Desconectado
Mensajes: 630
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
sls_h0e escribió:
...lo de escuchar las ordenes que pasan por el bus lo he visto y parece que funciona.
(...)
PS: Estoy usando este sketch como punto de partida


He visto el programa, y la manera de saber si ha cambiado el desvío para reflejarlo después en el panel no es a la que yo me refiero con lo de 'espiar'. En ese programa que muestras el Arduino está preguntando incesantemente a la central por el estado de un determinado accesorio. Aunque funciona, no es lo que yo quiero decir.

Lo que yo sugiero es 'escuchar' permanentemente los mensajes que circulan en el bus, aunque pertenezcan a la 'conversación' entre la central y otro dispositivo XpressNet que no sea el panel y, cuando éstos vengan encabezados por el código de cambio de accesorio, entonces hacerles caso y, si el accesorio pertenece a tu panel, reflejar en él el cambio.

Así funciona en la z21f respecto de los accesorios, y por eso, cuando alguien mueve un desvío de la maqueta, en la aplicación del móvil se ve ese cambio también, no porque la interface esté preguntando a la central continuamente si ha habido cambio, sino porque la interface 'está al loro' y oye conversaciones ajenas (la que involucró ese cambio que alguien hizo...)
Saludos

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


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

Lo que explicas funciona, la función "notifyTrnt" al final del código se ejecuta cada vez que se detecta en el bus una orden de accesorio, a partir de eso se detecta un cambio tras una orden enviada desde cualquier "mando" conectado al bus, con eso se ha de filtrar y actualizar el TCO según convenga

Sigo buscando para leer de la central.

Saludos

AnteriorSiguiente

Volver a Digital, Electricidad e Informática

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