Hello, sorry for English post, but I need help regarding RPM measurement. I have a following code :
Hallo, sorry für englische Post, aber ich brauche Hilfe zur RPM-Messung. Ich habe einen folgenden Code:
Problem is, that MOW RPM measurement isn't working correctly. When mower stop motors, MOW RPM goes to 0. It looks like RPM measurement is measuring not MOW motor, but signal from the odometry. What is wrong ? Thank you for help and explanation.
Problem ist, dass MOW RPM Messung nicht richtig funktioniert. Wenn Mäher-Stopp-Motoren, geht MOW RPM auf 0. Es sieht aus wie RPM-Messung misst nicht MOW-Motor, sondern Signal aus der Odometrie. Was ist falsch ? Vielen Dank für Hilfe und Erklärung.
Thank you
Alex
Hallo, sorry für englische Post, aber ich brauche Hilfe zur RPM-Messung. Ich habe einen folgenden Code:
Code:
// enable interrupts
//-----------------------------------------------------------------------------------------------------------------UweZ geändert Anfang---------------------------------
#ifdef __AVR__
// R/C
PCICR |= (1<<PCIE0);
if (remoteUse==1){ // überprüfe ob RemoteUse aktiviert ist;
bitWrite(PCMSK0, PCINT4, HIGH); // und wenn ja schreibe eine 1 ins PCMSK0 Register4 "XXX1XXXX" Interrupt PCINT4 Register4 entspricht den Pin 10 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK0, PCINT4, LOW); // dann schreibe eine 0 ins PCMSK0 PCINT4 Register4 "XXX0XXXX"
}
//-----------------------------------------------------------------------------------------------------------------
if (remoteUse==1){ // überprüfe ob RemoteUse aktiviert ist;
bitWrite(PCMSK0, PCINT5, HIGH); // und wenn ja schreibe eine 1 ins PCMSK0 Register5 "XX1XXXXX" Interrupt PCINT5 Register5 entspricht den Pin 11 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK0, PCINT5, LOW); // dann schreibe eine 0 ins PCMSK0 PCINT5 Register5 "XX0XXXXX"
}
//-----------------------------------------------------------------------------------------------------------------
if (remoteUse==1){ // überprüfe ob RemoteUse aktiviert ist;
bitWrite(PCMSK0, PCINT6, HIGH); // und wenn ja schreibe eine 1 ins PCMSK0 Register6 "X1XXXXXX" Interrupt PCINT6 Register6 entspricht den Pin 12 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK0, PCINT6, LOW); // dann schreibe eine 0 ins PCMSK0 PCINT6 Register6 "X0XXXXXX"
}
//-----------------------------------------------------------------------------------------------------------------
if (remoteUse==1){ // überprüfe ob RemoteUse aktiviert ist;
bitWrite(PCMSK0, PCINT7, HIGH); // und wenn ja schreibe eine 1 ins PCMSK0 Register7 "XXXXXX1X" Interrupt PCINT1 Register7 entspricht den Pin 13 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK0, PCINT7, LOW); // dann schreibe eine 0 ins PCMSK0 PCINT7 Register7 "XXXXXX0X"
}
// odometry
PCICR |= (1<<PCIE2);
if (odometryUse==1){ // überprüfe ob die 1 fache Odemetrie aktiviert ist - Links
bitWrite(PCMSK2, PCINT19, HIGH); // und wenn ja schreibe eine 1 ins PCMSK2 register0 "XXX1XXXX" Interrupt PCINT19 Register4 entspricht den Pin A11 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK2, PCINT19, LOW); // dann schreibe eine 0 ins PCMSK2 Register4 "XXX0XXXX"
}
//-----------------------------------------------------------------------------------------------------------------
if (twoWayOdometrySensorUse==1){ // überprüfe ob die twoWayOdometry Odemetrie aktiviert ist - Links
bitWrite(PCMSK2, PCINT20, HIGH); // und wenn ja schreibe eine 1 ins PCMSK2 register1 "XX1XXXXX" Interrupt PCINT20 Register5 entspricht den Pin A12 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK2, PCINT20, LOW); // dann schreibe eine 0 ins PCMSK2 register5 "XX0XXXXX"
}
//-----------------------------------------------------------------------------------------------------------------
if (odometryUse==1){ // überprüfe ob die 1 fache Odemetrie aktiviert ist - Rechts
bitWrite(PCMSK2, PCINT21, HIGH); // und wenn ja schreibe eine 1 ins PCMSK2 register2 "X1XXXXXX" Interrupt PCINT21 Register6 entspricht den Pin A13 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK2, PCINT21, LOW); // dann schreibe eine 0 ins PCMSK2 Register6 "X0XXXXXX"
}
//-----------------------------------------------------------------------------------------------------------------
if (twoWayOdometrySensorUse==1){ // überprüfe ob die twoWayOdometry Odemetrie aktiviert ist - Rechts
bitWrite(PCMSK2, PCINT22, HIGH); // und wenn ja schreibe eine 1 ins PCMSK2 Register7 "1XXXXXXX" Interrupt PCINT22 Register7 entspricht den Pin A14 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK2, PCINT22, LOW); // dann schreibe eine 0 ins PCMSK2 Register7 "0XXXXXXX"
}
// mower motor speed sensor interrupt
//attachInterrupt(5, rpm_interrupt, CHANGE);
//----------------------------------------------------------------------------------------------------------------- Geändert von PCMSK2 |= (1<<PCINT19);
if (motorMowModulate==1){ // überprüfe ob die motorMowModulate aktiviert ist;
bitWrite(PCMSK2, PCINT18, HIGH); // und wenn ja schreibe eine 1 ins PCMSK2 Register3 "XXXX1XXX" Interrupt PCINT18 Register3 entspricht den Pin A10 des Arduino Mega
}
else // und wenn nicht
{
bitWrite(PCMSK2, PCINT18, LOW); // dann schreibe eine 0 ins PCMSK2 Register3 "XXXX0XXX"
}
//-----------------------------------------------------------------------------------------------------------------UweZ geändert Ende-----------------------------------
#else
// Due interrupts
attachInterrupt(pinOdometryLeft, PCINT2_vect, CHANGE);
attachInterrupt(pinOdometryLeft2, PCINT2_vect, CHANGE);
attachInterrupt(pinOdometryRight, PCINT2_vect, CHANGE);
attachInterrupt(pinOdometryRight2, PCINT2_vect, CHANGE);
attachInterrupt(pinRemoteSpeed, PCINT0_vect, CHANGE);
attachInterrupt(pinRemoteSteer, PCINT0_vect, CHANGE);
attachInterrupt(pinRemoteMow, PCINT0_vect, CHANGE);
attachInterrupt(pinRemoteSwitch, PCINT0_vect, CHANGE);
//attachInterrupt(pinMotorMowRpm, rpm_interrupt, CHANGE);
attachInterrupt(pinMotorMowRpm, PCINT2_vect, CHANGE);
#endif
Problem is, that MOW RPM measurement isn't working correctly. When mower stop motors, MOW RPM goes to 0. It looks like RPM measurement is measuring not MOW motor, but signal from the odometry. What is wrong ? Thank you for help and explanation.
Problem ist, dass MOW RPM Messung nicht richtig funktioniert. Wenn Mäher-Stopp-Motoren, geht MOW RPM auf 0. Es sieht aus wie RPM-Messung misst nicht MOW-Motor, sondern Signal aus der Odometrie. Was ist falsch ? Vielen Dank für Hilfe und Erklärung.
Thank you
Alex