Auteur Sujet: Logiciel DCC BaseStation avec fonction RailCom  (Lu 219 fois)

lebelge2

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Logiciel DCC BaseStation avec fonction RailCom
« le: mai 09, 2024, 02:08:47 pm »
Bonjour.

J’ai modifié légèrement ce logiciel pour qu’il insère un CutOut  à la fin des trames.
Donc maintenant compatible RailCom.

Fonctionne sur Mega et Uno.

Dans DCCpp_Uno, chercher l’interruption :  ISR(TIMER1_COMPB_vect)  (Ligne 457)
Remplacer la par le code  ci-dessous.

///////////////////////////////////////////////////////////////////////////////
// NOW USE THE ABOVE MACRO TO CREATE THE CODE FOR EACH INTERRUPT

/* Suivant votre configuration matériel, modifier les Ports et Pins
 *  Dans cet example, L298N et L6203 entrées, IN1=>PB5 =>11.  IN2=>PB7=>13 (Mega)
 *  LMD18200 entrée DIR=>PB6=>12.  Brake=>PB4=>10 (Mega)
 *  Ne pas omettre les Pins en sorties.
*/
bool EndBit;
bool CutOut;
ISR(TIMER1_COMPB_vect) {
  if (CutOut == false) {
    PORTB = PORTB | B10000000;               // PB7 IN1 niveau haut
    PORTB = PORTB &= ~ B00100000;            // PB5 IN2 niveau bas
  } else                                     // CutOut:
    PORTB = PORTB | B10110000;               // IN1, IN2 et Brake (PB4)niveau haut
  DCC_SIGNAL(mainRegs, 1);                   // Vers chargement du timer1
  if (mainRegs.currentBit == 2) {            // Fin Bit Stop
    OCR1B = 450;                             // Le Bit suivant aura un niveau bas de 30µs,
    OCR1A = 7107;                            // puis un niveau haut de 418µs.
    EndBit = true;                           // Validation
  }
}

ISR(TIMER1_COMPA_vect) {
  PORTB = PORTB &= ~ B10000000;              // PB7 IN1 niveau bas
  PORTB = PORTB | B00100000;                 // PB5 IN2 niveau haut
  if (CutOut == true) {
    PORTB = PORTB &= ~ B10110000;            // Fin CutOut, pins IN1, IN2, Brake (PB4) niveaux bas
    EndBit = false;
    CutOut = false;
  }
  if (EndBit == true)
    CutOut = true;
}

Il faut activer la nouvelle interruption. (ISR(TIMER1_COMPA_vect))
A la ligne 309, écrivez :   bitSet(TIMSK1,OCIE1A);   

Testé avec Mega, Uno et L298N, doit fonctionner avec L6203
Je viens de recevoir un LMD18200 mais il est défectueux, pas testé

Bien à vous.


« Modifié: mai 12, 2024, 07:24:13 pm par lebelge2 »

lebelge2

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Logiciel DCC BaseStation avec fonction RailCom
« Réponse #1 le: mai 10, 2024, 10:12:29 am »
Bonjour.
Noter que le code ci-dessus peut-être transcrit dans la librairie « La Box » pour compatibilité RailCom.
Il faudra quand même  une légère modification matériel.

« Modifié: mai 10, 2024, 11:57:03 am par lebelge2 »