
Analoges Touch- Panel an NXT:
Touch Panel (EA Touch 102-1) sendet Werte an einen Mikrokontroller. Danach werden Analogwerte über ein PCF8591 an den NXT gesendet. Die Kommunikation zwischen NXT (Master) und PCF8591 (Slave) erfolgt über I2C.
![]() |
![]() |
|
|
Schaltplan
![]() |
![]() |
|
Schaltplan | Touch Panel EA Touch 102-1 |
Bascom Quellcode für ATmega32
'******************************************************************** 'Touch Panel Koordinaten auslesen; ATmega32-Board 'Daten werden über D/A- Wandler (R;2R) und PCF8591 an NXT gesendet '2011-10 'www.freggelweb.de '******************************************************************** $regfile = "M32def.dat" $crystal = 7372800 $baud = 9600 $hwstack = 100 $swstack = 100 $framesize = 100 Config Portb = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Touch Koordinaten Dim X As Word Dim Y As Word 'Welcher Bereich wurde betätigt Dim Keypressed As Byte Dim Row As Byte Dim Keyarray(3) As Byte Dim Col As Byte Dim Key As Byte Dim Keyzaehler As Byte Start Adc Do Ddra.0 = 1 'Top Ddra.2 = 1 'Bottom Ddra.1 = 0 'Right = Eingang Ddra.3 = 0 'Left = Eingang Porta.0 = 1 'Top = High Porta.2 = 0 'Bottom= Low 'Waitms 10 Y = Getadc(3) Y = 1024 - Y Ddra.1 = 1 'Right Ddra.3 = 1 'Left Ddra.0 = 0 'Top = Eingang Ddra.2 = 0 'Bottom = Eingang Porta.3 = 1 'Left = High Porta.1 = 0 'Right = Low 'Waitms 10 X = Getadc(2) X = 1024 - X '---- Welcher Bereich ---- 'Row|Col | ' | 10 20 30 40 | ' --------------------- ' 1 | | | | | ' --------------------- ' 2 | | | | | ' --------------------- ' 3 | | | | | '------------------------ Select Case X ' X- Bereich Case 150 To 220 : Col = 10 Case 221 To 420 : Col = 20 Case 421 To 640 : Col = 30 Case 641 To 850 : Col = 40 Case Else Col = 0 End Select Select Case Y 'Y- Bereich Case 250 To 360 : Row = 1 Case 361 To 540 : Row = 2 Case 541 To 730 : Row = 3 Case Else Row = 0 End Select Key = Col + Row If Key > 0 Then Keyarray(keyzaehler) = Key Incr Keyzaehler If Keyzaehler > 3 Then Keyzaehler = 1 If Keyarray(1) = Keyarray(2) Then If Keyarray(2) = Keyarray(3) Then Keypressed = Key End If End If End If '---- für PCF8591 ---- Select Case Keypressed Case 21 : 'vor Dez.127 Portb = &B01111111 Case 32 : 'rechts Dez.63 Portb = &B00111111 Case 23 : 'zurück Dez.31 Portb = &B00011111 Case 12 : 'links Dez.15 Portb = &B00001111 Case 41 : 'hoch Dez.7 Portb = &B00000111 Case 43 : 'runter Dez.3 Portb = &B00000011 Case Else Portb = &B00000000 End Select Loop End
Programmierung mit LabVIEW:
Bsp:
Im Frontpanel wird angezeigt, welcher Bereich/ welche "Taste" vom Touch- Panel betätigt wurde
Adresse von PCF8591
PCF8591 | ||||||||
fester Bereich | variabler Bereich | variable "schreiben/lesen" |
||||||
1 | 0 | 0 | 1 | A2 | A1 | A0 | R/W | |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Bit |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | Dezimal |
immer Dez.144 |
Ax an Masse -> Binär 0 Ax an VDD -> Binär 1 |
0 | ||||||
Bsp.: A0-A2 an Masse | ||||||||
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Binär |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | Dezimal |
Adresse = 128 + 16 = 144 |
Reg von PCF8591
PCF8591 | ||||||||
0 | Freigabe Analogausgang |
Modus Analogeingänge |
0 | Auto- increment |
A/D Kanal Nummer |
|||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Bit |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | Dezimalwert |
Bsp.: Modus Analogeingänge: vier einfache Eingänge -> 00 Autoincrement: nein -> 0 Freigabe Analogausgang: nein -> 0 aus Datenblatt |
||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -> Reg = 0 |
VI für Direkt- Modus
Frontpanel |
![]() |
Blockdiagramm |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Ich kann keinerlei Haftung für die Schaltungen übernehmen und auch keine Funktionsfähigkeit garantieren. Der Nachbau und Einsatz der hier veröffentlichten Schaltungen erfolgt auf eigene Gefahr. Ich übernehme keinerlei Garantie. Die VDE-Vorschriften sind zu beachten.