Forum: Mikrocontroller und Digitale Elektronik Tastatur an serielle Schnittstelle mit Puffer?


von Henning K. (super-pooh)


Lesenswert?

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?

von Jörn G. aus H. (Gast)


Lesenswert?

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

von Jörn G. aus H. (Gast)


Lesenswert?

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

von Henning K. (super-pooh)


Lesenswert?

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.

von Karl heinz B. (heinzi)


Lesenswert?

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.

von Olaf K. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.