Zitat von
zwanzischmark
habe eine Drucktastatur von Conrad mit 12 tasten das Funktioniert schon alles wunderbar mit dem AD-Port. Habe jetzt abstände von 10 bis 25 das sollte ja als sicherheit locker ausreichen. Den PCF8574 benutze ich auch schon 2mal um auf 24 Digitalports zu kommen und ein Display anzusteuern. Also ist eigentlich alles schon perfekt und funktioniert. Die sache mit dem höheren wert als 0 wenn nur masse Dran ist hatte ich auch bis ich gemerkt hab das mein widerstand einfach zu gross ist vor masse. Den hab ich jetzt auf 1,2k verkleinert und jetzt hab ich auch wirklich die 0
meine frage war eigentlich überflüssig wollte nur sichergehen
danke nochmal
mfg Paul
Hallo zwanzischmark,
du musst aufpassen mit den Eingängen. Du hast deswegen mehr als 0 weil entweder deine Masse nicht sauber ist. Dann zieh eine Leitung direkt vom GND-Pin der CC zur Tastatur oder dem Widerstand. Das andere was ich auch einmal festgestellt hatte als ich diese Spannungsleiter aufgebaut hatte war das mit den der im Applikation-Board angegebenen Werten der Analog-Pin sehr sensibel reagiert auf Magnetische Störfelder. D.h. er reagiert wie eine Antenne. Du kannst dir deinen AD-Port zum einen schützen durch eine 5V1-Z-Diode mit Anode an AD-In und Kathode an GND und zum andern deine Hochfrequenz oder Netzfrequenz etwas eliminieren indem du einen 10nF - 68nF MKT-Kondensator (rotes Kästchen) noch dazu parallel schaltest. Dann wird die Antennenfunktion die ja nicht erwünscht ist etwas unterbunden und es kommt nicht zu unwillkürlichen Tasterbetätigungen. Kannst auch noch einen Test machen wie ich es getan habe. Ich habe die Schaltung euf meinen Scanner gelegt. Der produziert beim Scannen ein sehr hohes elektrisches Störfeld durch die Lampe. Wenn es da OK ist hast du schon Gewissheit das es auch recht sauber entstört ist nach aussen.
Grüsse Wolfgnang
Anbei noch einen Code den ich einmal geschrieben hatte für ein Projekt. Das kann die Taster in der Art auswerten. Das ist bisschne Code aus meinem Projekt herausgeschnippelt. Hab den speziell fr ein Projekt geschrieben und genau die Werte für die Spannungsleiter verwendet die auch im Schaltplan des Applikationn-Boards verwendet werden.
Code:
'Tastennummern definieren
'------------------------
Define KeyStern 11
Define KeyKreuz 10
Define Key1 1
Define Key2 2
Define Key3 3
Define Key4 4
Define Key5 5
Define Key6 6
Define Key7 7
Define Key8 8
Define Key9 9
Define Key0 0
Define KeyNone 99
...
Define Tastatur AD[1] 'Analog-Port der 10er-Tastatur
...
#ResetSystem
Betrieb = On
GoSub LCDReset 'Das LC-Display initialisieren im 4-Bit Modus
GoSub PotReset 'Digitales Potentiometer rücksetzen auf Minimum
GoSub GetTastatur
Buzzer = On
If KeyNr = Key1 Then Buzzer = Off
KeyLock = On
If KeyNr = Key2 Then KeyLock = Off
GoSub SignalTon3
Sys LcdCmd LcdClear
Pause 1
VarTextNr = TxtVersion1
Sys LcdCmd Z1S1
GoSub LCDWriteText
VarTextNr = TxtVersion2
Sys LcdCmd Z2S1
GoSub LCDWriteText
Pause 80
Sys LcdCmd LcdClear
Pause 1
'Hochlauf-Meldung
For ii = TxtBootUp1 + 8 To TxtBootUp1 Step -1
Sys LcdCmd Z1S5
VarTextNr = ii
GoSub LCDWriteText
Pause 4
Next ii
For ii = TxtBootUp2 + 12 To TxtBootUp2 Step -1
Sys LcdCmd Z2S3
VarTextNr = ii
GoSub LCDWriteText
Pause 4
Next ii
Pause 200
Sys PotGoPos 50
#PasswortSchutz 'Passwortschutz für das System
If KeyLock = Off Then GoTo MenuAuswahl
Sys LcdCmd LcdClear
Pause 1
Sys LcdCmd Z1S3
VarTextNr = TxtPasswort
GoSub LCDWriteText
Sys LcdCmd Z2S5
Sys LcdChar &H7E
Sys LcdCmd Z2S12
Sys LcdChar &H7F
Stelle = 0
GoSub SignalTon4
#PasswortNextOK
Stelle = Stelle + 1
#PasswortNextOKWait1 'Auf Tastendruck warten
If Tastatur < 245 Then GoTo PasswortNextOKWait1
#PasswortNextOKWait2
Sys LcdCmd Z2S5
If Second Mod 2 = 0 Then Sys LcdChar &H7E Else Sys LcdChar &H20
Sys LcdCmd Z2S12
If Second Mod 2 = 0 Then Sys LcdChar &H7F Else Sys LcdChar &H20
Pause 2
If Tastatur > 245 Then GoTo PasswortNextOKWait2
GoSub GetTastatur
Sys LcdCmd Z2S6 + Stelle 'Sternchen auf Display ausgeben
Sys LcdChar xSt
LookTab TabPasswort, Stelle, TempByte 'Pasworteingabe prüfen auf richtige Eingabe
If Stelle <= 4 And KeyNr = KeyKreuz Then GoTo PasswortSchutzError
If Stelle > 4 And KeyNr = KeyKreuz Then GoTo PasswortOK
If KeyNr = KeyStern Then GoTo PasswortSchutz
If Stelle <= 4 And KeyNr <> TempByte Then GoTo PasswortNextError
If Stelle > 4 Then GoTo PasswortOK 'Maximale Anzahl von Stellen erreicht
If TempByte = KeyNr Then GoTo PasswortNextOK 'Richtige Eingabe
GoTo PasswortNextError 'Falsche Eingabe
#PasswortNextError
Stelle = Stelle + 1
#PasswortNextErrorWait1 'Auf Tastendruck warten
If Tastatur < 245 Then GoTo PasswortNextErrorWait1
#PasswortNextErrorWait2
Sys LcdCmd Z2S5
If Second Mod 2 = 0 Then Sys LcdChar &H7E Else Sys LcdChar &H20
Sys LcdCmd Z2S12
If Second Mod 2 = 0 Then Sys LcdChar &H7F Else Sys LcdChar &H20
Pause 2
If Tastatur > 245 Then GoTo PasswortNextErrorWait2
GoSub GetTastatur
Sys LcdCmd Z2S6 + Stelle 'Sternchen auf Display ausgeben
Sys LcdChar xSt
If KeyNr = KeyKreuz Then GoTo PasswortSchutzError
If KeyNr = KeyStern Then GoTo PasswortSchutz
If Stelle <= 4 Then GoTo PasswortNextError
If Stelle > 4 Then GoTo PasswortSchutzError 'maximale Anzahl von Stellen erreicht
GoTo PasswortNextError
#PasswortSchutzError
Sys LcdCmd LcdClear
Pause 1
Sys LcdCmd Z2S3
VarTextNr = TxtPasswortErr
GoSub LCDWriteText
Sys LcdCmd Z1S1
VarTextNr = TxtSperre
GoSub LCDWriteText
Second = 0
#PasswortSchutzErrorWait
TempByte = 20 - Second 'Count-Down für die System-Sperre
Sys LcdCmd Z1S15
GoSub LCDWriteCount8Bit
Sys LcdChar x__
If Second < 20 Then GoTo PasswortSchutzErrorWait
GoTo PasswortSchutz
#PasswortOK 'Passwort wurde richtig eingegeben
Sys LcdCmd Z2S1 'Meldung anzeigen für richtige Eingabe des Passworts
VarTextNr = TxtPasswortOK
GoSub LCDWriteText
Pause 100 'Eine Sekunde warten
Sys LcdCmd LcdClear
#MenuAuswahl
ProgrammNr = 1 'Auf erstem Programm beginnen
#MenuAuswahlNeu
Sys LcdCmd Z1S1 'Auswahlmenü anzeigen
VarTextNr = TxtAuswahl
GoSub LCDWriteText
...
' Tastatur einlesen:
' ------------------
' Die 10er-Tastatur einlesen und die gedrückte Taste decodieren als Zahlenwert
' in eine Variable die nach Rückkehr aus diesem Unterprogramm direkt ausgewertet
' werden kann. Ist keine gültige Taste gedrückt oder keine Taste gedrückt, wird
' der Wert 99 zurückgeliefert
#WaitTastatur 'Auf einen Tastendruck warten
If Tastatur <= 245 Then GoTo WaitTastatur
#WaitTastaturX
If Tastatur > 245 Then GoTo WaitTastaturX
#GetTastatur 'Aktuell gedrückte Taste zurückliefern
If Tastatur > 245 Then GoTo GetTastaturNoKey
KeyNr = KeyNone
For ii = 0 To 11 'Eine Taste ist gedrückt
LookTab TabKeyCodes, ii, TempByte 'Tastencode ermitteln
If Abs(Tastatur - TempByte) < 3 Then KeyNr = ii
Next ii
If KeyNr <> KeyNone Then GoSub SignalTon1 'Signalton bei gültigem Tastendruck ausgeben
Return
#GetTastaturNoKey 'Keine Taste gedrückt
KeyNr = KeyNone
Return
...
'Tabelle mit den Tastaturwerten:
'-------------------------------
' Die Mittelwerte der einzelnen Tasten mit einer Tolleranz von +/-3 Einheiten
Table TabKeyCodes
'0 1 2 3 4 5 6 7 8 9 # *
153 173 90 0 193 111 23 215 132 46 68 236
TabEnd
'Tabelle Potiwerte
Table TabFreqPot
'0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
100 100 100 100 95 91 86 82 77 73 68 64 59 55 50 45 41 36 32 27 23 18 14 9 5 0
TabEnd
'Tabelle für das Zugangs-Passwort
Table TabPasswort
4 Key0 Key0 Key0 Key7
TabEnd
Lesezeichen