Wie funktioniert diese diskrete Drehgeberauswertung

OP #1450454
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
#1450594
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
Moderator (Firma: Titel) Persönliche Seite #1450602
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.
Gast #1450614
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).
OP #1450837
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
#1450895
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
#1450903
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...
#1452660
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.

...
Gast #1452688
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren