Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert diese diskrete Drehgeberauswertung


von Thomas B. (escamoteur)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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.

von Gast (Gast)


Lesenswert?

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).

von Thomas B. (escamoteur)


Lesenswert?

@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

von Falk B. (falk)


Lesenswert?

@  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

von Jens P. (picler)


Lesenswert?

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...

von Thomas B. (escamoteur)


Angehängte Dateien:

Lesenswert?

Hi,

würde das demnach so funktionieren? Sehe ich das richtig, dass ich dazu 
die internen Pullups aktivieren muss??

Gruß
Tom

von Falk B. (falk)


Lesenswert?

Ja.

von Gast (Gast)


Lesenswert?

Die Schaltung ist aber ein bißchen ungeschickt.
Alle Drehgeber an PORT A würde das Einlesen vereinfachen und 
beschleunigen.

von Thomas B. (escamoteur)


Lesenswert?

Danke für den Hinweis, hast natürlih recht. Wollte mir nur nicht alle 
ADC-Ports zubauen.

Werds aber wohl ändern.

Gruß
Tom

von Hannes L. (hannes)


Lesenswert?

> 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.

...

von Thomas B. (escamoteur)


Lesenswert?

Hmm, guter Punkt!

von Gast (Gast)


Lesenswert?

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