mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-23 08:06:13 +01:00
Reset track signal when leaving PWM and use port registers in DC mode as well
This commit is contained in:
parent
79ef114c0d
commit
867e3b3930
|
@ -119,11 +119,17 @@ void TrackManager::setPROGSignal( bool on) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrackManager::setDCSignal(int16_t cab, byte speedbyte) {
|
void TrackManager::setDCSignal(int16_t cab, byte speedbyte) {
|
||||||
|
HAVE_PORTA(fakePORTA=PORTA);
|
||||||
|
HAVE_PORTB(fakePORTB=PORTB);
|
||||||
|
HAVE_PORTC(fakePORTC=PORTC);
|
||||||
FOR_EACH_TRACK(t) {
|
FOR_EACH_TRACK(t) {
|
||||||
if (trackDCAddr[t]!=cab) continue;
|
if (trackDCAddr[t]!=cab) continue;
|
||||||
if (trackMode[t]==TRACK_MODE_DC) track[t]->setDCSignal(speedbyte);
|
if (trackMode[t]==TRACK_MODE_DC) track[t]->setDCSignal(speedbyte);
|
||||||
else if (trackMode[t]==TRACK_MODE_DCX) track[t]->setDCSignal(speedbyte ^ 128);
|
else if (trackMode[t]==TRACK_MODE_DCX) track[t]->setDCSignal(speedbyte ^ 128);
|
||||||
}
|
}
|
||||||
|
HAVE_PORTA(PORTA=fakePORTA);
|
||||||
|
HAVE_PORTB(PORTB=fakePORTB);
|
||||||
|
HAVE_PORTC(PORTC=fakePORTC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,8 +167,9 @@ bool TrackManager::setTrackMode(byte trackToSet, TRACK_MODE mode, int16_t dcAddr
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// DCC tracks need to have the brake set off or they will not work.
|
// DCC tracks need to have set the PWM to zero or they will not work.
|
||||||
track[trackToSet]->setBrake(false);
|
// 128 is speed=0 and dir=0
|
||||||
|
track[trackToSet]->setDCSignal(128);
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXT is a special case where the signal pin is
|
// EXT is a special case where the signal pin is
|
||||||
|
|
Loading…
Reference in New Issue
Block a user