Forum: Mikrocontroller und Digitale Elektronik Pollin Drehencoder in Assembler für 2313 auswerten


von P. K. (dg4ek)


Lesenswert?

Hallo Sepzialisten,

nachdem ich schon den ganzen Vormittag Dutzende Threads über das
Thema Drehencoder auswerten durchstöbert habe und dort die Themen
DrehZAHLauswertung, mit einfacher Auswertung der Drehrichtung für den 
Zweck einer Menueauswahl mit dem Encoder zu machen, durcheinander
geworfen wurden, (nebenbei liefen dann noch C und ASM durcheinander),
raufe ich mir nun langsam die Haare und frage,
ob jemand vielleicht eine ASM Routine für den Tiny2313 oder auch Mega8
hat.

Ich habe eine Handvoll Pollin Encoder der Typen Noble 
RE0124PVB17.7FINB-24
und PANASONIC EVEQDBRL416B, wobei ich am liebsten den ersten Typ 
einsetzen würde.

Wie gesagt, ich brauche nur eine rechts/links Auswertung für eine
Menuesteuerung, keine Drehzahlen, nichts zusätzliches. Den bzw. die 
Timer
kann ich nicht einsetzen, weil diese für eine PWM Erzeugung gebraucht 
werden.

Ich würde mich freuen, wenn jemand einen funktionieren ASM Source posten
würde.

Schon jetzt herzlichen Dank und beste Grüße
Peter

von pauli (Gast)


Lesenswert?

Suchwort: Drehencoder

Beitrag "Drehencoder auslesen ASM"

Nur ein Beispiel

Versuchs mal auch mit Drehgeber, Drehimulsgebr

von Hannes L. (hannes)


Lesenswert?

Peter Krengel schrieb:
> Ich würde mich freuen, wenn jemand einen funktionieren ASM Source posten
> würde.

Beitrag "Kleiner Funktionsgenerator mit Tiny2313"

...

von MaWin (Gast)


Lesenswert?

> Den bzw. die Timer kann ich nicht einsetzen,
> weil diese für eine PWM Erzeugung gebraucht werden.

Och Kindchen, lern halt programmieren.

Algorithmen lassen sich von C in Assembler umsetzen.

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Vorraussetzung ist, daß die Eingänge zeitlich in schnellerer Folge 
ausgewertet werden, als bei maximaler Drehzahl erreichbar ist. Wie viel 
schneller ist letztlich egal, ob 1.1 oder 100 mal. Da muß nicht 
zeitgebergesteuert sein, kann aber.

von Hannes L. (hannes)


Lesenswert?

Peter Krengel schrieb:
> Den bzw. die Timer kann ich nicht einsetzen,
> weil diese für eine PWM Erzeugung gebraucht werden.

Ein für Hardware-PWM genutzter Timer kann nebenher auch noch einen 
Überlauf-Interrupt auslösen, der mit geeignetem Nachteiler die Zeitbasis 
für die Drehgeberabfrage bereitstellt. Für handbetätigte Drehgeber hat 
sich eine Abtastrate von etwa 1 kHz als sinnvoll erwiesen.

...

von P. K. (dg4ek)


Lesenswert?

MaWin schrieb:
> Och Kindchen, lern halt programmieren.
>
> Algorithmen lassen sich von C in Assembler umsetzen.
>
> http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29
>
> Vorraussetzung ist, daß die Eingänge zeitlich in schnellerer Folge
> ausgewertet werden, als bei maximaler Drehzahl erreichbar ist. Wie viel
> schneller ist letztlich egal, ob 1.1 oder 100 mal. Da muß nicht
> zeitgebergesteuert sein, kann aber.

Schon mal auf die Idee gekommen, dass Dein "Kindchen" Dein
Vater sein könnte? Also bitte schön höflich, ok?

Zu Deinem Vorschlag:

Ja, kann man (C-> ASM), muss man aber nicht, insbesondere dann
nicht, wenn es schon fertige Routinen gibt, und danach hatte
ich gefragt (und nicht nach unverschämten rüpelhaften Bemerkungen
solcher Leute, die wahrscheinlich nicht nur noch grün hinter den
Löffeln sind, sondern sich auch noch als Gast verstecken.)

Ich hoffe das war deutlich genug.

------------

Allen anderen vielen Dank für die Hinweise!

Viele Grüße
Peter

von Hannes L. (hannes)


Lesenswert?

Peter Krengel schrieb:
> die wahrscheinlich nicht nur noch grün hinter den
> Löffeln sind, sondern sich auch noch als Gast verstecken.

Damit singst Du im selben Chor wie Manfred, nur mit dem Unterschied, 
dass bei ihm noch geballtes Wissen dahinter steckt...

...

von P. K. (dg4ek)


Lesenswert?

Hannes Lux schrieb:
> Damit singst Du im selben Chor wie Manfred, nur mit dem Unterschied,
> dass bei ihm noch geballtes Wissen dahinter steckt...

Aha, und Du weisst was bei mir dahinter steckt ja?

Nee nee Hannes, man sollte sich schon überlegen
wen man beschimpft, schon ja, wenn man anonym auftritt
und den Beschimpften nicht einmal kennt.

Das ist eine Frage der Höflichkeit und des Anstandes,
aber für einige Zeitgenossen scheinen das Fremdworte zu sein.

Sicher, hier tauchen ab und zu, wie in meinem Forum auch,
"dumme Jungs" auf. Das ist aber kein Grund sich über diese,
egal welchen Alters, zu erheben.

Ich habe niemanden beleidigt, also singe ich auch nicht
in "seinem" Chor, das verbitte ich mir.

Der gute Mann soll sein Fachwissen nehmen und seinen Frust, worüber auch 
immer wo anders auslassen! Ich habe nur höflich nach
einer Assemblerroutine gefragt, nicht mehr und nicht weniger.

Und Du mein lieber Hannes, gestattest mir dann auch, dass ich mich zur 
Wehr setze.

Auf "geballtes" Wissen, gepaart mit Arroganz und Unverschämtheit
kann ich verzichten.

Ich habe nicht vor, meine Zeit weiter mit diesem Dummfug hier
zu verschwenden.

Das Thema ist für mich beendet, gleichgültig was da noch kommen
mag.

--------

von Hannes L. (hannes)


Lesenswert?

Peter Krengel schrieb:
> Das Thema ist für mich beendet, gleichgültig was da noch kommen
> mag.

Dann entschuldige bitte, dass ich Dir einen Link und einen Tipp gab. Ich 
hoffe, es war hilfreich.

Peter Krengel schrieb:
> Aha, und Du weisst was bei mir dahinter steckt ja?

Nein, es interessiert mich auch nicht wirklich, denn ich kenne Dich 
nicht.

Von Manfred habe ich aber schon mehr gelesen, den kann ich halbwegs 
beurteilen. Sein Ton ist zwar manchmal etwas rauh, aber das sollte man 
schon abkönnen ohne gleich die beleidigte Leberwurst zu spielen. Und 
ganz so daneben war der fachliche Teil seiner Aussage nun auch wieder 
nicht.

...

von Steffen H. (Gast)


Lesenswert?


von Steffen H. (Gast)


Lesenswert?

Oder hier direkt für einen tiny2313
Beitrag "Re: Drehgeber auslesen"

von P. K. (dg4ek)


Lesenswert?

Hannes Lux schrieb:
> Dann entschuldige bitte, dass ich Dir einen Link und einen Tipp gab. Ich
> hoffe, es war hilfreich.

Lieber Hannes, für Deinen Tipp und Link danke ich Dir auch gern
zum zweiten Male (oben hatte ich es allgemein gehalten, da
habe ich Dich nicht persönlich angesprochen) :)

Obwohl ich eigentlich nichts mehr dazu sagen wollte,
nur noch das:

Nein Hannes, ich spiele nicht die beleidigte Leberwurst, sondern kann
es einfach nicht "ab", wenn Leute meinen, online könnte man
sich wie eine offene Hose benehmen. Wie ich schon sagte,
ich bin Admin eines anderen Fach-Forums und muss mich tagtäglich mit
solchen Dingen herumärgern....

Überhaupt, bevor man so etwas losläßt, sollte man sich doch
einfach mal fragen, ob man sich so auch persönlich gegenüber
Dritten verhalten würde...das werden die meisten wohl verneinen.

Na dann frage ich mich, warum dann online?
Weil man sich so schön hinter Synonymen verstecken kann?
Ich bitte Dich!

Ich meine, hier gehts ja meistens noch, da habe ich
schon ganz andere Dinge erlebt...

Ohne den Zeigefinger erheben zu wollen, das liegt mir fern:

Es gibt Menschen deren Spezialität es ist, sich in Foren
so zu benehmen, wie sie es in der "richtigen" Öffentlichkeit, nie
machen würden (das trifft übrigens auch
oft und leider auf den Amateurfunk zu), und dies nur aufgrund von 
Fachwissen...

Ich finde das äußerst bedenklich...

Auch wenn ich "Manfred" nicht kenne, ich werde sicher
sein oder überhaupt jemandem Fachwissen nicht in Abrede stellen.
Besonders dann nicht, wenn ich die Person nicht kannte.

Dann ist es wohl aber auch nicht zuviel verlangt, dass
erwachsene Menschen sich auch wie solche und nicht wie
pöbelnde Pubertierende verhalten.

Und wenn Du sagst, dass M. manchmal raubeinig
daherkommt....

...ich komme aus dem Rheinland und wer schon einmal
in Köln und Umgebung war, der weiß, dass die Leute dort, das trifft
auch auf mich zu, auch ganz anders können.
Das muss aber nicht sein....

So, nun lass uns bitte das Thema beenden,
das führt zu nichts und hält mich von meinem Progrämmchen ab...

Ein Danke im Übrigen auch nochmal den anderen Antwortern.

Bevor ich mich wieder mit meinen FPGAs beschäftige, damit verdiene ich 
u.a. meine Brötchen, werde ich aus den "gesammelten Werken"
hobbymäßig etwas in Richtung des Drehencoders zusammenstricken....

In diesem Sinne, noch eine schöne Woche und nochmals danke
für die gegebene Unterstützung.

Gruss
Peter

von Sascha W. (sascha-w)


Lesenswert?

Hallo Peter,

also allen Auswerteroutinen mit Timer zum Troz ...
Den Panasonicencoder von Pollin setzte ich schon seit Jahren in mehreren 
Schaltungen mit der im Datenblatt angegebenen Außenbeschaltung R&C mit 
dem Code ein ...
1
INT0_ISR:  ;wird bei Bew. des Drehencoders aufgerufen (jede Flanke)
2
    in  SRS,SReg
3
    in  TempL0,PINC
4
    sbis  PInD,2
5
    com  TempL0
6
    bst  TempL0,7  ;zust. des Bits einlesen
7
    bld  StatusA,EncDIR_b
8
    sbr  StatusA,EncMOVE_d
9
    out  SReg,SRS
10
    reti

..., ohne Probleme.
StatusA ist ein Register in dem ich verschiedene Bitzustände speichere, 
bei Drehen wird EncMOVE gesetzt und EncDIR ist entsprechend der 
Drehrichtung 0 oder 1. Nach der Auswertung im Hauptprogramm ist EncMOVE 
entsprechend zu löschen.

Encoder hängt an PD2 (INT0) und PC7 (ATMega644)

Sascha

von MaWin (Gast)


Lesenswert?

> wird bei Bew. des Drehencoders aufgerufen (jede Flanke)

Bitte nicht diese unsägliche fehlerhafte und problembeladene 
Nicht-Lösung,

selbst wenn unser Peter Krengel schon so alt ist, daß er mit 
Algorithmen-in-Assembler Umsetzung zur Programm-Erstellung so seine 
Schwierigkeiten hat (ich dachte das gilt nur für die Generation der 
heutigen Rentner) ist er mit den Algorithmen aus der FAQ besser bedient.

Aber irgendwie war klar daß in so einem Thread wieder jemand kommt der 
heldenhaft alle Ratschläge in den Wind geschossen hat und geflissentlich 
dutzende von Hinweisen ignoriert.

> ohne Probleme

Ja klar nee...

von Sascha W. (sascha-w)


Lesenswert?

MaWin schrieb:
>> ohne Probleme
>
> Ja klar nee...

probiers aus!
Das es mit einem anderen als dem genannten Encoder, beim dem die eine 
Leitung den Zustand zwischen zwei Rasten ändert, auch geht will ich 
nicht behaupten.

Sascha

von P. K. (dg4ek)


Lesenswert?

MaWin schrieb:
> selbst wenn unser Peter Krengel schon so alt ist, daß er mit
> Algorithmen-in-Assembler Umsetzung zur Programm-Erstellung so seine
> Schwierigkeiten hat (ich dachte das gilt nur für die Generation der
> heutigen Rentner) ist er mit den Algorithmen aus der FAQ besser bedient.

Nein mein lieber Manfred Winterhoff, Peter Krengel hat weder Probleme
mit Übersetzungen nach Assembler, noch ist er verkalkt.

Aber da Du schon einmal hier bist:

Sage mal, kannst Du auch normal kommunizieren, ohne,
wie man bei uns sagt: "scheeler Hund" zu mir zu sagen, oder hättest Du 
gern, dass ich mich Deinem Ton anpasse?

Gibt man sich so für gewöhnlich in Wolfsburg?
Das wäre mir neu, nunja, wieder etwas dazu gelernt :)


------------------------

Hallo Sascha,

danke auch für Deinen Hinweis,
ich probiere es natürlich aus sobald ich das Board für mein
Projektchen fertig habe!

Viele Grüße
Peter

von John D. (Gast)


Angehängte Dateien:

Lesenswert?

Zunächst einmal kann ich aus meiner Erfahrung nur wiederholen, was hier 
und sonstwo bereits x-mal empfohlen wurde:

Einem Interrupt-Eingang das "prellende Gerattere" eines mechanischen 
Encoders zuzumuten, sollte man sich nicht antun. Und das Glätten der 
"Gerattere" mit RC-Gliedern ist eines der Paradebeispiele für 
unprofessionelle Flickerei.

Sorry für die klaren Worte - jetzt zur Lösung:

Zuletzt habe ich genau diesen PANASONIC EVEQDBRL416B von Pollin in einem 
Projekt zur Reparatur eines HP-4278A verwendet, dessen direkt 
angesteuertes LCD kaum noch unter einigen hundert Euro aufzutreiben ist.

Kurz erklärt sampelt ein ATMega1248 dabei den 750-Khz/4-Bit Pixelstrom 
zum originalen LCD und stellt den Bildinhalt mit 25 Frames auf einem 
Standard-240x128-LCD mit T6963-GPU dar.

Den Drehencoder und einen Button verwende ich in dem Projekt, um in 
einem Service-Menu einige Parameter, u.a. die Kontrastspannung des LCDs 
per PWM einstellen zu können.


Die zur Drehgeber- und Button-Abtastung gehörenden Routinen findest Du 
an folgenden Stellen im Code:

"SampRotary" (Zeile 780), "SampButt" (Zeile 807) und den 
Timer-Interrupt-Handler "Timer0Int" (Zeile 900) an.

Du kannst auch die Routinen "SampRotary" und "SampButt" unmittelbar in 
Deinem Interrupt-Handler implementieren - ich brauche aber "SampButt" 
auch noch von anderer Stelle aus, daher die Implementierung als 
Subroutine.

Du kannst diese Routinen - wie hier im Thread bereits erwähnt wurde - in 
den Overflow-Interrupt Deines PWM-Timers hängen.

"LastRot" und "PushBCnt" sind interne Variablen der Encoder- und 
Button-Routine, dort werden der letzte Stand des Encoders, sowie der 
Debounce-Count für den Button gespeichert.

Die Konstante "DEBOUNCE" musst Du ggf. an die Takfrequenz Deines 
Interrupts anpassen - bei mir werden Encoder und Button mit ca. 1kHz 
gesampled (siehe Zeile 1136).

Die im Programm zu verwendenden Werte für den Encoder und den Button 
enthalten die Variablen "RotDelta" und "Button".

"RotDelta" enthält die Drehimpulse, Links/Rechts als negative bzw. 
positive Werte. Nach der "Verwendung" dieses Wertes im Programm, muss 
"RotDelta" auf Null gesetzt werden.

"Button" enthält den Wert 0x01, sobald der Button gedrückt wurde und für 
die Debounce-Zeit gedrückt gehalten wurde. Nach der Verwendung des 
"Button"-Wertes muss er im Programm auf Null gesetzt werden.

Um zu warten, bis der Button wieder losgelassen wird, gibt es noch die 
Routine "WaitPBRel" (Zeile 820).

Sorry wg. aller Fehler - bin gerade etwas in Eile...

von MaWin (Gast)


Lesenswert?

> Sorry für die klaren Worte

Sie werden nicht helfen.

Die Leute hier wollen keine klaren Worte,
sondern gebauchpinselt werden bei minimalem Eigendenken
und wer sie in ihrer Gedankenruhe stört,
wird wie der bekannte Überbringer schlechter Nachrichten
als der Schuldige angesehen.

> ich probiere es natürlich aus

von P. K. (dg4ek)


Lesenswert?

Hallo John,

danke für den Code und die ausführliche Erläuterung (tolles C-Messgerät
hast Du da....;))) ).

Beste Grüße
Peter

von Jens (Gast)


Lesenswert?

Peter,

von der flankengetriggerten Lösung ist wirklich abzuraten, da bei 
prellenden Kontakten die ganze Rechenzeit des uC auf so einen Murks 
draufgeht. Zudem ist eine Nanosekunden-Reaktionszeit eines Interrutpts 
wohl eher Overkill für deine Menüsteuerung.

Man muss es nicht so drastisch formulieren wie MaWin, aber er hat 
meistens Recht.

Gruß
Jens

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
Noch kein Account? Hier anmelden.