Hallo Experten,
ich habe einen Arduino Mega 2560 und möchte damit einen Encoder auslesen. Ich habe einen einkanal Encoder mit Indexscheibe.
Ich habe es aber leider nicht geschafft die Zeit zwischen zwei Interrupts richtig zu messen. In meiner Not habe ich statt des Encoders einen Signalgenerator angeschlossen. Bei einer TTL Frequenz von 61 Hz und einer Auswertung der Steigenden und fallenden Flanke, bekomme ich eine Taktzeit von ca. 1300 micros() theoretisch sollten das aber 8196,72 micros sein.
Hier ist mein Code:
volatile unsigned long dt; //Delta t
unsigned long t=0; //Laufzeit t
unsigned long icount; //Laufzeit t
unsigned long lastout;
void setup(){
Serial.begin(9600); // initialize the serial port:
attachInterrupt(1,CHAInt,CHANGE); // Interrupt 0 führt CHAInt aus mit wechslende Flanken
}
void loop()
{
if (millis()-lastout>1000){
lastout=millis();
cli();
unsigned long dtout=dt;
unsigned long icountout= icount;
sei();
Serial.print("dt:");
Serial.println(dtout);
//Serial.print("icount:");
//Serial.println(icountout);
}
}
extern volatile unsigned long timer0_overflow_count;
void CHAInt(){
unsigned long Tm = ((timer0_overflow_count<<8)+TCNT0)<<2;
dt=Tm-t;
++icount;
t=Tm;
++icount;
}
Kann mir jemand helfen?