Die Lego Encoder werden nur von der FW mit 1° (halber Genauigkeit) ausgelesen, sie haben aber echte 0,5°, kein Getriebespiel.
ich kann die Lego Encoder per Arduino aber mit voller Auflösung auslesen - oder eben auch nur mit halber, das macht das Rechnen leichter.
Das mache ich letzendlich zur Zeit auch:
// 1/2 Auflösung/resolution
int8_t schrittTab[16] = {0, 0,0,0,1,0,0,-1, 0,0,0,1,0,0,-1,0};
//************************************************** ***********
// Interrupt Service Routine: wenn Interrupt ausgelöst wird
//************************************************** ***********
ISR(TIMER1_COMPA_vect) {
altAB[0] <<= 2;
altAB[0] &= B00001100;
altAB[0] |= (digitalRead(pinmenc0A) << 1) | digitalRead(pinmenc0B);
motenc[0] += schrittTab[altAB[0]]; //
altAB[1] <<= 2;
altAB[1] &= B00001100;
altAB[1] |= (digitalRead(pinmenc1A) << 1) | digitalRead(pinmenc1B);
motenc[1] += schrittTab[altAB[1]]; //
}
// time interrupt for encoder readings
noInterrupts(); // Jetzt keine Interrupts / disable
TIMSK1 |= (1<<OCIE1A); // Timer 1 PIDOutput Compare A Match Interrupt Enable
TCCR1A = 0; // "Normaler" Modus
// WGM12: CTC-Modus einschalten (Clear Timer on Compare match)
// Stimmen OCR1A und Timer überein, wird der Interrupt ausgelöst
// Bit CS12 und CS10 setzen
// Prescaler=8:
TCCR1B = (1<<WGM12) | (1<<CS11);
// Frequenz = 16,000,000 / 8 / 512 = rd. 4 kHz
OCR1A =511;
interrupts(); // Interrupts wieder erlauben / enable
Für den Arduino brauche ich 5V TTL Signale (wie Lego oder tetrix) - bin mir jetzt nicht sicher, ob die von austriamicrosystems das haben, muss ich mal gucken, danke jedenfalls!
ps:
gibt's hier keinen bb-Code-Tag?!?!?
Lesezeichen