LOCODUINO

Discussions Générales => Bus DCC => Discussion démarrée par: jpjcb66 le mai 06, 2016, 06:17:40 pm

Titre: Décodeur années 2k
Posté par: jpjcb66 le mai 06, 2016, 06:17:40 pm
Bonsoir à tous,
Petit problème qui ne date pas d'aujourd'hui :
Avec les boosters Roco 10761 ou 4 le décodeur équipant une machine achetée en 2003 fontionne normalement ( logique c'est un kit Roco) encore que je ne parvienne pas à programmer autre chose que l'adresse machine. Avec ces mêmes boosters un décodeur acheté récemment pour équiper ma 150 vapeur, tout se passe bien également.

Par contre en utilisant la version light du sketch "CmdrArduino_minimum.ino" associé à la librairie "CmdrArduino-master" le décodeur des années 2000 ne répond qu'à la commande d'éclairage de la loco ; walou pour le moteur. Alors que le décodeur LockSound V4.0 fonctionne parfaitement, lumière et moteur dans les deux sens.

J'ai changé de canal de 1 à 3, ça ne bouge pas. Les trames générées par la librairie citée plus haut seraient-elles différentes des trames Roco ?
Quelqu'un aurait-il une idée ? Merci...  :)

/********************
* Creates a minimum DCC command station from a potentiometer connected to analog pin 0,
* and a button connected to ground on one end and digital pin 4 on the other end. See this link
* http://www.arduino.cc/en/Tutorial/AnalogInput
* The DCC waveform is output on Pin 9, and is suitable for connection to an LMD18200-based booster directly,
* or to a single-ended-to-differential driver, to connect with most other kinds of boosters.
* The Differential DCC waveform is output on Pins 9 and 10.
********************/

#include <DCCPacket.h>
#include <DCCPacketQueue.h>
#include <DCCPacketScheduler.h>


DCCPacketScheduler dps;
unsigned int analog_value;
char speed_byte, old_speed = 0;
byte count = 0;
byte prev_state = 1;
byte F0 = 0;

void setup() {
  Serial.begin(115200);
  dps.setup();

  //set up button on pin 4
  pinMode(4, INPUT);
  digitalWrite(4, HIGH); //activate built-in pull-up resistor 
}

void loop() {
  //handle reading button, controls F0
  byte button_state = digitalRead(4); //high == not pushed; low == pushed
  if(button_state && (button_state != prev_state))
  {
    //toggle!
    F0 ^= 1;
    Serial.println(F0,BIN);
    dps.setFunctions0to4(3,DCC_SHORT_ADDRESS,F0);
  }
  prev_state = button_state;
 
//        vitesse  ======================================
  //handle reading throttle
  analog_value = analogRead(A1);
  speed_byte = (analog_value >> 2)-127 ; //divide by four to take a 0-1023 range number and make it 1-126 range.
  if(speed_byte != old_speed)
  {
    if(speed_byte == 0) //this would be treated as an e-stop!
    {
      if(old_speed > 0) speed_byte = 1;
      else speed_byte = -1;
    }
    Serial.print("analog = ");
    Serial.println(analog_value, DEC);
    Serial.print("digital = ");
    Serial.println(speed_byte, DEC);
    dps.setSpeed128(3,DCC_SHORT_ADDRESS,speed_byte);
    old_speed = speed_byte;
  }
  dps.update();
 
  ++count;
}

Titre: Re : Décodeur années 2k
Posté par: Jean-Luc le mai 06, 2016, 11:59:46 pm
Perso je brancherais un espion DCC (voir l'article de Dominique à ce sujet : http://www.locoduino.org/spip.php?article39) pour voir ce que les centrale Roco ont dans le ventre.
Titre: Re : Décodeur années 2k
Posté par: jpjcb66 le mai 07, 2016, 07:45:29 am
Ok, merci J-Luc, je vais essayer ça si je trouve un optocoupleur adequat dans mes fonds de tiroirs.
Mais c'est le decodeur Roco qui fait le difficile, il a quand même au moins 15 ans.
@+
Titre: Re : Décodeur années 2k
Posté par: Jean-Luc le mai 07, 2016, 08:15:37 am
Oui mais si le décodeur Roco marche avec la centrale Roco, c'est que cette dernière lui murmure des mots doux qui sont absents du vocabulaire de Cmdr_arduino  :)

Tu n'as pas le 6N137 de la carte servos ?
Titre: Re : Décodeur années 2k
Posté par: jpjcb66 le mai 07, 2016, 09:24:11 am
Oui j'ai bien compris mais déjà ça part de travers vu que je n'arrive pas à programmer autre chose que l'adresse loco dans ce décodeur antédiluvien. Ca sent le decodeur neuf tout ça !...
Affirm, j'ai bien le 6N137 de la carte servos, mais j'ai retrouvé aussi des CNY17-2 donc ça devrait le faire vu qu'il fait un temps degueu ici.
Titre: Re : Re : Décodeur années 2k
Posté par: Jean-Luc le mai 07, 2016, 10:19:38 am
Affirm, j'ai bien le 6N137 de la carte servos, mais j'ai retrouvé aussi des CNY17-2 donc ça devrait le faire vu qu'il fait un temps degueu ici.

Oui mais non. L'important est que les temps de propagation dans les deux sens de commutation soient égaux ou presque. Le 6N137 de très bonnes caractéristiques dynamiques avec des temps de propagation égaux de 45ns.

Le CNY17-2 est complètement dissymétrique avec 4,2µs et 23µs (une différence comparable à la durée d'un bit DCC) et très lent
Titre: Re : Décodeur années 2k
Posté par: jpjcb66 le mai 07, 2016, 10:53:14 am
Voilà, j'ai piqué celui de la carte servos et ça donne ça :

Total Packet Count: 103
Idle Packet Count:  52
Longest Preamble:  49
Count    Packet_Data
52       11111111 00000000 11111111
47       00000011 01100011 01100000
4        00000011 10010000 10010011
============================================
Déjà on y voit plus clair puisque le bit lumière est à 1  :D :D :D
L'adresse est bien 3 le sens est juste et la vitesse correcte elle évolue, après je ne saurai voir les fameux mots doux...
Je vais comparer avec  ce que sort l'arduino.......................

Le mystère s'épaissit !
Avec l'arduino DCC le vieux décodeur accepte toujours allumage extinction lumière, pas de moteur
Le nouveau adresse 2 fonctionne comme il faut et tout ça sans trames visibles .
============================================
Total Packet Count: 0
Idle Packet Count:  0
Longest Preamble:  0
Count    Packet_Data
============================================

Je vais sortir l'oscillo..........

Au temps ou autant pour moi suivant les goûts ! Le montage avec l'opto a un comportement étrange. Faut mettre les doigts sur le + et - pour qu'il détecte.

============================================ ARDUINO  adr 2
Total Packet Count: 4
Idle Packet Count:  3
Longest Preamble:  23
Count    Packet_Data
3        11111111 00000000 11111111
1        00000010 00111111 00111011 00000110
============================================
============================================ ARDUINO adr 3
Total Packet Count: 8
Idle Packet Count:  6
Longest Preamble:  23
Count    Packet_Data
1        00000010 00111111 00111011 00000110
6        11111111 00000000 11111111
1        00000010 00111111 00111110 00000011
============================================

Ca m'a l'air un peu lent tout ça, 8 paquets !!!?......................

Avec une petite capa entres bornes 5 et 8 de l'opto ça va mieux

Total Packet Count: 34
Idle Packet Count:  17
Longest Preamble:  226
Count    Packet_Data
4        00000011 00111111 00110101 00001001
17       11111111 00000000 11111111
6        00000011 00111111 00110100 00001000
1        00000011 10010000 10010011
3        00000011 00111111 00110011 00001111
1        00000011 00111111 00110010 00001110
2        00000011 00111111 00110110 00001010
============================================

On voit à la 4eme ligne la mise à 1 de la lumière.
On voit aussi sur un autre prélèvement les vitesses varier mais la loco 3 ne bouge pas .
Bon je vais me reposer les yeux, ça agace au bout d'un moment quand on ne maitrise pas.