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!
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.
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
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.
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.
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 :(
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
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"
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.
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).
Nils H. schrieb:> Möchte ich nun alles durch Drehgeber ersetzenNils H. schrieb:> SPI DecoderTrumpelstielzchen 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.
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.
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
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. :)
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
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.
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.29https://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.
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!
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
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.
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)?
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. ;)
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
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.