Forum: Mikrocontroller und Digitale Elektronik ADS7843 - PENIRQ gibt nicht-logisches Signal aus


von Peder (Gast)


Angehängte Dateien:

Lesenswert?

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

von Klaus (Gast)


Lesenswert?

Au weia!

von Felix Adam (Gast)


Lesenswert?

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.

von Peder (Gast)


Lesenswert?

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.

von Felix Adam (Gast)


Lesenswert?

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

von Thomas F. (igel)


Lesenswert?

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

von Peder (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.