Kannst du mir vielleicht den Code für die Berechnung der x/y Kordinaten mal zukommen lassen? :-)
Druckbare Version
Kannst du mir vielleicht den Code für die Berechnung der x/y Kordinaten mal zukommen lassen? :-)
Dann stimmt der Umrechnungsfaktor nicht (Pixel / ADC Wert)Zitat:
Zitat von mex.de
Du musst erstmal die min/max Werte des ADC ermitteln, wo Dein LCD anfängt und wo es aufhört. Fängt es zum bsp. bei ADC Wert 70 an und hört bei 900 auf, musst Du das natürlich berücksichtigen.
Dein "Nullpunkt" zum Start Deiner Berechnung ist dementsprechend 70, Dein "Endpunkt" 900.
So hättest Du z.B. 830(ADC Wert) / 128(Pixel) = 6.48 (Faktor).
Heisst also das ein Pixel auf dem LCD dem ADC Wert 6.48 entspricht.
Ich hoffe ich hab da jetzt kein Denkfehler drin :-)
Gruß
Jens
Hm... Ja so hatte ich mir das auch schon zusammen gebastelt aber das Resultat ist folgendes:
x,y(0,0)=0,0 Anzeige auf Display das sieht gut aus
x,y(240,128)=238,127 das ist auch aktzeptabel
x,y(0,128)=14,50 das nich ganz was ich erwartet habe
x,y(240,0)=150,34 das ist ebenfalls zu wenig
ich geh mal davon aus, dass das Touchpanel nicht linear ist oder es ist kaputt... auf jedenfall kann ich keine vernünftigen Pixel Koordinaten ermitteln. :-(
Auf LCD-Pixel hab ich noch nicht umgerechnet, nur soweit, das ich in der Ecke ca. auf 0,0 komme, der Rest ist immer noch vom ADC.
Evtl. könntest Du uns zeigen wie Du gerechnet hast, vllt. werden da mal ein paar Kommastellen verschluckt, denn wenn der max. Punkt passt, sollten die dazwischen auch in etwa stimmen.
Es gibt/gab hier mal nen Thread, da wurde das berechnet.
... da isser ja:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=32952
Also ich hab mich ja auch an dem Code von dieser Seite orientiert:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=32952
ich verwende lediglich einen Atmega 32 statt des 128...
ich habe sogar das gleiche Display (ledsee.com)... aber bei mir sieht es nicht so aus wie auf den Bildern im og. Beitrag... :-(
Ich glaube eher, dass das Touchpanel kaputt ist... Schön wäre auch ein Datenblatt zum Touchpanel...
Poste doch mal Deinen Code. Ein Datenblatt zum Touch ist eigentlich unnötig, da es nur 4 Widerstände sind ;)
H I E R sieht man die Beschaltung des AVR.
Gruß
Jens
meist funktionieren diese touch-teile mit einem 4-wire anschluss. von analog devices gibts sogar controler dafür welche über spi angesprochen werden können. das prinzip ist wie 2 variable spannungsteiler. einer für y und einer für x.
Also der sieht genauso aus, nur mit angepassten Werten...
Hier mal Dein Code zum mitlesen (ohne download) :-)
Code:$regfile = "m32def.dat"
$crystal = 7372800
$hwstack = 100
$swstack = 75
$framesize = 40
Config Graphlcd = 240 * 128 , Dataport = Portb , Controlport = Portd , Ce = 2 , Cd = 1 , Wr = 4 , Rd = 3 , Reset = 0 , Fs = 5 , Mode = 6
Config Sda = Portc.1
Config Scl = Portc.0
Config Adc = Single , Prescaler = Auto
'****************** Variablen ********************************
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
Do
Gosub Readtouch
Locate 3 , 22
Lcd Y ; " analog Y "
Locate 4 , 22
Lcd X ; " analog X "
If Y > 170 Then
Y3 = Y - 170
Y2 = Y3 / 1.89
Y4 = Y2
Else
Y4 = 0
End If
If X > 150 Then
X3 = X - 150
X2 = X3 / 1.78
X4 = X2
Else
X4 = 0
End If
Locate 5 , 1
Lcd X4 ; " X"
Locate 6 , 1
Lcd Y4 ; " Y"
Pset X4 , Y4 , 255
Loop
End
Readtouch:
Config Pina.0 = Output ' Makes port F.0 output
Config Pina.2 = Output ' Makes port F.0 output
Set Porta.0 ' Sets port F.0 High
Reset Porta.2 ' Sets port F.2 Low
Ddra.1 = 0 ' Sets port F.1 as input
Ddra.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 Pina.1 = Output ' Makes port F.1 output
Config Pina.3 = Output ' Makes port F.3 output
Reset Porta.3 ' Sets port F.3 Low
Set Porta.1 ' Sets port F.1 High
Ddra.0 = 0 ' Sets port F.0 as input
Ddra.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
Ohh... Danke, ich weiß nich wie man den Code hier zum mitlesen plottet ;)
Ja Port A ist beim Atmega 32 der ADC Port... Muss ich denn JTAG ausschalten? in meinem Hauptprogramm hab ich das auch nicht gemacht und die Spannungs bzw. Strommessung funktioniert auch einwandfrei...
Wie schalte ich denn JTAG aus? Welchen Effekt hat das denn?