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
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.
@ 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.
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?
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.
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.
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.
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
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
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
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?
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.
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... :)
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
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
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.
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.
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
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.
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
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.
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
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...
@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
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.
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...