Probleme mit eDIPTFT 240-7

Hallo liebe Community,

ich hab von meinem Lehrer ein Touchscreen bekommen und soll das jetzt mal zum laufen bringen.

Soweit so gut. Ich hab es mit meinem Arduino Mega über I2C verbunden und arbeite mit der wire.h lib.
Das klappt auch soweit. Verbindung steht und ich konnte zumindest schon mal einen Button mit Beschriftung aufs Display bringen.

Jetzt würde ich gern den Status des Buttons (ist als Schalter definiert also an oder aus) über meinen Arduino abfragen und im SerialMonitor darstellen.

Ich komm nur nicht dahinter wie das Display tickt. Mache da jetzt schon seit zwei Tagen rum, ohne Erfolg.

Ich hoffe mir kann da jemand helfen.

Schöne Grüsse vom Bodensee

Setzt du für das Display auch eine eigene Library ein?

Dann gib es in dieser doch meist auch Beispiele, die viel über die Funktionen sagen.

Hallo HotSystems,

Ich hab zwar ein Datenblatt aber daraus werde ich nicht schlau. Eine lib hab ich keine. Wollte das mit der wire.h machen. Ich das Datenblatt mal als Anhang miteingefügt.

edip240-7.pdf (1000 KB)

Wirklich mal ein tolles Datenblatt und das sogar auf deutsch...

War das ironisch :wink:

stanzi28:
Hallo HotSystems,

Ich hab zwar ein Datenblatt aber daraus werde ich nicht schlau. Eine lib hab ich keine. Wollte das mit der wire.h machen. Ich das Datenblatt mal als Anhang miteingefügt.

Ist das nicht ab Seite 15 beschrieben?
Grüße Uwe

stanzi28:
Ich hab zwar ein Datenblatt aber daraus werde ich nicht schlau. Eine lib hab ich keine. Wollte das mit der wire.h machen. Ich das Datenblatt mal als Anhang miteingefügt.

Ok, die Wire.h steuert das Display per I2C und alles weitere findest du,wie uwefed schon schreibt, in dem Datenblatt ab Seite 15. Das Ding ist sehr intelligent und braucht keine zusätzliche Lib.

Wenn du das mit den Schaltfläche darstellen schon hin bekommen hast, sollte das doch auch mit dem Auslesen der Befehle funktionieren.

Na ja, das dacht ich auch :o

Hier mal mein code um den Tuch Schalter zu definieren

void drawButton(char x1, char y1 , char x2 , char y2) {
  Wire.beginTransmission(i2c_eaDIP);
  Wire.write(0x11);   // <DC1>
  Wire.write(15);   //len
  Wire.write(0x1b);   // ESC
  Wire.write('A');
  Wire.write('K');
  Wire.write(x1);     // 1. Punkt in X
  Wire.write(y1);     // 1. Punkt in Y
  Wire.write(x2);     // 2. Punkt in X
  Wire.write(y2);     // 2. Punkt in Y
  Wire.write(0x01);
  Wire.write(0x02);
  Wire.write('T' );
  Wire.write('O');
  Wire.write('U');
  Wire.write('C');
  Wire.write('H');
  Wire.write(0x00);
  // ---------------------------------------------------------------------------------------------------------
  // ************************** PRUEFSUMME *******************************************************************

  bcc = ( 17 + 19 + 0x1b + 'A' + 'K' + x1 + y1 + x2 + y2 + 0x01 + 0x02 + 'T' + 'O' + 'U' + 'C' + 'H' + 0x00) % 0x100;

  //**********************************************************************************************************
  // ---------------------------------------------------------------------------------------------------------
  Wire.write(bcc);      // bcc schreiben
 Wire.write(0x06);
  if ( Wire.endTransmission() == 0) {
    Serial.println(Wire.endTransmission());
    Serial.println("ACK");
  }else {
    Serial.println("NACK");
  }
  //D = 0x44
  //L = 0x1B
}

Ich versteh nicht wie ich den Status des Schalters, ob gedrückt oder nicht, abfragen kann.
Ich komm einfach nicht drauf >:(

Vielleicht seh ich den Wald vor lauter Bäumen nicht :o

Hallo,

EA hat angefangen für ihre Display Lib’s zur Verfügung zu stellen. Leider genau für deines noch nicht.

Allerdings gibt es schon diverse Tools und Anleitungen dafür.

  if ( Wire.endTransmission() == 0) {
    Serial.println(Wire.endTransmission());

Das solltest du nicht zweimal machen. endTransmission() sendet nicht nur eine Stop-Condition, sondern verschickt überhaupt erst den Ausgangspuffer.

Du kannst übrigens auch der Einfachheit halber Wire.write("Touch") schreiben.

Laut Datenblatt auf Seite 15 kann man eine abfrage des touchstatus machen mit

Esc,A,X,code

Was bedeutet den das code? Muss ich da eine startbedingung mit angeben (0x00 oder 0x01)?

Und den sendepuffer kann man wohl wie folgt abfragen

<DC2> 1 S bcc
< <ACK>
< <DC1> len data... bcc

Wie kann ich das mit der Wire.h lib denn abrufen?

Mann mann mann

Empfangen von Daten über I2C geht allgemein so:

const int BUF_LENGTH = 32;   //Pufferlänge
byte buffer[BUF_LENGTH];     //Array anlegen

Wire.beginTransmission(adr);
Wire.write(...);   //hier Anfangs-Register setzen, bzw. Befehle abschicken
Wire.endTransmission();

delayMicroseconds(10);    //da steht im Datenblatt was dass die Bearbeitung mindestens 6µs dauert

Wire.requestFrom(adr, sizeof(buffer));   //x Bytes Daten empfangen
for (int i = 0; i < sizeof(buffer); i++)   //Daten aus Eingangspuffer entfernen
   buffer[i++] = Wire.read();

Das steht dann alles zusammen in einem Array. Da muss man dann sehen was da genau drin ist und wie man es am Besten herausliest.

Das ganze seriell zu machen wäre übrigens ein weniger einfacher. Das Display hat laut Datenblatt 3 Schnittstellen