Forum: Mikrocontroller und Digitale Elektronik Aufzeichen von Daten PC Tast in Logfile


von Berny (Gast)


Angehängte Dateien:

Lesenswert?

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

von Markus Kaufmann (Gast)


Lesenswert?

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

von Berny (Gast)


Lesenswert?

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

von Sebastian Wille (Gast)


Lesenswert?

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

von Berny (Gast)


Lesenswert?

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

von Sebastian Wille (Gast)


Lesenswert?

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

von Berny (Gast)


Lesenswert?

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

von Michael Kiausch (Gast)


Lesenswert?

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

von Michael Kiausch (Gast)


Lesenswert?

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

von Berny (Gast)


Lesenswert?

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

von Michael Kiausch (Gast)


Angehängte Dateien:

Lesenswert?

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

von Berny (Gast)


Lesenswert?

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

von Sebastian Wille (Gast)


Lesenswert?

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

von Stefan Heindel (Gast)


Lesenswert?

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

von Berny (Gast)


Lesenswert?

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)

von Michael Kiausch (Gast)


Lesenswert?

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

von Berny (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael Kiausch (Gast)


Lesenswert?

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