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
@ 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.
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
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.
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 ?
Steve schrieb: > was ist das ? Zustandsautomat auf deutsch http://de.wikipedia.org/wiki/Zustandsautomat
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
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 ???
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
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 :-)
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
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.