Viele Schalter verarbeiten

Gast #1811678
Lesenswert?

Hallo,
ich habe vor eine Platte mit 100 Schaltern zu versehen und würde gerne 
dann mit Hilfe eines Atmega8 die Zustände (An/Aus) an den Computer 
schicken.
Der Atmega8 hat ja (soweit ich das beurteilen kann) nur 8 Ausgänge. 
Jetzt hab ich hier ein bisschen gesucht und würde diese mit einem bzw. 
wohl eher mehreren Schieberegistern erweitern.
Dann könnte ich doch die Daten über das TXD-Pin des Atmega8 an die 
serielle Schnittstelle (welche genau?) meines PCs senden!? Werden 
eigentlich jedes Mal alle Zustände übertragen oder könnten auch nur die 
Zustände übertragen werden, die sich geändert haben?
Man merkt, dass ich die ganzen Zusammenhänge erst sehr oberflächlich 
verstehe und daher wäre es super, wenn mir jemand genauer erklären 
könnte wie das alles Zusammenhängt, was ich für mein Vorhaben vielleicht 
nochmal genauer lesen sollte und was ich mir eigentlich außer dem 
Atmega8 genau kaufen müsste.
Vielen Dank schonmal!
#1811691
Lesenswert?

Schieberegister sind schon okay.

Du nimmst einfach 3 GPIO Pins deines Megas:

1 - Input
2 - Clock
3 - Strobe

Dann:

1. Impuls auf Strobe geben, dadurch übernehme die Schieberegister den 
aktuellen Wert, der von aussen angelegt ist in das interne Register.
2. Ein Clock Impuls geben.
3. Ein internes Hilfsregister (also ein Byte in deinem mega) einmal nach 
links schieben
4. Das Signal an deinem Input einlesen und in an Bit 0 des 
Hilfsregisters kopieren.
5. Schritt 2 bit 5 insgesamt 8 mal wiederholen
6. Prüfen, ob TX_COMPLETE der Uart gesetzt ist. (also warten)
7. Hilfsregister nach UDR0 kopieren.
8. Bei 1. oder 2. fortsetzen

Das ist das Grundprinzip.
Du könntest auch erst alle werte einlesen und dann in einem Frame 
übertragen, damit die Syncronisation gegeben ist.
Gast #1812161
Lesenswert?

Timo schrieb:
> Hallo,
> ich habe vor eine Platte mit 100 Schaltern zu versehen und würde gerne
> dann mit Hilfe eines Atmega8..

Was mich immer wieder ein wenig wundert ist, dass das Werkzeug 
ausgewählt wird, bevor das Problem eigentlich durchdacht oder verstanden 
wurde..
Gast #1814125
Lesenswert?

Mh aber 8x8 wären ja nicht genug...
Ich hatte noch eine Idee, wie ich mit einem Ausgang 4 Schalter abfragen 
könnte von der ich aber nicht genau weiß ob sie klappt:
Die genauen Werte weiß ich jetzt nicht aber wenn ich z.B. aus dem 
Ausgang PD0 10V rausschicke, dann könnte ich doch die Schaltung im 
Anhang dahinterschalten. Die Zahlen an den Widerständen sollen nur 
Verhältnisse darstellen. Die Schalter gelten in diesem Fall als gedrückt 
wenn sie offen sind. Sind alle Schalter zu fließen die 10V. Drücke ich 
nun z.B. Schalter 1 und Schalter 3 muss der Strom über zwei Widerstände 
fließen. Einmal mit "1" und einmal mit "4". Sinn würde es machen, wenn 
die "8" für 5 Ohm steht. die "4" für 2,5 Ohm die "2" für 1,25 Ohm und 
die "1" für 0,62 Ohm.
Wenn ich nun Schalter 1 und 3 drücke bleibt also von den 10V nur noch 
10V - 2,5 - 0,62 = 6,88V. Wenn ich nun diesen Wert irgendwie messen 
könnte, ließe sich daraus ja immer genau sagen, welche Schalter gedrückt 
wurden.
Warscheinlich hab ich gerade Ohm und Volt ziemlich stümperhaft vermischt 
aber das Prinzip ist hoffentlich klar geworden.
Ich schicke eine Spannung raus und je nach gedrücktem Knopf werden 
Widerstände zugeschaltet, die sich exponentiell erhöhen. Dadurch kann 
dann, wenn die Spannung gemessen wird, ein Rückschluss auf die 
gedrückten Knöpfe gezogen werden.
Kann das so Funktionieren? Wie würde ich die Spannung denn eigentlich 
messen?
Angehängte Dateien:
Gast #1814138
Lesenswert?

Wie ich oben schon geschrieben habe.
Man sollte auch lesen was jemand schreibt.
Häng einen Widerstand dran am Schalter und lies den
Wet mit einem A/D Wandler ein und werte es aus.
Wenn es mit einem Port zu eng wird, dann nimm halt 2 oder 3 oder
wieviel du auch immer willst.
#1814156
Lesenswert?

Stefan schrieb:
> Wie ich oben schon geschrieben habe.
> Man sollte auch lesen was jemand schreibt.
> Häng einen Widerstand dran am Schalter und lies den
> Wet mit einem A/D Wandler ein und werte es aus.
> Wenn es mit einem Port zu eng wird, dann nimm halt 2 oder 3 oder
> wieviel du auch immer willst.

Lass die AD Wandler weg, was soll das?
eine simple 8x16 Tastenmatrix mit entweder
1 x SIPO und 2 x PISO SRs oder
2 x PISO und 1 x SIPO SRs

die kann man alle Kaskadieren und an eine SPI hängen.
die Eingaberegister dann wieder an MISO

für ersteres:

Man schiebt dann 1 byte mit einem gesetzten Bit rein.
latcht die Ausgabe.
latcht die Eingabe und schiebt 2 bytes raus, wo man dann die eingehenden 
Bytes benutzt.
Gast #1814159
Lesenswert?

Sorry das hatte ich zu Beginn nicht richtig verstanden.
Aber das Problem ist ja, dass ich jeden Schalter erkennen will. Wenn ich 
bei jedem Schalter den gleichen Widerstand ranhänge würde es ja kein 
Unterschied machen, ob ich z.B. Schalter 1 und 2 oder Schalter 1 und 3 
drücke. Um das Problem zu Lösen ist mir halt nur der exponentielle 
Anstieg der Widerstände eingefallen. Die Frage ist dann jetzt nur, ob so 
ein A/D Wandler hier fein genug ist um die Unterschiede zu erkennen?
Gast #1815066
Lesenswert?

Ok danke, ich denk ich werd erstmal ohne Schieberegister anfangen und 
wenn es klappt was zum Computer zu senden mich dann mal zunächst an 
einem davon versuchen :)
Mir ist gerade noch etwas eingefallen: Ein billiges (Musik-)Keyboard hat 
ja eigentlich auch mehrere Tasten und man kann auch viele auf einmal 
drücken. Wie machen die das denn da? Hat der µC dann vielleicht einfach 
massig Eingänge oder benutzen sie da auch Schieberegister? Sonst könnte 
ich ja vielleicht etwas von einem Keyboard "zweckentfremden"?
#1815158
Lesenswert?

Timo schrieb:
> Ein billiges (Musik-)Keyboard hat
> ja eigentlich auch mehrere Tasten

Wenn das billige Midi-Keyboard einen MIDI-Ausgang hat, können 128 
verschiedene Tasten Unterschieden werden. Der Trick bei Midi ist, dass 
nur Änderungen übertragen werden. Die Anschlagstärke bekommst du quasi 
geschenkt noch dazu. Wenn dein Rechner einen 
15Pol-Analog-Joystick-Anschluss besitzt, sind da meist auch Midi in und 
Midi out mit drauf. Das wäre also ne Lösung. Es gibt auch recht günstige 
USB-MIDI-Adapter.

In so billigen MIDI-Keyboards sitzt zum Tastendruck-Erkennen meist ein 
ASIC(Anwendungs-Spezifisches IC). Die Anschlagstärke wird durch einen 
Trick ermittelt: eigentlich sind es zwei Schalter pro Taste, die kurz 
hintereinander betätigt werden. Es wird die Zeit zwischen diesen beiden 
Tastendrücken gemessen; Kürzer=="du hast stärker auf die Taste 
gehauen"==Mehr Anschlagstärke.

mfg mf

PS: An Unterlagen zu den ASICs zum Abfragen der Tasten komt man meist 
nur schlecht ran. Einfacher wäre es das Teil direkt n den Rechner zu 
hängen.
BTW: Es gibt auch USB-MIDI-Keyboards, die dann direkt an den Rechner 
gesteckt werden. Das Adaptergefummel oder die Schaltung an den 15pol 
Anschluss entfällt dann.
Gast #1815281
Lesenswert?

Ah danke, sehr interessant!
Dann müssen die ja sogar 256 (2 * 128) Schalter verarbeiten?!
(Wie genau ist also nicht bekannt?)
Das wäre natürlich eine Idee ein fertiges USB-Keyboard zu nehmen. Ist 
nur fragwürdig ob ich das so zerlegt kriege, dass es in meine Box passt 
:)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren