Hi, TravelRec hat mich auf eine Idee gebracht Drehgeber in meinem Projekt einzusetzen. Ich müsste dazu 3 Drehgeber mit einem AVR auswerten. Ich hab jetzt den Artikel http://www.mikrocontroller.net/articles/Drehgeber gelesen und am Ende wird eine diskret aufgebaute Auswertung beschrieben, die ich leider nicht ganz verstehe. Kann mir einer von euch grob das Prinzip davon erläutern? Würde das meinen AVR entlasten / Pins sparen?? Alternativ, wie kann ich Drehgeber am besten muxen? Gruß Tom
@ Thomas Burkhart (escamoteur) >TravelRec hat mich auf eine Idee gebracht Drehgeber in meinem Projekt >einzusetzen. Was für Drehgeber? Welche für manuelle Eingabe? ODer welche für eine Motorsteuerung? >Kann mir einer von euch grob das Prinzip davon erläutern? Steht das nicht im Artikel? > Würde das meinen AVR entlasten / Pins sparen?? Dafür ist sie nicht gedacht. Dort muss man einen Zähler anschliessen, also einen 74xxirgendwas Baustein. >Alternativ, wie kann ich Drehgeber am besten muxen? Nein. Wenn du mehr Pins brauchst, nimm einen grösseren Controller oder Schieberegister. MFG Falk
> Würde das meinen AVR entlasten / Pins sparen?? Es macht keinen Sinn, diese Schaltung an einen AVR anzuschliessen, weil die beiden Ausgangssignale einen Zähler brauchen, der einen Richtungs- und einen Takteingang hat. So etwas bieten AVR-uC nicht. >Kann mir einer von euch grob das Prinzip davon erläutern? Grob gesagt ist das ein Graycode-Zähler, der beim Weiterschalten Takt und Richtungssignale ausgibt.
Für langsame Drehgeber (<1000 Wechsel/s) kann man drei davon auch direkt an einer AVR-Port anschließen und auswerten. Dabei wird der Port mit ca. 5-10kHz eingelesen, mit dem vorherigen Zustand verglichen und bei einer Pegeländerung der betreffende Zähler auf-/abgezählt. Das ist recht einfach, wenn man darauf achtet, den AVR nicht mit kleinster Taktrate, sondern mit höchster Frequenz zu betreiben (16-20MHz).
@Falk: Geht um einen Manuellen drehgeber. Ist bei der Anwendung (Laustärkeregelung) auch nicht schlimm wenn man ein Impuls verloren geht. Prinzip Drehgeber habe ich verstanden, mich hat nur interessiert was die diskret aufgebaute Schaltung macht. Also 2 Pins pro Drehgeber spendieren? Macht dann 6 Pins Und per Timer-IRQ pollen? Wieso kann ich nicht die 2 Pins mit 2 Selectpins muxen? Wie macht man so was mit einem Schieberegister?? Alle drehgeber an 1 Schieberegister anschließen und dann beim Pollen den Schieberegister auf einmal auslesen und sich anschauen welche Bits sich verändert haben?? Gruß Tom
@ Thomas Burkhart (escamoteur) >Prinzip Drehgeber habe ich verstanden, mich hat nur interessiert was die >diskret aufgebaute Schaltung macht. Das Gleiche wie die Softwarelösung. >Also 2 Pins pro Drehgeber spendieren? Macht dann 6 Pins >Und per Timer-IRQ pollen? Ja. >Wieso kann ich nicht die 2 Pins mit 2 Selectpins muxen? Nicht sinnvoll/praktikabel. >Wie macht man so was mit einem Schieberegister?? Alle drehgeber an 1 >Schieberegister anschließen und dann beim Pollen den Schieberegister auf >einmal auslesen und sich anschauen welche Bits sich verändert haben?? Ja, siehe AVR-Tutorial: Schieberegister MFg Falk
Thomas Burkhart schrieb: > > Wieso kann ich nicht die 2 Pins mit 2 Selectpins muxen? Wieso sollst du das nicht können. Dafür brauchst du allerdings einen MUX-IC z.B. 74LS253. Das erhöht allerdings den Aufwand bei der Auswertung etwas und verursacht etwas mehr Rechenleistung. > Wie macht man so was mit einem Schieberegister?? Alle drehgeber an 1 > Schieberegister anschließen und dann beim Pollen den Schieberegister auf > einmal auslesen und sich anschauen welche Bits sich verändert haben?? Genau so wird es gemacht. Allerdings kostet ein Schieberegister auch extra Rechenleistung, weil die Daten erst seriell eingelesen werden müssen. Deshalb mein Tipp, einen Controller mit mehr IO-Pins zu nehmen. Stand weiter oben schon mal...
Hi, würde das demnach so funktionieren? Sehe ich das richtig, dass ich dazu die internen Pullups aktivieren muss?? Gruß Tom
Die Schaltung ist aber ein bißchen ungeschickt. Alle Drehgeber an PORT A würde das Einlesen vereinfachen und beschleunigen.
Danke für den Hinweis, hast natürlih recht. Wollte mir nur nicht alle ADC-Ports zubauen. Werds aber wohl ändern. Gruß Tom
> Alle Drehgeber an PORT A würde das Einlesen vereinfachen und > beschleunigen. Nicht unbedingt... Vorteilhafter wäre es, immer dieselben Bits der verschiedenen Ports zu benutzen. Denn dann könnte einunddieselbe Decodier-Routine ohne Bit-Kopier-Orgien nacheinander für alle Drehgeber benutzt werden. Beim Decodier-Verfahren mittels LUT ist es auch zweckmäßig (übersichtlicher), jeden Encoder einzeln zu bearbeiten. Da jeder Encoder einen 4-Bit-Index auf die LUT braucht, lassen sich sowiso nur 2 Encoder zusammen auswerten, vor den LUT-Zugriffen muss das Byte doch wieder zerlegt werden, da kann man es auch gleich separat machen. ...
>Nicht unbedingt... Aber sicher doch :-) Normalerweise wird an den Drehgebern nichts passieren. Somit sollte dieser Zustand höchste Geschwindigkeit/Priorität bekommen. Wenn alle paarweise an einem Port liegen reicht im Interrupt der einfache Vergleich: if(porta == alt_porta) return; // schon fertig Bei einer Änderung von Port A werden immer die beiden unteren Bits von temp (temp=Zustand von Port A) ausgewertet und danach temp um 2 Stellen nach rechts geschoben. >Hmm, guter Punkt! So ist es!
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.