www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD7843 Touchwerte nach kurzer Zeit weg


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab grad ein etwas merkwürdiges Verhalten vom AD7843 feststellen müssen. 
Über einen externen Interrupt (PIRQ-Signal) wird bekannt gegeben, dass 
ein Touch-Event aufgetreten ist; wenn ich jetzt sofort via SPI die 
"Koordinaten des Touches" auslese, funktioniert es; warte ich aber etwas 
länger, ohne irgendetwas zu tun, wird nichts mehr ausgegeben, wenn ich 
die "Koordinaten des  Touches" auswerten möchte.

Arbeite mit dem STM32F103 Prozessor. Eigentlich wollte ich nämlich gern 
einen Timer-Interrupt verwenden + Entprellungsroutine -> aber danach 
kann ich nichts mehr über SPI vom AD7843 auslesen. Setze ich nur den 
externen Interrupt ein, funktioniert es; allerdings liefern manche 
Touches falsche Informationen (sprich die Koordinaten passen überhaupt 
nicht)...

Gruß
Bernd

Autor: Holger S. (holli_1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definiere doch bitte mal "etwas länger warten". Ich habe ca. 30 ms 
Entprellzeit, damit funktioniert es ohne Probleme. Direkt nach dem IRQ 
zu lesen verursacht auch bei mir ab und zu falsche Koordinaten. Der 
Logikanalysator zeigt auch oft ein Prellen des PenIRQ.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Timer-Interrupt hatte ich die Entprellroutine von Peter Danegger 
verwendet. Wartezeit 200ms

>>Direkt nach dem IRQ zu lesen verursacht auch bei mir ab und zu falsche 
>>Koordinaten.

Das beobachte ich auch; Rufst du deine Entprellroutine aus einem 
Timer-Interrupt auf oder aus dem externen Interrupt (der aufgerufen 
wird, wenn sich das PIRQ Signal ändert?

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void TIM3_IRQHandler(void)       
{

  static unsigned char ct0, ct1, rpt;
  unsigned char i=0; 


  i = key_state ^ ~(GPIOE->IDR >> 9); 
  ct0 = ~( ct0 & i ); 
    ct1 = ct0 ^ (ct1 & i); 
  i &= ct0 & ct1;  

  if(i != 0)
    i = i; 

  key_state ^= i;
  key_press |= key_state & i; 

  //short key detection
    if(get_key_press( ~key_state & ( 1<<KEY2 ) ))
  {
     //touch press event 
    TouchPressEvent(STATE_PEN_PRESSED); 
  }

  //timer flag muss gelöscht werden
  TIM3->SR &= ~(1<<0);  
}

Hier ist mal meine Interrupt-Routine; In TouchPressEvent wird ein 
Event-Flag gesetzt, so dass dann über die main() Routine der AD7843 
angesprochen wird.

Hab den Timer auch mal auf 1000µs gesetzt - aber keinen Erfolg gehabt. 
Der PIRQ ist low-active;

Autor: Holger S. (holli_1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
200ms sind sehr viel, ich messe bei kurzen Berührungen des Touchscreens 
IRQ-Zeiten von 50-150 ms Dauer. Die Prellen dauert, wenn vorhanden, so 
bis 20 ms. Selten länger, meistens noch unter 10ms.
Ich programmiere noch in Bascom. Am Anfang habe ich die Werte sofort in 
der Interrupt-Routine gelesen, mit den bekannten Folgen. Jetzt läuft das 
in der Hauptschleife als Portabfrage mit Entprellung, der AVR hat sonst 
kaum was zu tun. Die Entprellzeit ist da 25ms. Während der Wartezeit 
habe ich auch den Pull-up des Ports aktiv. Zum Messen wird der 
deaktiviert.
Probiere mal eine Entprellzeit von 20-30ms, damit sollte es 
funktionieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.