mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-22 23:56:13 +01:00
Ack current setable by debug statement D ACK LIMIT n
This commit is contained in:
parent
3f06fb08df
commit
1c2df3fe22
|
@ -47,6 +47,7 @@ const int HASH_KEYWORD_DCC = 6436;
|
||||||
const int HASH_KEYWORD_SLOW = -17209;
|
const int HASH_KEYWORD_SLOW = -17209;
|
||||||
const int HASH_KEYWORD_PROGBOOST = -6353;
|
const int HASH_KEYWORD_PROGBOOST = -6353;
|
||||||
const int HASH_KEYWORD_EEPROM = -7168;
|
const int HASH_KEYWORD_EEPROM = -7168;
|
||||||
|
const int HASH_KEYWORD_LIMIT = 27413;
|
||||||
|
|
||||||
int DCCEXParser::stashP[MAX_PARAMS];
|
int DCCEXParser::stashP[MAX_PARAMS];
|
||||||
bool DCCEXParser::stashBusy;
|
bool DCCEXParser::stashBusy;
|
||||||
|
@ -586,7 +587,11 @@ bool DCCEXParser::parseD(Print *stream, int params, int p[])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HASH_KEYWORD_ACK: // <D ACK ON/OFF>
|
case HASH_KEYWORD_ACK: // <D ACK ON/OFF>
|
||||||
Diag::ACK = onOff;
|
if (params >= 2 && p[1] == HASH_KEYWORD_LIMIT) {
|
||||||
|
DCCWaveform::progTrack.setAckLimit(p[2]);
|
||||||
|
StringFormatter::send(stream, F("\nAck limit=%dmA\n"), p[2]);
|
||||||
|
} else
|
||||||
|
Diag::ACK = onOff;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case HASH_KEYWORD_CMD: // <D CMD ON/OFF>
|
case HASH_KEYWORD_CMD: // <D CMD ON/OFF>
|
||||||
|
|
|
@ -128,7 +128,7 @@ void DCCWaveform::checkPowerOverload() {
|
||||||
|
|
||||||
if (millis() - lastSampleTaken < sampleDelay) return;
|
if (millis() - lastSampleTaken < sampleDelay) return;
|
||||||
lastSampleTaken = millis();
|
lastSampleTaken = millis();
|
||||||
int tripValue= motorDriver->rawCurrentTripValue;
|
int tripValue= motorDriver->getRawCurrentTripValue();
|
||||||
if (!isMainTrack && !ackPending && !progTrackSyncMain && !progTrackBoosted)
|
if (!isMainTrack && !ackPending && !progTrackSyncMain && !progTrackBoosted)
|
||||||
tripValue=progTripValue;
|
tripValue=progTripValue;
|
||||||
|
|
||||||
|
@ -292,9 +292,12 @@ int DCCWaveform::getLastCurrent() {
|
||||||
// (yes I know I could have subclassed the main track but...)
|
// (yes I know I could have subclassed the main track but...)
|
||||||
|
|
||||||
void DCCWaveform::setAckBaseline() {
|
void DCCWaveform::setAckBaseline() {
|
||||||
if (isMainTrack) return;
|
if (isMainTrack) return;
|
||||||
ackThreshold=motorDriver->getCurrentRaw() + (int)(65 / motorDriver->senseFactor);
|
int baseline = motorDriver->getCurrentRaw();
|
||||||
if (Diag::ACK) DIAG(F("\nACK-BASELINE %d/%dmA"),ackThreshold,motorDriver->raw2mA(ackThreshold));
|
ackThreshold= baseline + motorDriver->mA2raw(ackLimitmA);
|
||||||
|
if (Diag::ACK) DIAG(F("\nACK baseline=%d/%dmA threshold=%d/%dmA"),
|
||||||
|
baseline,motorDriver->raw2mA(baseline),
|
||||||
|
ackThreshold,motorDriver->raw2mA(ackThreshold));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DCCWaveform::setAckPending() {
|
void DCCWaveform::setAckPending() {
|
||||||
|
|
|
@ -76,6 +76,9 @@ class DCCWaveform {
|
||||||
autoPowerOff=false;
|
autoPowerOff=false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
inline void setAckLimit(int mA) {
|
||||||
|
ackLimitmA = mA;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static VirtualTimer * interruptTimer;
|
static VirtualTimer * interruptTimer;
|
||||||
|
@ -118,6 +121,7 @@ class DCCWaveform {
|
||||||
bool ackPending;
|
bool ackPending;
|
||||||
bool ackDetected;
|
bool ackDetected;
|
||||||
int ackThreshold;
|
int ackThreshold;
|
||||||
|
int ackLimitmA = 60;
|
||||||
int ackMaxCurrent;
|
int ackMaxCurrent;
|
||||||
unsigned long ackCheckStart; // millis
|
unsigned long ackCheckStart; // millis
|
||||||
unsigned int ackCheckDuration; // millis
|
unsigned int ackCheckDuration; // millis
|
||||||
|
|
|
@ -29,12 +29,16 @@ class MotorDriver {
|
||||||
virtual int getCurrentRaw();
|
virtual int getCurrentRaw();
|
||||||
virtual unsigned int raw2mA( int raw);
|
virtual unsigned int raw2mA( int raw);
|
||||||
virtual int mA2raw( unsigned int mA);
|
virtual int mA2raw( unsigned int mA);
|
||||||
|
inline int getRawCurrentTripValue() {
|
||||||
|
return rawCurrentTripValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
byte powerPin, signalPin, signalPin2, brakePin,currentPin,faultPin;
|
byte powerPin, signalPin, signalPin2, brakePin,currentPin,faultPin;
|
||||||
float senseFactor;
|
float senseFactor;
|
||||||
unsigned int tripMilliamps;
|
unsigned int tripMilliamps;
|
||||||
int rawCurrentTripValue;
|
int rawCurrentTripValue;
|
||||||
const byte UNUSED_PIN = 255;
|
const byte UNUSED_PIN = 255;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user