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
Suchwort: Drehencoder Beitrag "Drehencoder auslesen ASM" Nur ein Beispiel Versuchs mal auch mit Drehgeber, Drehimulsgebr
Peter Krengel schrieb: > Ich würde mich freuen, wenn jemand einen funktionieren ASM Source posten > würde. Beitrag "Kleiner Funktionsgenerator mit Tiny2313" ...
> 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.
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. ...
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
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... ...
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. --------
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. ...
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
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
> 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...
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
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
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...
> 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
Hallo John, danke für den Code und die ausführliche Erläuterung (tolles C-Messgerät hast Du da....;))) ). Beste Grüße Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.