Ich möchte eine normale Tastatur, ein Nummernblock würde ausreichen, an der RS232 anschliessen. Das ist gar nicht das grosse Problem, aber ich möchte, dass die Tastatureingaben gepuffert werden bis die Entertaste gedrückt wird und dann erst der String an die serielle Schnittstelle geschickt wird. Wie mache ich das am einfachsten?
Sehr ungenaue Frage! Welcher Controller, welche Programmiersprache, was ist genau dein Problem? Meine Warsagekugel rät mir, mal für AVR und GCC zu antworten: Du definierst dir einfach ein array: char buffer[1000]; In dieses schreibst du die daten und erhöhst bei jedem zeichen den zeichenzähler: buffer[i++] = tastencode; Bei enter sendest du einfach den buffer und setzt den counter dann wieder auf 0: if( tastencode == '\n' ) //linefeed als beispiel für enter { RSputs( buffer ); //zeichen senden i=0; } Ganz einfach. Die Codeschnippsel sind natürlich nur ein Beispiel-frei-Schnauze. Die Sendefunktion kann dann so aussehen:
1 | static void RSputs(const char *s) //fuer : "mit Inverter" (MAX) |
2 | {
|
3 | register char c; |
4 | |
5 | while( (c = *s++) ) |
6 | {
|
7 | loop_until_bit_is_set(UCSR1A, UDRE1); //warten auf UART frei |
8 | UDR1 = c; |
9 | }
|
10 | |
11 | }//RSputs() |
Jörn
Da du geschrieben hast, dass das "Anschliessen kein Problem" sei - ging ich einfach mal davon aus, dass weist, dass man "normale" (USB oder PS2) Tastaturen nicht "einfach" an die Serielle anschliessen kann... oder? Dass du also einen Controller dazwischenschalten mußt und willst... Nur nochmal sicherheitshalber... jörn
Hallo Jörn! Ich bin einige Jahre raus aus der Controllerbastelei und in den letzten 5-7 Jahren gibt es doch einige "Neuheiten" die ich noch nicht kenne. Ich weiss zwar theroretisch wie es zu machen ist, aber praktisch geht es mit aktuellem Wissen besser. Daher habe ich erstmal ganz neutral gefragt. Ich möchte einen seriellen Barcodescanner durch eine Tastatur (Ziffernblock) ersetzen. Die Zahlen (3-7 Stellen) müssen über den seriellen Port in den Rechner, aber in einem Stück. An dem Rechner sind mehrere Barcodescanner angeschlossen und wenn ich keinen Puffer benutze, kann es passieren, dass die Software die beiden Eingaben durcheinander wirft. Wenn an der Tastatur 1234 eingegeben wird, und gleichzeitig würde ein Scanner mit Barcode 5678 benutzt, hätte die Software im Eingabfeld 125678 und es käme zu einer Fehlermeldung. An der Software kann ich nichts ändern (ist nicht von mir und ich habe auch kein Quellcode). Bei www.tastaturen.com gibts die KSQ-22, aber die hat keinen Puffer und ich weiss auch nicht was für ein Controller drin ist und ob man da was dran umbauen kann. Welcher Controller ist am besten geeignet? Ein max232 werde ich wahrscheinlich auch noch brauchen. Auch die Möglichkeit ein Display anzuschliessen wäre schön.
Verstehe ich dich jetzt richtig: Du moechtest einen fertigen Tastaturblock einsetzen, der bereits ueber eine serielle als Ausgang verfuegt? Wenn ja: Du kannst jeden AVR nehmen, der ueber 2 UARTS verfuegt. Theoretisch kuennte man die Hardware UART auch durch Software UART ersetzen. Allerdings ist der Preisunterschied von ATTiny's zu ATMega's nun auch nicht sooo gealtig. Und wenn Du sowieso eine LCD anhaengen moechtest :-) Schau doch mal bei Atmel vorbei, dort gibt es irgendwo eine Tabelle mit allen AVR's und was die koennen. Wenn das LCD nicht waere, dann koenntest Du Dein Problem auch mit dem Allerkleinsten von denen loesen (Software UART), einem AtTiny 12. Such einfach mal welcher AVR ueber 2 UART's verfuegt. Dann schau nach ob der bei Reichelt (oder Conrad) lieferbar ist. Schau Dir die Tutorials auf dieser Seite durch, was Du sonst noch brauchst (Stromversorgung, Schaltung zum flashen, LCD) und dann kanns auch schon losgehen. Softwaremaessig ist Dein Problem nicht so schwer.
Falls nicht bekannt: Es gibt eine Application Note zum Anschluß von normalen PC-Tastaturen (PS/2 oder DIN, dazu zählen auch PS/2-Ziffernblöcke) an AVR-Controller: Siehe AVR313. Dort ist schon ein Beispiel für ein Tastatur-nach-RS232-Interface, das paßt ja schon fast. Tastaturseitig wird übrigens kein UART benötigt. Die Tastatureingaben braucht man dann nur zu puffern (Ringpuffer), und wenn "Enter" als Scancode dabei ist, alles zum UART rausschieben. Will man die Eingaben auf einem Display anzeigen, muß man die Scancodes erst nach ASCII wandeln. Als Controller dürfte z.B. ein 90s2313 bzw. der neuere tiny2313 locker reichen, um das über den UART per RS232 an den PC zu senden, noch einen MAX232 dazwischen. Sehe ich das richtig, daß Scanner und Tastatur an verschiedenen COM-Ports am PC hängen? Verlangt die PC-Software eigentlich irgendeine Art Flußsteuerung (z.B. RTS/CTS) oder/und ein Fehlerprotokoll? Falls ja, und das nicht abstellbar ist, könnte die Sache etwas schwieriger werden. MfG Olaf
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.