Forum: Mikrocontroller und Digitale Elektronik Multiplexen von Drehencodern


von sam (Gast)


Angehängte Dateien:

Lesenswert?

Hi zusammen,

bevor ich einen dummen Denkfehler mache und eine Platine falsch 
herstellen lasse kurz eine Frage:

Ausgangssituation: Ich möchte 9 Drehencoder an einen AVR anschließen.
Frage:  kann ich diese einfach multiplexen (wie Beispielhaft im 
angehängten Schaltplan)? Aktive Encoder würde ich jeweils auf GND legen, 
5V wäre inaktiv.
Alle sollen gleichzeitig bedienbar sein. Sehe ich das richtig, das es so 
hardwaretechnisch funktioniert, vorausgesetzt die Abtastrate ist hoch 
genug?

Danke und Gruß,
Sam

von Achim S. (Gast)


Lesenswert?

sam schrieb:
> Sehe ich das richtig

ne, siehst du leider falsch.

Was passiert, wenn in beiden Encoder gerade ein Schalter geschlossen 
ist? Dann werden die "inaktiven 5V" und die "aktiven 0V" miteinander 
kurzgeschlossen.

von Falk B. (falk)


Lesenswert?

@ sam (Gast)

>Alle sollen gleichzeitig bedienbar sein. Sehe ich das richtig, das es so
>hardwaretechnisch funktioniert, vorausgesetzt die Abtastrate ist hoch
>genug?

Nein, dazu müssen in JEDE Zuleitung der Encoder Dioden. 1N4148 ähnlich.
Für dein Multipexing brauchst du 8 IOs. Mit einem Schieberegister ala 
74HC165 brauchst du nur 3 und kommst ohne Dioden aus, brauchst dann 
allerdings für jeden Eingang einen Pull-Up Widerstand.

von Klaus (Gast)


Lesenswert?

Falk Brunner schrieb:
> Mit einem Schieberegister ala
> 74HC165 brauchst du nur 3 und kommst ohne Dioden aus, brauchst dann
> allerdings für jeden Eingang einen Pull-Up Widerstand.

Lohnt sich das wirklich? Ist es nicht einfacher/billiger/kleiner, einen 
µC mit ausreichend Pins zu nehmen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

sam schrieb:
> Beispielhaft im angehängten Schaltplan
ENC1_B und ENC2_B müsstest du dir da sowieso nochmal genauer ansehen...

von MaWin (Gast)


Lesenswert?

sam schrieb:
> kann ich diese einfach multiplexen (wie Beispielhaft im
> angehängten Schaltpla

Nein.

Mindestens Trenndioden:
1
                   +-+-+-+- GND
2
                   | | | |
3
                   R R R R 
4
                   | | | |
5
      +--o o--|>|--+-(-(-(-----+-- ENC12A
6
ENC1 -+              | | |     |
7
      +--o o--|>|----+-(-(--+  |
8
                       | |  |  |
9
                       | |  |  |
10
                       | |  |  |
11
      +--o o--|>|------+-(--(--+
12
ENC2 -+                  |  |
13
      +--o o--|>|--------+--+----- ENC12B

sam schrieb:
> Alle sollen gleichzeitig bedienbar sein.

Dann macht das sowieso wenig Sinn, schliesslich reduziert die 
Multiplexerei deine mögliche Abtastrate.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

sam schrieb:
> Ausgangssituation: Ich möchte 9 Drehencoder an einen AVR anschließen.

Dann nimm 18 Inputs des AVR.

von PIC4ever (Gast)


Lesenswert?

Peter Dannegger schrieb:
> sam schrieb:
>> Ausgangssituation: Ich möchte 9 Drehencoder an einen AVR anschließen.
>
> Dann nimm 18 Inputs des AVR.

Falls Dein AVR keine Portleitungen mehr übrig hat, dann nimm einen 
kleinen zweiten µC mit genügend Portleitungen, der die Daten einsammelt 
und seriell an Deinen AVR übergibt.

von not4PIC (Gast)


Lesenswert?

PIC4ever schrieb:
> Falls Dein AVR keine Portleitungen mehr übrig hat, dann nimm einen
> kleinen zweiten µC mit genügend Portleitungen, der die Daten einsammelt
> und seriell an Deinen AVR übergibt.

Genau, Multiplexing eben anders.

von sam (Gast)


Lesenswert?

Lothar Miller schrieb:
> sam schrieb:
>> Beispielhaft im angehängten Schaltplan
> ENC1_B und ENC2_B müsstest du dir da sowieso nochmal genauer ansehen...

ups, ja stimmt. Das war nur ein Muster schnell zusammengeklickt. Da 
passt was nicht :)

danke und gruß,
sam

von sam (Gast)


Lesenswert?

Peter Dannegger schrieb:
> sam schrieb:
>> Ausgangssituation: Ich möchte 9 Drehencoder an einen AVR anschließen.
>
> Dann nimm 18 Inputs des AVR.

gerne, aber ich wollte gerne mit maximal TQFP44 auskommen.
Dazu kommen noch: LCD Display, 9 Taster, I2C, UART, 2xPWM...

Über I2C sind bereits etliche Ausgänge mit separatem AVR angebunden, 
insgesamt ca. 70 Output Pins.

Die ganzen Eingaben hätte ich gerne zentral an einer Stelle "direkt" 
abgegriffen. Da dachte ich könnte ich am meisten an den Encodern an Pins 
sparen.
Also einfach die Dioden ergänzen, dann sollte es ja passen.

Gruß,
sam

von sam (Gast)


Lesenswert?

Die AVRs können mit 20 Mhz laufen, da sollte man als Anwender

MaWin schrieb:

>
> Dann macht das sowieso wenig Sinn, schliesslich reduziert die
> Multiplexerei deine mögliche Abtastrate.

Meinst du man merkt als Anwender wirklich etwas von der Abtastrate?
Ich würde annehmen das das umschalten zwischen den einzelnen Encodern so 
schnell geht, dass der Anwender nichts davon merkt!?

lg
sam

von Pd G. (pdg)


Lesenswert?

Warum eigentlich eine MCU nehmen?

Die Encoder liefern doch ein Quadratursignal, richtig?
Das kann man doch mit einem D-Flipflop pro Encoder problemlos 
dekodieren: ein Schalter kommt an den Takt, der andere an D und schon 
hat man am Ausgang Q die Drehrichtung, das Taktsignal liefert die 
Impulse.

Denke ich zu einfach?

von John (Gast)


Lesenswert?


von not4PIC (Gast)


Lesenswert?

Pd G. schrieb:
> Warum eigentlich eine MCU nehmen?
>
> Die Encoder liefern doch ein Quadratursignal, richtig?
> Das kann man doch mit einem D-Flipflop pro Encoder problemlos
> dekodieren: ein Schalter kommt an den Takt, der andere an D und schon
> hat man am Ausgang Q die Drehrichtung, das Taktsignal liefert die
> Impulse.
>
> Denke ich zu einfach?

Vorsichtig ausgedrückt ... Du wirst schon mindestens ein JFK-Flop 
brauchen bzw speziell dafür hergestellte ausgestorbene Spezial ICs - 
oder auch Gebastel mit XORs usw.

von sam (Gast)


Lesenswert?

Extra Logikbauteile lohnen sich eigentlich nicht. Die haben viele Pins, 
sind groß. Da kann man oft sogar billiger einen weiteren AVR nehmen und 
den dann so programmieren wie man es braucht.
Hm, mit den ganzen Dioden ist wohl einfach ein größerer AVR am 
einfachsten. Ich suche gerade mal nach geeigneten, verfügbaren und nicht 
so viel teureren Atmegas... :)

von Georg (Gast)


Lesenswert?

Pd G. schrieb:
> Denke ich zu einfach?

Vor allem in die falsche Richtung - da werden 2 Signale umgewandelt in 2 
Signale, inwiefern spart das I/O-Pins?

Georg

von Pd G. (pdg)


Lesenswert?

Georg schrieb:
> inwiefern spart das I/O-Pins?

Stimmt, spart keine.
War nur so ein Blitzgedanke, weil ich das so vor Jahrenden probiert 
hatte.

Aber dass es keine D-FFs mehr geben soll...
/kopfkratz

von F. F. (foldi)


Lesenswert?

sam schrieb:
> Dazu kommen noch: LCD Display, 9 Taster,

Da hast du schon zwei Dinge die du multiplexen kannst und wo das 
wesentlich einfacher sein wird.

von Thomas E. (thomase)


Lesenswert?

Mit 5 Widerständen lässt sich ein Drehgeber inkl. Taster mit einem 
ADC-Eingang abfragen. Den 9-ten könnte man mit ein bisschen Trickserei 
über den Aref-Pin einlesen.

mfg.

: Bearbeitet durch User
von sam (Gast)


Lesenswert?

F. Fo schrieb:
> sam schrieb:
>> Dazu kommen noch: LCD Display, 9 Taster,
>
> Da hast du schon zwei Dinge die du multiplexen kannst und wo das
> wesentlich einfacher sein wird.

wie kann ich den beim LCD mehr Pins einsparen, als 4bit Ansteuerung?
Ich habe jetzt 6 Pins + 2 PWM Pins (Kontrast, Hintergrundbeleuchtung) 
geplant
Taster multiplexen ist doch wieder genau das gleiche wie mit Encodern. 
Im Endeffekt sind das doch auch nur Taster, die in der Software nur 
etwas anders ausgewertet werden müssen.

Also meine Lösung ist jetzt ein AVR im TQFP-64, der hat genug I/Os um 
alles direkt anzusteuern. Ist zwar überdimensioniert, aber das wären 
auch schon die TQFP-44 gewesen... :)
Gibt es eigentlich keine "modernen" TQFP-64 mehr von den Atmegas? Nur 
die alten Atmega 64/128/1281/2561? Bei den kleineren hat sich in den 
letzten Jahren ja etwas getan gehabt, hier wohl eher nicht?!

lg
sam

von Lattice User (Gast)


Lesenswert?

sam schrieb:

> Taster multiplexen ist doch wieder genau das gleiche wie mit Encodern.
> Im Endeffekt sind das doch auch nur Taster, die in der Software nur
> etwas anders ausgewertet werden müssen.

Nicht ganz, die Abtastrate ist weniger kritisch, ausserdem wenn immer 
nur eine Taste gedrückt wird kann man sich die Dioden sparen

Um den Drehencoder direkt einzulessen braucht es 12 Pins, momentan hast 
du 8 vorgesehen, fehlen 4.

Wenn man die 9 Taster in einer 3x3 Matrix anordnet braucht es 6 pins, 
werden also 3 frei.

Einen weiteren Pin auftreiben und du bist dabei.

von sam (Gast)


Lesenswert?

Lattice User schrieb:
> sam schrieb:
>
>> Taster multiplexen ist doch wieder genau das gleiche wie mit Encodern.
>> Im Endeffekt sind das doch auch nur Taster, die in der Software nur
>> etwas anders ausgewertet werden müssen.
>
> Nicht ganz, die Abtastrate ist weniger kritisch, ausserdem wenn immer
> nur eine Taste gedrückt wird kann man sich die Dioden sparen
>
> Um den Drehencoder direkt einzulessen braucht es 12 Pins, momentan hast
> du 8 vorgesehen, fehlen 4.
>
> Wenn man die 9 Taster in einer 3x3 Matrix anordnet braucht es 6 pins,
> werden also 3 frei.
>
> Einen weiteren Pin auftreiben und du bist dabei.

ich glaube für mein Bastelprojekt ist es am einfachsten, einfach einen 
großen Atmega zu nehmen. Ich bin gerade sogar auf den 2560 gestoßen, das 
würde mir ein paar Zusatzplatinen für I/Os sparen. Der scheint durch die 
Arduino Leute auch recht verbreitet zu sein.
Ich denke ich plane sogar mit dem. Kostet eh alles etwa das gleiche und 
bei Einzelproduktion, was solls. Dafür wird die Software dann einfacher, 
wenn (fast) alles in direktem Zugriff ist und nicht über externe AVRs 
angesteuert wird.

lg
sam

von F. F. (foldi)


Lesenswert?

Vorausgesetzt die Taster werden nicht gleichzeitig bedient, dann 
brauchst du eigentlich nur ein ADC und verschiedene Spannungen, die fest 
definiert, um alle Taster mit einem Pin abzufragen.
Das mit dem Display war ein Gedankenfehler. Hatte 7 Segment im Kopf.
Außerdem brauchen die Taster nicht so eine hohe Abtastrate.
Auch das gleichzeitige Drücken kannst du über Plausibilität abfangen.

Das haben wir früher bei einem Fahrzeugtype so für den Bremsschalter 
gemacht.

: Bearbeitet durch User
von sam (Gast)


Lesenswert?

F. Fo schrieb:
> .

F. Fo schrieb:
> Vorausgesetzt die Taster werden nicht gleichzeitig bedient, dann
> brauchst du eigentlich nur ein ADC und verschiedene Spannungen, die fest
> definiert, um alle Taster mit einem Pin abzufragen.
> Das mit dem Display war ein Gedankenfehler. Hatte 7 Segment im Kopf.
> Außerdem brauchen die Taster nicht so eine hohe Abtastrate.
> Auch das gleichzeitige Drücken kannst du über Plausibilität abfangen.
>
> Das haben wir früher bei einem Fahrzeugtype so für den Bremsschalter
> gemacht.

ja, stimmt. Mit dem ADC würde gehen. Ich nehm jetzt einfach einen großen 
AVR, Platine wollte ich eh machen lassen. Da ist das am einfachsten und 
tut sich nicht einmal etwas von den Kosten. Dafür dann sehr einfach aus 
dem Programm heraus anzusprechen. :)

lg
sam

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Die "Taster" sind keine (unabhängigen) Taster, sondern immer 2 gehören 
zusammen und ergeben ein Quadratursignal. Und in diesem Signal sind 
selbstverständlich ab und zu beide Schalter geschlossen...

: Bearbeitet durch Moderator
von Martin S. (led_martin)


Lesenswert?

@Lothar Miller (lkmiller):

Da wird wohl gerade aneinander vorbei geredet, bei einem Encoder ist das 
klar, aber in den letzten Posts geht es nicht um die Encoder, sondern 
um:

sam schrieb:
> Dazu kommen noch: LCD Display, 9 Taster, I2C, UART, 2xPWM...
                                 ========

diese 'normalen' Taster, um dort die fehlenden Portpins einzusparen.

Mit freundlichem Gruß - Martin

von m.n. (Gast)


Lesenswert?

sam schrieb:
> ich glaube für mein Bastelprojekt ist es am einfachsten, einfach einen
> großen Atmega zu nehmen.

Ich würde es einfacher finden, die Drehgeber mit einem ATmega48 
auszuwerten und die Zählerstände per IIC abzufragen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin Schlüter schrieb:
> Da wird wohl gerade aneinander vorbei geredet
Scheint so...

Ich würde einfach alle Taster und den Drehgeber über Schieberegister 
einlesen. Das ist dann auch richtig zukunftssicher, weil für weitere 8 
Eingänge einfach nochmal ein Schieberegister drangepappt werden kann...

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.