Hallo!
Hoffentlich hilft's: http://rn-wissen.de/wiki/index.php/P...w._Drehencoder .
Hallo,
Ich möchte gerne meinen optischen Drehencoder auswerten.
Dafür habe ich dieses mal keinen Interrupt genommen sondern habe ihn direkt an den PORTD angeschlossen (Bit 0 & 1)
Nun habe ich das Problem, die Drehrichtung richtig auszuwerten.
Kann mir dort jemand weiterhelfen?
Mein Code :
Jetzt wird "hochgezählt" egal in welcher Drehrichtung.Code:Enc_State_new = (PIND & 0b00000011); if (Enc_State_new != Enc_State_old) { Enc_Counter++; } Enc_State_old = Enc_State_new;
__________________________________________________ _________________
/*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
( <-- Das ist Glubschie, er ist nett )
Hallo!
Hoffentlich hilft's: http://rn-wissen.de/wiki/index.php/P...w._Drehencoder .
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Sorry...
Von "PIC´s & ASM" habe ich noch weniger Ahnung.
__________________________________________________ _________________
/*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
( <-- Das ist Glubschie, er ist nett )
Du solltest nur den von µC und Programmierungsprache unabhängigen Programmablaufdiagram (PAD) genau anschauen.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Deshalb untersuchen, forschen, testen und experimentieren wir ja - auf IT heißt das sozusagen: Disassemblierern des Quellcodes.
Wie schon PICture meint: das Arbeitsschema sagt ja alles in Kürze, und das sollte man können/kennen. Der Informationsauswertung bleibt die verwendete Programmiersprache nämlich ziemlich egal. Aber vielleicht nutzt Dir meine Lösung für nen magnetischen Encoder (der Information bleibts ziemlich egal, ob die Abtastung magnetisch, optisch oder mit nem Stöckchen erfolgt).
Ciao sagt der JoeamBerg
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
MfG Peter(TOO)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;
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
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 )
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*) :Das bringt nicht wirklich was. Das gleiche habe ich mit meinem Code auch bezweckt ... Egal ob ich jetzt "links" oder "rechts" drehe ...
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*.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
Ist das so verständlich ?
Ciao sagt der JoeamBerg
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 )
Sagen wir mal so - wenn ich Dir nen Link sende, dann liest Du das Zeugs nicht durch :-/Ja klar, verstehen tuh ich das ... bekomme es halt nicht ordentlich in "C" umgesetzt.
Ciao sagt der JoeamBerg
Lesezeichen