Hallo,
der PENIRQ treibt mich so langsam aber sicher in den Wahnsinn.
Ich hab ihn per 50k-Pullup an einen XMEGA angeschlossen (per
Port-Interrupt) und stelle fest, dass PENIRQ nicht HI und LO ausgibt,
sondern eine Spannung, die linear mit der gedrückten y-Position auf dem
Touchscreen fällt: Je weiter "unten" ich auf dem Display drücke, desto
kleiner die PENIRQ-Spannung. Allerdings fällt diese nie auf 0V - auch
nicht annähernd, sondern bis auf mindestens 1,1V. Das mag mit der Diode
und der ganzen internen Verschaltung vom PENIRQ zu tun haben, ist aber
dann absolut unbrauchbar, wenn das so gewollt ist.
Zudem gibt das Datenblatt vom XMEGA ein Maximum für "Low Level Input
Voltage" von 0,8V vor, trotzdem löst der Interrupt an diesem Pin schon
bei 1.5V aus (per Oszi gemessen).
Der Filter zum µC hin steht so nicht im Datenblatt, aber in einem "Touch
Screen Controller Tipps"-Dokument von BB/TI.
Was stimmt denn mit dieser Schaltung nicht? So kann das doch vom
Hersteller nicht vorgesehen sein, oder?
Grüße
Peter
PENIRQ kann benutzt werden, wenn der Chip im Sleep ist. Ich sehe das in
Table V auf Seite 9 des Datenblattes:
http://www.ti.com/lit/ds/symlink/ads7843.pdf
Dass im Betrieb der Pin nicht unter 1,1V kommt, liegt an der Diode und
der Spannung, die über dem resistiven Touch im unteren gedrückten
Touchbereich noch abfällt.
Felix Adam schrieb:> PENIRQ kann benutzt werden, wenn der Chip im Sleep ist.
Das war das erste, was mich im Bezug auf PENIRQ gestört hat. Welchen
Zweck hat dann noch der Nicht-Sleep-Modus?
Ansonsten sieht das Fehlerbild nach einigem Herumprobieren völlig anders
aus: Wenn ich die Netzspannung für ein paar Sekunden wegnehme,
funktioniert der PENIRQ wie er soll an jeder Position und geht sofort
auf knappe 0.8V runter. Dass der µC das noch als LO akzeptiert, ist wohl
Glückssache.
Nach diesem ersten erfolgreichen Interrupt funktioniert er allerdings
nicht mehr, bis ich die Schaltung wieder vom Netz nehme. Ich frage mich,
ob der Controller einfach nicht mehr in den Sleep-Mode findet. Mein
Control-Byte (11010000) müsste ihn aber dazu veranlassen. Ich kann zwar
jederzeit die X- und Y-Positionen abfragen, aber der PENIRQ ist dann
"tot".
Irgendeine Idee? Ist der IC eventuell kaputt? Viel ist in der Schaltung
ja nicht vorhanden. Sooo viel Fehler kann ich da bald nicht machen.
Das Control Byte sieht erstmal richtig aus, daher wüsste ich jetzt ohne
ein Gerät zum Testen zu haben auch nicht weiter.
Aber vielleicht hilft etwas von der Seite unter diesem Link:
https://e2e.ti.com/support/other_analog/touch/f/750/t/122867
Ich lese den ADS7843 am 3.2' TFT-LCD mit einem Atmega64 bei 3,3V
Versorgung aus:
Der PENirq wird dabei alle 10ms gepollt, ohne Pull-up. Das funktioniert
jetzt seit 2 Jahren im Dauerbetrieb.
Die obligatorische Frage:
Versorgungsspannung, Lötstellen und Leiterbahnen mehrmals überprüft?
TL;DR:
Dummy-Bytes zum Produzieren der SPI-Clock-Pulse sollten keine Einsen
beinhalten. Am besten in der Form 0b00000000. Unbedingt die "Touch
Screen Controller Tips" von TI/BB lesen:
http://www.ti.com/lit/an/sbaa036/sbaa036.pdf
Ausführlicher:
Also der Link war tatsächlich ganz interessant. Hat zwar nicht zur
Lösung des Problems beigetragen, aber generell zu mehr Verständnis.
Wenn ich die Spannungen an X+, X-, Y+ und Y- ohne Touch gemessen habe,
war ohne Software alles in Ordnung, bis auf die Pegel, die nicht bei
3,3V, sondern bei etwa 2,2V liegen. (Keine Ahnung, was das nun wieder
heißt) Mit Touch stimmt der X+-Wert nicht mit dem überein, was der
TI-Mensch geschrieben hat: Bei mir geht der auf Null runter. Ich sehe
aber keinen Einbruch in der Spannungsversorgung, direkt an den Pins des
ADS gemessen. Dennoch bekomme ich vollkommen brauchbare Werte vom
Touchscreen heraus.
Zur eigentlich Fehlerursache, auch wenn ich nicht kann erklären, warum
das zum Fehler führt: Meine Dummy-Bytes zum Produzieren von
SPI-Clock-Pulsen vom µC aus sehen prinzipiell so aus -> 0b01010101,
damit ich mich im Logic Analyser besser zurechtfinde. Wenn an bestimmten
Positionen eine Eins steht (nicht im Control-Bit, das ist klar), hängt
sich der Controller auf. Es scheint mehrere Möglichkeiten zu geben,
diesen Problem-Einsen zu verteilen, ein klares Muster habe ich noch
nicht erkannt. Also habe ich das Dummy-Byte einfach 0b00000000 gesetzt
und dann funktioniert es. Im Nachhinein könnte man argumentieren, dass
die Timing-Tabelle das auch genauso suggeriert, aber sonst ist davon im
Datenblatt nirgendwo die Rede.
Den Controller selbst habe ich inklusive Referenzspannung und
Nullkraftsecker auf PCB löten lassen. Die Verbindungen hier sind kein
Problem. Der ganze andere Rest sitzt auf einer Lochrasterplatine, aber
auch die Verbindungen scheinen kein Problem zu sein.
In einem nächsten Versuch werde ich aber die X,Y-Leitungen zum
Touchscreen noch mit Kondesatoren versehen, wie in den "Touch
Screen Controller Tips" empfohlen. Unter bestimmten Voraussetzungen
konnte ich nämlich zwischenzeitlich den PENIRQ auslösen, ohne das
Display überhaupt zu berühren. Reine Nähe um das Display herum hat
genügt. Und auch im Logic Analyser weist der PENIRQ viele, wenige
ns-kurze Spikes auf, während er LO sein soll.
Also Danke an Euch Beide! Fürs erste wäre das Thema für mich erledigt.
Ich schau hier noch mal rein, wenn noch Ideen kommen, was die "kleineren
Probleme" betrifft, aber ich hoffe einfach mal, dass ein besseres Design
und eine reiner PCB-Aufbau das von allein löst.
Grüße
Peter