- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 16

Thema: Optischen Drehencoder auswerten ohne Interrupt?!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,

    So gehts auch nicht

    Du musst den einen Kanal nehmen und dort die Flanke suchen, welche ist egal, aber immer die selbe.
    Dann bestimmt der zweite Kanal obs rauf oder runter geht, je nachdem ob der 0 oder 1 ist.
    http://rn-wissen.de/wiki/index.php/B..._Zust.C3.A4nde

    Code:
            Enc_State_new = (PIND & 0b00000011);
            if ( (((Enc_State_new ^ Enc_State_old) & Enc_State_new) & 0x01) )
              {
                if ( Enc_State_new & 0x02 )
                   Enc_Counter++;
                else
                    Enc_Counter--; 
              }
           Enc_State_old = Enc_State_new;
    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #2
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Das bringt nicht wirklich was. Das gleiche habe ich mit meinem Code auch bezweckt ^^

    Egal ob ich jetzt "links" oder "rechts" drehe... er zählt hoch (++)
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Das bringt nicht wirklich was. Das gleiche habe ich mit meinem Code auch bezweckt ... Egal ob ich jetzt "links" oder "rechts" drehe ...
    Im Prinzip hast Du dieses Informationsmuster wie unten dargestellt. Ich bezeichne mal einen Kanal als A, Yellow, den andern als Kanal B, White (z.B. die Kabelfarben *gg*) :

    Code:
    -------+                 +----------------+                  +----------------+
           | Kanal A, yellow |                | Kanal A, yellow  |                |
           +-----------------+                +------------------+                +
                   Rechtslauf (math neg) >>>        <<<<<<<< Linkslauf  (math pos)
    ---------------+                +-----------------+                  +---------
                   | Kanal B, white |                 |  Kanal B, white  |
                   +----------------+                 +------------------+
    ---------------------  Pegelzustände A/B direkt darüber sind :  -----------------
    LH low/high        LL      HL       HH       LH        LL        HL     HH
    Du siehst, dass die Zustände beim Vergleichen der beiden Kanäle (stets auf EIN UND DENSELBEN!! zuerst schauen) je nach Drehrichtung unterschiedliche Pegelfolgen entstehen. Prüfen wir mal Kanal A auf steigende Flanke und schauen auf Kanal B - wenn wir die steigende Flanke entdecken. Steht beim Erreichen/Überfahren der steigenden Flanke von A der Kanal B auf low, dann hast Du in diesem Schema Rechtslauf. Steht beim Erreichen/Überfahren der steigenden Flanke von A der Kanal B auf high dann hast Du in diesem Schema Linkslauf *ggg*.

    Ist das so verständlich ?
    Ciao sagt der JoeamBerg

  4. #4
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Ja klar, verstehen tuh ich das...
    Ich bekomme es halt nicht ordentlich in "C" umgesetzt.
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Ja klar, verstehen tuh ich das ... bekomme es halt nicht ordentlich in "C" umgesetzt.
    Sagen wir mal so - wenn ich Dir nen Link sende, dann liest Du das Zeugs nicht durch :-/
    Ciao sagt der JoeamBerg

  6. #6
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    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 )

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Doch habe ich. verstehe allerdings nur "Bahnhof" ... Wo ist ... die Auswertung der "Phasen" ?
    Was hast Du denn gelesen?
    Ciao sagt der JoeamBerg

  8. #8
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    // === 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 )

Ähnliche Themen

  1. Interrupt ohne return (PICAXE)
    Von rudikx im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 29.03.2012, 10:02
  2. Interrupt Routine ohne automatische Register Sicherung
    Von Space im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 20.07.2010, 17:16
  3. A/D Wandler freerun ADC0 und ADC1 ohne Interrupt
    Von guenter1604 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 14.12.2009, 12:01
  4. Drehencoder auswerten
    Von MartinFunk im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 16.05.2007, 16:05
  5. Timer-Interrupt ohne Funktion ?
    Von Technikus im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 08.08.2006, 09:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress