-         
Ergebnis 1 bis 10 von 10

Thema: Touchscreen Ansteuerung 192x64 Display

  1. #1
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    78

    Touchscreen Ansteuerung 192x64 Display

    Anzeige

    Hallo,
    Nach dem sich die mechanischen arbeiten an meinem Robby dem Ende nähern hab ich begonnen mit dem Display rumzuspielen.

    Hab mir dieses Display geholt http://ledsee.com/index.php?page=sho...mart&Itemid=27
    und im Prinzip so wie auf dem Bild angeschlossen, allerdings auf nem C-Control Pro Application Board (was anderes hab ich momentan nicht).

    Text, Linien und Grafiken anzeigen funktioniert super, nur die Auswertung des Touchscreens funktioniert garnicht.
    Ich hab mir nen Code aus dem Forum hier angepasst - aber das einzige was auf dem Display dann zu sehen ist, ist Pixelmüll.

    Code:
    $regfile = "m128def.dat"                                    ' specify the used micro
    $crystal = 14745600                                         ' used crystal frequency
    $baud = 19200                                               ' use baud rate
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               ' default use 10 for the SW stack
    $framesize = 40                                             ' default use 40 for the frame space
    
    $lib "glcdKS108-192x64.lib"
    
    
    Wait 2
    
    'First we define that we use a graphic LCD
    Config Graphlcd = 192 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 0 , Ce2 = 1 , Ce3 = 2 , Cd = 3 , Rd = 4 , Enable = 5 , Reset = 6 , Mode = 8
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Dim X As Word , Y As Word
    Dim X2 As Single , Y2 As Single
    Dim X3 As Single , Y3 As Single
    Dim X4 As Byte , Y4 As Byte
    Start Adc
    'Cursor Off
    Cls
    
    Locate 1 , 1 : Lcd "KS108 mit Touchscreen an ATMega128"
    Locate 3 , 1
    Lcd "Y-Koordinate analog: "
    Locate 4 , 1
    Lcd "X-Koordinate analog: "
    
    Do
     Gosub Readtouch
     Locate 3 , 22
     Lcd Y ; "  "
     Locate 4 , 22
     Lcd X ; "  "
    
     If Y > 330 Then
      Y3 = Y - 346
      Y2 = Y3 / 2.89
      Y4 = Y2
     Else
      Y4 = 0
     End If
    
     If X > 150 Then
      X3 = X - 160
      X2 = X3 / 2.78
      X4 = X2
     Else
      X4 = 0
     End If
    
     Locate 5 , 1
     Lcd X4 ; "  "
     Locate 6 , 1
     Lcd Y4 ; "  "
     Pset X4 , Y4 , 255
    Loop
    End
    
    
    
    
    Readtouch:
     Config Pinf.0 = Output                                     ' Makes port F.0 output
     Config Pinf.2 = Output                                     ' Makes port F.0 output
     Set Portf.0                                                ' Sets port F.0 High
     Reset Portf.2                                              ' Sets port F.2 Low
     Ddrf.1 = 0                                                 ' Sets port F.1 as input
     Ddrf.3 = 0                                                 ' Sets port F.1 as input because we need it now as ad input
     Waitms 20                                                  ' Wait until the port is stable
     Y = Getadc(3)                                              ' Read the ad value for the y
     Y = 1024 - Y                                               ' Invert the reading
    
     Config Pinf.1 = Output                                     ' Makes port F.1 output
     Config Pinf.3 = Output                                     ' Makes port F.3 output
     Reset Portf.3                                              ' Sets port F.3 Low
     Set Portf.1                                                ' Sets port F.1 High
     Ddrf.0 = 0                                                 ' Sets port F.0 as input
     Ddrf.2 = 0                                                 ' Sets port F.2 as input because we need it now as ad input
     Waitms 20                                                  ' Wait until the port is stable
     X = Getadc(2)                                              ' Read the ad value for the x
     X = 1024 - X                                               ' Invert the reading
    Return
    Alls Einsteiger in Bascom und der ganzen µC Thematik stehts bei mir jetzt so ziemlich an - noch dazu weil das Programm ohne Fehler compiliert wird.
    Hab mich schon durchs Forum gegraben aber nicht so wirklich was gefunden - wo hab ich da Fehler drin?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken display_120.jpg  

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    Hi,

    schau mal auf der Seite von MCS. Dort wurde eine gute AN zu diesem Thema veröffentlicht. Dort wird auch zu gleich eine Menüstruktur vorgestellt, die ich auch nutze und hervorragend ist!
    //www.mcselec.com/index.php?option=com_content&task=view&id=189&Item id=57

    Gruß mAT

  3. #3
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    78
    Hi,
    das Programm hab ich auch schon versucht - das Menü wird ohne Fehler angezeigt (auf der linken Seite, da ja mein Display größer ist). Nur auf Touchscreen eingaben wird absolut nicht reagiert.
    Leider schweigt sich das Datenblatt über den Anschluss des Touchscreens völlig aus.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    Fehlt da bei den 4 Touchscreens Widerständen nicht was ?
    Was sagt denn ein Multimeter an den A/D Eingängen an Werten ?

    Gento

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    Moin!

    Wenn Du Dir schon die Seite reingezogen hast, dann weißt Du wie das Touch aufgebaut ist. Du musst jetzt nur herausfinden wie die einzelnen Anschlüsse zu x/y gehören.
    Auf dem Touchglas siehst Du in den oberen Rändern Leiterbahnen die Du verfolgen kannst und dann mit nem Multimeter durchmessen! Hast Du ein paar gefunden, dann kannst du durch gedrücktes ziehen in x/y-Richtung am multi schön sehen, wie sich der Widerstandswert verändert. Sollte das nicht gehen, kann auch die Touchfläche defekt sein, ein User hier hatte auch mal nen schlecht gehendes (Accenter) und bei meinem Display war die Auflösung auch nicht die Welle...

    Gruß MAT

  6. #6
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    78
    Hi,

    Ich messe 1x 198 Ohm und 1x 1,1 kOhm. aber die Werte ändern sich nicht, da kann ich aufm Touchscreen rumfahren wie ich will

    Edit:
    Man sollte schon richtig messen Nur was jetzt X und was Y ist, ist mir trotzdem noch nicht ganz klar...

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    Moin!
    Geh noch mal auf die Seite von MCS s.o..
    Dort siehst Du den chematischen AUfba eines Toch.
    Zu erst musst Du jeweils X/Y herausfinden, hast Du das?
    Dann legst Du z.bsp. das X-Pärchen an +5V:
    Code:
     Config Pinf.2 = Output                                                                                                                               ' PortA.4 als Ausgang setzen  => X Scale
     Config Pinf.0 = Output                                                                                                                               ' PortA.1 als Ausgang setzent
     Set Portf.0                                                                                                                                          ' PortA.4 auf +5V setzen
     Reset Portf.2
    und nun kannst Du über das Y-Pärchen dann eine Spannung einlesen, welchen beider Pins ist egal, dabei ist dann nur die Richtung verkehrt herum.
    Code:
     Ddrf.3 = 0                                                                                                                                           ' PortA.2 als Eingang setzen
     Ddrf.1 = 0                                                                                                                                           ' PortA.3 als Eingang setzen
    
     Waitms 20                                                                                                                                            ' Wait until the port is stable
     X = Getadc(3)                                                                                                                                        ' Analogwert für X Scale auslesen -> PortA.2 und in X (Word) Schreiben
     X = 1024 - X
    Sollte jetzt gehen....
    MAT

  8. #8
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    78
    Hi,

    X/Y konnte ich herausfinden. So weit läuft es mal - allerdings bekomme ich Y Werte nur auf der unteren Displayhälfte und X Werte nur auf der rechten Displayhälfte.

    Hier mein Testcode:
    Code:
    $regfile = "m128def.dat"                                    ' specify the used micro
    $crystal = 14745600                                         ' used crystal frequency
    $baud = 19200                                               ' use baud rate
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               ' default use 10 for the SW stack
    $framesize = 40                                             ' default use 40 for the frame space
    
    $lib "glcdKS108-192x64.lib"
    
    
    Wait 2
    
    'First we define that we use a graphic LCD
    Config Graphlcd = 192 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 0 , Ce2 = 1 , Ce3 = 2 , Cd = 3 , Rd = 4 , Enable = 5 , Reset = 6 , Mode = 8
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    Dim X As Word , Y As Word
    Dim X2 As Single , Y2 As Single
    Dim X3 As Single , Y3 As Single
    Dim X4 As Byte , Y4 As Byte
    Declare Sub Readtouch()
    
    Start Adc
    'Cursor Off
    Cls
    
    Setfont Font5x5
    Lcdat 1 , 1 , "KS108 mit Touch an Mega128"
    Lcdat 3 , 1 , "Y analog: "
    Lcdat 4 , 1 , "X analog: "
    
    Do
     Gosub Readtouch
     Lcdat 3 , 47 , Y ; "  "
     Lcdat 4 , 47 , X ; "  "
    Loop
    End
    
    Sub Readtouch()
       Config Pinf.0 = Output                                   ' Makes port F.0 output
       Config Pinf.2 = Output                                   ' Makes port F.0 output
       Set Portf.0                                              ' Sets port F.0 High
       Reset Portf.2                                            ' Sets port F.2 Low
       Ddrf.1 = 0                                               ' Sets port F.1 as input
       Ddrf.3 = 0                                               ' Sets port F.1 as input  because we need it now as ad input
       Waitms 20                                                ' Wait until the port is stable
       Y = Getadc(3)                                            ' Read the ad value for the y
       Y = 1024 - Y                                             ' Invert the reading
    
       Config Pinf.1 = Output                                   ' Makes port F.1 output
       Config Pinf.3 = Output                                   ' Makes port F.3 output
       Reset Portf.1                                            ' Sets port F.1 Low
       Set Portf.3                                              ' Sets port F.3 High
       Ddrf.0 = 0                                               ' Sets port F.0 as input
       Ddrf.2 = 0                                               ' Sets port F.2 as input  because we need it now as ad input
       Waitms 20                                                ' Wait until the port is stable
       X = Getadc(2)                                            ' Read the ad value for the x
       X = 1024 - X                                             ' Invert the reading
    End Sub
    
    $include "font5x5.font"
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 1_211.jpg   2_167.jpg  

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    hi,

    na X sieht doch schon mal gut aus. Was passiert wenn Du auf einem Punkt von X dann Y verfährst?
    Theoretisch sollte der Code laufen. Kannst Du per Multimeter alles nochmals gegenchecken? Ansonsten bin ich ratlos...

  10. #10
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    78
    So, mitn Multimeter habe ich immer Werte egal wo auf dem Touchscreen -dass scheint alles in Ordnung zu sein.

    Wenn ich die ADC Referenz auf Avcc stelle bekomme ich auf der ganzen Höhe und Breite Werte angezeigt. Damit läuft dann auch das Beispiel von MCS - alledings scheint die Auswertung etwas nach rechts verschoben zu sein.

    Desweiteren muss ich immer ein Font einbinden - sonst gibts nur Pixelmüll, bei anderen Displays scheint das nicht der Fall zu sein.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •