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
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
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.