Forum: Mikrocontroller und Digitale Elektronik Encoder (Drehgeber) über den I2C Bus auslesen


von Klaus (Gast)


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

von Peter D. (peda)


Lesenswert?

Klaus schrieb:
> Alle sagen es geht auf dieser oder anderen Art
> nicht.

Gehen tut es. Nur allgemein zu antworten geht nicht.
Encoder ist nicht gleich Encoder.
Mal Butter bei die Fische.

von my2ct (Gast)


Lesenswert?

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

Das kommt auf Encoderauflösung, Drehgeschwindigkeit und Sinn&Zweck der 
Übung an - meine Meinung.

von Oliver S. (oliverso)


Lesenswert?

Man wählt einfach ein Encodermodell mit I2C-Schnittstelle aus, das das 
alles bietet, und verbindet den mit einem Gerät, das das alles auslesen 
kann. Problem gelöst.

Klingt jetzt nicht so schwierig, oder?

Oliver

von Joachim B. (jar)


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.

von Thomas W. (diddl)


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.

von m.n. (Gast)


Lesenswert?

Bist Du Klaus oder Klars?
Beitrag "Re: I2C Bus und Drehgeber"

von Harald (Gast)


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.

von Klaus (Gast)


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

von Falk B. (falk)


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.

von Falk B. (falk)


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.

von Klaus (Gast)


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.

von Falk B. (falk)


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

von Klaus (Gast)


Lesenswert?

Ist der Attiny841 eine Lösung mit Hardware I2C?

von m.n. (Gast)


Lesenswert?

Klaus schrieb:
> Mein Controller (128) hat genug Pins, ist leider am falschen Ort.

Hast Du einen ATtin25 zur Hand? Hier gibt es ein Programm nebst 
Beschreibung (2. Schaltung): 
http://mino-elektronik.de/mt12_iic/mt12_iic.htm

von Jan L. (ranzcopter)


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.

von Klaus (Gast)


Lesenswert?

m.n. schrieb:
> Hast Du einen ATtin25 zur Hand? Hier gibt es ein Programm nebst
> Beschreibung (2. Schaltung):
> http://mino-elektronik.de/mt12_iic/mt12_iic.htm
Dein Vorschlag sieht sehr gut aus. Hardware ok. Software bekomme ich 
eine Reihe wilder zeichen. Was kaputt?

von m.n. (Gast)


Lesenswert?

Klaus schrieb:
> Software bekomme ich
> eine Reihe wilder zeichen. Was kaputt?

Das ist die .hex-Datei: 
http://mino-elektronik.de/progs/avr/qcnt25/qcnt25_twi.hex
Nicht wild und nicht kaputt.

von Klaus (Gast)


Lesenswert?

ok. Hast du das auch in C? Kann leider nicht hex oder ASM. So wie es 
aussieht muss ich bestimmt was an den Pins ändern.

von m.n. (Gast)


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?

von Klaus (Gast)


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.

von spess53 (Gast)


Lesenswert?

Hi

> Verwende meistens den 128 und Aty
>2313. Schaue gerade den Atty 816 als neuen Typ an.

Was sind 128, Aty oder Atty?

MfG Spess

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

spess53 schrieb:
> Was sind 128, Aty oder Atty?

Vermutlich irgendwelche Schreibfaulheiten, weil "Atmega128" oder 
"Attiny816" eindeutig zu viele Zeichen sind, als daß man sie 
hinschreiben könnte.

von Falk B. (falk)


Lesenswert?

Rufus Τ. F. schrieb:
> Vermutlich irgendwelche Schreibfaulheiten, weil "Atmega128" oder
> "Attiny816" eindeutig zu viele Zeichen sind, als daß man sie
> hinschreiben könnte.

Ach was, das ist iSteno, Abkürzen bist der Arzt kommt. Wahrscheinlich um 
Energie zu sparen, Klimawandel und so ;-)

von Klaus (Gast)


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

von spess53 (Gast)


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

von m.n. (Gast)


Lesenswert?

Kann Dein Programmer denn nicht UPDI? Dann wäre der ATtiny814 z.B. 
geeignet.
Oder Du gönnst Dir ein paar Pins mehr und verwendest den ATmega48.

von Klaus (Gast)


Lesenswert?

es soll ein Atmega 128 sein.
Arbeite mit dem ICE Programmer. Kann der UPDI? Sorry hatte mit dem UPDI 
keine Erfahrung

von Sigint 112 (sigint)


Lesenswert?

Also ich würde nen ICE40LP384 oder 640 dafür nehmen. Die Teile sind echt 
winzig und man ist sehr flexibel. Man hat wahrscheinlich noch genug 
Resourcen für andere Spielerreien frei.

von Klaus (Gast)


Lesenswert?

Sigint 1. schrieb:
> Also ich würde nen ICE40LP384 oder 640

Sorry den kenne ich gar nicht. Wollte eigentlich bei AVR bleiben.
Bei den genannten Start ups wird ein PIC verwendet. Mit PIC habe ich 
auch keine Erfahrung

von omg (Gast)


Lesenswert?

Klaus schrieb:
> Mit PIC habe ich auch keine Erfahrung

Erfahrung kommt nicht vom Haben, sondern vom Machen.

von Klaus (Gast)


Lesenswert?

Hast du noch mehr dieser Sprüche. Teile sie unbedingt der Welt mit

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.