Índice general Foros Digital, Electricidad e Informática Descodificador DCC para 8 señales con Arduino

Descodificador DCC para 8 señales con Arduino

Moderador: 241-2001



Desconectado
Mensajes: 2185
Registrado: 21 Mar 2014 12:52
Hola.
Sólo un apunte, si la línea común de los dispositivos, la que se pone a positivo o negativo a través de jumper de Haute, la llevásemos a A6 o A7 y configuramos esta línea en entrada, podremos saber en el código que estamos queriendo hacer y "automodificar" el código adecuadamente.

Es sólo una idea.

Un saludo.


Desconectado
Mensajes: 43
Registrado: 11 Feb 2014 09:47
El Matao escribió:
Hola.
Sólo un apunte, si la línea común de los dispositivos, la que se pone a positivo o negativo a través de jumper de Haute, la llevásemos a A6 o A7 y configuramos esta línea en entrada, podremos saber en el código que estamos queriendo hacer y "automodificar" el código adecuadamente.

Es sólo una idea.

Un saludo.

Si esa idea ya la comente en post anteriores. Pero bueno, de momento con saber que sketch subir nos vale, total, para cambiar las address hay que programar igualmente.
Los pines a6 y a7 solo se pueden usar como entradas, eso tengo entendido.


Desconectado
Mensajes: 262
Registrado: 28 Oct 2015 09:35
Hola
Quería implementar este programa en un Arduino Mega, es posible?
He configurado las salidas para el Arduino Mega, la duda que tengo es la entrada.
Un saludo.


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
La entrada es única, la señal DCC. Aparentemente en el pin2 también. No lo he probado.
Saludos

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


Desconectado
Mensajes: 262
Registrado: 28 Oct 2015 09:35
Hola
Lo he intentado y sin éxito. Puede haber un problema ya que en el Nano utilizamos la INT 0 y en el Mega es la INT 4, no sé, si puede haber más diferencia por el uso de las librerías.
He probado a modificar esta línea attachInterrupt (0, dcc_int, CHANGE); he cambiado el 0 por el 4 para que hiciera referencia a la INT4 que es la del Mega, pero sin éxito, dentro de lo que puedo entender
Espero vuestra ayuda, muchas gracias.


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Parece que era como yo decía: si has cableado la entrada DCC desde el optoacoplador al pin2 del Arduino Mega, entonces debes seguir usando la interrupción 0 como en el código original.

Arduino_interrupts.png
Saludos

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


Desconectado
Mensajes: 262
Registrado: 28 Oct 2015 09:35
Hola, efectivamente eso es correcto, pero tengo ahora mi duda,
Cuando hablamos del pin2 es el pin físico o el que viene serigrafiado en la placa?
Esto bien porque la documentación que tengo sobre la conexiones del Mega es la que puedes ver en la foto, es decir:
.-pin2 físico según el esquema corresponde a PCINT8
.-pin2 serigrafía corresponde a INT4
.- y la interrupción INT0 corresponde al pin físico 43 y serigrafiado21
Ahora estoy perdido.
Adjuntos
Mega.PNG
Mega.PNG (77.67 KiB) Visto 5862 veces


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
En efecto, es muy confuso. Prueba entonces en el pin serigrafiado como '21 SCL' a ver si fuera ese. Desde luego se trata de usar la interrupción 'INT0'. Ya nos contarás. Suerte.
Saludos

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


Desconectado
Mensajes: 262
Registrado: 28 Oct 2015 09:35
Hola, al final de muchas pruebas no he podido hacer funcionar el Mega.
La señal DCC esta en el pin2 (serigrafía del Mega).

He monitorizado la señal de ambas placas y la lectura es algo diferente, en el caso del Nano cuando conectamos el multimaus empieza con una cadena de 000 y a los segundos aparece una numeración la cual es diferencie al Mega, aparte no aparece la cadena inicial de ceros (tiene salto a la hora de la lectura, esto es algo visual) , entiendo que la lectura no la esta haciendo correctamente.

Hasta qui lo que puedo entender de mi poco conocimiento de programación, si me podéis comentar por donde puedo seguir trabajando seguiría haciendo pruebas.
Un saludo.


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Pablob escribió:
Hola, al final de muchas pruebas no he podido hacer funcionar el Mega.
La señal DCC esta en el pin2 (serigrafía del Mega).

Entonces debes usar la 'interrupción 4'

Y otra cosa: el micro controlador no es el mismo y aunque tiene muchos registros coincidentes con el del Arduino Uno/Mini/Nano, resulta que el pin serigrafiado con el número 2 no está en el puerto D (PD2) sino en el puerto E (PE4). Así que quizá funcione si haces estos cambios (busca las líneas correspondientes y prueba lo que te indico:

Busca:
attachInterrupt(0, dcc_int, CHANGE);

y cambia por:
attachInterrupt(4, dcc_int, CHANGE);


Busca:
if (PIND & (0x04)) TCNT0 = 0;

y cambia por:
if (PINE & (0x10)) TCNT0 = 0;


Y ya nos dirás. Te indico lo anterior totalmente a ciegas, pues nunca he trasteado con un Mega 2650.
Saludos

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


Desconectado
Mensajes: 262
Registrado: 28 Oct 2015 09:35
Hola Norber.
He realizado los cambios que mes has comentado y ya consigo conectarme al Mega, y
poner un pin en nivel alto o bajo.

Desgraciadamente no va muy fino ya que en algunas ocasiones cuando inicializa puede tardar unos cuantos, cuantos, segundo en coger comunicación (tengo la centralita aislada para estas pruebas), y otra cosa que me ocurre, es que al intentar aislar todas las rutinas relacionadas con el apagado lento de los led (en el caso del Nano no me pasa), el Arduino deja de funcionar.
Sigo trabajando, si me puedes seguir orientado….
Muchas gracias, un saludo.


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
He realizado los cambios que mes has comentado y ya consigo conectarme al Mega, y
poner un pin en nivel alto o bajo.

No estoy seguro de entenderte. ¿Quieres decir que ya consigues el cambio del pin mediante comandos DCC?

al intentar aislar todas las rutinas relacionadas con el apagado lento de los led (en el caso del Nano no me pasa), el Arduino deja de funcionar.

Como ya has visto el código es tan sumamente breve porque no usamos código de otras personas y lo hacemos todo desde cero, buscando optimizar al 100% los recursos del microcontrolador. Es por lo que programamos a nivel muy bajo, accediendo siempre que podemos a las prestaciones de los micros directamente, manipulando sus registros sin usar instrucciones de alto nivel. La contrapartida es que al cambiar de micro controlador, es decir, al pasar del AVR 328P de los Arduinos pequeños al 2560 del Mega, hay que revisar escrupulosamente toda esa programación. Puedes intentarlo comparando los manuales de instrucciones de cada uno de los micro controladores, disponibles online en la web de Atmel.

He encargado un Arduino Mega. Cuando me llegue podré enredar yo.
Comprado por Bangood que no me dice de dónde viene (o no he sabido verlo), así que ni idea de cuánto tardará.
Saludos

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


Desconectado
Mensajes: 262
Registrado: 28 Oct 2015 09:35
Si, he conseguido cambiar el estado del pin, ahora estoy trabajando desde el pin 22 al 39.
Al final solo he tenido que modificar esta línea del programa:

if (PINE & (0x10)) TCNT0 = 0;

Al final la interrupción sigue siendo 0.
He indicar los nuevos pines de salida:

for (int i = 22; i < 40; i++) { // nuevos pines de salida

Estudiando un poco el tema de las interrupciones, los compañeros utilizan estas instrucciones evitando posibles errores, lo he probado y funciona igual:
Añadimos estas dos lineas

#define NOT_AN_INTERRUPT -1
const byte interruptPin = 2; // pin entrada DCC

y cambiamos

pinMode(DCC_INT, INPUT); // la cambiamos por
pinMode(interruptPin, INPUT_PULLUP);

attachInterrupt(0, dcc_int, CHANGE); // la cambiamos por
attachInterrupt(digitalPinToInterrupt(interruptPin),dcc_int, CHANGE);

y eliminamos

#define DCC_INT 2

Estos cambios son viendo documentación sobre el tema.
Lógicamente siempre hay que tenerlo en cuenta. La gente de Bangood son bastante serios, los envío suelen tardar un par de semanas y sin problema, por mi parte de momento. Ya nos contarás cuando lo tengas haber si podemos afinar un poco mas el
tema.
Un saludo


Desconectado
Mensajes: 26
Registrado: 02 Ene 2016 23:53
DISCULPAD MI ATREVIMIENTO Y SEGURAMENTE MI IGNORANCIA HE VISTO EN EL SKETCH QUE SE UTILIZA LA DIRECCION
#DEFINE ADR_MNAUS_09 137 PIN-V 20 Y PIN -- 21. SI SE UTILIZA PARA 8 SEÑALES, BAJO MI IGNORANCIA HAY UNA DIRECCION Y
2 PINES QUE NO LO VEO, IMAGINO QUE SERA PARA LA PROGRAMACION PUES NO SOY EXPERTO NI MUCHO MENOS.¿SI ESTOY
EN LO CIERTO LA DIRECCION 09 137 SE PIERDE PARA LOS SIGUIENTES ACCESORIOS?.

ME MARAVILLO DE VUESTRA INTELIGENCIA Y LA MANERA DE COMPARTIRLA TAN GENEROSAMENTE.
SALUDOS
Saludos
Santiago


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Gracias por tu amable comentario.

En efecto, tienes razón. Son 8 señales luego se deben programar 8 direcciones. Las líneas que se refieren a la novena sobran. Un despiste! :)
Y si se programara la novena dirección no pasaría nada. Puede considerarse que a pesar de programarla sigue todavía libre para usarse en otro descodificador de accesorios.
Saludos

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


Desconectado
Mensajes: 26
Registrado: 02 Ene 2016 23:53
Muchisimas gracias Norber.
Puestos a rizar el rizo,¿se podrían utilizar 4 direcciones por cada señal? para accionar señales de 4 aspectos
transformando el nano en vez de para 8 para 4 señales.

Saludos
Santiago
Saludos
Santiago


Conectado
Mensajes: 751
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Podría intentar hacerlo y quizá no fuera demasiado complicado, pero necesito que alguien me diga exactamente qué es lo que hay que conseguir: qué dirección controla qué luz o qué combinaciones o aspectos según qué direcciones, etc.
Saludos

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


Desconectado
Mensajes: 26
Registrado: 02 Ene 2016 23:53
Disculpa ha habido un error.
Son señales de 3 aspectos (verde, amarillo, rojo) con 4 ordenes en este orden:
Dirección 1 rojo (parada).
Dirección 2 verde (vía libre).
Dirección 3 amarillo (anuncio de parada).
Dirección 4 amarillo-verde (anuncio de precaución).
Fijate que las direcciones 1 y 3 son mas restrictivas que la 2 y 4.
Te comento esto por que tengo un decodificador de compra configurado así pero con el precio que me costo
el decodificador + las cuatro señales se va de madre.

Saludos
Santiago
Saludos
Santiago


Desconectado
Mensajes: 26
Registrado: 02 Ene 2016 23:53
Perdona pero he tenido otro lapsus, a ver si ahora si.
Por ejemplo señal de entrada E1:
Dirección del decoder 1
Posición del pulsador 1 (rojo) pin 3
Posición del pulsador 0 (verde) pin 4
Dirección del decoder 2
Posición del pulsador 1 (amarillo) pin 5
Posición del pulsador 0 (amarillo-verde) P I N E S 5 Y 4

Serian 2 direcciones por 4 señales = 8 direcciones
Serian 3 pines por 4 señales = 12 pines
En tu programa por ejemplo se tendrían que modificar las direcciones pares para que en vez de rojo y verde
dieran amarillo y amarillo-verde.

Saludos
Santiago
Saludos
Santiago


Desconectado
Mensajes: 557
Registrado: 03 Ene 2011 14:28
No soy experto en el tema de señales pero seria interesante tener señales de 4 aspectos y 6 opciones de iluminación

* Verde
* amarillo
* Rojo
* verde + amarillo
* blanco + rojo
* blanco

Aqui un link https://es.wikipedia.org/wiki/Se%C3%B1a ... erroviaria

Aqui una tabla (extraida del mismo link)

aspectos señales.png

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