Doch habe ich. verstehe allerdings nur "Bahnhof"...
Wo ist bei dir denn die Auswertung der "Phasen" ?
- - - Aktualisiert - - -
Doch habe ich. verstehe allerdings nur "Bahnhof"...
Wo ist bei dir denn die Auswertung der "Phasen" ?
__________________________________________________ _________________
/*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
( <-- Das ist Glubschie, er ist nett )
// === Nicht unterbrechbare ISR für timer2 =================================== */ // Routine zählt hoch im Takt 20 kHz = 50 µs. Der Zählerwert wird von den ISR für // EXT_INT0 und -INT1 ausgelesen ISR(TIMER2_COMPA_vect) // // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { // Izeit_1 --; // ###>>> Izeit_1 ist aktuell int16_t ==>> // Izeit_1 bleibt bis 32000 in der int16-Grenze tupUM0 ++; // Tupsicounter für Umdrehungsmessung(en) tmrE0 ++; // Encodertimer hochtickern tmrE1 ++; // Encodertimer hochtickern //RCzeit1 ++; // Tupsicounter uint16_t für RC-5-Decoding if ( Izeit_1 ) // Interrupt-Timer = 1 ... 20 000 ... (1 sec blink) { } // WENN Izeit_1 =|= Null => wahr => Anweisung ausgeführen else // Izeit_1 = Null = unwahr, daher "else" ausführen { // Eine Sekunde ist voll => Izeit_1 = Izthrznt; // ansonsten: Rückstellen auf Zeithorizont ToggleBit (PgLED, L1g); // gnLED toggeln HEARTBEAT <<####, aktuell PC1 Isecundn ++; // Sekundenzähler hochtackern, max 9 Std } // Ende if (Izeit_1 ) if (tmrE0 > 2000) // Grenzwert für Stillstand // ... usf
__________________________________________________ _________________
/*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
( <-- Das ist Glubschie, er ist nett )
Wenn du das ganze in [code] tags packst, bleibt es lesbar
Da steht aber nur was von Encodertimern. Nimm mal die Zeilen:
in dem Fenster wo drüber steht: "Die vollständige ISR für (m)einen Encoder bei Archie ..." - das ist GENAU das Vorgehen wie weiter oben mit der Kanalskizze beschrieben.Code:// Encoderticks Iencdrx nur hochzählen, IencBx rauf- od runterzählen Iz_diff0 = tmrE0; // Abspeichern Zeit seit dem letzten ISR-Aufruf tmrE0 = 0; // Resetten ##>> IN der ISR ohne CLI/SEI möglich Iencdr0 ++; // Incrementiere Encodercounter, zählt NUR aufwärts if (IsBitSet (PIND, 4)) IencB0++; // Rad treibt vorwärts, math. negativ else IencB0--; // Rad treibt rückwärts, math. positiv
Ciao sagt der JoeamBerg
Code:Enc_State_new = (PIND & 0b00000011); unsigned char changedBits = Enc_State_old^Enc_State_new; if(changedBits) { if (Enc_State_new & 1) if (changedBits == 1) Enc_Counter++; else Enc_Counter--; else if (changedBits == 1) Enc_Counter--; else Enc_Counter++; Enc_State_old = Enc_State_new; }
Geändert von Sisor (14.09.2014 um 20:40 Uhr)
Lesezeichen