Liste der Anhänge anzeigen (Anzahl: 4)
	
	
		Anleitung: Tastatur einbinden
	
	
		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  O:) 
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  =P~ ):
	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:
	 
	
	
		Liste der Anhänge anzeigen (Anzahl: 5)
	
	
	
		So, nun noch meine Blätter und der Schaltplan: