Índice general Foros Digital, Electricidad e Informática Retromódulos S88 con Arduino

Retromódulos S88 con Arduino

Moderador: 241-2001



Desconectado
Mensajes: 18
Ubicación: Argentina
Registrado: 03 Jun 2019 03:16
Gracias Norber!!!!

Ya mismo y luego de finalizar tarea remota (llevamos 18 días de aislamiento y viene para largo) me pondré a hacer el negativo para la fabricación de los impresos.

Gracias Norber. Gracias Foro!

Claudio


Desconectado
Mensajes: 18
Ubicación: Argentina
Registrado: 03 Jun 2019 03:16
Hola!! Comento que he montado dos placas de retromódulos con Arduino diseñadas por Norber y funcionan espectacularmente. Lo que no deduzco: ¿Cual es la función del LED conectado a PD7 (pin 7) del Arduino? No entiendo mucho de C++ y no veo programado ese pin.
Muchas gracias.
Saludos.


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
Basándome en todo lo aportado en este hilo, hoy me han llegado las PCB para montarlo, contemplando los puentes rectificadores en vez de los diodos.

Adjunto una foto, a falta de montar los componentes, que aún no me han llegado
Adjuntos
Retromódulos.jpg
Última edición por Pecetero el 26 May 2020 09:58, editado 2 veces en total


Desconectado
Mensajes: 670
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Tren_Argentino escribió:
...Lo que no deduzco: ¿Cual es la función del LED conectado a PD7 (pin 7) del Arduino? No entiendo mucho de C++ y no veo programado ese pin...


Pues lo puse en la placa por la razón más tonta de todas: ¡¡¡ porque cabía!!! :lol:

No sé qué utilidad se le puede dar, pero ahí está, y si se programa algo en el Arduino pues tendremos una señal visual que puede resultar interesante. Por ejemplo, se puede programar que brille cada vez que algún detector de consumo vea algo ¿no? No sabríamos qué detector ha sentido el consumo, pero sí sabríamos que alguna detección se ha producido... ¿Sería útil eso?
Saludos

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


Desconectado
Mensajes: 670
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Probad alguno con este código, por favor, a ver si se enciende 2 s el led al iniciar, y luego si es sensible a las detecciones (debería lucir cuando alguno de los 12 detectores de consumo vea algo, y apagarse si están todos sin consumo). No lo he compilado ni probado. Avisad de lo que esté mal y se intenta arreglar. Gracias.

 12 occupancy sensors (activated when the pins are connected to GND):
   Pin 7 es LED en placa
   Pins 8 to 13   (six first sensors)
   Pins A0 to A5  (six last sensors)
 */

#define NUM_S88   0           // Number assigned to the first sensor reported from this feedback module
#define CLOCK     3           // Connect S88 CLOCK signal to Arduino pin3  - don't change this
#define LOAD_PS   4           // Connect S88 LOAD_PS signal to Arduino pin4
#define DATA_IN   5           // Connect S88 DATA from next S88 feedback module to Arduino pin 5
#define DATA_OUT  6           // Output DATA to next S88 feedback module or the PC interface to Arduino pin6
#define LED 7


void setup() {
  pinMode(LOAD_PS, INPUT);
  pinMode(CLOCK, INPUT);
  pinMode(DATA_IN, INPUT);
  pinMode(DATA_OUT, OUTPUT);
  digitalWrite(DATA_OUT, LOW);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  for (int i = 8; i < 20; i++) {
    pinMode(i, INPUT_PULLUP);
  }
  delay(2000);
  digitalWrite(LED, LOW);
  attachInterrupt(1, clockS88, RISING);                      // pin3 = CLOCK    externalInterrupt 1
}

void clockS88()  {                                           // Rising edge CLOCK signal interruption
  static byte cont;
  static int data;
  if (PIND & (1 << LOAD_PS)) {                               // Let's load my sensors info
    data = ~(((PINC & 0x3F)<<6) + (PINB & 0x3F));            // Load my sensors in 'data' (6 lowest bits of B and C ports)
    data = data & 0x0FFF;
    if (data) digitalWrite(LED, HIGH);
    else digitalWrite(LED, LOW);
    cont = 0;                                                // Start counter of data transmited
  }
  if (cont == NUM_S88) {                                     // Our turn: let's empty / shift / fill 'data'
    if (data & 0x01) PORTD |= (1<< DATA_OUT);                // Put in DATA_OUT the state of bit 'data0'
    else PORTD &= ~(1 << DATA_OUT);             
    data = data >> 1;                                        // Prepare (shift) 'data' for the next cycle   
    if (PIND & (1 << DATA_IN)) data = data | 0x0800;         // Put DATA_IN value in bit 'data11'
    }
  else {                                                     // Not yet our turn: just pass from IN to OUT
    if (PIND & (1<< DATA_IN)) PORTD |= (1 << DATA_OUT);      // Put in DATA_OUT the value of DATA_IN
    else PORTD &= ~(1 << DATA_OUT);                         
    cont++;                                                  // Update counter to continue waiting
  }
}

void loop() {
}
Saludos

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


Desconectado
Mensajes: 18
Ubicación: Argentina
Registrado: 03 Jun 2019 03:16
Gracias! Estoy es eso... Animándome a programar algo.


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
Estoy intentando que me funcione el Sketch al que se hace referencia en el primer post, pero estoy usando el Arduino Nano y me encuentro con el Pin 13 no se puede usar como Input, o yo no soy capaz, y siempre está activado el sensor 6.
Que habría que modificar en ese Sketch para que sea válido en el Nano.

Gracias y saludos.


Desconectado
Mensajes: 18
Ubicación: Argentina
Registrado: 03 Jun 2019 03:16
Yo lo solucioné drásticamente... Seguí la pista impresa y levanté la resistencia que limítate corriente del LED. Es fácil y no iba a desperdiciar un PIN. Saludos.


Desconectado
Mensajes: 18
Ubicación: Argentina
Registrado: 03 Jun 2019 03:16
Tren_Argentino escribió:
Yo lo solucioné drásticamente... Seguí la pista impresa y levanté la resistencia que limíta la corriente del LED. Es fácil y no iba a desperdiciar un PIN. Saludos.


Desconectado
Mensajes: 468
Registrado: 07 Oct 2008 21:26
Si,se debe a esa resistencia. El pin 13 tiene conectado un LED con su resistencia de proteccion, en serie con la salida del pin, de hecho ese pin siemprecda algo menos de tension que otros. Cuando se usa como imput esa resistencia tambien hace caer la tension de la entrada, aunque muy poco por lo que no suele dar problemas SALVO que se active, como pasa en el sketch, la resistencia de pullup interna, en este caso la combinacion de las resistencias y el led hace que la entrada este siempre baja.
Una solucion menos "drastica" es no activar el pullup interno para el pin 13 y poner una externa de menor valor que la interna.
De todas formas en las ultimas revisiones de la placa arduino, el led se implenta de otra forma y no deberia dar este problema , pero las placas clonicas, solo el fabricante sabe como estan hechas.


Desconectado
Mensajes: 18
Ubicación: Argentina
Registrado: 03 Jun 2019 03:16
Exacto, RENFE 26, yo lo hice por desconocimiento. Mi placa el china, un clon.


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
Tren_Argentino escribió:
Yo lo solucioné drásticamente... Seguí la pista impresa y levanté la resistencia que limítate corriente del LED. Es fácil y no iba a desperdiciar un PIN. Saludos.


Puedes subir una foto donde se pueda ver la ubicación de esa resistencia?


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
Otra consulta ....

Cuando se activan los sensores, ¿permanecen encendidos fijos o hacen pequeñas fluctuaciones?


Desconectado
Mensajes: 468
Registrado: 07 Oct 2008 21:26
Mientras hay consumo estaran encendidos, si hay mal contacto loco/via puede haber fluctuaciones cuando la loco no hace contacto. Este problema es comun a todos los detectores de consumo y por ello los softwares de control permiten introducir un valor de retardo de desactivacion del sensor para evitar liberaciones falsas de cantones. Si las necesidades son otras tal vez se podria modificar el sketch para que introdujera ese retardo.


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
renfe276 escribió:
Mientras hay consumo estaran encendidos, si hay mal contacto loco/via puede haber fluctuaciones cuando la loco no hace contacto. Este problema es comun a todos los detectores de consumo y por ello los softwares de control permiten introducir un valor de retardo de desactivacion del sensor para evitar liberaciones falsas de cantones. Si las necesidades son otras tal vez se podria modificar el sketch para que introdujera ese retardo.


Muchas gracias por tu respuesta.
La fluctuación no es por falsos contactos sino por la ejecución del Sketch, pero ya lo he solucionado con el software de gestión, que es RocRail, temporizando 100 ms. la señal del sensor.


Desconectado
Mensajes: 670
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
¿Fluctuación por ejecución del sketch?
No la hemos observado nunca
¿Podrías detallar en qué situación?
Gracias
Saludos

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


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
Adjunto un vídeo donde se aprecia la fluctuación (hay que cambiarle la extensión .ZIP por .MP4

Eso se produce con una locomotora situada en el bloque que alimenta uno de los sensores y ocurre con todos igual.
Mirando la señal en la central, es estable y no varía.
Adjuntos
S88 fluctuacion.zip
(2.22 MiB) 35 veces


Desconectado
Mensajes: 670
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
En el vídeo se ve parte de la pantalla de un ordenador y un esquema simple donde un sensor de ocupación parpadea irregularmente. Es poca información para poder entender lo que pasa.

Pecetero escribió:
Mirando la señal en la central, es estable y no varía.

Entonces ¿no podríamos estar ante una anomalía causada por la interface entre el S88 y el ordenador?
Para verificarlo habría que conectar algún otro tipo de retromódulo a la misma interface y ver si se produce parpadeo o no.
Saludos

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


Desconectado
Mensajes: 670
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
renfe276 escribió:
...no suele dar problemas SALVO que se active, como pasa en el sketch, la resistencia de pullup interna, en este caso la combinacion de las resistencias y el led hace que la entrada este siempre baja...


Es cierto. En uno de mis retromódulos eliminé la resistencia del led del pin13, y en el otro le machaqué simplemente el led, en ambos casos con la punta de un destornillador y mirando con una lupa. Pero no me ha pasado con todos los Arduinos, solo con los Nanos. Al Arduino Uno con el que hice el primer prototipo no recuerdo que le ocurriera esto.
Saludos

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


Desconectado
Mensajes: 311
Ubicación: Madrid
Registrado: 05 Ene 2017 11:09
Norber escribió:
En el vídeo se ve parte de la pantalla de un ordenador y un esquema simple donde un sensor de ocupación parpadea irregularmente. Es poca información para poder entender lo que pasa.

Pecetero escribió:
Mirando la señal en la central, es estable y no varía.

Entonces ¿no podríamos estar ante una anomalía causada por la interface entre el S88 y el ordenador?
Para verificarlo habría que conectar algún otro tipo de retromódulo a la misma interface y ver si se produce parpadeo o no.



Tengo dos módulos Digikeijs DR4088 y con ellos no existe esa fluctuación

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