Forum: Mikrocontroller und Digitale Elektronik Drehencoder SPI


von Curby23523 N. (Gast)


Lesenswert?

Hallo,

gibt es einen Chip, an welchem ich mehrere Encoder (mit Schalter) 
anschließen kann und diesen über SPI auslesen kann?

Aktuelle Schalterstellung und Position vom Drehgeber? Erste Google Suche 
sieht nicht vielversprechend aus, auch bei Mouser "SPI Encoder decoder" 
etc. schlägt nicht an.

Gibt es sowas wirklich nicht? Wäre doch praktisch das Frontpanel nur 
über SPI verbinden zu müssen und dann dadrüber mit 4 Leitungen 5 oder 
mehr Drehgeber auszulesen? Ist ja auch nichts zeitkritisches.

Danke für eure Hilfe!

von Frank (Gast)


Lesenswert?

Nils H. schrieb:
> Aktuelle Schalterstellung und Position vom Drehgeber?

Du meinst die relative Position? Absolut ist bei einem inkrementell 
arbeitenden Drehgeber nämlich nur nach Referenzierung möglich.

Viele UC bieten heutzutage ein Quadrature Encoder Interface (QEI) an. 
Mit so etwas könnte man sich natürlich behelfen.

Wenn es wirklich mehrere QEIs innerhalb eines Chips sein müssen, würde 
ich wahrscheinlich zu einem FPGA greifen und mir so viele Instanzen rein 
ziehen wie ich brauche.

Ansonsten schau mal bei iC-Haus vorbei. Die haben da mit Sicherheit 
einen Chip für einen QEI.

von Stefan S. (chiefeinherjar)


Lesenswert?

Es wäre aber nichts gewonnen. Man braucht insgesamt pro Encoder 4 
Leitungen. VCC, GND, A, B. Man kann dann je alle A und B-Leitungen 
zusammenführen, GND sowieso und jeweils per PIN vom uC VCC der Encoder 
schalten. Macht einmalig A, B und je einmal VCC pro Encoder. Entgegen 
SCK und DATA für SPI und je einem /SS

von A. S. (Gast)


Lesenswert?

Nils H. schrieb:
> Ist ja auch nichts zeitkritisches

Naja,, das wäre ja nur für Spezialfälle interessant. Bei manuellen 
Bedienelementen z.b., aber selbst da müsste man mindestens 10 mal pro 
Sekunde Pollen.

von Curby23523 N. (Gast)


Lesenswert?

Ich verwende einen Xmega. Dort führe ich derzeit 14 IO-Pins an das 
Frontpanel. Theoretisch kann ich dort 14/3 = 4 Drehgeber per 
Eventsystem/Timer auslesen. Aber sollte noch einer hinzukommen, reicht 
dies nicht mehr.

von armeWelt (Gast)


Lesenswert?

Frank schrieb:
> Viele UC bieten heutzutage ein Quadrature Encoder Interface (QEI) an.

Was man heute alles haben kann. Leider kein µ für einen µC. So etwas hat 
man oder eben nicht :(

von Michael U. (amiga)


Lesenswert?

Hallo,

Nils H. schrieb:
> Ich verwende einen Xmega. Dort führe ich derzeit 14 IO-Pins an das
> Frontpanel. Theoretisch kann ich dort 14/3 = 4 Drehgeber per
> Eventsystem/Timer auslesen. Aber sollte noch einer hinzukommen, reicht
> dies nicht mehr.

1x oder 2x MCP23S17 als Portexpander auf das Frontpanel.

Sind dann 16 oder 32 recht frei programmierbare I/O.
Bis 8 Stück sind direkt kaskadierbar und können auch über SPI in 
Software adressiert werden, also nur 1x SPI + 1x /CS
Betriebsspannung 1,8V....5V, max. 10MHz SPI-Clock.
Für handbetätigte Drehencoder sollten 10ms Abfragezyklus reichen, da 
wäre also zeitlich genug Luft.

Kannst Du dann alles digitale ranhängen (Drehgebern, Taster, Schalter, 
LEDs) was Dein Panel so bekommen soll.

Gruß aus Berlin
Michael

von m.n. (Gast)


Lesenswert?

Nils H. schrieb:
> Ich verwende einen Xmega. Dort führe ich derzeit 14 IO-Pins an das
> Frontpanel. Theoretisch kann ich dort 14/3 = 4 Drehgeber per
> Eventsystem/Timer auslesen. Aber sollte noch einer hinzukommen, reicht
> dies nicht mehr.

Nimm einen STM32F4xx. Da gibt es 6 Hardware-Decoder: Timer1 - 5 und 
Timer 8. Auch wenn Du alle Encoder per Software auswertest, langweilt 
sich der µC bis zum Abwinken.

Oder Du nimmst viele, viele bunte Tiny25: 
Beitrag "mini Quadraturdekoder + 32 Bit Zähler + TWI, Attiny25"

von Trumpelstielzchen (Gast)


Lesenswert?

Für sowas habe ich Schieberegister 74x165 in kaskadierter Form genommen.
Jede Millisekunde wird per SPI ausgelesen (Polling). Mikrocontroller war 
ein STM32F103. Bei mir funktioniert es einwandfrei.

von Curby23523 N. (Gast)


Lesenswert?

Stefan S. schrieb:
> Es wäre aber nichts gewonnen. Man braucht insgesamt pro Encoder 4
> Leitungen. VCC, GND, A, B. Man kann dann je alle A und B-Leitungen
> zusammenführen, GND sowieso und jeweils per PIN vom uC VCC der Encoder
> schalten. Macht einmalig A, B und je einmal VCC pro Encoder. Entgegen
> SCK und DATA für SPI und je einem /SS

Doch es wäre einiges gewonnen. Ich führe im Moment einen Drehschalter (8 
Pins), drei Potentiometer (3 ADC Leitungen) und einen Drehgeber (3 
leitungen) zum Frontpanel. Macht in Summe 14 Leitungen.

Möchte ich nun alles durch Drehgeber ersetzen und es gäbe kaskadierbare 
SPI Decoder, bräuchte ich nur eine Leitung, weil ich SPI ohne schon zum 
Frontpanel für ein Display führe.

Der xmega kann höchsten 4 Encoder parallel decodieren (in Hardware, nur 
4 Eventkanäle können dies), 5 nicht - sonst könnte ich diese 14 
Leitungen einfach hierfür benutzen.

Aber scheinbar gibt es sowas nicht. In Zukunft werde ich aber irgendwann 
den mega ersetzen (müssen).

von Joachim B. (jar)


Lesenswert?

Nils H. schrieb:
> Möchte ich nun alles durch Drehgeber ersetzen
Nils H. schrieb:
> SPI Decoder

Trumpelstielzchen schrieb:
> Für sowas habe ich Schieberegister 74x165 in kaskadierter Form genommen.
> Jede Millisekunde wird per SPI ausgelesen (Polling).

das ist doch die Lösung, verstehe nicht warum du die Antworten nicht 
liest.

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


Lesenswert?

Nils H. schrieb:

> Ich führe im Moment einen Drehschalter (8
> Pins), drei Potentiometer (3 ADC Leitungen) und einen Drehgeber (3
> leitungen) zum Frontpanel. Macht in Summe 14 Leitungen.
>
> Möchte ich nun alles durch Drehgeber ersetzen und es gäbe kaskadierbare
> SPI Decoder, bräuchte ich nur eine Leitung, weil ich SPI ohne schon zum
> Frontpanel für ein Display führe.

Ich glaube du denkst einfach in die falsche Richtung.

Entweder nimmst du einen Portexpander (SPI, I2C, Schieberegister - was 
am besten paßt). Oder du setzt einen weiteren µC auf dein Frontpanel, 
der dann auch gleich die Drecksarbeit (z.B. das Pollen der Encoder oder 
das Multiplexen einer Anzeige) erledigen kann und mit der Steuerzentrale 
ein etwas abstrakteres Protokoll redet als nur "frage Pin X ab" oder 
"setze Pin Y auf H".

Das zweite ist bei weitem eleganter, birgt aber natürlich auch eigene 
Fallstricke.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Hallo,
nimm doch einen extra Xmega als SPI-Slave oder I2C-Slave, da kannste 
dann reinprogrammieren was du brauchst.

Weiterhin kannst du da auch gleich das  Quadrature Encoder Interface des 
Xmegas verwenden. Über geschickte Multiplexing kann man das sicher auch 
für mehrere Encoder verwenden. Verknüpfst du das ganze noch mit dem 
Eventsystem und dem DMA läuft das Ganze sogar fast nur auf 
Hardwarebasis.

Ich selber arbeite viel mit den Xmegas und finde die Harware einfach nur 
toll.

Viele Grüße
Martin

von Curby23523 N. (Gast)


Lesenswert?

Joachim B. schrieb:
> Nils H. schrieb:
>> Möchte ich nun alles durch Drehgeber ersetzen
> Nils H. schrieb:
>> SPI Decoder
>
> Trumpelstielzchen schrieb:
>> Für sowas habe ich Schieberegister 74x165 in kaskadierter Form genommen.
>> Jede Millisekunde wird per SPI ausgelesen (Polling).
>
> das ist doch die Lösung, verstehe nicht warum du die Antworten nicht
> liest.

Diese Antwort kannte ich schon, bevor ich die Frage hier stellte. Ich 
frage mich aber, ob es eine SPI Lösung mit Hardware-Decoder gibt, kein 
zusätzlicher µC oder Eingangsschieberegister, was ich in Software 
decodieren muss. :)

von Reiner W. (reiner_w)


Angehängte Dateien:

Lesenswert?

Nils H. schrieb:
> Theoretisch kann ich dort 14/3 = 4 Drehgeber per
> Eventsystem/Timer auslesen. Aber sollte noch einer hinzukommen, reicht
> dies nicht mehr.

Kannst du die Encoder nicht multiplex auslesen? Da benötigst du n+2 
Leitungen rein für die Encoder. Also 7 Leitungen bei 5 Encodern.
Hab es bisher zwar nur für 3 Encoder praktiziert (Routine nach PeDa 
erweitert um eine kleine Multiplexroutine), ich sehe aber prinzipiell 
keinen Grund, warum das nicht auch bei 5 Encodern klappen sollte.
Natürlich nur falls es dir nur um den zusätzlichen Encoder geht.

Reiner

von Michael B. (laberkopp)


Lesenswert?

Nils H. schrieb:
> gibt es einen Chip, an welchem ich mehrere Encoder (mit Schalter)
> anschließen kann und diesen über SPI auslesen kann?
>
> Aktuelle Schalterstellung und Position vom Drehgeber?

Drehencoder haben keine Position. Man kann sie immer weiter rumdrehen 
bis irgendwann der Zähler dieses Chips überlaufen würde, dann kann man 
das nicht mehr von der vorherigen Stellung unterscheiden. Immerhin muss 
man für 32bit Zähler ziemlich oft drehen.

Aber es gibt einen SPI ansteuerbaren Drehencoderchip:
http://www.lsicsi.com/pdfs/Data_Sheets/LS7366R.pdf
der einen Drehencoder ausliest. Ob es auch welche gibt, die mehrere 
können, weiss ich nicht.

von Michael B. (laberkopp)


Lesenswert?

Nils H. schrieb:
> Ich verwende einen Xmega. Dort führe ich derzeit 14 IO-Pins an das
> Frontpanel. Theoretisch kann ich dort 14/3 = 4 Drehgeber per
> Eventsystem/Timer auslesen. Aber sollte noch einer hinzukommen, reicht
> dies nicht mehr.

Wenn man auf dem Frontpanel keinen weiteren Chip will. Aber du willst 
dort sogar einen Drehencoderchip. Wie wäre es mit einem viel einfacheren 
Eingangsmultiplexer ?

Du glaubst, das geht nicht, weil dann ja kein "Event" durchkommt ? Hast 
du auch nur das grundlegendste vom Drehencoder verstanden ? Man reagiert 
dort nicht auf die Flanken der Kontakte, sondern fragt schnell genug 
wiederholt ab.

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29
https://www.mikrocontroller.net/articles/Drehgeber

Der uC ist dabei der Initiierende, das geht mit jedem Chip der eine 
Anzahl von Eingängen lesen kann, ob 74HC161, PCA9502 oder 74HC151.

Nils H. schrieb:
> Doch es wäre einiges gewonnen. Ich führe im Moment einen Drehschalter (8
> Pins), drei Potentiometer (3 ADC Leitungen) und einen Drehgeber (3
> leitungen) zum Frontpanel. Macht in Summe 14 Leitungen.

Auffällig ist der Drehschalter mit 8 Pins, kann der wirklich 256 
Positionen unterscheiden ? Oder schaltet er 7 nicht-digitale-Signale an 
einen Pin durch ? Eigentlich reicht für einen Drehschalter 1 
Analogeingang und der Drehschalter bildet einen Spannungsteiler der 1 
von 8 Spannnungen liefert. Dann hast du 7 Leitungen frei. Problemlos 
noch 2 Drehencoder mit Taster ohne weiteren IC, oder zusammen mit den 3 
Leitungen des schon vorhandenen Drehencoders problemlos 8 Leitungen für 
4 Drehencoder A+B plus 2 Leitungen für die 4 Taster, bei denen es 
mehrere Nöglichkeiten gibt sie ohne IC zusammenzufassen, vielleicht auch 
analog.

Also ich sehe (bei deiner unzureichend knappen Information die du 
bringst) viele Möglichkeiten ganz ohne IC auszukommen und trotzdem viel 
mehr Bedienelemente unterzubringen.

von Curby23523 N. (Gast)


Lesenswert?

Ich hatte genug Pins übrig, also habe ich 8 zum Frontpanel geführt - 
welches noch nicht realisiert ist. Natürlich kann ich auch mit einem 
Widerstandsgrab den Drehschalter in Spannungen wandeln und benötige dann 
nur noch ein Pin. Auch das weiß ich. Auch, dass ich dann wieder 7 
Leitungen übrig habe.

All diese kombinationen kenne ich und ich weiß auch, dass ein Drehgeber 
nicht flankenorientiert ist. Auch weiß ich, dass ich das in Software mit 
einen Eingangsschieberegister etc. machen kann.

Aber scheinbar gibt es keinen gängigen SPI Chip, an den man mehrere 
Encoder anschließen kann, welche man dann über SPI auslesen kann.

Vielen dank schonmal!

von Michael U. (amiga)


Lesenswert?

Hallo,

Nils H. schrieb:
> Aber scheinbar gibt es keinen gängigen SPI Chip, an den man mehrere
> Encoder anschließen kann, welche man dann über SPI auslesen kann.

und was genau gefällt Dir am MCP23S17 nicht?
Hatte ich am 29.01.2017 10:15 vorgeschalgen.

Gruß aus Berlin
Michael

von Curby23523 N. (Gast)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> Nils H. schrieb:
>> Aber scheinbar gibt es keinen gängigen SPI Chip, an den man mehrere
>> Encoder anschließen kann, welche man dann über SPI auslesen kann.
>
> und was genau gefällt Dir am MCP23S17 nicht?
> Hatte ich am 29.01.2017 10:15 vorgeschalgen.
>
> Gruß aus Berlin
> Michael

So wie ich das sehe, ist das kein Hardware-Deocoder, sondern nur ein 
weiteres IO/Schieberegister - ich hab halt ein Hardwaredecoder gesucht. 
Wenn ich Schieberegister nehmen möchte, würde ich ein normales 74HC595 
nehmen. Und ein LS7366R ist mir zu exotisch.

von Wolfgang (Gast)


Lesenswert?

Nils H. schrieb:
> Aber scheinbar gibt es keinen gängigen SPI Chip, an den man mehrere
> Encoder anschließen kann, welche man dann über SPI auslesen kann.

Was genau willst du denn nun auslesen?
Irgendwelche Zählerstände mit unbekanntem Bezugspunkt (ggf. mit 
Überläufen)?

von Curby23523 N. (Gast)


Lesenswert?

Ich möchte alle Potentiometer meines Frontpanels durch Drehgeber 
(händische Einstellungen) ersetzen. Eine relative Positionsänderung ist 
absolut ausreichend.

Ich könnte diese natürlich alle zu meinem Xmega führen durch die bereits 
bestehenden Leitungen, dann reicht die Hardwaredekodierung aber nur für 
4 Encoder. Ich könnte es auch komplett per Software machen, das ist 
richtig.

Würde es sowas geben - was es scheinbar nicht gibt, weil es den Anschein 
nach auch nicht gefragt ist (z.B. hier im Forum) - dann hätte ich diese 
5 Drehgeber an eines bzw. mehrere kaskadierbare SPI Bausteine 
geschaltet, welche eine Hardwaredekodierung machen und ich diese nur 
über SPI auslesen muss. Dann bräuchte ich zum Frontpanel nur diese eine 
zusätzliche Steuerleitung.

Wundert mich erlich gesagt, dass es sowas nicht gibt, da jeder weiß dass 
(Software)-Ingenieure faul sind. ;)

von Reiner W. (reiner_w)


Lesenswert?

Nils H. schrieb:
> Ich möchte alle Potentiometer meines Frontpanels durch Drehgeber
> (händische Einstellungen) ersetzen.

Nils H. schrieb:
> Würde es sowas geben - was es scheinbar nicht gibt, weil es den Anschein
> nach auch nicht gefragt ist (z.B. hier im Forum) - dann hätte ich diese
> 5 Drehgeber an eines bzw. mehrere kaskadierbare SPI Bausteine

Naja, wenn du die ersetzen willst(und die Kosten zweitrangig sind), 
kannst du ja auch Rotary Encoder mit SPI Interface benutzen. zB. die 
ENS22B Serie von MEGATRON. Da gibt es sicher noch mehr.

Und zur Not bekommt man das auch selber mit nem AS5040 hin 
https://www.youtube.com/watch?v=gXewDdlUT_Q  als Beispiel

Reiner

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Nils H. schrieb:
>> Trumpelstielzchen schrieb:
>>> Für sowas habe ich Schieberegister 74x165 in kaskadierter Form genommen.
>>> Jede Millisekunde wird per SPI ausgelesen (Polling).
>>
>> das ist doch die Lösung, verstehe nicht warum du die Antworten nicht
>> liest.
>
> Diese Antwort kannte ich schon, bevor ich die Frage hier stellte. Ich
> frage mich aber, ob es eine SPI Lösung mit Hardware-Decoder gibt, kein
> zusätzlicher µC oder Eingangsschieberegister

Nein, das gibts nicht. Weil das keiner braucht. Und vor allem, weil es 
keiner haben will. Zu spezialisiert. Zu unflexibel. Port-Expander oder 
separater µC wurden dir nicht ohne Grund vorgeschlagen. Das ist das, was 
alle anderen machen. Diejenigen, die etwas älter sind, wissen sogar noch 
warum es µP/µC überhaupt gibt: weil es nicht mehr tragfähig war, für 
jede denkbare Funktion ein Spezial-IC zu haben.

Andererseits kannst du dir ja ein solches IC auch selber machen. Für 
einen Drehencoder brauchst du 2..3 Pins. 1..3 weitere für die 
Kommunikation. Ein 8-pinniger µC a'la ATtiny25 wäre also geeignet. 
Kleiner oder billiger kriegst du das auch als Fertigbauteil nicht.

von Jobst M. (jobstens-de)


Lesenswert?

Atmega48. 33 Drehgeber in einer Matrix. 10kS/s. I²C oder SPI. ...?


Gruß

Jobst

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.