Hallo zusammen, für unser Arduino-Schulprojekt bin ich auf der Suche, wie man 144 oder 256 analoge Eingänge (Schalterzustände) realisiert. Zunächst wird so ein IKEA-Tetris-Spieltisch mit 12x12 WS28xx LED's nachgebaut. Damit der Spielspass etwas länger bleibt, dachte ich an Erweiterungen. Erstens mehrere Spiele (PingPong/Snake/Mühle/Pacman u.ä.), zweitens sollte der einfache 4-Tasten-Kontroller ausgebaut oder aufgebohrt werden. Ideal wäre wenn die LED-Matrix zus. noch irgendwelche Schalter bekäme. Touchsensoren in dieser Menge kosten ein kleines Vermögen und überschreiten das zig-fache aller anderen Komponenten. Ich dachte mir, in jedes Feld sprich eine Pixelzelle, einen simplen analogen Taster, Mikroschalter, Reedkontakt oder LDR einzubauen. Nun stehe ich vor der großen Frage, wie realisiert man so viele Eingänge? Als einziger Anhaltspunkt fällt mir dazu die "Technik einer Tastatur" ein. Leider reicht mein Wissensstand nicht für ganz dicke Elektronikschaltungen. Nichts desto trotz, geht es nicht um mich, sondern um die Kids. Die sollen ihren Spass beim bauen und experimentieren haben. Wenn es tief in die Elektronik gehen sollte, würde auch ein fertiges Modul oder Breakout reichen. Ich konnte nach einer intensiven Recherche nichts annäherndes (>4x4) finden. Vielleicht hat jemand die eine oder andere Idee, einen Vorschlag oder kennt gar so ein umgesetztes Projekt? Vielen Dank im voraus
:
Bearbeitet durch User
Mister A. schrieb: > 256 analoge Eingänge (Schalterzustände) Sicher, daß man Schalter analog einlesen muß?
Peter D. schrieb: > Mister A. schrieb: >> so ein IKEA-Tetris-Spieltisch > > Was soll das sein? Ich denke er meint dieses hier oder etwas ähnliches : https://www.heise.de/make/meldung/Fleissarbeit-Interaktiver-LED-Tisch-mit-Raspberry-Pi-3619636.html @Mister A. Die benutzen keine Schalter sondern LED als Fotodioden für die Rückmeldung.
:
Bearbeitet durch User
Nein, muss man natürlich nicht. Leider kenne ich bis dato nur analogRead. bzgl. dem Spieltisch, ungefähr sowas: https://youtu.be/9mYyU1978k4 Bei der Suche konnte ich gerade entdecken: http://www.gunook.com/rgb-led-pixel-beruhrungs-reaktiver-spieltisch/ Das geht schon mal in die richtige Richtung. Und das hier ist auch sehr interressant: https://youtu.be/vzWEgOt3xsM
Mister A. schrieb: > Nein, muss man natürlich nicht. Leider kenne ich bis dato nur > analogRead. Ok, das ist natürlich ein Argument ;-( Warum guckst du dich nicht in den Arduino Beispielen um und machst dich mit digitalread() vertraut. Bei einem digitalen Eingangssignal wäre das doch naheliegend ;-) https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/ Allerdings wirst du keinen Arduino inden, der direkt 144 oder gar 256 Eingänge besitzt. Also divide et impera. Falls du die Schalter in einer 8x8 8x8 Matrix anordnen kannst (Kontakte Massefrei, immer nur einer) würdest du mit 8 Aus- und 8 Eingängen klar kommen. Erkennungsgeschwindigkeit ist bei dir von untergeordneter Bedeutung?
Das war ein Scherz, mit dem analogRead. Klar, digitalRead und ein paar andere wie z.B. 7seg/8x8 Multiplexing kenne ich mittlerweile :) Ich bin halt erst vor ein paar Monaten in der Arduinowelt gelandet, konnte noch nicht alles ausprobieren und nachbauen. Aber die daraus neu entdeckte Elektronikwelt finde ich schon mal nicht verkehrt. Das wird mein Lieblingsspielplatz :) Zurück zum Topic, warum ich an analog geklammert habe zeigt die beigefügte Schematik vom 4x4 Keypad auf Widerstandsbasis. Auf Grund dessen überlegte ich wie man andocken könnte. Ob man das ganze auf 12x12 oder 16x16 ausdehnt und lauffähig bekommt, weis ich noch nicht. Notfalls, dachte ich weiter, eine Portexpansion mit 8ch einzusetzen. Macht mich alles in allem nicht besonders glücklich weil es nach wie vor analog ist. Ob ich simpel mit einer Matrix-Methode X/Y Reihe/Spalte arbeiten kann, weis ich auch noch nicht. Die paar Videos habe ich mir angeschaut, das mit IR ist ganz nett für visuelle Spielereien. Jedenfalls denke ich, dass unsere Kids eher was zu herumdrücken auf der Tischplatte möchten. Obendrauf finde ich die ganz grobe Auflösung (mit Irda) zum Selektieren eines "Spielfeld-Pixels" eher ungeeignet.
:
Bearbeitet durch User
Mister A. schrieb: > Notfalls, dachte ich weiter, eine Portexpansion mit 8ch einzusetzen. > Macht mich alles in allem nicht besonders glücklich weil es nach wie vor > analog ist. Du redest schon wieder Käse. Portexpansion <---> analog
Ja, das war auch im oberen Teil als finale Möglichkeit gedacht. Digitales Multiplexing mit X/Y Achse und simplen Schalter muss ich noch praktisch durchspielen. Hast du evtl. eine Tipp für mich?
Mister A. schrieb: > 16x16 dazu braucht es nur 2 - 4 Digitalport Erweiterungen SPI 16er Sports mit MCP 2x oder 4x I2C 8574(a) a 8 Bit die 16 Spalten werden nacheinander kurz auf low gelegt, dann wird in den 16 Zeilen nacheinander abgefragt und mit Spalte low und Zeile low weiss man welche der 256 Tasten gedrückt wurde, das natürlich entprellt Beitrag "Danneggers Tastenentprellung" https://www.mikrocontroller.net/articles/Entprellung Beitrag "Re: Tastatur Matrix entprellen"
Warum nicht mit P/S Schieberegister a la 74HC165? Sind billiger und schneller. Weil kein interner Register Verwaltungsapparat berücksichtigt werden muß. Wenn man die mit 8MBit/s per SPI in einer Timer ISR abfragt geht das ruck-zuck mit 1us pro SR. Allerdings muß man bei 8Mbit mit der Verdrahtung und EMC aufpassen. Also unter 20us pro 144 Eingänge. Wenn man die dann zwei mal abfragt kommt man auch mit dem Bounce zurecht. Auch verdrahtungsmäßig ist das günstig weil man die SR Hardware nahe bei den Schaltern anordnen kann und dann nur 4 Drähte zum uC hat (Vcc,Gnd, clk, data). Da die Distanzen zwischen den SR kurz sind, sollte das nicht zu riskant sein. Die empfangenen Daten kann man dann in einem 18x8 Byte Array abspeichern. Wenn das im Hintergrund mit einer ISR gemacht wird, existiert praktisch kein Overhead im Main Line Code. Auch die spätere Auswertung ist einfacher. Port Expander sind vielleicht eigentlich Overkill und im Vergleich sündteuer. Die 165er gibts für ein paar Cent das Stück. Dan gäbe es noch den doppelt gepufferten 74HC589. Der ist allerdings ein wenig teurer.
:
Bearbeitet durch User
Für das Arguino gibt es doch diese Shield-Adapterplatinen. Die haben jeweils 8 analoge und weitere digitale Eingänge. Händisch bauen geht mit den beschriebenen Schieberegistern. In der Bucht gibt es einen Hersteller aus China, der Platinen zu 1,95 vertreibt, welche den chip, Stuftleisten und alles inklusive für 16 Kanäle hat. Damit habe Ich meinen Rotary Encoder verdrahtet. Die laufen mit bis zu 1 MHz mit simpler Luftverdrahtung. Ich habe damit 8x8x2 Kanäle (64 X,y) realisiert.
Joachim B. schrieb: > SPI 16er Sports mit MCP 2x Das wird etwas wie ein MCP23S17 sein; bzw. ein MCP3426 und MCP23017 als i2c? > oder 4x I2C 8574(a) a 8 Bit PCF8574 ist hier superschön erklärt: https://www.mikrocontroller.net/articles/Port-Expander_PCF8574 ... und der kleine schluckt alleine schon 80mA, seine 4 Brüder sind mit 200mA noch hungriger. Dann das ganze noch 4x :( Eine Frage zum Interrupt: ist der als OUT oder IN anzusehen? = OUT, wird heraus gesendet wenn sich der Status an einem Port ändert = IN, für einen wakeup > die 16 Spalten werden nacheinander kurz auf low gelegt, dann wird in den > 16 Zeilen nacheinander abgefragt und mit Spalte low und Zeile low weiss > man welche der 256 Tasten gedrückt wurde, das natürlich entprellt OK, hier kann ich noch folgen. Kann ich "Wechsler entprellen mit Kondensator" (aus o.g. url-Beschreibung) 1x pro Zeile und 1x Spalte anwenden? Oder es der Software/Library überlassen? Und soll ich davon ausgehen dass alle Taster über einen Pullup hängen. Das zweite Beinchen die gemeinsame Signalleitung bildet? ...Würde jedenfalls den Hinweis auf low erklären. Ich danke schon mal recht herzlich. Entschuldigung für die ganzen Fragen, bin noch in Ausbildung.
Mister A. schrieb: > Entschuldigung für die ganzen Fragen, bin noch in Ausbildung. Die Unterscheidung zwischen Analog- und Digital-Eingang sollte man(n) jedoch auch in diesem Stadium hinkriegen.
Jürgen S. schrieb: > Hersteller aus China, der Platinen zu 1,95 vertreibt, welche den chip, > Stuftleisten und alles inklusive für 16 Kanäle hat das hört sich auch interessant an. Hast du vielleicht einen Typen/Modell? Das mit den Schieberegistern würde mir pers. auch gefallen. Zumindest es eh irgendwann ein Thema für den Workshop wird. Auf Kosten im kleinen Eurobereich kommt es nicht an. Soll ja auch nicht aus Luft und Kostnix entstehen. Kostenfaktor sind nur die 144/256 kapazitive Touchsensoren. Damit ist man schnell bei €150-200. Allerdings hätten die den Vorteil, dass kein mechanischer Verschleiss/Defekt stattfindet. Bei Tastern wird es schon kritisch. Es soll ja primär gespielt werden :) Mittlerweile bin ich stark am überlegen ob Reed-Schalter ein Mittelweg wären.
:
Bearbeitet durch User
Ich würde da gar keine Matrix machen, sondern einfach ein paar Schieberegister hintereinander hängen. Das kann man für 8 ausprobieren und das dann ganz einfach mit ein paar weiteren Schieberegistern Linear hochskalieren. So eine Schaltermatrix wird nämlich dann interessant, wenn (zufällig) mehrere Tasten gleichzeitig gedrückt werden...
Mister A. schrieb: > und der kleine schluckt alleine schon 80mA, wo liest du das? http://www.ti.com/lit/ds/symlink/pcf8574.pdf Seite 6 80µA ! das ist ca 1000x weniger! er könnte pro Port 25mA treiben aber wer tut das für Taster? niemand! Die gibts fertig vom Chinesen mit 8 Auswahladressen brauchen also nur die I2C Leitungen und Power https://www.ebay.de/itm/PCF8574T-IO-Extension-Module-IO-Expansion-Shield-IIC-I2C-W-DIP-Swith-F-Arduino/272549808632?hash=item3f753c09f8:g:pf4AAOSw9GhYmsHG https://www.ebay.de/itm/PCF8574-PCF8574T-I2C-8-Bit-IO-GPIO-expander-module-for-Arduino-Raspberry-Pi/162741807388?hash=item25e42ae91c:m:mW66N0eK5JbmCNjcbocU3gw https://www.ebay.de/itm/PCF8574T-IO-Extension-Module-IO-Expansion-Shield-IIC-I2C-W-DIP-Swith-F-Arduino/263540446008?hash=item3d5c3c1338:g:qUsAAOSwqu1aooq~ ab 1,-€ und Stromtreiber 100µA für die Tasten als pullup liefert er auch schon mit Wichtig Abfrage und Tasten auf LOW/GND!
:
Bearbeitet durch User
https://www.ebay.de/itm/10PCS-TTP223-Capacitive-Touch-Switch-Button-Self-Lock-Module-Sensor-for-Arduino/222726613292?epid=2176313094&hash=item33db8a692c:g:Ax4AAOSwdSRaEuOa 10 Stück für 1,37€ find ich jetzt nicht soooo teuer
Lothar M. schrieb: > Ich würde da gar keine Matrix machen, sondern einfach ein paar > Schieberegister hintereinander hängen Bei 144 ? Ist das dumm. Es gibt auch keine besondere Anforderung die Multiplex verhindern würde. Alle PC Tastaturen decodieren im Multiplex. Und auch analog veränderliche Widerstände kann man analog in einer Matrix abfragen wenn jeder eine Diode in Reihe hat. Man braucht dann Analogmultiplexer und timt z.B. die Aufladezeit eines Kondensators über den ausgewählten Widerstand.
MaWin schrieb: > Bei 144 ? Ja, warum denn nicht? > Ist das dumm. Ja, immer ein offenes Wort, ganz der sozialkompetente MaWin, wie man ihn kennt. Aber als Argument lasse ich es nicht durchgehen, da musst du dir was Besseres ausdenken. Ich finde die Verwendung von ein paar Schieberegistern einfach, nachvollziehbar und linear skalierbar. Da kann man direkt am Schieberegister-Pin den Pegel nachmessen und vergleichen, ob der zum eingelesenen Ergebnis passt. Und auf ein paar µs beim Einlesen kommt es tatsächlich nicht mehr an, wenn der selbe µC 144 WS28xx-LED ansteuert. > Es gibt auch keine besondere Anforderung die Multiplex verhindern würde. Aber das Wissen und Können des TO. > Alle PC Tastaturen decodieren im Multiplex. Du hast echt alle PC-Tastaturen schon mal aufgeschraubt? > Und auch analog veränderliche Widerstände kann man analog in einer > Matrix abfragen wenn jeder eine Diode in Reihe hat. > Man braucht dann Analogmultiplexer und timt z.B. die Aufladezeit eines > Kondensators über den ausgewählten Widerstand. Weiß ich, kann ich, mache ich. Aber du meinst doch nicht ernsthaft, dass das der TO die nächsten Tage hinbekommt. Und zuverlässig ist diese Methode nur dann, wenn man damit Potis einliest, die einen menschlichen Regelkreis schließen. Leg so eine Schaltung mal in einen Klimaschrank....
Lothar M. schrieb: > sozialkompetente ist in der Moderatorenschaft auch nicht sehr oft vorhanden, wenn ich z.B. aus Suppentassen kriechen soll ohne das der Mod überhaupt wusste worums es ging. Klar kann man Schieberegister nehmen für 256 Tasten 16x16 z.B. 32 Stück a 8 Bit oder man nimmt 4 2 für Spalten 2 für Zeilen etliche pullup Array, aber der TO fängt gerade erst an, da finde ich zum ersten Üben die PCF Variante nicht so verwerflich.
Für 144 Tasten gingen auch 4 Stück HT16K33. Jeder fragt 39 Tasten ab und steuert bei Bedarf auch noch 128 Leds an. Nicht ganz preiswert, aber I2C.
Mister A. schrieb: > PCF8574 ist hier superschön erklärt: > https://www.mikrocontroller.net/articles/Port-Expander_PCF8574 > ... und der kleine schluckt alleine schon 80mA, seine 4 Brüder sind mit > 200mA noch hungriger. Dann das ganze noch 4x :( ??? Was sind das für Phantasiezahlen?
Beitrag #5457513 wurde von einem Moderator gelöscht.
Lothar M. schrieb: > Ich finde die Verwendung von ein paar > Schieberegistern einfach, nachvollziehbar und linear skalierbar. Das finde ich auch und habe deshalb immer ein paar Stangen CD4021 im Regal ;-) Gerade, wenn auseinanderliegende Eingänge abgefragt werden sollen, ist die Kaskadierbarkeit nebst geringem Aufwand bei der Verkabelung von großem Vorteil. Der TO soll er gerne so machen. Bei einer Tastenmatrix 12x12 in quadratischer Anordnung ist wegen der einfacheren Verkabelung die Multiplexabfrage günstiger. Wenn es darum geht, dem µC möglichst wenige Pins abzunötigen, kann man die Ausgabe der Spalten mit 2 x 4094 und die Abfrage der Zeilen mit 2 x 4021 Schieberegistern (o.ä.) ausführen. Das wäre für den TO mit einem deutlichen Lerneffekt verbunden, wobei ich mir allerdings nicht sicher bin, ob das für ihn in überschaubarer Zeit umzusetzen ist. Wie ich ihn einschätze, kann der TO das derzeit nicht selber entscheiden. Auch halte ich Lösungen mit zusätzlichem IIC Überhang für nicht geeignet.
Es gibt ICs als Tastaturdecoder zu kaufen. Ich habe noch einige SDA2008, die speziell für das Decoding von Fernbedienungen gedacht sind. Teilweise sind die bis 1024 Tasten verwendbar. Das reicht auch für chinesische Tastaturen mit vollem Zeichensatz (und mehreren Shift-Ebenen). Robert
Wolfgang schrieb: > Was sind das für Phantasiezahlen? Da hat wohl einer "µA" mit "mA" verwechselt... Zur Tastenmatrix: Wenn sicher immer nur eine einzige Taste gedrückt wird, könnte man es vielleicht mit 4 Pins und ohne extra ICs machen. An die 12 Spalten und an die 12 Zeilen jeweils einen Spannungsteiler (12 gleiche Rs, z.B. 100 Ohm). z.B. zum Auslesen der Spalten: einen Zeilen-Pin auf Ausgang high, den anderen auf low, Spannung an einem der Spaltenpins messen. Zum Auslesen der Zeilen umgekehrt. Zum Erkennen von "keine Taste" die Eingänge jeweils über einen hochohmigen Pullup-Widerstand auf VDD ziehen.
Thomas E. schrieb: > Wenn sicher immer nur eine einzige Taste gedrückt wird, könnte man es > vielleicht mit 4 Pins und ohne extra ICs machen. Wie wäre ein Analogeingang, und den Spannungsteiler so auslegen, das eine von 144 Spannungen mit dem 10 bit A/D erkannt wird ? Störungen dürften hat maximal 2 bit ausmachen.
MaWin schrieb: > Störungen dürften hat maximal 2 bit ausmachen. Dagegen sprechen Übergangswiderstände (Anpresskraft, Oxidation, Verdrahtung), Temperatureffekte, Spannungsschwankungen und zig andere Gründe, die man aber erst hinterher beim Namen nennen kann. Im Besonderen kann man dann nicht mal mehr erkennen, ob zufällig mehrere Tasten gedrückt sind...
Lothar M. schrieb: > Im Besonderen kann man dann nicht mal mehr erkennen, ob zufällig mehrere > Tasten gedrückt sind... Das war ja Voraussetzung Thomas E. schrieb: > Wenn sicher immer nur eine einzige Taste gedrückt wird Lesen ist offrnkundig nicht deine Stärke.
Vielen Dank für die zahlreichen Antworten. Da ist ja einiges an Ideen und Möglichkeiten eingeflossen. Mensch seid ihr Top! besonders gefallen hat mir "Ausgabe der Spalten mit 2 x 4094 und die Abfrage der Zeilen mit 2 x 4021 Schieberegistern (o.ä.) ausführen" Ich mache mich nun an die Arbeit und teste eins nach dem anderen. Das braucht Zeit. Ich hoffe nur, dass es nicht bei der erstfunktionierenden Lösung bleit bzw. endet :)
:
Bearbeitet durch User
Beitrag #5462383 wurde von einem Moderator gelöscht.
m.n. schrieb: > Bei einer Tastenmatrix 12x12 in quadratischer Anordnung ist wegen der > einfacheren Verkabelung die Multiplexabfrage günstiger. Wenn es darum > geht, dem µC möglichst wenige Pins abzunötigen, kann man die Ausgabe der > Spalten mit 2 x 4094 und die Abfrage der Zeilen mit 2 x 4021 > Schieberegistern (o.ä.) ausführen. darf ich kurz nochmal nachfragen? Das mit den 4021 verstehe ich jetzt. Konnte auch ein paar Beispiele finden. - shiftin: https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftin/ - parallel to serial shifting: https://www.arduino.cc/en/Tutorial/ShiftIn - oder mit 74HC165: https://playground.arduino.cc/Code/ShiftRegSN74HC165N 4021 = 8 Bit SchiebeRegister, Eing par / ser, Ausg ser 4094 = 8 Bit SchiebeRegister, Eing ser, Ausg par / ser, ZwischenSpeicher, TS Der 4094 iritiert mich jetzt. Genauer gesagt, wie die Schematik damit aussehen soll. Was spricht eigentlich gegen 4x 4021? Heute konnte ich die 4021, 4094 und sogar einen PCF8574 i2c auftreiben. Somit ist grünes Licht für den Testaufbau.
Mister A. schrieb: > Der 4094 iritiert mich jetzt. Genauer gesagt, wie die Schematik damit > aussehen soll. Was spricht eigentlich gegen 4x 4021? Was ist "Schematik"? Ein 4021 hat acht Eingänge. Für 144 Eingänge braucht man folglich 18 Stück. Ein 4094 hat acht Ausgänge. Zwei Stück davon können 16 Spalten treiben, wobei bei Dir nur 12 davon benötigt würden. Zeichne mal einen Schaltplan, wie Du die Taster abfragen möchtest. Bei Multiplexabfrage sollte auch jeder Taster ein Diode zur Entkopplung bekommen, um eine eindeutige Zuordnung zu erhalten, wenn mehrere Tasten gleichzeitig gedrückt sind.
Charlieplexing wäre hier vielleicht sinnvoll. Dann brauch man aber vollwertige (I/O) Portexpander.
Experte schrieb: > Charlieplexing wäre hier vielleicht sinnvoll. Dann brauch man aber > vollwertige (I/O) Portexpander. Daß es hier um das Einlesen von Tastern geht, hast Du natürlich sofort gerafft. Gerne darfst Du uns Deine Schaltung zeigen und auch Deine "Vollwert"-Expander.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.