-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: PS/2 Tastatur an ATMEGA 8

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.06.2004
    Beiträge
    43

    PS/2 Tastatur an ATMEGA 8

    Anzeige

    Hallo zusammen,
    ich bin am verzweifeln.
    Ich habe im Buch von Claus Kühnel (AVR mit Bascom programmieren) das mit der PS/2 Tastatur versucht. Hat nicht funktioniert, es wurden keinerlei Daten über die Ser.Schnittstelle ausgegeben. Nur der Text wurde angezeigt. Ich habe mich dann durch Internet gesucht und die versch. Dinge versucht, aber ich hatte keinen Erfolg. Ich habe eine neue PS/2 Tastatur. Mit dem Oszi sehe ich auch den Takt und die Daten auf den Pins.

    Kann mir bitte jemand ein funktionierendes .hex File mit Pin belegung zukommen lassen damit ich weis ob es an mir ligt oder an der Tastatur.
    Habt ihr sonst irgendwelche Ideen an was es liegen kann.

    Kann es auch an den Fuse Bits liegen?

    Gruss
    Stefan

    Hier mal den letzten Code

    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    Config Keyboard = Pinc.1 , Data = Pinc.0 , Keydata = Keydata

    Dim B As Byte

    Print "Eingabetest von PC-AT-Tastatur"

    'Portd.7 = 1

    Do
    B = Getatkbd() ' Abfrage der Tastatur
    If B > 0 Then
    Print Chr(b)
    End If

    Loop
    End


    Keydata:
    ' Shift-Taste nicht gedrückt
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
    Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
    Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
    Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
    Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
    Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
    Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

    ' Shift-Taste gedrückt
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
    Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
    Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
    Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
    Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
    Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Stefan,

    für dieses Projekt:

    http://www.gerold-online.de/cms/index.php?id=136

    hab ich die Datenleitung auf den externen Interrupt 0 gelegt und dann Taste = Getatkbd() in diesem Interrupt erledigt. Ohne Interrupt hab ichs auch nicht hinbekommen

    Gruß Günter

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.06.2004
    Beiträge
    43
    Hallo Günter,
    Danke, oweh Interupt hört sich schon wieder kompliziert an.

    Gruss
    stefan

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Ich habs mal ganz ohne den Befehl gemacht.
    Also Datenleitung auf irgend nen Pin, Clock auf nen Interrupt. Und dann einfach die Bits zu Fuss abfragen. Hat den Vorteil, dass eben das Programm selbst nicht blockiert und man auch "freier" ist, da dort auch Sondertasten erkannt werden können, die der Bascom-Befehl z.B. nicht kennt.
    #ifndef MfG
    #define MfG

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Stefan,

    wichtig ist, daß die Leitung Data an Pin D6 kommt. An diesem Pin ist der Interrupt 0 herausgeführt. Sobald der ATMega an dem Pin eine fallende Flanke sieht, wird ISR0 ausgeführt:

    Dim Taste As Word
    On Int0 Isr0
    Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
    Enable Int0
    Config Int0 = Falling
    Enable Interrupts

    do
    'dein genialer Code
    if taste > 0 then print chr(Taste)
    loop

    Isr0: 'interrupt routine
    Taste = Getatkbd()
    return

    Code ist ungeprüft, hoffentlich habe ich auf die Schnelle nix übersehen...

    P.S. schau dir mal Keydata aus meinem Beispiel an, da sind auch äöü und ß richtiggestellt...

    Günter

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    12.06.2004
    Beiträge
    43
    Hallo Günter,
    irgendwo ist da der Wurm drin. Ich bekomme keine Daten von der Tastatur.

    Gruss
    Stefan

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Stefan,

    schreib mal ein:

    print "test" in die Interruptroutine um festzustellen:

    -wird der Interrupt überhaupt ausgelöst,
    -werden überhaupt Daten zur ser. Schnittstelle gesandt.

    Günter

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    12.06.2004
    Beiträge
    43
    Hallo Günter,
    wenn ich den print "test" in die Int rotut. eintrage und eine Tase auf der Tastatur drücke kommen massen an Test an de ser Schnittstelle an aber sonst nichts.

    Das geht schon mal.

    Gruss
    Stefan

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Stefan,

    das ist doch schonmal was!
    Es kommen Pulse an, diese werden auch im Inetrrupt behandelt und ausgegeben.
    Dann würde ich mal auf vertauschte Data und Clockleitung tippen, oder auf ne defekte Tastatur. Jedenfalls wird der Fehler außerhalb des ATMega liegen.

    Günter

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Idee: Mal die Interrupts zählen und im Sekundentakt ausgeben lassen.
    Ist die Zahl nach bei jedem Tastendruck gleich, hängt die Clock-Leitung dran. Variiert die, dann isses Data.
    #ifndef MfG
    #define MfG

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •