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!
Mach es doch über eine A/D -Wandler. Da brauchste nur einen Port und gut ist. An jedem Schalter einen Widerstand und dann auslesen.
Les dir erst einmal die Tutorien dieser Seite durch. Vor allem den Abschnitt Porterweiterung und UART. Dass ist genau dass was du brauchst. der ATmega8 hat übrigens mehr als 8 I/O's
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.
Danke, vieles verstehe ich allerdings noch nicht wirklich :) Ich werd mir morgen mal ein Atmega8 besorgen und mich in den Tutorials weiter arbeiten. Dann frag ich eventuell nochmal hier nach :)
Dein Eröffnungsposting klingt allerding danach, als ob du noch überhaupt keine Erfahrung mit µC hast. Daher der gut gemeinte Rat: Leg dein Projekt erst mal zur Seite und sieh zu, dass du Schalter erst mal normal, direkt an einem µC Pin, abfragen kannst.
Naja, ich würd eher ein Schieberegister für 10 Ausgänge und ein anderes für 10 Eingänge verwenden -> Matrix Tastatur. AD Wandler und 1 Port: bei 100 Tastern??? Zeig mir das mal.
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..
Für dich dürfte der KeyWarrior von CodeMercs ideal sein. > KeyWarrior8 Chips unterstützen Tastaturen mit bis zu 8x8 Tasten. > * USB > * Kundenspezifische Tastenbelegung, in-System programmierbar > * Verfügbar im SSOP48 Gehäuse oder DIL40 Modul http://www.codemercs.com/index.php?id=38&L=1
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?
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.
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.
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?
@Vlad aber bei einer Tastenmatrix kann ich doch wieder nicht jeden Druck erkennen oder? Also wenn z.B. 20 Tasten auf einmal gedrückt werden will ich ja genau erkennen welche 20 es sind.
Vlad Tepesch schrieb: > eine simple 8x16 Tastenmatrix Ich würde 2 * 74HC164 nehmen (= 16 Ausgänge) und die 8 Eingänge direkt vom ATmega8 mit internen Pullups. Sollen mehr als 2 Schalter geschlossen sein, braucht jeder Schalter noch ne Diode in Reihe. Peter
Timo schrieb: > Also wenn z.B. 20 Tasten auf einmal gedrückt werden will > ich ja genau erkennen welche 20 es sind. Du schiebst ein 0-Bit raus und liest das Eingangsbyte ein. Dann schiebst Du 12-mal weiter und liest jedesmal das Byte ein. Und diese 13 Byte haben dann 104 Bits, eins je Schalter. Peter
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"?
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.
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 :)
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.