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?
1 | in temp1, PINE ;Touch-Pin. |
2 | andi temp1, 1<<6 ;PE6 Touch maskieren |
3 | brne main_10ms_02 ;Nicht gedrückt |
4 | |
5 | ldi temp1, 8 |
6 | sts Backlight_counter, temp1 ;Backlight 8s an. |
7 | rcall read_touch |
8 | rcall touch_handler |
9 | rcall print_touch_position |
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.