Hallo, da ich nun erfolgreich einige dinge ans laufen bekommen habe unter anderem auch ein GLCD wollte ich dieses nun mit einem Touchscreen versehen. Ansteuerung laut datenblatt ausgeführt. An 4 ADC port angeschlossen und in einer while schleife die abfrage ausgeführt. Laut Datenblatt soll ich, MCU: Atmega8 Belegung: Pin1 -> PC1, Pin2 -> PC2, Pin3 -> PC3, Pin4 -> PC4 X-Coordinate Pin1 (X+) auf VCC schalten, Pin2 (X-) auf GND schalten. An Pin4 soll ich dann die Messung vornehmen, Pin3 bleibt unbenutzt. Y-Coordinate Pin3 (Y+) auf VCC schalten, Pin4 (Y-) auf GND schalten. An Pin2 soll ich dann die Messung vornehmen, Pin1 bleibt unbenutzt. Nun läuft das ganze in der while schleife, für X, PC1 auf Ausgang dann auf High PC2 auf Ausgang dann auf Low PC4 auf Eingang und ADC einlesen für Y, PC3 auf Ausgang dann auf High PC4 auf Ausgang dann auf Low PC2 auf Eingang und ADC einlesen Die Werte stehen dann in den variablen xcor und ycor. Solange ich das Touchscreen nicht berühre werde mir auf dem Display die Werte für X und Y mit 1023 ausgegeben, klar, kein widerstand als 5V somit höchster ADC wert. Berühre ich das Touchscreen dann ändern sich die Werte nicht oder "springen", dann werden für einige Sekunden jeweils verschiedene Werte angezeigt also z.b. so: 1023, 6483, 4830, 7473, 0480, 1023. Dann stehen die werte wieder konstant auf 1023 bis ich das Touchscrren wieder berühre, dann werden wieder irgendwelche Werte angezeigt und danach stehen sie wieder auf 1023. Meines wissens nach ist der höchste ADC wert doch 1023, demnach kann ich mir das nicht erklären, und auch das "springen" der Werte, selbst wenn ich ganz ruhig einen Kugelschreiber oder ähnliches benutze springen die Werte. Die Werte gebe ich mittels itoa(xcor, Buffer, 10); und dann lcd_puts(small_font, Buffer); mit der mylcd libraray auf dem Display aus. Genau so auch mit der Y Coordinate. Ich hoffe mir kann da jemand helfen. Danke schonmal.
Gast
#3047146
Klappt ohne Code bestimmt gut. Löscht du das Display bevor du schreibst oder überschreibst du nur?
Gast
#3047168
Stellst du den jeweils ungenutzten Pin auch auf hochohmig? Bei deiner Beschreibung klingt es so, als ob der jeweils ungenutzte Pin auf high bleibt, was natürlich nicht funktionieren kann. Er muss auch als Eingang konfiguriert werden, auch wenn du ihn nicht auswertest.
Hallo, danke erstmal für die antworten. Also vor der neuen ausgabe auf dem Display überschreibe ich die Zahl mit leerzeichen und schreibe dann wieder neu. Also den jeweils nicht genutzten Pin lasse ich so wie er ist/war. Also muss ich den auch als Eingang und dann auf High setzten, richtig?
Gast
#3047226
Nicht auf High. Hochohmig. Das ist beim AVR immer dann wenn er als Eingang konfiguriert ist.
ok, also schalte ich für x dann die x ports auf ausgang und dann x+ auf high, x- auf low, die ports y- und y+ auf eingang und dann messe ich am y- mittels adc. für y das gleiche nur halt mit den entsprechenden ports.
Tobias N. schrieb: > ok, > > also schalte ich für x dann die x ports auf ausgang und dann x+ auf > high, x- auf low, die ports y- und y+ auf eingang und dann messe ich am > y- mittels adc. für y das gleiche nur halt mit den entsprechenden ports. genau, und an den Eingangsports auf keinen Fall den Pullup aktivieren. Du musst allerdings nicht dauernd messen, sondern nur wenn auch eine Berührung stattfindet. Dazu legst du die eine Achse auf GND (z.B. X+ & X-) und schaltest die andere auf Eingang, wobei du an einem Eingang auch den Pullup einschaltest. Dort kannst du nun abfragen ob eine Berührung stattfindet. Im Ruhezustand hast du durch den Pullup immer H-Pegel, sobald der Touch berührt wird bekommst du L-Pegel und kannst die Messung starten. Und du musst für ein brauchres Ergebnis immer mehrere Messungen machen und den Durchschnitt der Messwerte nehmen. Sascha
Ich habe jetzt so einiges Probiert aber alles ohne erfolg, hier mal der letzte getestete Code.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
Also ich würde mir das nicht so umständlich machen. Warum alles in den armen kleinen uC reinhacken? Nimm z.B. einen ADS7846. Der macht das alles und mit den sprichst du über SPI und fertig. Außerdem hat der noch ein paar nützliche Zusatzfunktionen. Und der kann deinen uC per IRQ-Leitung aufwecken wenn am Touch was passiert.
das ist nur mein test µc, hinterher wird dann dann an einem mega32 betrieben, also nur das display und das touch, der soll als "grafikchip" dienen, der komuniziert dann mittels spi, kriegt halt noch eine sd karte und ein paar ds1820 aber mehr soll der mega32 dann nicht machen, also display, touch, sdkarte und ds1820, der rest passiert dann mittels spi. ich will halt das ganze mehr verstehen etc. pp. demnach muss ich mich da wohl durch kämpfen ;) lerning by doing :)
Gast
#3057135
Hi Such mal bei ATMEL nach: AVR341: Four and five-wire Touch screen Controller using tinyAVR and megaAVR devices Da gibte es auch Software. MfG Spess
@Tobias, // interne Referenzspannung als Refernz für den ADC wählen: ADMUX = (1<<REFS1) | (1<<REFS0); Damit kann es ja überhaupt nicht gehen!! Dein Touch wird ja schießlich über die Portpins, also Vcc mit Spannung versorgt, also muss auch die Referenzspannung des ADC Vcc sein! Sascha
naja, also bei ADMUX = (0<<REFS1) | (1<<REFS0); macht er weiter wie bisher gibt mir einfach immer irgendwelche zahlen aus, pendelt sich aber nicht einmal bei 1023 ein. bei ADMUX = (0<<REFS1) | (0<<REFS0); steht er konstant auf 1023 und egal ob ich was drücke oder nicht der wert verändert sich nicht. also irgendwas ist doch hier falsch :(
so, es läuft, also als ich mir dann mal dachte ich lese Y auch noch mit aus, voila, die werte werden angezeigt. alles tutti, aber schon stellt sich mir die nächste frage. ich versuchte also mal "einen" bereich also taste zu nutzen, also ganz viele ifs und wenn es stimmt zeige mir was an, beim wieder drauf drücke mache die anzeige wieder weg. das klappt auch alles soweit aber sehr "langsam" also "schnelles" tippen wird nicht erkannt. "menu" anzeigen geht schneller als "menu" nicht mehr anzeigen. wenn ich halte dann zeigt der mir das etwa im sekunden wechsel an. also text da, text weg, text da, text weg muss/kann man die touch eingaben auch "entprellen" halten ein anderer zustand als tippen? wie kann man einstellen "wie schnell" er reagieren soll, denn ein kurzes tippen wie z.b. beim handy endet mit garkeiner reaktion. es läuft jetzt mit der internen referenzspannung vcc, mit avcc erhalte ich konstand 1023 und keine reaktionen aufs tippen. beim messen mittels multimeter funktioniert aber alles nur er misst halt nicht. danke euch.
Gast
#3058497
Vielleicht hast du Avcc falsch beschaltet...
100nF zwischen AVCC und AGND und die dann mit 5V vom 7805 beschaltet. Und dann nochmal einen 100nF zwischen AREF und AGND. Die aber dann nicht beschaltet also nur den 100nF dazwischen.
Gast
#3058503
Willst du denn nun Aref nutzen oder nicht?
nunja, also wenn es mir vorteile bringt dann natürlich. wenn es mit AVCC gleichgestellt ist dann brauche ich es ja nicht zwingend nutzen, oder?
Gast
#3058515
Tobias N. schrieb: > nunja, also wenn es mir vorteile bringt dann natürlich. wenn es mit AVCC > gleichgestellt ist dann brauche ich es ja nicht zwingend nutzen, oder? Wenn du an Aref eh nur die 5 Volt anschließen würdest ist es besser AVCC zu benutzen. Geh aber eigentlich beides. siehe: http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC#Referenzspannung_AREF
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.