Forum: Mikrocontroller und Digitale Elektronik mehrere Encoder auswerten


von Steve (Gast)


Lesenswert?

Hallo
ich möchte drei bis vier encoder an einem atmega32 betreiben. bislang 
habe ich nur von lösungen über die internen timer gelesen jedoch brauche 
ich diese für andere aufgaben.die externen interrupts hätte ich noch 
frei. kann man mit dieser schaltung ( 
http://www.mikrocontroller.net/articles/Datei:Schaltplan_quad_decoder.png 
) irgendwie die interrupts verwenden ?
danke schonmal

von Falk B. (falk)


Lesenswert?

@ Steve (Gast)

>ich möchte drei bis vier encoder an einem atmega32 betreiben.

Mit welcher Abtastrate?

> bislang
>habe ich nur von lösungen über die internen timer gelesen jedoch brauche
>ich diese für andere aufgaben.

Man kann mehre Dinge mit EINEM Timer machen. Ausserdem haben die meisten 
uCs mehrere Timer.

von Steve (Gast)


Lesenswert?

hi falk
ich weiss das du hier zu den richtigen profis gehörst. wenn du jetzt 
einen encoder auswertest , nimmst du wahrscheinlich immer die lösung 
über den timer. kannst du mir da mal eine kleine starthilfe schicken mit 
der es gehen müsste ? ich habe hier nämlich einen standart encoder von 
alps rumliegen mit 24rastungen/24impulsen und weiss jetzt garnicht was 
der timer genau von pegelwechsel zu pegelwechsel machen soll

von Sebi (Gast)


Lesenswert?

Steve schrieb:
> standart encoder

DEN GIBT ES NICHT!!!!!

Schau dir die timerbasierten StandarD-Encoderroutinen an, dann weißt du 
was die machen.

Wie wäre es denn mit einer timergesteuerten Statemachine?
Wenn du keinen Timer mehr frei bekommst, dann nimm einen µC mit noch 
mehr Timern oder nutze einen bestehenden mehrfach, zB als Statemachine.

von Steve (Gast)


Lesenswert?

Sebi schrieb:
> Schau dir die timerbasierten StandarD-Encoderroutinen an, dann weißt du
> was die machen.

wo gibt es die ?

Sebi schrieb:
> Wie wäre es denn mit einer timergesteuerten Statemachine?

was ist das ?

von Mike (Gast)


Lesenswert?

Steve schrieb:
> was ist das ?

Zustandsautomat auf deutsch
http://de.wikipedia.org/wiki/Zustandsautomat

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Die Encoder einfach als Matrix verschalten.
Das Auslesen erfolgt wie bei jeder normalen tastenmatrix auch (Spalten 
weiterschalten und Zeilen uaslesen).
Die Zustände der Zeilen wir ddann eben nach Denneger ausgewertet 
(Zustandsautomat).
Links:
http://www.fritzler-avr.de/epro/licht_schaltplan.php
http://www.fritzler-avr.de/epro/licht_eingabe.php

von Steve (Gast)


Lesenswert?

du scheinst dich ja wohl ganz gut mit encodern auszukennen.
ich habe keine ahnung was der timer macht,wodurch er ausgelößt werden 
soll und wie mann schlussendlich einen gewünschten wert über die 
drehrichtung erhöhl/vermindert. kannst du mir das erklären wie das geht 
?
man liest überall von greycode konvertierung und ähnlichem aber wie ???

von Axel S. (a-za-z0-9)


Lesenswert?

Steve schrieb:
> Sebi schrieb:
>> Schau dir die timerbasierten StandarD-Encoderroutinen an, dann weißt du
>> was die machen.
>
> wo gibt es die ?

Artikel Drehgeber (das ist die deutsche Übersetzung von Encoder)

und evtl. die dort verlinkten Threads.

Für mehrere Drehgeber gibt es verschiedene Varianten des Handlings:

- trivial aber suboptimal: jedem sein eigener Timer-Interrupt

- meist ausreichend: pro Drehgeber eine Funktion zur Abfrage und aus dem 
Timer-Interrupt jede dieser Funktionen aufrufen

- optimal: alle Drehgeber in einer Funktion zusammenfassen. Da kann man 
auch ein paar Bits sparen, indem man die 2 Statusbits die man pro 
Drehgeber braucht, für mehrere Drehgeber in einer gemeinsamen Variable 
zusammenfaßt


XL

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Axel Schwenke schrieb:
> - optimal: alle Drehgeber in einer Funktion zusammenfassen. Da kann man
> auch ein paar Bits sparen, indem man die 2 Statusbits die man pro
> Drehgeber braucht, für mehrere Drehgeber in einer gemeinsamen Variable
> zusammenfaßt

Das ist das beste. Wenn man dann sowieso einen Timer-Ticker laufen hat, 
reicht es, die Drehgeber Routinen alle 1-5 ms aufzurufen. Wenn der 
Ticker schneller läuft, teilst du ihn mit einer Variable runter. So 
kombiniere ich z.B. Encoder Routine (1ms) und Button Routine (10ms) am 
Ende einer Timer ISR, die eigentlich die Uhr antreibt :-)

von Axel S. (a-za-z0-9)


Lesenswert?

Matthias Sch. schrieb:
> Axel Schwenke schrieb:
>> - optimal: alle Drehgeber in einer Funktion zusammenfassen. Da kann man
>> auch ein paar Bits sparen, indem man die 2 Statusbits die man pro
>> Drehgeber braucht, für mehrere Drehgeber in einer gemeinsamen Variable
>> zusammenfaßt
>
> Das ist das beste.

Ja, das ist die landläufige Bedeutung von optimal ;)

Es gibt aber einige Gründe für Variante 2

- Bit-Pfrimelei ist kompliziert und fehleranfällig; die 6 gesparten Bits 
pro Drehgeber sind es nicht wert

- man muß die Funktion nur einmal schreiben und testen; die Adaptierung 
auf einen weiteren Drehgeber ist trivial

- wenn ein weiterer Drehgeber dazu kommt, muß man funktionierenden Code 
nicht anfassen, kann ihn also auch nicht kaputt machen


XL

von Falk B. (falk)


Lesenswert?


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.