Auswertung resistives Touchpad als pinsparende Tastatur

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Auswertung resistives Touchpad als pinsparende Tastatur

      Beim POLLIN gibt es für kleines Geld ein resistives Touchpanel zum Aufsetzen auf Displays.

      Mit 10" etwas groß aber evtl eine Möglichkeit mit wenig Pinverbrauch auf analogem Weg eine
      optisch anspruchsvolle und vor allem variable Tastatur zu schaffen.

      Da kann man es kaufen: pollin.de/shop/dt/NDU4ODc4OTk-…SU_N010_0554_X122_01.html
      Das Datenblatt dazu: pollin.de/shop/downloads/D121145D.PDF
      Die Funktionsweise eines resistiven TouchsPads erklärt Wikipedia: de.wikipedia.org/wiki/Touchscreen#Resistive_Touchscreens

      Unter das Pad kommt das mit Farbdrucker "gestaltete" Layout der Tastatur. In meinem Fall nichts Reales, soll ja nur ein Test sein.
      Im LCD gibts jeweils die gemessenen Analogwerte, die daraus berechneten Zeilen- und Spalten sowie die in den DataZeilen versenkte Klartextbezeichnung der Taste.

      In meinem Fall ist das eine Matrix mit 8 Spalten und 6 Zeilen

      Für einen Test reicht das erst mal, ist also KEIN fertiges Projekt. Referenzspannung ist VCC, für die Stabilität der Referenz hab ich mir keine Mühe gegeben.
      So wie es jetzt aussieht belegt das Programm ca. 2,5k im Speicher. Läßt sich sicher reduzieren wenn man auf die Klartextausgabe verzichtet oder die Texte im EEPROM versenkt

      Wichtig ist nur die Analogeingänge mit einem 470k-Widerstand und einem 100nF-CerKo gegen Masse abzublocken.
      Die Folie ist im nicht gedrückten Zustand erstaunlich hochohmig.

      Quellcode

      1. ' *****************************
      2. ' Stand 16.04.2017
      3. ' Auswertung des POLLIN Touchpads
      4. ' Touchscreen FUJITSU N010-0554-X122/01
      5. ' Datenblatt: http://www.pollin.de/shop/downloads/D121145D.PDF
      6. ' Pinbelegung ATMEGA8
      7. ' 1 = PC6 = RESET
      8. ' 2 = PD0
      9. ' 3 = PD1
      10. ' 4 = PD2
      11. ' 5 = PD3
      12. ' 6 = PD4
      13. ' 7 = VCC = (+5V)
      14. ' 8 = GND = GND
      15. ' 9 = PB6
      16. ' 10 = PB7
      17. ' 11 = PD5
      18. ' 12 = PD6
      19. ' 13 = PD7
      20. ' 14 = PB0 = LCD DB4
      21. ' 15 = PB1 = LCD DB5
      22. ' 16 = PB2 = LCD DB6
      23. ' 17 = PB3 = LCD DB7 = MOSI
      24. ' 18 = PB4 = LCD E = MISO
      25. ' 19 = PB5 = LCD RS = SCK
      26. ' 20 = AVCC = (+5V)
      27. ' 21 = AREF = (+5V)
      28. ' 22 = GND = GND
      29. ' 23 = PC0 = ADC0 und Touch UNTEN (Touch Pin 1 Bottom)
      30. ' 24 = PC1 = ADC1 und Touch LINKS (Touch Pin 2 Left)
      31. ' 25 = PC2 = Touch OBEN (Touch Pin 3 Top)
      32. ' 26 = PC3 = Touch RECHTS (Touch Pin 4 Right)
      33. ' 27 = PC4
      34. ' 28 = PC5
      35. '
      36. ' ACHTUNG ADC0 und ADC 1
      37. ' Zur Verminderung von Störungen jeweils ein 470k-Widerstand und 100nF
      38. ' parallel auf Masse legen.
      39. '
      40. ' ********************
      41. ' Fusebits
      42. ' unverändert
      43. ' ********************
      44. ' Compilerschalter
      45. $regfile "m8adef.dat"
      46. $crystal = 1000000
      47. $framesize = 32
      48. $swstack = 32
      49. $hwstack = 32
      50. ' *********************
      51. ' Deklaration Variablen
      52. Dim U_zeile As Integer ' ADC-Wert Zeile
      53. Dim U_spalte As Integer ' ADC-Wert Spalte
      54. Dim Mittelwert As Integer ' zur Mittelwertbildung
      55. Dim Spalte As Byte ' ausgewertete Spannung X-Achse
      56. Dim Zeile As Byte ' ausgewertete Spannung Y-Achse
      57. Dim Old_zeile As Byte ' nur zur Änderungserkennung
      58. Dim Old_spalte As Byte ' nur zur Änderungserkennung
      59. Dim Aenderung As Byte ' Änderungsflag
      60. Aenderung = 1 ' Initial
      61. Dim Tastentext As String * 8 ' Textbelegung der Tasten
      62. Dim Schleife As Byte ' Allgemeine Hilfsvariable
      63. Dim X As Byte ' Allgemeine Hilfsveriable
      64. Dim Y As Byte ' Allgemeine Hilfsvariable
      65. ' *********************
      66. ' Deklaration Eingõnge
      67. ' *********************
      68. ' Deklaration Ausgõnge
      69. ' *********************
      70. ' Deklaration LCD
      71. Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
      72. Config Lcd = 16 * 2
      73. Initlcd
      74. Cls
      75. ' **********************
      76. ' Deklaration ADC
      77. Config Adc = Single , Prescaler = Auto
      78. ' **********************
      79. ' Deklaration Interrupts
      80. ' **********************
      81. ' Hauptprogramm
      82. Hauptmenue:
      83. Do
      84. Gosub Oben_unten ' AD-Wert Y-Achse holen
      85. Gosub Links_rechts ' AD-Wert X-Achse holen
      86. Gosub Auswertung ' Spalten und Zeilen berechnen
      87. Gosub Textzuweisung ' Den Tasten einen Text zuweisen
      88. Gosub Ausgabe ' Auf LCD ausgeben
      89. Loop
      90. End
      91. ' **********************
      92. ' Auswertung Spalten (X-Achse)
      93. ' Touch LINKS und RECHTS mit Spannung belegen
      94. Links_rechts:
      95. Config Portc.1 = Output ' Touch LINKS
      96. Portc.1 = 0 ' auf GND legen
      97. Config Portc.3 = Output ' Touch RECHTS
      98. Portc.3 = 1 ' auf VCC legen
      99. Start Adc
      100. Mittelwert = 0 ' ADC auslesen, Mittelwert bilden
      101. For Schleife = 1 To 5
      102. U_spalte = Getadc(0)
      103. Mittelwert = Mittelwert + U_spalte
      104. Next
      105. U_spalte = Mittelwert / 5
      106. Stop Adc
      107. Portc.3 = 0 ' Ports wieder frei machen
      108. Config Portc.1 = Input ' hochohmiger Eingang
      109. Config Portc.3 = Input ' hochohmiger Eingang
      110. Return
      111. ' ********************
      112. ' Auswertung Zeilen (Y-Achse)
      113. ' Touch OBEN und UNTEN mit Spannung belegen
      114. Oben_unten:
      115. Config Portc.0 = Output ' Touch UNTEN
      116. Portc.0 = 0 ' auf GND legen
      117. Config Portc.2 = Output ' Touch OBEN
      118. Portc.2 = 1 ' auf VCC legen
      119. Start Adc
      120. Mittelwert = 0 ' ADC auslesen, Mittelwert bilden
      121. For Schleife = 1 To 5
      122. U_zeile = Getadc(1)
      123. Mittelwert = Mittelwert + U_zeile
      124. Next
      125. U_zeile = Mittelwert / 5
      126. Stop Adc
      127. Portc.2 = 0 ' Ports wieder frei machen
      128. Config Portc.0 = Input ' hochohmiger Eingang
      129. Config Portc.2 = Input ' hochohmiger Eingang
      130. Return
      131. ' *********************
      132. ' Ausgabe der berechneten Felder
      133. Ausgabe:
      134. If Aenderung = 1 Then ' Nur ausgeben wenn sich Spalten/Zeilen geõndert haben
      135. Aenderung = 0 ' Verhindert Geflimmere auf dem LCD
      136. Cls
      137. Locate 1 , 1
      138. Lcd "X"
      139. Lcd U_spalte
      140. Locate 1 , 8
      141. Lcd "Y"
      142. Lcd U_zeile
      143. Locate 2 , 1
      144. Lcd "S"
      145. Lcd Spalte
      146. Locate 2 , 4
      147. Lcd "Z"
      148. Lcd Zeile
      149. Locate 2 , 8
      150. Lcd Tastentext
      151. End If
      152. Return
      153. ' *******************
      154. ' Auswertung der Tasten
      155. Auswertung:
      156. Select Case U_spalte ' gemessene X-Werte einer Spalte zuweisen
      157. Case 095 To 156 : Spalte = 1
      158. Case 196 To 260 : Spalte = 2
      159. Case 298 To 361 : Spalte = 3
      160. Case 403 To 463 : Spalte = 4
      161. Case 500 To 570 : Spalte = 5
      162. Case 610 To 675 : Spalte = 6
      163. Case 715 To 780 : Spalte = 7
      164. Case 815 To 885 : Spalte = 8
      165. Case Else : Spalte = 0
      166. End Select
      167. Select Case U_zeile ' gemessene Y-Werte einer Zeile zuweisen
      168. Case 122 To 194 : Zeile = 1
      169. Case 246 To 324 : Zeile = 2
      170. Case 378 To 452 : Zeile = 3
      171. Case 510 To 585 : Zeile = 4
      172. Case 640 To 717 : Zeile = 5
      173. Case 773 To 850 : Zeile = 6
      174. Case Else : Zeile = 0
      175. End Select
      176. If Spalte <> Old_spalte Then ' ─nderungsflag nur f³r Anzeige
      177. Old_spalte = Spalte
      178. Aenderung = 1
      179. End If
      180. If Zeile <> Old_zeile Then
      181. Old_zeile = Zeile
      182. Aenderung = 1
      183. End If
      184. Return
      185. ' **********************
      186. ' Textinhalte der Tasten
      187. Textzuweisung:
      188. Restore Textdata ' Texte holen zur Anzeige
      189. If Zeile = 0 Or Spalte = 0 Then
      190. Rem Tastentext = " "
      191. Return
      192. End If
      193. Y = 8 * Zeile ' Anzahl Read┤s berechnen
      194. Y = Y - 8
      195. Y = Y + Spalte
      196. For X = 1 To Y
      197. Read Tastentext
      198. Next
      199. Return
      200. ' **********************
      201. ' Textinhalte der Tasten
      202. ' bei Speichermangel evtl. ins EEPROM auslagern
      203. Textdata:
      204. Data "F1" , "F2" , "F3" , "F4" , "F5" , "F6" , "F7" , "F8"
      205. Data "OK" , "OK" , "OK" , "OK" , "Infrarot" , "Infrarot" , "I2C" , "I2C"
      206. Data "0" , "," , "C" , "RECHTS" , "Servo" , "Servo" , "Umkehr" , "Dauer"
      207. Data "7" , "8" , "9" , "AB" , " " , " " , " " , " "
      208. Data "4" , "5" , "6" , "AUF" , " " , " " , " " , " "
      209. Data "1" , "2" , "3" , "LINKS" , " " , " " , " " , " "
      Alles anzeigen




      IMG_9547.JPG
      IMG_9539.JPG
      IMG_9546.JPG

    • Fehlermeldung kam keine. Ver.2.0.8.0

      BASCOM-Quellcode

      1. ' *****************************
      2. ' Stand 16.04.2017
      3. ' Auswertung des POLLIN Touchpads
      4. ' Touchscreen FUJITSU N010-0554-X122/01
      5. ' Datenblatt: http://www.pollin.de/shop/downloads/D121145D.PDF
      6. ' Pinbelegung ATMEGA8
      7. ' 1 = PC6 = RESET
      8. ' 2 = PD0
      9. ' 3 = PD1
      10. ' 4 = PD2
      11. ' 5 = PD3
      12. ' 6 = PD4
      13. ' 7 = VCC = (+5V)
      14. ' 8 = GND = GND
      15. ' 9 = PB6
      16. ' 10 = PB7
      17. ' 11 = PD5
      18. ' 12 = PD6
      19. ' 13 = PD7
      20. ' 14 = PB0 = LCD DB4
      21. ' 15 = PB1 = LCD DB5
      22. ' 16 = PB2 = LCD DB6
      23. ' 17 = PB3 = LCD DB7 = MOSI
      24. ' 18 = PB4 = LCD E = MISO
      25. ' 19 = PB5 = LCD RS = SCK
      26. ' 20 = AVCC = (+5V)
      27. ' 21 = AREF = (+5V)
      28. ' 22 = GND = GND
      29. ' 23 = PC0 = ADC0 und Touch UNTEN (Touch Pin 1 Bottom)
      30. ' 24 = PC1 = ADC1 und Touch LINKS (Touch Pin 2 Left)
      31. ' 25 = PC2 = Touch OBEN (Touch Pin 3 Top)
      32. ' 26 = PC3 = Touch RECHTS (Touch Pin 4 Right)
      33. ' 27 = PC4
      34. ' 28 = PC5
      35. '
      36. ' ACHTUNG ADC0 und ADC 1
      37. ' Zur Verminderung von Störungen jeweils ein 470k-Widerstand und 100nF
      38. ' parallel auf Masse legen.
      39. '
      40. ' ********************
      41. ' Fusebits
      42. ' unverändert
      43. ' ********************
      44. ' Compilerschalter
      45. $regfile "m8adef.dat"
      46. $crystal = 1000000
      47. $framesize = 32
      48. $swstack = 32
      49. $hwstack = 32
      50. ' *********************
      51. ' Deklaration Variablen
      52. Dim U_zeile As Integer ' ADC-Wert Zeile
      53. Dim U_spalte As Integer ' ADC-Wert Spalte
      54. Dim Mittelwert As Integer ' zur Mittelwertbildung
      55. Dim Spalte As Byte ' ausgewertete Spannung X-Achse
      56. Dim Zeile As Byte ' ausgewertete Spannung Y-Achse
      57. Dim Old_zeile As Byte ' nur zur Änderungserkennung
      58. Dim Old_spalte As Byte ' nur zur Änderungserkennung
      59. Dim Aenderung As Byte ' Änderungsflag
      60. Aenderung = 1 ' Initial
      61. Dim Tastentext As String * 8 ' Textbelegung der Tasten
      62. Dim Schleife As Byte ' Allgemeine Hilfsvariable
      63. Dim X As Byte ' Allgemeine Hilfsveriable
      64. Dim Y As Byte ' Allgemeine Hilfsvariable
      65. ' *********************
      66. ' Deklaration Eingõnge
      67. ' *********************
      68. ' Deklaration Ausgõnge
      69. ' *********************
      70. ' Deklaration LCD
      71. Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
      72. Config Lcd = 16 * 2
      73. Initlcd
      74. Cls
      75. ' **********************
      76. ' Deklaration ADC
      77. Config Adc = Single , Prescaler = Auto
      78. ' **********************
      79. ' Deklaration Interrupts
      80. ' **********************
      81. ' Hauptprogramm
      82. Hauptmenue:
      83. Do
      84. Gosub Oben_unten ' AD-Wert Y-Achse holen
      85. Gosub Links_rechts ' AD-Wert X-Achse holen
      86. Gosub Auswertung ' Spalten und Zeilen berechnen
      87. Gosub Textzuweisung ' Den Tasten einen Text zuweisen
      88. Gosub Ausgabe ' Auf LCD ausgeben
      89. Loop
      90. End
      91. ' **********************
      92. ' Auswertung Spalten (X-Achse)
      93. ' Touch LINKS und RECHTS mit Spannung belegen
      94. Links_rechts:
      95. Config Portc.1 = Output ' Touch LINKS
      96. Portc.1 = 0 ' auf GND legen
      97. Config Portc.3 = Output ' Touch RECHTS
      98. Portc.3 = 1 ' auf VCC legen
      99. Start Adc
      100. Mittelwert = 0 ' ADC auslesen, Mittelwert bilden
      101. For Schleife = 1 To 5
      102. U_spalte = Getadc(0)
      103. Mittelwert = Mittelwert + U_spalte
      104. Next
      105. U_spalte = Mittelwert / 5
      106. Stop Adc
      107. Portc.3 = 0 ' Ports wieder frei machen
      108. Config Portc.1 = Input ' hochohmiger Eingang
      109. Config Portc.3 = Input ' hochohmiger Eingang
      110. Return
      111. ' ********************
      112. ' Auswertung Zeilen (Y-Achse)
      113. ' Touch OBEN und UNTEN mit Spannung belegen
      114. Oben_unten:
      115. Config Portc.0 = Output ' Touch UNTEN
      116. Portc.0 = 0 ' auf GND legen
      117. Config Portc.2 = Output ' Touch OBEN
      118. Portc.2 = 1 ' auf VCC legen
      119. Start Adc
      120. Mittelwert = 0 ' ADC auslesen, Mittelwert bilden
      121. For Schleife = 1 To 5
      122. U_zeile = Getadc(1)
      123. Mittelwert = Mittelwert + U_zeile
      124. Next
      125. U_zeile = Mittelwert / 5
      126. Stop Adc
      127. Portc.2 = 0 ' Ports wieder frei machen
      128. Config Portc.0 = Input ' hochohmiger Eingang
      129. Config Portc.2 = Input ' hochohmiger Eingang
      130. Return
      131. ' *********************
      132. ' Ausgabe der berechneten Felder
      133. Ausgabe:
      134. If Aenderung = 1 Then ' Nur ausgeben wenn sich Spalten/Zeilen geõndert haben
      135. Aenderung = 0 ' Verhindert Geflimmere auf dem LCD
      136. Cls
      137. Locate 1 , 1
      138. Lcd "X"
      139. Lcd U_spalte
      140. Locate 1 , 8
      141. Lcd "Y"
      142. Lcd U_zeile
      143. Locate 2 , 1
      144. Lcd "S"
      145. Lcd Spalte
      146. Locate 2 , 4
      147. Lcd "Z"
      148. Lcd Zeile
      149. Locate 2 , 8
      150. Lcd Tastentext
      151. End If
      152. Return
      153. ' *******************
      154. ' Auswertung der Tasten
      155. Auswertung:
      156. Select Case U_spalte ' gemessene X-Werte einer Spalte zuweisen
      157. Case 095 To 156 : Spalte = 1
      158. Case 196 To 260 : Spalte = 2
      159. Case 298 To 361 : Spalte = 3
      160. Case 403 To 463 : Spalte = 4
      161. Case 500 To 570 : Spalte = 5
      162. Case 610 To 675 : Spalte = 6
      163. Case 715 To 780 : Spalte = 7
      164. Case 815 To 885 : Spalte = 8
      165. Case Else : Spalte = 0
      166. End Select
      167. Select Case U_zeile ' gemessene Y-Werte einer Zeile zuweisen
      168. Case 122 To 194 : Zeile = 1
      169. Case 246 To 324 : Zeile = 2
      170. Case 378 To 452 : Zeile = 3
      171. Case 510 To 585 : Zeile = 4
      172. Case 640 To 717 : Zeile = 5
      173. Case 773 To 850 : Zeile = 6
      174. Case Else : Zeile = 0
      175. End Select
      176. If Spalte <> Old_spalte Then ' -nderungsflag nur f³r Anzeige
      177. Old_spalte = Spalte
      178. Aenderung = 1
      179. End If
      180. If Zeile <> Old_zeile Then
      181. Old_zeile = Zeile
      182. Aenderung = 1
      183. End If
      184. Return
      185. ' **********************
      186. ' Textinhalte der Tasten
      187. Textzuweisung:
      188. Restore Textdata ' Texte holen zur Anzeige
      189. If Zeile = 0 Or Spalte = 0 Then
      190. Rem Tastentext = " "
      191. Return
      192. End If
      193. Y = 8 * Zeile ' Anzahl Read¦s berechnen
      194. Y = Y - 8
      195. Y = Y + Spalte
      196. For X = 1 To Y
      197. Read Tastentext
      198. Next
      199. Return
      200. ' **********************
      201. ' Textinhalte der Tasten
      202. ' bei Speichermangel evtl. ins EEPROM auslagern
      203. Textdata:
      204. Data "F1" , "F2" , "F3" , "F4" , "F5" , "F6" , "F7" , "F8"
      205. Data "OK" , "OK" , "OK" , "OK" , "Infrarot" , "Infrarot" , "I2C" , "I2C"
      206. Data "0" , "," , "C" , "RECHTS" , "Servo" , "Servo" , "Umkehr" , "Dauer"
      207. Data "7" , "8" , "9" , "AB" , " " , " " , " " , " "
      208. Data "4" , "5" , "6" , "AUF" , " " , " " , " " , " "
      209. Data "1" , "2" , "3" , "LINKS" , " " , " " , " " , " "
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ftelektro ()

    • Ist das wieder so ein Effekt, der mit den bascom-Voreinstellungen zustande kommt? Wenn zufällig der mega8a als chip eingestellt ist, passt alles, auch wenn die Zeile mit dem regfile nicht geht, wenn ein anderer chip als default drin steht, wird gemeckert, weil der nicht die nötigen features hat?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Potzblitz a_32_d623ea7e
      Da ist der Pollin mal billiger als der Bucht Fernost Verkäufer:
      ebay.com/itm/10x-FFC-FPC-4-pin…02e2e8:g:Qm8AAOSwjDZYdvVN

      Ihr habt mir Appetit gemacht, ich hab hier noch ein 15" Touch in der Schrottkiste, ich glaub das fische ich nochmal raus. Das TFT dazu kann ja leider Bascom nicht ansprechen a_56_df238249 . Immerhin kann man nen farbigen Ausdruck hinter verstecken.

      Tobias