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
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
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.
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.
Hier übrigens noch eine gute Beschreibung zum PS2 Tastatur Protokoll. http://www.marjorie.de/ps2/start.htm
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!!!
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
Verwendest Du die Silikon-Tastatur von KEYSONIC ACK-109 BL ???
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
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
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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.