Hallo Leute, kenne mich nicht so besonders mit der Programmierung des Atmel aus und habe mich festgerammelt. Ich hole mir die Daten einer PC Tastatur, wandle über Tabellen den Scancode und gebe diesen auf eine 2x16 LCD. Bin bei dem E0 Scancode's und kann nicht herausfinden, in welcher Zeichenfolge sie von der Tast gesendet werden. Haben eine LED Anzeige 0-FF angeklemmt, aber die Zeichen kommen zu schnell, um Sie mit dem Auge zu unterscheiden. Frage, wie kann ich am schnellsten ein Logfile erstellen und auslesen, in dem Ich alle Zeichen die reinkommen aufzeichnen kann. Programm in Assembler auf AT90S2313 Studio 4.0 und Ponnyprog. Danke schon mal und Gruß Berny
Du nimmst halt einen Speicherbereich (z.B. 16 Bytes) und schreibst da die Werte nacheinander rein. In Basic oder C würde man ein Array nehmen, hier mußt Du das eben von Hand machen. Oder hast Du was anderes gemeint? bye Markus
Danke Markus, genau das habe ich gemeint. Letzte Fragen, wie schreibe ich überhaubt etwas in den Speicher und kann ich mit PonnyProg den Speicher auslesen. PS. Du bist aber auch noch lange am Basteln
Hi, 1. Idee: Sende die Zeichen sofort auf das UART (z.B. 19200 Baud). Dann kannst Du's am PC in Ruhe anschauen. 2. Idee: Die Zeichen im SRAM "zwischenlagern". Du speicherst z.B. 20 Zeichen im SRAM (per push) und wenn Du bei 20 angelangt bist (brauchst halt 'nen Zähler!) rufst Du ein Unterprogramm auf, daß den SRAM ausliest (per pop) und in Ruhe auf das UART oder das Display mit Wartepausen ausgibt. Ist natürlich nur sinnvoll, wenn man nach ein paar Zeichen mal 'ne Pause hat für's ausgeben, sonst gehen ja in der Zeit Daten verloren! Grüße, Sebastian
Danke Sebastian, ich muss die Daten nicht sofort sehen, da das Programm schon recht stabil läuft. Push und Pop vehindert, das ich Unterprogramme aufrufe - keine Rücksprungadresse. Kann ich nicht direkt ins EEprom schreiben, da ich dieses ja wieder mit Ponny auslesen kann. Und wenn wie geht das? Gruß Berny
Hi Berny, internes EEPROM geht auch, ich habe allerdings das interne EEPROM noch nie ansteuert und kann daher keine Tips geben. Schau' doch mal hier auf der Seite in der Codesammlung oder bei Atmel, die haben auch App-Notes. Allerding dauert das Schreiben eines Byte ca. 10ms, über das UART geht's viel schneller! Bei 19200Baud, 1920 Byte/Sek.!!! Warum also so "umständlich"? Grüße, Sebastian
Hallo Sebastian, das wuste ich nicht, ist nee PC Tasttatureingabe 9600/11 Byte/Sec 1/873=0,0011 sec je Zeichen. Stimmt ist zu langsam. UART habe ich einiges gelesen, muss ich erst einen Pegelwandler in die Schaltung bauen. Danke und Gruß Berny
hi, will dir ja nicht den spass verderben, aber warum guckste die scancodes nicht einfach auf http://panda.cs.ndsu.nodak.edu/%7Eachapwes/PICmicro/keyboard/scancodes2.html nach?? ich mein mann muss ja nicht unbedingt das rad zweimal erfinden :)
achso... und vielleicht solltest du mal in das codebeispiel das ich im thread http://www.mikrocontroller.net/forum/read-1-31215.html angehängt habe mal schauen, ich hab mir nämlich schonmal die mühe gemacht die lookup tabelle zu bauen... da sind auch schon ansätze drin, die breakcodes und sonderzeichen rauszufiltern, ausserdem unterscheidet der zwischen groß und kleinbuchstaben hth gruß Michael
Hi Michael, danke für den Tip, aber die Seiten kenne ich schon. Das Problem war, das die Shift Taste zusammen mit den E0 Scan's vor Ausführung des Scancodes einen E0 Break veranstaltet und dies hatte ich vorher noch nirgends gefunden. Das gleiche am Ende der Übertragung wird ein E0 und dan noch einmal der Shift Scancode mit Break übertragen. Das zu Rädern. Ich habe keine Ahnung von Atmel Befehlssätzen und diese Umsetzung dient meinem alten NDR-Klein weil die 8 Bit Parallel Tastatur nur noch Klick macht, aber keine Zeichen mehr spuckt. Ich kenne zum Glück die Assembler Programmierung vom 68000 und Z80. Wenn beides gemischt wird ergibt das seltsamer weise genau den Befehlssatz des AT90S2313. Ich habs aber fast hinbekommen. Nur noch ein paar Tabellen und Auswertungen, dann ist geschafft. Hoffe Trotzdem allen an dieser Stelle dank für eure Hilfe, denn einiges der Atmel Eigenheiten sind mir fremd und ich muss umbedingt eine neue Tastur an meinen alten Rechner bringen, da es keine 8Bit parallel Tastaturen mehr gibt - Freund arbeitet bei Cherry! Gruß Berny and Good Night
Also soweit ich das noch weiss kannst du die E0's einfach gefahrlos "übersehen" WENN du auf die unterscheidung zwischen linker und rechter shift, linker und rechter strg, enter auf alphanumerischen teil und enter am numblock usw VERZICHTEN kannst... ich hab nochmal meinen quelltext für nen atmel at90s4433 angehängt, dadrin werden (die meisten) E0 scancodes schon ausgewertet, ist alles ein bisschen chaotisch geschrieben, aber mit 2 mal lesen sollte sich da schon was brauchbares draus ableiten lassen können Gruß Michael
Danke Michael, konnte einiges gebrauchen und habe die Eingabe von der Tast fast fertg, funz prima. Muss nur noch die LED's steuern. Ich habe leider keine Literatur für die Atmel, was bedeutet die Syntax sbr status, 1<<ctrl , ist dieser Befehl = LDI? Gruß Berny
Hi Berny, sbr heißt "set bit in register". In Deinem Fall also: Setze das Bit, das "ctrl" heißt, im Register namens "status". Grüße, Sebastian
Quote Berny "...kenne mich nicht so besonders mit der Programmierung des Atmel aus und habe mich festgerammelt." lol das letzte Wort muss ich unbedingt in meinen Wortschatz übernehmen ;) Gruss Stefan
Hi Stefan, mann hilft wo mann kann!! Zum Thema ich hab's fast geschafft (bin freigekommen) und die LED's an der Tast.. leuchten. An dieser Stelle dank allen die mir den Weg gezeigt haben, hoffe ich kamm das irgendwann wieder gut machen. Gruß Berny PS Er lebt doch der NDR-Klein (mit neuer Tastatur)
Hi Berny, Kannste ja gerne mal versuchen gutzumachen, wäre ganz nett wenn du deinen code mal (auszugsweise) posten oder mailen könntest, wäre ganz praktisch wenn ich die host-to-keyboard kommunikation übernehmen könnte, die hab ich noch nicht fertig. hast du schon error-checking eingebaut, vorallem ne routine die das paritybit auswertet? wäre sehr nett, würd mir das zwar auch selber zusammenschustern, aber warum das rad zweimal erfinden? Gruss Michael
Hallo Michael, ist natürlich nicht perfekt, ist mein erstest Programm, ich hoffe Du findest was brauchbares. Das größte Problem war, das sich die Tastatur beim starten nicht initialisiert hat. Habe das ganze mit einem 33 Ohm Widerstand in + Leitung Tast und 250µF C als Puffer hinbekommen. Der Tastaturprozessor wollte immer Zeichen senden bevor die Pullups high waren und hat dann auf Takt vom Atmel gewartet. Vielleicht hilfts Gruß Bernhard
hmja, stellenweise ein bisschen chaotisch, aber doch sicherlich hilfreich, vielen dank erstmal. also bei mir hat das ganze OHNE den puffer funktioniert, das keyboard sollte nämlich eigentlich seine ausgabe puffern, wenn die clockline low ist, und das ist ja der fall solange der pullup nicht an ist (glaube ich auf jeden fall) :) bis dann, gruß Michael
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.