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.