Guten Abend Ich bin noch halbwegs neu in der Welt der Mikrocontroller. Nun mache ich mich daran ein PS/2 Signal mit einem AT-Mega8 zu emulieren (Tastatur emulieren). Ich frage mich nun wie man am besten die Sache angeht zur Signalerzeugung. Benutzt man dazu normalerweise einen Timer, der immer zur nächsten Signaländerung ein Interrupt auslöst? Ausserdem noch eine Frage zur Taktung. Momentan läuft der Mega8 mit dem Internen Takt von 1MHz. Da die einzelnen Signaländerungen zum Teil etwa 25 us auseinander sind, denke ich, dass das also ein wenig zu knapp ist, oder? Lieber mit einem 8 - 16 MHz Quarz takten? Und wie würde man das ganze etwa angehen, wenn man alles Klassenbasiert (also allgemein und weiterverwendbar) gestalten möchte? Oder ist das wegen dem Gebrauch von Timern und Interrupten nicht mehr zu empfehlen? Oder nicht üblich? Grüsse Arnold
Arnold schrieb: > Und wie würde man das ganze etwa angehen, wenn man alles Klassenbasiert > (also allgemein und weiterverwendbar) gestalten möchte? Oder ist das > wegen dem Gebrauch von Timern und Interrupten nicht mehr zu empfehlen? Je näher an der Hardware, desto weniger wiederverwendbar. Gut wäre es, wenn du den Zugriff auf dein Tastaturemulationsmodul als Funktionen präsentierst, die immer gleich sind. Interrupt- bzw. Timerbasierte Sachen kannst du z.B. so lösen, dass du in einer "Hardwarenahen Interrupt-/Timer-C-Source", die nur für das aktuelle Projekt gültig ist, die ISR selbst schreibst. In der ISR wird nichts anderes getan, als z.B. eine pstwo_timer_tick()- Funktion Aufzurufen. So müsstest du in jedem Projekt, wo du das verwendest, immer nur den Timer neu einstellen, in der ISR die Funktion aufrufen und das wars. Für Portzugriffe definiert man sich Makros, z.B. #define PSTWO_PORT PORTA #define PSTWO_DDR DDRA #define PSTWO_PIN PINA #define PSTWO_DATA (1<<PA1) #define PSTWO_CLOCK (1<<PA2) #define PSTWO_CLK_SET PSTWO_PORT|=PSTWO_CLOCK #define PSTWO_CLK_CLR PSTWO_PORT&=~PSTWO_CLOCK #define NAECHSTER_PLANMAESSIGER_HALT BERLIN_HBF Die kommen in eine pstwo_config.h und Konfigurieren das Keyboard-Modul. mfg mf PS: Deine Geschichte vice versa, vielleicht was zum "abschauen" dabei: http://www2.htw-dresden.de/~beck/Atmel/Keyboard/PS_2-keyboard.html Beyondlogic über PS/2 Tastenbretter: http://retired.beyondlogic.org/keyboard/keybrd.htm Und das Ganze als USB-Gerät mit in Software emuliertem USB1.1: http://obdev.at/products/vusb/prjhid.html
Vielen Dank für die Ansätze :) Ich werde mich heute ans Versuchen machen. Noch zu der Frage, welche Taktung für diese Aufgabe geeignet wäre. Natürlich kann ich einfach auf 16MHz takten, aber ich möchte auch gerne selbst abschätzen können, was man da etwa so braucht. Das Signal benötigt änderungen ja etwa all 25us. Was gerade mal 25 Taktzyklen bedeuten würde. Neben dem PS/2 Signal sollte auch noch der UART zeichen empfangen können. Daher denke ich, dass das viel zu wenig ist?
Arnold schrieb: > ollte auch noch der UART zeichen > empfangen Das macht er doch von selbst. Interruptgetrieben würde sich Polling erübrigen. Arnold schrieb: > Das Signal benötigt änderungen ja etwa all 25us. Was gerade mal 25 > Taktzyklen bedeuten würde. Betreib den Mega8 doch mit 8MHz oder 16MHz. Dann wird das weniger knapp. Den Takt gibt eine PS/2-Tastatur doch selbst vor, da kann man bei Bedarf auch "bremsen". Du kannst natürlich mit einer viel kleneren Datenrate in den PS/2 rein senden. 10kHz Clock gehen laut Beyondlogic. Irgendwie kann man doch bestimmt den USI eines ATtiny dazu zweckentfremden. Ein ATmega8 hätte da auch noch TWI; die Logik zum Startcondition erzeugen etc. ist da auch schon drin. Nur: man bräuchte irgendwie 9Bit, wie ich das bei Beyondlogic so sehe... mfg mf
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.