Hallo, kurze Frage: kennt sich jemand mit den Totary Encodern von NOBLE aus? Diese Teile werden u.a. von ELV geliefert (Typ REB161PVB). Ich will eigentlich nur wissen, ob diese Teile eine definierte Ruhestellung haben. Gruß, Günter
Hi Mikki, Sorry, aber deine Info war falsch. Die Teile haben eine Grundstellung. In Ruhe sind die Pins A-C und B-C hochohmig, also offen. Viele Grüße, Günter
@Günter Kommt drauf an welchen Typ du einsetzt mit oder ohne Rastung. Als Ruhestellung kann man das aber auch nicht unbedingt bezeichnen, da die Drehrichtung und Pulsanzahl im allg. aus der Lage der Impulse generiert wird.
mmmh, es ist genau der Typ, den ich auch angegeben habe. Die Teile sind doch endlich heute angekommen und da habe ich gleich mal nachgemessen. Nur die Drehrichtung wird aus der Pulslage detektiert. Und die Anzahl der Rastungen ist Typabhängig (hier: 24). Gruß, Günter
Hallo nochmal Mikki, hast du eine .ASM Routine zur Auswertung die keine Interrupts verwendet? Glück Auf, Günter
Tag Andreas, Dank für den Tip, abertut mir leid, finde ich nicht. Bin zu doof der so. Gruß, Günter
Von: MaWin (mawin@gmx.net) 25.7.2001 Am einfachsten realisiert man das mit einer state machine als Tabelle. In C sieht das so aus. signed char table[16]={0,1,-1,0,-1,0,0,1,1,0,0,-1,0,-1,1,0}; int position=0; // zaehlen wir mal die absolute Position volatile unsigned char quadrature_input; // die unteren 2 bits dieses Ports sind AB unsigned char quadrature_value=quadrature_input; Folgenden Code ausreichend oft wiederholen (in der Programm Hauptscheife oder einer Zeitgeber gesteuerten Interrupt Routine:) quadrature_value=((quadrature_value<<2)|(quadrature_input&3))&15; position+=table[quadrature_value];
Hi Sascha, auch dir vielen Dank. Leider habe ich bei dem 8515 keine externen Interrupts mehrfrei. Die Routine haut zwar hin und ich habe auch schon mal versucht sie umzuschreiben, klappt aber noch nicht. Dann will ich mal weiterprobieren. Gruß, Günter
Hi Günter , falls du noch einen Timer frei hast kann auch dieser auf externe Ereignisse reagieren. Hab das mal mit Bascom gemacht. (kann leider kein ASM) Funzt genau so gut wie die anderen ext. Interrupts. Eine Polling-Methode würde ich nicht nehmen. Gruss Gerhard Bascom Code: Richtung Alias Pind.5 Takt Alias Pind.4 Timer0 = 255 On Timer0 Takt_Encoder Enable Timer0 Do print Ist_wert Loop End Takt_Encoder: Timer0 = 255 If Takt <> Richtung Then Decr Ist_wert Else Incr Ist_wert End If Return
Hallo und Dank, leider behersche ich diesen Dialekt nicht so recht und mit den Timern in Bascom habe ich noch nichts vollbracht. Könntest du deshalb mal ein paar Worte zu deinen Gedankengängen verlieren? Gruß, Günter
Hallo Günter also im oben beschriebenen Fall wird der 8 Bit Timer als Zähler konfiguriert. Hab eine Zeile im Code vergessen (Config Timer0 = Counter , Edge = Rising) Der Zählerstand wird auf 255 eingestellt , d.h. beim nächsten positiven Impuls an Pind.4 (beim at90s2313) wird ein Interrupt ausgelöst. Nun wird der Programmteil bei "Takt_Encoder:" abgearbeitet. Der Timer sofort wieder auf 255 eingestellt. Dann wird verglichen ob die 2. Spur des Encoders (Pind.5 beim 2313er in meinem Programm) auf H od. L liegt und dementsprechend die Variable Ist_wert um 1 erhöht oder verkleinert. Gruss Gerhard
Das hört sich gut an. Frage: woher kommt der Takt? wenn ich davon ausgehe, das z.b in Drehrichtung rechts der H Impuls auf Spur 1 vor dem auf Spur 2 kommt (entsprechend Linksdrehung: H Impuls auf Spur 2 vor dem auf Spur 1) dann könnte das doch bedeuten, das immer zwischen auf und ab gewechselt wird. Oder täusche ich mich da? Günter Gruß, Günter
Hallo Günter ___ ____ ____ ____ ___ ___ ____ ____ ____ ___ Spur A ___ ____ ____ ____ ___ _ ____ ____ ____ ___ ___Spur B Woher kommt der Takt ????? Hab die beiden Spuren des Encoders "Takt" (Spur A) und "Richtung" (Spur B) genannt. Sieh dir mal die Spur A an, von links nach rechts betrachtet (Drehrichtung rechts). Nun wird bei jedem Pegelwechsel von L auf H ein Interrupt ausgelöst (durch Timerüberlauf)und dabei geprüft ob der Pegel von Spur B zu diesem Zeitpunkt High oder Low ist. Von links nach rechts betrachtet (Drehrichtung rechts) ist B immer High. Von rechts nach links betrachtet (Drehrichtung links) ist B immer Low. Bei jedem Timerüberlauf wird dann folgende Berechnung gemacht: wenn B = low dann variable = variable -1 wenn B = high dann variable = variable +1 Gruss Gerhard
Uuups das war nichts 2.Versuch ____----____----____----____----____---- Spur A _----____----____----____----____----_ Spur B Woher kommt der Takt ????? Hab die beiden Spuren des Encoders "Takt" (Spur A) und "Richtung" (Spur B) genannt. Sieh dir mal die Spur A an, von links nach rechts betrachtet (Drehrichtung rechts). Nun wird bei jedem Pegelwechsel von L auf H ein Interrupt ausgelöst (durch Timerüberlauf)und dabei geprüft ob der Pegel von Spur B zu diesem Zeitpunkt High oder Low ist. Von links nach rechts betrachtet (Drehrichtung rechts) ist B immer High. Von rechts nach links betrachtet (Drehrichtung links) ist B immer Low. Bei jedem Timerüberlauf wird dann folgende Berechnung gemacht: wenn B = low dann variable = variable -1 wenn B = high dann variable = variable +1 Gruss Gerhard
Hi Gerhard, das ist gut, vielen Dank. Das ist aber im Prinzip das Gleiche was ich jetzt am Nachmittag schon probiert (bisher noch erfolglos) habe. Schaun wir mal. Danke nochmal, Günter
Hi Gerhard, ich habe deine BASCOM Routine in eine Assembler Routine umgestrickt und es haut nach einigen Wirren incl. oberer und unterer Grenzwert hin. Die Probleme bestanden nur in einem Fehler in meiner IDE (VMLAB 2.4). Dank auch nochmal an Mikki, der das ganze mal in seinen Grundzügen mit dem AVR Studio ausgetestet hat. Viele Grüße bis zum nächsten Problem :-) Günter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.