Forum: Mikrocontroller und Digitale Elektronik PS2 Tastatur mit 8051 core auslesen


von Andreas K. (oldcoolman)


Angehängte Dateien:

Lesenswert?

Hallo Profis,

Ich habe ein board mit nem c509 drauf und möchte eine PS2 Tastatur
mit auslesen. Ich hab mir den code im anhang aus dem forum geholt
und aus meien assembler angepasst.(syntax der label usw)

leider funktioniert es nicht.

ich habe auf t0 die clk
auf p3.4 die data.

an p3.3 frage ich mit einem logik tester den pegel ab.
Dieser reagiert auch uf sehr kuze impulse (zBSp ALE)
am ende der interuptroutine setze ich den port 3.3 wieder auf high.

in den Zeilen,in denen jedes clocksignal "ankommt" habe ich
bei jedem tastendruck und loslassen Signal.

ab der Stelle mit 9.bit habe ich nur noch bei jedem 8 drücken signal.
also bei jeder 16.übertragung.

eine ausgabe auf die ausgabevariable erfolgt überhaupt nicht.

kann mir jemand helfen.

(pullups haben auch nix gebracht)

nette Grüße

Andreas

von Andreas K. (oldcoolman)


Lesenswert?

Hallo nochmal,

also ich hab das ja jetzt hingekriegt mit ner normalen ps2
Tastatur. Ich wollte aber eine silikonTastatur einsetzen.
Diese hat einen PS2/USB Kombi-Anschluß. Sie sendet ständig
den code AA was bedeutet, daß der selbsttest erfolgreich abgeschlossen 
ist.
Sie sendet diesen code ständig in kurzen Abständen und keinen anderen,
auch dann nicht,
wenn man eine Taste betätigt. Die Tastatur arbeitet am PC angeschlossen
(PS2Anschluß)einwandfrei. Ich denke daß der Host eine Aktion ausführen
muß,um festzustellen ob PS2 oder USB angesagt ist.

Hat irgendjemand ne Ahnung was es sein muß?

nette Grüße

ANdreas

von Rahul D. (rahul)


Lesenswert?

Rumgestochere:
Möglicherweise werden für USB (noch) andere Pins des Steckers verwendet, 
der im Normalfall nicht von einer PS/2-Tastatur belegt/benutzt wird.
Vielleicht muß ein Pin irgendwie noch beschaltet werden, damit die 
Tastatur erkennt, dass sie als PS/2 betrieben werden soll (eigentlich 
Quatsch, da sie vermutlich auch einen älteren PC einfach so 
funktionieren müsste).
Oder der USB-Treiber für Tastaturen sendet noch etwas spezielles nach 
der Initialisierung.

von Dirk H. (arm-dran)


Lesenswert?

Rahul Der trollige wrote:
> Rumgestochere:
> Möglicherweise werden für USB (noch) andere Pins des Steckers verwendet,
> der im Normalfall nicht von einer PS/2-Tastatur belegt/benutzt wird.
> Vielleicht muß ein Pin irgendwie noch beschaltet werden, damit die
> Tastatur erkennt, dass sie als PS/2 betrieben werden soll (eigentlich
> Quatsch, da sie vermutlich auch einen älteren PC einfach so
> funktionieren müsste).
> Oder der USB-Treiber für Tastaturen sendet noch etwas spezielles nach
> der Initialisierung.

Blödsinn,

ich hab eine komplette Produktreihe auf einem Dallas 80C320 und 
Anbindung einer PS2 Tastatur realisiert. Funktioniert einwandfrei. Nur 
scheint mir diese Routine etwas suspekt, da die Tastatur keinerlei ASCII 
Code liefert.
Die PS2 Tastaturen beherrschen normalerweise SET1 SET2 und mache aber 
wenige SET3. Diese müssen nachher in die entsprechenden ASCII Codes 
umgewndelt werden. SET3 ist zwar das beste und logischtste nur wurde es 
von vielen Herstellern aufgrund des erhöhten RAM Bedarfs (jeder Taste 
kann ein individuelles Verhalten zugewiesen werden) nicht mehr 
implementiert.
Deswegen habe ich SET2 realisiert und das läuft mit allen Tastaturen mit 
PS2 Stecker, auch wenn sie einen USB Adapter haben. Die Erkennung ob PS2 
oder USB gewünscht ist, übernimmt die Tastatur.
Sie ist übrigens auch der Taktmaster.

Wenn Du Sie auf einem Controller realisierst, sollte der Prozessor auch 
ausreichend Geschwindigkeitsreserven aufweisen.

von Dirk H. (arm-dran)


Lesenswert?

Hier übrigens noch eine gute Beschreibung zum PS2 Tastatur Protokoll.


http://www.marjorie.de/ps2/start.htm

von Andreas K. (oldcoolman)


Lesenswert?

Hallo nochmal,

@Dirk

Die Seite kenn ich schon fast auswendig angeb

Ich hab eine bestehende Routine genommen. Diese macht aus einem 
angepaßten
scancode ein newton-code. Das ist nicht das problem. newton habe ich
auskommentiert. Umsetzung in ascii steht noch an,ist aber auch nicht das
Problem. Die Sache funzt mit einigen Tastaturen die nur PS2 machen gut.

Nur eben die Silikontastatur, die auch USB kann gibt ständig und nur
AA von sich. An einen PC angeschlossen funktioniert sie wie gesagt
einwandfrei.
Ich habe jetzt erst mal probiert einen Reset zu machen(beide 
Signalleitungen auf 0, dann die data hoch, wait, danach die clk hoch)
-> auch kein Erfolg.

Vielleicht hast du da was initialisiert, was ich nicht tu?
Hast du eine routine geschrieben,die code an die tastatur sendet?


Also bei dir ging das mit USB/PS2......immer ich!!!

von Dirk H. (arm-dran)


Lesenswert?

Natürlich musst Du die PS2 Tastatur nach dem einschalten initialisieren.
Du musst festlegen, welches SCAN Code Set Du verwendest. Code AA wird 
als
Startkennung gesendet.
Manche Tastaturen senden es nur einmal, manche fortlaufend, bis zur
Konfiguration.
Du verwendest die Tastatur doch hoffentlich nicht nur lesend?
Benutzte auf keinen Fall SET3 !!!
Es steht nicht fest, in welchem SET die Tastatur nach dem einschalten 
startet. Manche haben garkein SET3.
Verwendest Du die Routine aus Deinem Anhang???

Gruß

Dirk

von Dirk H. (arm-dran)


Lesenswert?

Verwendest Du die Silikon-Tastatur von KEYSONIC ACK-109 BL ???

von Andreas K. (oldcoolman)


Lesenswert?

Hallo Dirk,

schön,daß du dich so gut auskennst.

Ich verwende eine noname Tastatur. das schöne, sie kostet 12 euronen.
ich verwende diese routine vom ANhang, ist aber schon wieder von mir
abgeändert. mir war beim convertieren zu meinem assembler ein Fehler
unterlaufen. und zwar in der Zeile wo das 9.Bit abgefragt wird.
das nachfolgende Label muß direkt vor JNC... und nicht 1 zeile später
stehen. desswegen funktionierte es nicht.

ich hatte gelesen, daß wenn man nichts konfiguriert automatisch set3
eingestellt ist.

Bis jetzt verwende ich die Tastatur nur lesend. Das würde mir auch 
reichen,
wenn nicht bei dieser dem Anschein nach eine init notwendig ist.

Hättest du da technische infos drüber, bzw eine bessere Assembler 
routine?

netten gruß#

Andreas

von Dirk H. (arm-dran)


Angehängte Dateien:

Lesenswert?

Hallo Andreas,

erst mal folgendes zur Routine.
Die von Dir verwendete, wird über den externen Interrupt 0 gesteuert.
Das heisst, ein Schreiben auf díe Tastatur ist nicht möglich.

Beim PS2 Protokoll ist die Tastatur der Clockmaster.
Durch definiertes "herunterziehen (0)" der Takt und/oder Datenleitung
kann man die Datenrichtung bestimmen.

Meine Routine erzeugt bei einer MF-105 kompatiblen Tastatur
Windows kompatible Reaktionen.
So zum Beispiel auch das CAPS-Lock verhalten seid "ich glaub" WINXP.
Es ist auch möglich noch viele Reaktionen auf Tastenkombinationen oder
Sondertasten "Multimedia" hinzuzufügen.

Da die PS2 Routine aus mehreren Teilen besteht (Timerinterrupt, normale 
Serviceroutine, Tastaturpuffer und Konvertierungstabellen) muß ich Sie 
erst mal aus meiner Appliaktionen herauslösen.
Durch die Tabellen, ist Sie für alle Tastenerweiterungen ohne 
Programmänderungen vorbereitet.
LEDs werden auch entsprechend der Tasten NUM-Lock, CAPS-Lock usw. 
geschaltet.

Ich gebe Dir schon mal eine Exeltabelle in der die SET2 Code Aufteilung
beschrieben ist. Da wirst Du vielleicht einige bekannte Sachen 
wiederfinden.

Mit welcher Taktfrequenz läuft Dein C509???

Gruß

Dirk

von Andreas K. (oldcoolman)


Lesenswert?

Hallo Dirk,
das schau ich mir gleich an ;-)

der 509 läuft mit 16.000000 MHz. Wie du sicher weißt ist er ein
6clk Prozessor.
was hälst du eigentlich von Ihm? Ich kann hier nur atmel avr arm
lesen..??
Ist er am Ende schon abgekündigt, oder ist da noch ne Zukunft?

nette Grüße

Andreas


PS: da ist ein schreibfehler gewesen....
Ich hatte gelesen, daß standartmässig SET 2 und nicht set3 eingestellt 
ist.

von Dirk H. (arm-dran)


Lesenswert?

Andreas Krieger wrote:

> der 509 läuft mit 16.000000 MHz. Wie du sicher weißt ist er ein
> 6clk Prozessor.
> was hälst du eigentlich von Ihm? Ich kann hier nur atmel avr arm
> lesen..??

Also um ganz ehrlich zu sein, Infineon ist so unötig wie ein Kropf.
Mehr möchte ich mich darüber nicht auslassen.

> Ist er am Ende schon abgekündigt, oder ist da noch ne Zukunft?

Ja das ist er allerdings.
Brauchst nur mal unter diesem Link ganz unten schauen.
DISCONTINUED !!!
Infineon hat keine Eigenkreativität und hängt stark an der Automotive 
Industrie.

http://www.infineon.com/cgi-bin/ifx/portal/ep/channelView.do?channelId=-70992&channelPage=%2Fep%2Fchannel%2FproductCategories.jsp&pageTypeId=17099

Es gibt mittlerweile soviel Derivate vom MCS-51, daß man kaum noch den 
Überblick behält.
Um nur einige Bekannte zu nennen

Atmel
ST
NXP
Dallas-Maxim
Silicon Labs
Analog Devices
OJI
Sharp
Infineon (!?!?!?!)
Texas Instruments
Winbond
usw.

Die wohl für den Privatanwender am leichtest zu bekommenden C51 
kompatiblen
sind wohl die von Atmel.
Silabs hat Typen bis 100MHZ (1Cycle) max. 100 MIPS



>
> nette Grüße
>
> Andreas
>
>
> PS: da ist ein schreibfehler gewesen....
> Ich hatte gelesen, daß standartmässig SET 2 und nicht set3 eingestellt
> ist.

von Andreas K. (oldcoolman)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

Ich hab übers wochenende eine routine programmiert die codes zu einer
Tastatur sendet.
sie antwortet stehts mit FC
Die Infos hab ich aus verschiedenen seiten. leider widersprechen die 
sich.

einmal heißt es , die daten werden ab der ersten steigenden Flanke des

clk signals von der tastatur übernommen. ein andermal heißt es, die
daten werden bei der nächsten fallenden flanke übernommen.

ersteres erscheind mir logischer.

http://homepages.fh-regensburg.de/~fam39454/ie_lab/download/PMC_V3_Tastatur.pdf

und in dieser seite der link zur der anderen.

von Dirk H. (arm-dran)


Lesenswert?

Andreas Krieger wrote:
> Hallo nochmal,
>
> Ich hab übers wochenende eine routine programmiert die codes zu einer
> Tastatur sendet.
> sie antwortet stehts mit FC

Síe muß mit 0FAh antworten !!!


> Die Infos hab ich aus verschiedenen seiten. leider widersprechen die
> sich.
>

Die von MARJORIE sind aber absolut korrekt und funktionieren.
Man muß nur ein bischen testen um es zu verstehen.

> einmal heißt es , die daten werden ab der ersten steigenden Flanke des
>
> clk signals von der tastatur übernommen. ein andermal heißt es, die
> daten werden bei der nächsten fallenden flanke übernommen.
>

Ich habe mir Deine Routine mal angesehen und dabei entshehen für mich 
folgende Problematiken.
Wenn Du den Takt über INT0 als Interrupt auswertest, wie benutzt du dann 
das Timeout, falls die Übertragung ausser Tritt kommt ?
Wenn Du P3.2 auf 0 ziehst erzeugst Du dir selbst einen INT0.
Deswegen benutze ich den Timerinterrupt, um beide Eingänge abzuscannen.
Kostet nur wenig mehraufwand.
Sollte der Takt der Tastatur spinnen, haut er Dir über INT0 das 
komplette System kaputt.

> ersteres erscheind mir logischer.
>

Die ein- und ausgehenden Daten sind zwischen fallender und steigender 
Flanke gültig.

> http://homepages.fh-regensburg.de/~fam39454/ie_lab/download/PMC_V3_Tastatur.pdf
>
> und in dieser seite der link zur der anderen.

Wenn Du Interesse hast, poste ich den Code für diese Schnittstelle,
wie gesagt aber mit Timer INT.
Muß dazu die Routine vom Restprogramm abtrennen und etwas dokumentieren.

Es wird dann eine fast WINXP kompatible Verhaltensweise repäsentiert.

Gruß

Dirk

von Andreas K. (oldcoolman)


Angehängte Dateien:

Lesenswert?

Hallo Dirk,

ich habe die Routine nochmal geändert.

Sie hat mir die ganze zeit eben einiges durcheinander gebracht.
F9 hat zB 01h als scancode. nachdem ich die funtion senden
aufgerufen hab ergab ein drücken von F2 scan 02 !

ich hab jetzt nochmal bei wiki studiert.

Dort kann man erkennen,daß nach dem die data low ist erst ein
clk ausgegeben wird und erst vor der nächsten fallenden Flanke
das erste datenbit kommen muß (Startbit). Ich hatte das aus den
anderen Seiten so ersehen,daß das fallende DTA für die Tastatur
das startbit ist und nach der darauf generierten clk das erste
Bit des Befehls erwartet wird. Dem Anschein nach stimmt das so
aber nicht.

Ich habe ein Startbit eingefügt.
(dadurch stimmen jetzt die Kommentare nicht mehr überein)
Jetzt kommt im Moment nichts durcheinander,weil ich ein Byte schicken
kann,und hinterher die scancodes usw noch passen.
ABER
die Tastatur pfeift mir trotzdem was, sie antwortet mit FE

ich zweifle an der Richtigkeit meiner Paritätsbit-Generierung.
Allerdings eine Invertierung brachte auch kein Erfolg

kannste dir das mit der Parität mal angucken?

Timeout ist freilich noch nicht gemacht....bin doch noch am Anfang ;-)

muß zugeben, daß da in der empfangsroutine ein send-bit abgefragt
und dann zur send-routine gejumpt und später wieder zurück ans ende
der empfangsroutine ist keine saubere programierung.
Aber ich denke du hast das alles richtig gesehen.

Gruß

Andreas


Ps:

Deine routine würde mich schon interessieren, vielleicht finde ich dann
den Fehler. es würde ja reichen,wenn es nur die send routine ist.




von Andreas K. (oldcoolman)


Angehängte Dateien:

Lesenswert?

Hallo,

ENDLICH bekomm ich von der Tastatur ein FA....AA. So muß es sein!

Danke Dirk! dein letzter post hat mir geholfen. Ich hatte mir
selbst ein INT0 generiert.
Da ist kein extra Startbit.
Allerdings hätte das genauso funktionieren müssen, fur die routine
ist es egal ob das ein selbstgeneriertes INT0 oder ein durch 
tastatur-clk
geführtes startbit ist.beides wurde ja ignoriert.
Der Fahler auch daran, daß ich nach dem rr a vergessen hatte mittels
mov keytemp,a rück zu sichern.

einen wunderschönen Abend an alle

nette Grüße

Andreas

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.