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