Ja, ganz einfach.
Beim freundlichen Chinesen gibt es Touch-Tastenfelder mit 16 Tasten und einem Chip drauf, der das ganze steuert.
Auf dem Chip steht 8229BSF, dabei handelt es sich um einen TTP229.
Der Chip liest die Tasten aus und stellt sie über eine 2-Draht-Schnittstelle zur Verfügung. (Bild roter Kringel)
Es handelt sich um ein einfaches 16 Bit Schieberegister, das sich automatisch durch eine Pause von 2ms zurücksetzt.
Die 16 Tasten entsprechen dabei den jeweiligen Bits im Schieberegister.
Das Tastenfeld wird durch Brücken/Jumper konfiguriert, dabei müssen die Brücken 3, 4 und 5 geschlossen werden.
Ich hab das im Bild gelb eingekringelt.
Tastenfeld_Touch.jpg
Das Programm liest die Daten mit 2 beliebigen Pins aus aus und stellt fest, welche Taste gedrückt wurde.
Die Ausgabe erfolgt hier über ein I2C Display.
Mein anfänglicher Fehler war, das Touchpad an den I2C Bus zu klemmen, laut Datenblatt sollte er das können.
Leider wird der I2C Bus aber durch die Antwort des Schieberegisters unbrauchbar.
Ich musste feststellen, der Chip kann prinzipiell I2C, aber der Anschluss SLSERT, um den Modus einzustellen, ist bei diesem Chipgehäuse nicht verfügbar.
Alles anzeigen
Beim freundlichen Chinesen gibt es Touch-Tastenfelder mit 16 Tasten und einem Chip drauf, der das ganze steuert.
Auf dem Chip steht 8229BSF, dabei handelt es sich um einen TTP229.
Der Chip liest die Tasten aus und stellt sie über eine 2-Draht-Schnittstelle zur Verfügung. (Bild roter Kringel)
Es handelt sich um ein einfaches 16 Bit Schieberegister, das sich automatisch durch eine Pause von 2ms zurücksetzt.
Die 16 Tasten entsprechen dabei den jeweiligen Bits im Schieberegister.
Das Tastenfeld wird durch Brücken/Jumper konfiguriert, dabei müssen die Brücken 3, 4 und 5 geschlossen werden.
Ich hab das im Bild gelb eingekringelt.
Tastenfeld_Touch.jpg
Das Programm liest die Daten mit 2 beliebigen Pins aus aus und stellt fest, welche Taste gedrückt wurde.
Die Ausgabe erfolgt hier über ein I2C Display.
Mein anfänglicher Fehler war, das Touchpad an den I2C Bus zu klemmen, laut Datenblatt sollte er das können.
Leider wird der I2C Bus aber durch die Antwort des Schieberegisters unbrauchbar.
Ich musste feststellen, der Chip kann prinzipiell I2C, aber der Anschluss SLSERT, um den Modus einzustellen, ist bei diesem Chipgehäuse nicht verfügbar.
BASCOM-Quellcode: Tastenfeld Touch
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 80
- $swstack = 80
- $framesize = 100
- $baud = 38400
- $lib "YwRobot_Lcd_i2c.lib" 'LCD Lib
- Config Pinb.5 = Output 'Board LED
- Led Alias Portb.5
- '******************* I2C Display ************************
- Const Pcf8574_lcd = &H4E 'Adresse des I2C-LCDs, je nach Baustein und Adresse!
- Dim Lcd_backlight As Byte '1 an, 0 aus.
- '****************** Initialisierung ***********************
- Config Scl = Portc.5 'I2C Pins
- Config Sda = Portc.4 'I2C Pins
- Config Lcd = 20 * 4 'muss nicht unbeding angegeben werden
- Config I2cdelay = 10 '100 kHz
- I2cinit
- Waitms 100
- Initlcd
- Waitms 100
- Lcd_backlight = 1 'Beleuchtung Einschalten
- Cls
- Led = 1
- Waitms 100
- Dim I As Word
- Dim Index As Byte
- Dim Tasten1 As Byte
- Dim Tasten2 As Byte
- Dim Tasten1_alt As Byte
- Dim Tasten2_alt As Byte
- Dim Tastendruck As Bit
- Touchclock Alias Portb.4 'Touchfeld Clock In
- Ddrb.4 = 1
- Touchdaten Alias Pinb.3 'Touchfeld Data Out
- Touchclock = 1
- Print "I2C Adresse "
- For Index = 2 To 254 Step 2 'I2C Teilnehmer am Bus feststellen
- I2cstart
- I2cwbyte Index
- If Err = 0 Then
- Print Index
- I2cstop
- End If
- Next
- Led = 0
- Locate 1 , 1
- Lcd "Touch Tastenfeld"
- '******************** Hauptprogramm ***********************
- Do
- Shiftin Touchdaten , Touchclock , Tasten1 , 2 'Tasten einlesen
- Shiftin Touchdaten , Touchclock , Tasten2 , 2
- Tastendruck = 0
- If Tasten1 <> Tasten1_alt Then Tastendruck = 1 'Wurde eine Taste gedrückt?
- If Tasten2 <> Tasten2_alt Then Tastendruck = 1
- Tasten1_alt = Tasten1
- Tasten2_alt = Tasten2
- Waitms 3 'mind 2ms Erholzeit für Tastenfeld - bei viel Code und LCD nicht nötig
- For I = 0 To 7 ' Umrechnen Variable in Tastennummer
- If Tasten1.i = 0 Then
- Index = I + 1
- End If
- Next
- For I = 0 To 7
- If Tasten2.i = 0 Then
- Index = I + 9
- End If
- Next
- If Tastendruck = 1 Then 'Aktion bei Tastendruck
- Print Bin(tasten1) ; " " ; Bin(tasten2)
- Locate 2 , 1
- Lcd " Taste Nr:"
- If Index < 10 Then Lcd " "
- Lcd Index
- End If
- Loop
- End