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
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
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