Hallo, Ich habe zum Testen eines Drehgebers mal einen kleinen Assemblercode geschrieben. Jedoch ist, wie auch hier im Forum beschrieben, das Prellen des Gebers wohl mein Problem. Mein Programm basiert darauf, dass der Geber egal in welche Richtung ich in drehe, einmal den Binären Wert AB = 11 vorgibt. Das nutze ich um dann einen im vorraus gespeicherten Wert auszuwerten. Daran erkenne ich dann ob ich rechts oder links gedreht habe. Leider gibt der Geber aber kein sauberes Signal herraus, so das hin und wieder mal der Gegenwert erkann wird. Das konnte ich bisher nur durch 2 100nF Kondensatoren auf 99% Stabilität bringen. Ich habe auch schon mal nur die Flanken auslesen lassen. Jedoch wird der Code dadurch wesentlich größer und Fehler werden durch den Geber trotzdem noch verursacht. Hat jemand von euch es einmal geschaft in Assembler ein stabiles Auslesen von Gebern zu programmieren ohne das ganze in riesen Codes ausarten zu lassen ? Würde mich höllisch interessieren. Gruß Frank
Jo, habe nochmals die 100nF Kondensatoren unmittelbar an den Anschlüssen verlötet. Ich sage mal, der Code ist einwandfrei und kann gerne von euch verwendet werden. Habe die Stabilität bereits mit 99% beschrieben. Jedoch sollte mann nicht wie wild an dem Knopf drehen. Fehler gibts auch bei guten Drehgeber gesteuerten Geräten. Jedoch wenn jemand mir zu mehr Stabilität verhelfen kann würde ich mich sehr freuen. Frank
In Assembler hab ich das hier mal geschrieben: Beitrag "Drehgeber-Auswertung in Assembler für 8051" Ist allerdings für einen 8051. Das mit den 100nF kann dir übrigens irgendwann den Drehgeber zerstören.
Drehgeber oder Drehencoder in der Suchfunktion eingeben. Bei richtiger Programmierung werden geprellte Impulse wieder zurückgezählt und damit neutralisiert. Dein Programm ist da ein wenig schlicht. Die Abfolge ist z.B. 11 - 01 - 00 - 10 - 11 für rechts rum 11 - 10 - 00 - 01 - 11 für links rum Ein Prellen würde z.B. so aussehen: 11 - 01 - 11 - 01 - 11 - 01 - 00 Das entspricht rechts 11-01 links 01-11 rechts 11-01 links 01-11 rechts 11-01 rechts 01-00 Also netto 2 Impulse rechts
Hallo Thomas und vinculum, Thomas, das der 100NF zur Zerstörung führen könnte halte ich für nicht möglich. Ich denke eher das die Zerstörung durch meine Tests und dreherei eher eintreffen wird. :o) Ich werde mir mal deinen Code anschauen. vinculum, ach ja, es hat mir mal jemand gesagt das ein gut durchdachter Code nicht unbedingt groß sein muß. Dene Zählung ist korrekt da wir hier von meinen Pins ausgehen müssen. Da ist die folge gegenüber der Masse natürlich umgekehrt. Auch mein Programm zählt bei einem Fehler den letzten Ipuls wieder zurück, zwangsläufig. Wenn man natürlich 100%ige sicherheit der Impulse haben möchte gehe ich mal davon aus das ich tiefer in die Tasche greifen muß. So schlicht wie das Programm auch ist bin ich überrascht wie stabil das bereit läuft. Vielleicht hat ja noch jemand eine geniale Idee..... Danke...... Gruß Frank
Ich habe meinen Drehgeber auf meinem FPGA-Board mit 1MHz ausgelesen. Ist zwar kein mC, wegen der geringen Frequenz aber durchaus vergleichbar. Ausgelesen habe ich nur die Pegel, nicht die Flanken. Pegel habe ich nicht entprellt. Da der Drehgeber nicht mit der Bohrmaschine gedreht wird, lässt sich die Frequenz sicherlich auch noch weiter runtersetzen. Der Zähler wurde bei AB=11 hoch/runtergezählt. Der zugrunde liegende Zustandsautomat hat dabei darauf geachtet, dass z.B. bei einem Durchgang von 01 nach 11 und dann wieder auf 01 (z.B. wegen Glitches) nicht wieder zurückgezählt wurde sondern dies als Start einer neuen Rotation in Gegenrichtung interpretiert wird (also eine Art Entprellung auf der Zählerebene). Der Automat kam insgesamt mit 9 Zuständen aus. Gruss Jörg
Hier habe ich noch eine Optimierung. Kann man ganz gut in weitere Programme einbauen. ;o) Habe übrigens festgestellt das, wenn ich in eine Richtung drehe, keine Fehlmessungen vorkommen. Sobald ich jedoch in die andere Richtung drehe bekomme ich halt die naja 1%ige Ungenauigkeit. Habe ich noch nicht verstanden warum. Komme ich bestimmt noch drauf. Mir qualmt eh schon der Schädel.
Hi Jörg, auch interessant. Im Grunde wird also beim Wechsel der Richtung dann immer ein Impuls ausgelassen. Das heisst solange ich in einer Richtung drehe wird jeder Schritt gemessen. Sollte dabei ein Rückschritt entstehen wird dieser nicht gezählt. Bei einem "echten" Richtungswechsel muß erst dieser Rückimpuls gegeben werden bevor dann die anderen Impulse gezählt werden. Wie gesagt interessant. Danke.... Gruß Frank
Ich habe gerade noch mal nachgeschaut. Beim Richtungswechsel werden keine Impulse ausgelassen, aber schau dir vieleicht am besten die Skizze an. Gruss Jörg
sorry, zu schnell tab+enter gedrückt.. Als Startzustand kannst du z.B. P11 wählen. P bzw. N stehen für die beiden Drehrichtungen, die Ziffern für die Pegel AB, die Übergänge dürften selbsterklärend sein. Gruss Jörg
Es ist ja schon eine Frechheit, daß immer noch Drehgeber verkauft werden dürfen, deren Kontakte prellen. Für mich ist das ein eindeutiger Verstoß gegen die Menschenrechte, wenn Bastler genötigt werden, sich mit solchen Problemen zu befassen.
Spielverderber wrote: > Für mich ist das ein eindeutiger Verstoß > gegen die Menschenrechte, wenn Bastler genötigt werden, sich mit solchen > Problemen zu befassen. Für mich nicht. Ich nenne das schlicht "Software entwickeln". Und dazu gehört eben auch, über reale Probleme nachzudenken oder im Web zu stöbern. In der Codesammlung findet man z.B. entprellende Codebeispiele für Drehgeber. Peter
>Für mich nicht. >Ich nenne das schlicht "Software entwickeln". Ja, so ein richtig verbissener Programmierer kennt eben keine Ironie oder Selbstkritik.
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.