Sie befinden sich hier: Lego® - Bauanleitungen - Analoges Touch- Panel

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


TWI-Hardwaremodul

'********************************************************************
'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.