- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Anleitung: Tastatur einbinden

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    39
    Beiträge
    685

    Anleitung: Tastatur einbinden

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich habe von euch soviel gelernt, dass ich natürlich so viel wie nur möglich zurückgeben will (einiges ist aber immernoch im Aufbau).

    Vielleicht ist der eine oder andere beim integrieren einer Tastatur, so kann ich evtl. helfen

    Ziel:
    Nutzung eines Ports (adc)
    Mehrfachbelegung der Tastatur

    Vor einiger Zeit sah ich ein Schema zu einer Tastatur über Spannungsteiler (sieht aus wie eine Matrix) von Manf.
    Das war mein Leitfaden.

    Nun hatte ich eine schöne simple Tastatur von einem Kumpel erhalten.
    Diese wollte ich über einen analogen Port auswerten.
    Die Bilder zur Tastatur sind im Anhang, die Farben ziehen sich durch alle Blätter - einheitlich).
    Auf der Rückseite sind 2 Layer angebracht, die eine für die Umrandung und die andere für den Druckpunkt der Tasten. Den mittleren Layer konnte man mit einer Taschenlampe "verfolgen" (von anderer Seite durchleuchten).

    Als die Hardware erledigt war, kam das programmieren. Da gab es gleich das Problem mit der Spannung. Diese müsste absolut konstant sein, wenn man direkt mit den Spannungswerten arbeitet.
    Also habe ich der Tastatur 2x 100nF und einen 4,7yF Elko spendiert (siehe Zeichnung) und die Spannungen ausgelesen und die Werte aufgeschrieben.
    Nun habe ich den Werten einen Toleranzbereich zugeordnet, indem etwas passiert (indem Fall einfach print ""). Jedoch war das sinnlos, da der Wert absolut identisch bleibt, falls die Spannungsquelle exakt identisch bleibt. Also habe ich danach mit den exakten Werten programmiert.

    Aber was ist, wenn man die Spannungsquelle wechseln muss, oder ähnliches. Es reicht schon eine Differenz in 1/100 Bereich, um den erhaltenen Wert im 1/10 Bereich zu verändern.
    Es blieb mir nichts anderes übrig, als alles abzuspeichern. Da Volt als single gespeichert ist, lag es auf der Hand alle Tastenspannungen auch als single abzuspeichern und vergleichen zu lassen.

    Jetzt kann man durch die jeweilige Taste etwas im terminal anzeigen lassen, auf dem LCD, oder einen anderen Port damit steuern.
    Zuvor muss man alle Tasten einmal drücken, diese Spannungswerte werden dann abgespeichert.
    Man kann somit auch auf andere Spannungsquellen problemlos umsteigen.

    Die Tastatur hat aber noch andere Zeichen (Mehrfachbelegung), also habe ich die "Ctrl", "Shift" und die "Alpha" Taste zum Umschalten missbraucht. Später kann ich dafür einen entsprechenden Schalter benutzen.
    Nur die Taste "0" und die "3" haben sich überschnitten, sodass ich die Taste "Alt" als "0" betreibe.

    abgespeckter Code (habe nur die Demo):
    Code:
      $regfile = "m32def.dat"
      $framesize = 32
      $swstack = 256
      $hwstack = 128
      $crystal = 16000000
      $baud = 9600
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Pina.0 = Input
    Config Pina.7 = Input
    Const Ref = 5 / 1023
    
    Dim Volt As Single
    Dim Ws As Word
    Dim T1 As Single
    Dim T2 As Single
    Dim T3 As Single
    Dim T4 As Single
    Dim T5 As Single
    Dim T6 As Single
    Dim T7 As Single
    Dim T8 As Single
    Dim T9 As Single
    Dim T10 As Single
    Dim T11 As Single
    Dim T12 As Single
    Dim T13 As Single
    Dim T14 As Single
    Dim T15 As Single
    Dim T16 As Single
    Dim T17 As Single
    Dim T18 As Single
    Dim T19 As Single
    Dim T20 As Single
    Dim T21 As Single
    Dim T22 As Single
    Dim T23 As Single
    Dim T24 As Single
    Dim T25 As Single
    Dim T26 As Single
    Dim T27 As Single
    Dim T29 As Single
    Dim T30 As Single
    
    Declare Sub Initialisierung
    Declare Sub Speichern
    Declare Sub Terminal
    
    Do
    Print "start"
    Gosub Speichern
    Print "terminal"
    Gosub Terminal
    
    Loop
    
    Sub Terminal
    Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          If Volt = T1 Then
          Print "F1"
          Waitms 500
          Elseif Volt = T2 Then
          Print "F2"
          Waitms 500
          Elseif Volt = T3 Then
          Print "Pfeilnachoben"
          Waitms 500
          Elseif Volt = T4 Then
          Print "Esc"
          Waitms 500
          Elseif Volt = T5 Then
          Print "Backslash"
          Waitms 500
          Elseif Volt = T6 Then
          Print "F3"
          Waitms 500
          Elseif Volt = T7 Then
          Print "Pfeilnachlinks"
          Waitms 500
          Elseif Volt = T8 Then
          Print "Pfeilnachunten"
          Waitms 500
          Elseif Volt = T9 Then
          Print "Pfeilnachrechts"
          Waitms 500
          Elseif Volt = T10 Then
          Print "Stern"
          Waitms 500
          Elseif Volt = T11 Then
          Print "F4"
          Waitms 500
          Elseif Volt = T12 Then
          Print "7"
          Waitms 500
          Elseif Volt = T13 Then
          Print "8"
          Waitms 500
          Elseif Volt = T14 Then
          Print "9"
          Waitms 500
          Elseif Volt = T15 Then
          Print "Plus"
          Waitms 500
          Elseif Volt = T16 Then
          Print "F5"
          Waitms 500
          Elseif Volt = T17 Then
          Print "4"
          Waitms 500
          Elseif Volt = T18 Then
          Print "5"
          Waitms 500
          Elseif Volt = T19 Then
          Print "6"
          Waitms 500
          Elseif Volt = T20 Then
          Print "Punkt"
          Waitms 500
          Elseif Volt = T22 Then
          Print "1"
          Waitms 500
          Elseif Volt = T23 Then
          Print "2"
          Waitms 500
          Elseif Volt = T24 Then
          Print "3"
          Waitms 500
          Elseif Volt = T25 Then
          Print "Enter"
          Waitms 500
          Elseif Volt = T29 Then
          Print "Komma"
          Waitms 500
          Elseif Volt = T30 Then
          Print "0"
          Waitms 500
          End If
          Loop
          End Sub
    
    
    Sub Initialisierung
    
          Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          Loop Until Volt > 0
          End Sub
    
    Sub Speichern
          Gosub Initialisierung
          T1 = Volt
          Print "F1"
          Waitms 500
          Gosub Initialisierung
          T2 = Volt
          Print "F2"
          Waitms 500
          Gosub Initialisierung
          T3 = Volt
          Print "Pfeilnachoben"
          Waitms 500
          Gosub Initialisierung
          T4 = Volt
          Print "ESC"
          Waitms 500
          Gosub Initialisierung
          T5 = Volt
          Print "Backslash"
          Waitms 500
          Gosub Initialisierung
          T6 = Volt
          Print "F3"
          Waitms 500
          Gosub Initialisierung
          T7 = Volt
          Print "Pfeilnachlinks"
          Waitms 500
          Gosub Initialisierung
          T8 = Volt
          Print "Pfeilnachunten"
          Waitms 500
          Gosub Initialisierung
          T9 = Volt
          Print "Pfeilnachrechts"
          Waitms 500
          Gosub Initialisierung
          T10 = Volt
          Print "Stern"
          Waitms 500
          Gosub Initialisierung
          T11 = Volt
          Print "F4"
          Waitms 500
          Gosub Initialisierung
          T12 = Volt
          Print "L"
          Waitms 500
          Gosub Initialisierung
          T13 = Volt
          Print "M"
          Waitms 500
          Gosub Initialisierung
          T14 = Volt
          Print "N"
          Waitms 500
          Gosub Initialisierung
          T15 = Volt
          Print "Plus"
          Waitms 500
          Gosub Initialisierung
          T16 = Volt
          Print "F5"
          Waitms 500
          Gosub Initialisierung
          T17 = Volt
          Print "Q"
          Waitms 500
          Gosub Initialisierung
          T18 = Volt
          Print "R"
          Waitms 500
          Gosub Initialisierung
          T19 = Volt
          Print "S"
          Waitms 500
          Gosub Initialisierung
          T20 = Volt
          Print "Punkt"
          Waitms 500
          Gosub Initialisierung
          T21 = Volt
          Print "Ctrl"
          Waitms 500
          Gosub Initialisierung
          T22 = Volt
          Print "U"
          Waitms 500
          Gosub Initialisierung
          T23 = Volt
          Print "V"
          Waitms 500
          Gosub Initialisierung
          T24 = Volt
          Print "U"
          Waitms 500
          Gosub Initialisierung
          T25 = Volt
          Print "Enter"
          Waitms 500
          Gosub Initialisierung
          T26 = Volt
          Print "Shifttaste"
          Waitms 500
          Gosub Initialisierung
          T27 = Volt
          Print "Alpha"
          Waitms 500
    
          Gosub Initialisierung
          T29 = Volt
          Print "Komma"
          Waitms 500
          Gosub Initialisierung
          T30 = Volt
          Print "Alt"
          Waitms 500
          End Sub
    
    End
    vollständiger Code (so soll er aussehen, aber ich kann ihn nicht testen, da er für die Demo zu groß ist ---> muss mir wohl die Vollversion kaufen ):
    Code:
      $regfile = "m32def.dat"
      $framesize = 32
      $swstack = 256
      $hwstack = 128
      $crystal = 16000000
      $baud = 9600
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Pina.0 = Input
    Config Pina.7 = Input
    Const Ref = 5 / 1023
    
    Dim Volt As Single
    Dim Ws As Word
    Dim T1 As Single
    Dim T2 As Single
    Dim T3 As Single
    Dim T4 As Single
    Dim T5 As Single
    Dim T6 As Single
    Dim T7 As Single
    Dim T8 As Single
    Dim T9 As Single
    Dim T10 As Single
    Dim T11 As Single
    Dim T12 As Single
    Dim T13 As Single
    Dim T14 As Single
    Dim T15 As Single
    Dim T16 As Single
    Dim T17 As Single
    Dim T18 As Single
    Dim T19 As Single
    Dim T20 As Single
    Dim T21 As Single
    Dim T22 As Single
    Dim T23 As Single
    Dim T24 As Single
    Dim T25 As Single
    Dim T26 As Single
    Dim T27 As Single
    Dim T29 As Single
    Dim T30 As Single
    
    Declare Sub Initialisierung
    Declare Sub Speichern
    Declare Sub Terminal
    Declare Sub Erstbelegung
    Declare Sub Zweittbelegung
    Declare Sub Dritttbelegung
    
    Do
    Print "start"
    Gosub Speichern
    Print "terminal"
    Gosub Terminal
    
    Loop
    
    Sub Speichern
          Gosub Initialisierung
          T1 = Volt
          Print "F1"
          Waitms 500
          Gosub Initialisierung
          T2 = Volt
          Print "F2"
          Waitms 500
          Gosub Initialisierung
          T3 = Volt
          Print "Pfeilnachoben"
          Waitms 500
          Gosub Initialisierung
          T4 = Volt
          Print "ESC"
          Waitms 500
          Gosub Initialisierung
          T5 = Volt
          Print "Backslash"
          Waitms 500
          Gosub Initialisierung
          T6 = Volt
          Print "F3"
          Waitms 500
          Gosub Initialisierung
          T7 = Volt
          Print "Pfeilnachlinks"
          Waitms 500
          Gosub Initialisierung
          T8 = Volt
          Print "Pfeilnachunten"
          Waitms 500
          Gosub Initialisierung
          T9 = Volt
          Print "Pfeilnachrechts"
          Waitms 500
          Gosub Initialisierung
          T10 = Volt
          Print "Stern"
          Waitms 500
          Gosub Initialisierung
          T11 = Volt
          Print "F4"
          Waitms 500
          Gosub Initialisierung
          T12 = Volt
          Print "L"
          Waitms 500
          Gosub Initialisierung
          T13 = Volt
          Print "M"
          Waitms 500
          Gosub Initialisierung
          T14 = Volt
          Print "N"
          Waitms 500
          Gosub Initialisierung
          T15 = Volt
          Print "Plus"
          Waitms 500
          Gosub Initialisierung
          T16 = Volt
          Print "F5"
          Waitms 500
          Gosub Initialisierung
          T17 = Volt
          Print "Q"
          Waitms 500
          Gosub Initialisierung
          T18 = Volt
          Print "R"
          Waitms 500
          Gosub Initialisierung
          T19 = Volt
          Print "S"
          Waitms 500
          Gosub Initialisierung
          T20 = Volt
          Print "Punkt"
          Waitms 500
          Gosub Initialisierung
          T21 = Volt
          Print "Ctrl"
          Waitms 500
          Gosub Initialisierung
          T22 = Volt
          Print "U"
          Waitms 500
          Gosub Initialisierung
          T23 = Volt
          Print "V"
          Waitms 500
          Gosub Initialisierung
          T24 = Volt
          Print "U"
          Waitms 500
          Gosub Initialisierung
          T25 = Volt
          Print "Enter"
          Waitms 500
          Gosub Initialisierung
          T26 = Volt
          Print "Shifttaste"
          Waitms 500
          Gosub Initialisierung
          T27 = Volt
          Print "Alpha"
          Waitms 500
    
          Gosub Initialisierung
          T29 = Volt
          Print "Komma"
          Waitms 500
          Gosub Initialisierung
          T30 = Volt
          Print "Alt"
          Waitms 500
          End Sub
    
    Sub Initialisierung
    
          Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          Loop Until Volt > 0
          End Sub
    
    Sub Terminal
    Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          If Volt = T21 Then
          Gosub Erstbelegung
          Elseif Volt = T26 Then
          Gosub Zweittbelegung
          Elseif Volt = T27 Then
          Gosub Dritttbelegung
          End If
          Loop Until Volt > 0
          End Sub
    
    
    Sub Erstbelegung
    Print "Erstbelegung"
    Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          If Volt = T1 Then
          Print "F1"
          Waitms 500
          Elseif Volt = T2 Then
          Print "F2"
          Waitms 500
          Elseif Volt = T3 Then
          Print "Pfeilnachoben"
          Waitms 500
          Elseif Volt = T4 Then
          Print "Esc"
          Waitms 500
          Elseif Volt = T5 Then
          Print "Backslash"
          Waitms 500
          Elseif Volt = T6 Then
          Print "F3"
          Waitms 500
          Elseif Volt = T7 Then
          Print "Pfeilnachlinks"
          Waitms 500
          Elseif Volt = T8 Then
          Print "Pfeilnachunten"
          Waitms 500
          Elseif Volt = T9 Then
          Print "Pfeilnachrechts"
          Waitms 500
          Elseif Volt = T10 Then
          Print "Stern"
          Waitms 500
          Elseif Volt = T11 Then
          Print "F4"
          Waitms 500
          Elseif Volt = T12 Then
          Print "7"
          Waitms 500
          Elseif Volt = T13 Then
          Print "8"
          Waitms 500
          Elseif Volt = T14 Then
          Print "9"
          Waitms 500
          Elseif Volt = T15 Then
          Print "Plus"
          Waitms 500
          Elseif Volt = T16 Then
          Print "F5"
          Waitms 500
          Elseif Volt = T17 Then
          Print "4"
          Waitms 500
          Elseif Volt = T18 Then
          Print "5"
          Waitms 500
          Elseif Volt = T19 Then
          Print "6"
          Waitms 500
          Elseif Volt = T20 Then
          Print "Punkt"
          Waitms 500
          Elseif Volt = T22 Then
          Print "1"
          Waitms 500
          Elseif Volt = T23 Then
          Print "2"
          Waitms 500
          Elseif Volt = T24 Then
          Print "3"
          Waitms 500
          Elseif Volt = T25 Then
          Print "Enter"
          Waitms 500
          Elseif Volt = T29 Then
          Print "Komma"
          Waitms 500
          Elseif Volt = T30 Then
          Print "0"
          Waitms 500
          Elseif Volt = T26 Then
          Gosub Zweittbelegung
          Elseif Volt = T27 Then
          Gosub Dritttbelegung
          End If
          Loop
          End Sub
    
    Sub Zweittbelegung
    Print "Zweitbelegung"
    Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          If Volt = T1 Then
          Print "F6"
          Waitms 500
          Elseif Volt = T2 Then
          Print "F7"
          Waitms 500
          Elseif Volt = T3 Then
          Print "Pg Up"
          Waitms 500
          Elseif Volt = T4 Then
          Print "\"
          Waitms 500
          Elseif Volt = T5 Then
          Print "Space"
          Waitms 500
          Elseif Volt = T6 Then
          Print "F8"
          Waitms 500
          Elseif Volt = T7 Then
          Print "Home"
          Waitms 500
          Elseif Volt = T8 Then
          Print "End"
          Waitms 500
          Elseif Volt = T9 Then
          Print "/"
          Waitms 500
          Elseif Volt = T10 Then
          Print "9"
          Waitms 500
          Elseif Volt = T11 Then
          Print "F10"
          Waitms 500
          Elseif Volt = T29 Then
          Print "Del"
          Waitms 500
          Elseif Volt = T21 Then
          Gosub Erstbelegung
          Elseif Volt = T27 Then
          Gosub Dritttbelegung
          End If
          Loop
          End Sub
    
    Sub Dritttbelegung
    Print "Drittbelegung"
    Do
          Start Adc
          Ws = Getadc(7)
          Waitms 50                                             'um Spannungsschwankungen beim Tippen zu übergehen
          Volt = Ws * Ref
          If Volt = T1 Then
          Print "A"
          Waitms 500
          Elseif Volt = T2 Then
          Print "B"
          Waitms 500
          Elseif Volt = T3 Then
          Print "C"
          Waitms 500
          Elseif Volt = T4 Then
          Print "D"
          Waitms 500
          Elseif Volt = T5 Then
          Print "E"
          Waitms 500
          Elseif Volt = T6 Then
          Print "F"
          Waitms 500
          Elseif Volt = T7 Then
          Print "G"
          Waitms 500
          Elseif Volt = T8 Then
          Print "H"
          Waitms 500
          Elseif Volt = T9 Then
          Print "I"
          Waitms 500
          Elseif Volt = T10 Then
          Print "J"
          Waitms 500
          Elseif Volt = T11 Then
          Print "K"
          Waitms 500
          Elseif Volt = T12 Then
          Print "L"
          Waitms 500
          Elseif Volt = T13 Then
          Print "M"
          Waitms 500
          Elseif Volt = T14 Then
          Print "N"
          Waitms 500
          Elseif Volt = T15 Then
          Print "O"
          Waitms 500
          Elseif Volt = T16 Then
          Print "P"
          Waitms 500
          Elseif Volt = T17 Then
          Print "Q"
          Waitms 500
          Elseif Volt = T18 Then
          Print "R"
          Waitms 500
          Elseif Volt = T19 Then
          Print "S"
          Waitms 500
          Elseif Volt = T20 Then
          Print "T"
          Waitms 500
          Elseif Volt = T22 Then
          Print "U"
          Waitms 500
          Elseif Volt = T23 Then
          Print "V"
          Waitms 500
          Elseif Volt = T24 Then
          Print "W"
          Waitms 500
          Elseif Volt = T25 Then
          Print "X"
          Waitms 500
          Elseif Volt = T29 Then
          Print "Z"
          Waitms 500
          Elseif Volt = T30 Then
          Print "Y"
          Waitms 500
          Elseif Volt = T21 Then
          Gosub Erstbelegung
          Elseif Volt = T26 Then
          Gosub Zweittbelegung
          End If
          Loop
          End Sub
    
    End
    So, nun ein paar Bilder der Tastatur:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken imgp8933.jpg   imgp8931.jpg   imgp8929.jpg   imgp8928.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    39
    Beiträge
    685
    So, nun noch meine Blätter und der Schaltplan:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken scan10126.jpg   scan10125.jpg   scan10124.jpg   scan10123.jpg   scan10122.jpg  


  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    Coole Sache!
    ...nur wo bekommt man so ne Tastatur her, wenn man ni so nen Kumpel hat wie du?
    Weiß jemand, ob's die ev. auch in 'groß' in der Art gibt?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    39
    Beiträge
    685
    Er hat es von einem Einschubkasten zur Raum-Kontrolle.

    Die Anleitung soll eher stellvertretend für andere sein. Genausogut kann man einfach beliebig viele Taster nebeneinander anordnen und als Tastatur nehmen.
    Jedoch steigt mit der Anzahl der Taster auch das Risiko der Überschneidung von Spannungswerten.

Berechtigungen

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

Labornetzteil AliExpress