Encoder (Drehgeber) über den I2C Bus auslesen

Gast #5743276
Lesenswert?

Hallo Gemeinde
im Netz gibt es die verschiedensten Vorschläge und Versionen wie man 
einen Drehgeber (Encoder) mit dem /2C bus auslesen kann. Alle Beiträge 
haben etwas gemeinsamen. Alle sagen es geht auf dieser oder anderen Art 
nicht. Es sagt aber keine wie es geht.
Dabei muss man "wie es geht" etwas deferieren. Welche Art gibt es, womit 
kann man es machen, direkt oder indirekt, ISR, extra Prozessor, 
Geschwindigkeit usw.
Gebe einmal die kleinste Lösung vor die mir möglich erscheint:

- Auslesen von links, rechts und stop
- Auslesen von zusätzlichen Schaltern
- Geschwindigkeit egal oder
- Geschwindigkeit steigend mit Dauer
- Auslesen mit zusätzlichen Prozessor
- Auslesen mit USI oder I2C Bus direkt
- ständiges Auslesen des Slave (Abruf von Daten) oder auf Abfrage 
reagieren

Wie ist eure Meinung dazu, was ist möglich oder sinnvoll, wie kann oder 
sollte man es machen.
LG Klaus
#5743405
Lesenswert?

wo ist dein Problem?

I2C ist etwas lahm dafür

während ich Tasten locker mit 10ms Timer am I2C auslese (PCF8574 o. a) 
Entprellung nach Dannegger war der Encoder etwas lahm, ich habe sie 
direkt am Port mit 1ms Timer.

OK man kann natürlich mit 400kHz I2C (schafft der PCF8574) auch pollen 
2,5µs, das sollte doch reichen, man kann natürlich mit dem /INT auch 
einen IRQ triggern, aber ich denke das muss man nicht.

also alle 1ms im Timer den I2C abfragen sollte klappen, dauert wenige 
µs, ich hatte es mal gemessen für eine RTC und dann vergessen weil das 
für micht kein Problem darstellte.

Wenn du alle 1ms einige µs im IRQ entbehren kannst ist dein Problem fast 
gelöst.
#5743424
Lesenswert?

Warum setzt man nicht einen kleinen Controller dafür ein?
Die kleinen Tiny kosten nur ein paar Cent.

Ein größerer Tiny könnte auch mehrere Drehgeber bedienen.


Auf dem Tiny ein kleines Programm als I2C Slave.

Man könnte Inkremente seit dem letzen Lesevorgang haben oder sogar 
absolut werte.
Gast #5743532
Lesenswert?

Thomas W. schrieb:
> Warum setzt man nicht einen kleinen Controller dafür ein?

Kann man machen, allerdings muss da ein Programm schreiben (gerade Slave 
hat da manchmal so blöde Tücken) und man muss den Controller 
programmieren. Für Hobby egal, in der Fertigung nicht. Ein PCF... 
leistet das gleiche.
Gast #5743560
Lesenswert?

Sorry, mein Nick ist Klaus AS.
Im Grunde soll es z.B. ein Display bedienen. Damit meine ich einfach 
eine Zeile invers darzustellen oder einfach einen "Zeiger" hoch oder 
runter schieben.
Mir ist klar das es nicht so schnell wie ein En. am Port ist. Soll keine 
Motorsteuerung oder ähnliches sein. Auch wenn einige Bits verschluckt 
werden ist nicht so tragisch. Muss den einfach weiter drehen.
Die Lösung mit dem Attiny als Slave gefällt mir sehr gut. Die Lösung mit 
einem PCF habe ich noch gar nicht bedacht. Ist nur fürs Hobby.
Wie würdet ihr die Abfrage machen?
In die ISR packen oder mit Multitasking jede 1 ms oder sogar 0,5ms 
abfragen?
Das mit einem Attiny schaue ich mir jedenfalls genauer an.
In dem oberen Artikel wird zwar auch gefragt aber zu ungenau.
LG Klaus
#5743609
Lesenswert?

Klaus schrieb:
> Hallo Gemeinde
> im Netz gibt es die verschiedensten Vorschläge und Versionen wie man
> einen Drehgeber (Encoder) mit dem /2C bus auslesen kann. Alle Beiträge
> haben etwas gemeinsamen. Alle sagen es geht auf dieser oder anderen Art
> nicht. Es sagt aber keine wie es geht.

Was für Helden 8-0

> Dabei muss man "wie es geht" etwas deferieren. Welche Art gibt es, womit
> kann man es machen, direkt oder indirekt, ISR, extra Prozessor,
> Geschwindigkeit usw.
> Gebe einmal die kleinste Lösung vor die mir möglich erscheint:

Das hat mit kleinster Lösung nix zu tun, eher eierlegender Wollmilchsau.

> Wie ist eure Meinung dazu, was ist möglich oder sinnvoll, wie kann oder
> sollte man es machen.

Man kann einen manuell bedienten Drehgeber per I2C einlesen, siehe

https://www.mikrocontroller.net/articles/Port-Expander_PCF8574

Für sowas reichen ca. 300-1000 Hz Abtastrate. Dieser IC braucht nur 2 
Bytes + 2x ACK zum Auslesen, das dauert bei 100kbit/s ~200us. Das kann 
man in eine ISR packen, auch wenn das nicht optimal ist (200us sind bei 
1kHz ISR-Rate schon 20% CPU-Last!). Dann unterscheidet sich das logisch 
praktisch kaum von einem Drehgeber, welcher direkt an IOs angeschlossen 
ist. Ein paar Taster kann man da auch noch anschließen, die kosten keine 
zusätzliche Zeit, der IC hat ja 8 IOs.

Bei höheren Drehgeschwindigkeiten und höheren Auflösungen wird das 
irgendwann mal Unsinn, selbst wenn man einen schnelleren Portexpander 
findet.
#5743612
Lesenswert?

Klaus schrieb:

> Im Grunde soll es z.B. ein Display bedienen. Damit meine ich einfach

> Motorsteuerung oder ähnliches sein. Auch wenn einige Bits verschluckt

Unsinn, man geht nicht schon mit Schrott ins Rennen.

> einem PCF habe ich noch gar nicht bedacht. Ist nur fürs Hobby.

Dann vergiß I2C und nimm einen Controller mit ausreichend Pins. Fertig.

> Das mit einem Attiny schaue ich mir jedenfalls genauer an.

Völliger Quark.
Gast #5743690
Lesenswert?

Hallo Falk
den genannten PCF kenne ich und habe bereits damit gearbeitet. Habe ihn 
aber noch nicht mit einem Drehgeber verwendet. Hast du ein Beispiel 
dazu?
Was ist bei dir Schrott. Das LCD was ich verwende möchte, der I2C Bus. 
Mein Controller (128) hat genug Pins, ist leider am falschen Ort. Die 
Bedienung soll ca. 3m entfernt gemacht werden.
Wenn das alles Quark ist, hast du bestimmt bessere Lösung für mich.
#5743701
Lesenswert?

Klaus schrieb:
> Hallo Falk
> den genannten PCF kenne ich und habe bereits damit gearbeitet. Habe ihn
> aber noch nicht mit einem Drehgeber verwendet. Hast du ein Beispiel
> dazu?

Nö, aber das ist trivial. Encoder anschließen, ggf. externe Pull-Ups 
anklemmen, fertig.

> Was ist bei dir Schrott.

Da fehlt ein Fragezeichen. Mit Schrott meinte ich deinen Ansatz

" Auch wenn einige Bits verschluckt werden ist nicht so tragisch."

> Das LCD was ich verwende möchte, der I2C Bus.

Dein LCD kenne ich nicht.

> Mein Controller (128)

Soso, 128. Ach DER 128er!!!

> hat genug Pins, ist leider am falschen Ort. Die
> Bedienung soll ca. 3m entfernt gemacht werden.

Ja und? Dann pack die paar Leitungen in ein Steuerkabel und gut. Wenn 
dir das nicht gefällt, mach ein Blockschaltbild und wir können drüber 
reden.

> Wenn das alles Quark ist, hast du bestimmt bessere Lösung für mich.

Immer ;-)
#5743715
Lesenswert?

Harald schrieb:
> Thomas W. schrieb:
>> Warum setzt man nicht einen kleinen Controller dafür ein?
>
> Kann man machen, allerdings muss da ein Programm schreiben (gerade Slave
> hat da manchmal so blöde Tücken) und man muss den Controller
> programmieren.

...oder man kann was Fertiges nehmen - ich hatte mir mal hiervon
https://github.com/Fattoresaimon/I2CEncoderV2
eine Handvoll bei
https://www.kickstarter.com/projects/1351830006/i2c-encoder-v2
bestellt. Funktioniert.
Gast #5744515
Lesenswert?

An den Pins mußt Du nichts ändern. Die sind beim ATTiny25 fest vorgegben 
und voll belegt.
.hex ist die fertige Code-Datei, die in den µC geschrieben wird. Mit 
welcher Hardware programmierst Du denn Deine AVRs? Hast Du das denn 
schon einmal gemacht oder ist es Neuland?
Gast #5744650
Lesenswert?

Benutze AVR Studio mit ICE Programmer. Verwende meistens den 128 und Aty 
2313. Schaue gerade den Atty 816 als neuen Typ an. Möchte erst mal bei 8 
Bit bleiben. 32 Bit ist natürlich besser aber auch komplizierter.
Gast #5745076
Lesenswert?

Ist wieder erstaunlich wie freundlich manche Menschen sind. Egal.

Letzte Frage dazu: Welcher Prozessor hat ISP, TWI(I2C) Master oder 
Slave, ca 14 Pins (kein USI)
Habe versucht in den Datenblättern was zu finden. Danach gibt es 
Prozessoren die Haben beides ???
Gast #5745099
Lesenswert?

Hi

>Ist wieder erstaunlich wie freundlich manche Menschen sind. Egal.

Nö. Nicht egal. Was soll z.B. ein 128 sein: ATMega128, AT90CAN128 oder 
einer der vielen ATXMega128 oder doch was anderes?

MfG Spess

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