mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EA eDIPTFT43-A an Arduino Board


Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich will o.g. TFT über ein Arduino Board (i2c, Seite 7 der TFT 
Anleitung) ansteuern.

http://arduino.cc/en/Main/ArduinoBoardDuemilanove
http://www.lcd-module.de/pdf/grafik/ediptft43-a.pdf

Als ersten Test dachte ich mir ich schliesse pin1 (GND for logic) und 
Pin2 (VDD for logic) an die
entsprechenden pins des Arduino Boards an (GND, 5V) und habe erwartet 
das
das Display Storm bekommt und irgendeine Reaktion von sich gibt, doch 
leider pasiert nichts :( Auch nur mit den Pins21 und 22 (GND, VDD) gab 
es keine Reaktion. Was bedeutet der Zusatz "for logic" bei den Pins 1 u. 
2?

Schliesse ich das TFT zusammen mit dem Programmer an einen PC/MAC über 
USB an dann läuft eine Komplette Demo ab, also ist das TFT nicht defekt.

Kann mir jemand weiterhelfen ich bin da elektronik Laie.

Um das TFT über i2c anzusteuern hätte ich nur diese 4 pins (VCC,GND, 
SDA, SCL) angeschlossen, wie ich es auch schon mit folgendem LCD03 
erfolgreich getan habe:
http://www.active-robots.co.uk/media/pdf/LCD03.pdf

Das TFT Applikationsbeispiel auf Seite 7 zeigt noch weiter Pins wie z.B. 
Reset 5(5V) und i2c mode 12(GND), müssen diese evtl. auch beschaltet 
werden?

Aus Sicherheitsgründen habe ich beim Testen das Arduino Board mit einer 
9V Block Batterie betrieben, kann das die Ursache sein.

Kann mir jemand sagen wie ich das TFT an das Arduino Board richtig 
anschliessen kann?

Vielen Dank,
 Marco

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich sehe da einen kompletten Schaltplan für I2C Betrieb

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was muss ich denn noch mit anschliessen?
(Ich gehe ja davon aus das die Pins 1,2,14,15 ausreichend sind)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1  - GND
2  - 5V
5  - 5V
12 - GND
14 - SDA
15 - SCL

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, danke.

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich brauche doch noch eurer Hilfe.
Ich habe das TFT wie oben an den Arduino angeschlossen, die Pins BA2-BA0 
und SA2-SA0 sind offen und wegen Pullup -> 1.
Jetzt will ich es mit der wire.h lib wie folgt ansteuern:
#include <Wire.h>

void setup()
{
  Wire.begin(0xDE);           // join i2c bus (address optional for master)
                              // 8Bit 11011110 / 11011111 
  Wire.beginTransmission(4);  // transmit to device #4 ???
  Wire.send("#TA");           // switches off terminal mode
  Wire.send("#FR");           // fills a rectangle with colour 7  
  Wire.send(100);
  Wire.send(100);
  Wire.send(200);
  Wire.send(200);
  Wire.send(7);
  
  Wire.endTransmission();     // stop transmitting
}


void loop()
{
  for(;;)
  ;
}

Es passiert aber nichts, nur das standard Demo wird abgespielt (Clown, 
Erdkugel usw.)

Zwei Punkte sind mir unklar:
1. Brauche ich eine Device Adresse? Wenn ja welche ist das?
2. Ich habe etwas von zwei 10k Ohm an SDA u.SCL nach Plus 5V legen, 
gelesen? Brauche ich etvl. diese Widerstände?

Vielen Dank,
 Marco

Autor: Chris H. (wuselwutz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco D. schrieb:

> 1. Brauche ich eine Device Adresse? Wenn ja welche ist das?

Schon mal auf Seite 7 des von Dir selbst verlinkten Handbuchs geschaut?

> 2. Ich habe etwas von zwei 10k Ohm an SDA u.SCL nach Plus 5V legen,
> gelesen? Brauche ich etvl. diese Widerstände?

Nein, der I2C Bus wird generell ohne Pull Up Widerstände betrieben...

Hier im Forum finden sich jede Menge Infos zum I2C/IIC/TWI Bus. Da steht 
auch einiges zu den Widerständen.

http://de.wikipedia.org/wiki/I2C

Autor: Helge Tefs (htefs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris H. schrieb:
> Nein, der I2C Bus wird generell ohne Pull Up Widerstände betrieben...

Steht im von Dir verlinkten Wikipedia-Artikel aber anders:
Zitat:
"Die Pull-Up-Widerstände RP an der Takt- und Datenleitung passen den 
High-Pegel an die Höhe der Versorgungsspannung an."
Im danebensteheneden Bild sind die auch zu sehen.

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja schon ist mir jedoch nicht ganz klar. Die i2c Adresse sollte 0xDE für 
Schreiben sein. Der Fehler könnte beim initialisieren liegen: 
Wire.begin(0xDE) und Wire.beginTransmission(4).

Werde es heute Abend wie folgt versuchen:
...
Wire.begin();                  // join i2c bus (address optional for master)
Wire.beginTransmission(0xDE);  // transmit to device 0xDE
...

Danke.

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf der Abbildung des Links zum TFT auf Seite 7 sind die Widerstände 
auch gestrichelt eingezeichnet.

Wenn das mit den geändertem Code nicht klappt, lege ich zwei Widerstände 
an. Sind 2 x 10k OHM ok?

Gruß,
 Marco

Autor: Chris H. (wuselwutz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Helge Tefs schrieb:
> Chris H. schrieb:
>> Nein, der I2C Bus wird generell ohne Pull Up Widerstände betrieben...
>
> Steht im von Dir verlinkten Wikipedia-Artikel aber anders:

Verflixt, ich hab die Ironie-Tags vergessen...

Mein Beitrag sollte natürlich lauten: "Lesen bildet!"

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So langsam steige ich durch, doch leider führt das TFT immer noch seine 
Demoprozedur durch und lässt sich nicht ansprechen :(

So habe ich es angeschlossen (mit Widerständen):

1  - GND
2  - 5V
5  - 5V
12 - GND
14 - SDA (10k Ohm nach 5V)
15 - SCL (10k Ohm nach 5V)

Hier das aktuelle coding (sketch) für den Arduino:
#include <Wire.h>
#define  i2c_eaDIP  0xDE        // Ba2|Ba1|Ba0|Sa2|Sa1|Sa0|R/W

byte bcc;       

void setup()
{
  Serial.begin(9600);

  Wire.begin();           // join i2c bus (address optional for master)
  Wire.beginTransmission(i2c_eaDIP);  // transmit to device #0xDE

  Display_loeschen();

  Wire.endTransmission();     // stop transmitting

  delay(100);

  Wire.requestFrom(0xDF, 1);
  Serial.println(Wire.available(), HEX);
  Serial.println(Wire.receive(), HEX);

}

void Display_loeschen() {
  Wire.send(0x11);   // <DC1>
  Wire.send(0x03);   // len
  Wire.send(0x1B);   // ESC
  Wire.send('D');
  Wire.send('L');
  bcc = ( 0x11 + 0x03 + 0x1B + 'D' + 'L' ) % 0x400; 
  Wire.send(bcc);
  //D = 0x44
  //L = 0x1B
}

void loop()
{
  for(;;)
    ;
}


Serial.print dient nur zur Überprüfung der Ausgabe, um zu überprüfen ob 
mir das TFT ein ACK zurückliefert, es kommt jedoch nichts zurück ausser 
0.

Es muss ja entweder das Coding oder die Art wie es angeschlossen ist 
sein, kann mir jemand helfen? Sind die Widerstände zu evtl. zu groß?
Oder muss ich diesen Demo Mode irgendwie anders beenden?

Danke und Gruß,
 Marco

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weitere neue Erkenntnis:

Info zur wire Library:

...Wire library will enable ATMEL internal Pullup's. So using additional 
pullup's with a short bus may not be required, for example interface 
only a single nearby EEPROM...

Also Widerstände wieder raus und den Pin 13 Dpom habe ich auch auf GND 
gelegt (disable PowerOnMacro), jedoch blinkt der Cursor nur und es wird 
nichts angezeigt.

Autor: Helge Tefs (htefs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schonmal einen Oszi rangehängt und geschaut, was da vom Host gesendet 
wird? Antwortet das Display überhaupt auf Deinen I2C-Code? Wenn die 
Adresse stimmt, solltest Du wenigstens das ACK des Displays sehen. Ist 
Dein Bus vielleicht zu schnell (laut Datenblatt maximal 100kHz, bei 
langen Pausen bis 400kHz)?
Wieso nimmst Du in Deinem Programm die Summe eigentlich Modulo 0x400? 
Wäre nicht 0x100 (256) richtig? Achja, und Dein Kommentar für den 
Ascii-Code von "L" stimmt nicht, aber das ist ja nebensächlich...
Gruß, Helge

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
leider habe ich keine Oszi, nein das Display antwortet nicht auf den I2C 
Code, so als würde es nichts erhalten.
Der Bus ist 100kHz schnell, delays zwischen den sendenden Bytes hilft 
auch nichts, ein anderes Board habe ich auch schon versucht.
Mit den 0x400 upps, das ist der oct Wert, du hast recht. Der Testmodus 
des TFTs gibt mir auch die korrekte Adresse 0xDE und das es auf i2c 
kommunikation eingestellt ist.
So langsam bin ich ratlos.

Gruß,
 Marco

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gelöst, ich schreibe morgen etwas dazu.
Ich danke euch.

Autor: Marco D. (iben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es lag an der i2c 8bit Adresse und zwar am r/w Bit. Die wire lib hängt 
das r/w Bit selbständig an, je nach ob gelesen oder geschrieben werden 
soll. Somit ist
 #define  i2c_eaDIP  0xDE  
keine gültige Adresse, da 8Bit deshalb muss das r/w Bit weggelassen 
werden:
 #define ( i2c_eaDIP  0xDE >> 1 ) 
.

Danke an Claus aus dem arduino.cc forum.

Autor: Helge Tefs (htefs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marco!
Danke für die Info, vielleicht hat ja irgendwann noch jemand anderes das 
gleiche Problem.
Mich würde nur mal interessieren, was sich der Programmierer der Lib 
dabei gedacht hat. Die Adresse je nach Bedarf "or 0x01" zu nehmen (oder 
eben nicht) sollte doch eigentlich nicht so schwer sein. Stattdessen 
muss man eine "unvollständige" Adresse angeben. :(
OK, man umgeht vielleicht eine Fehlerquelle, wenn die Anwender z.B. eine 
Adresse mit gesetztem Lese-Bit verwenden, aber dafür werden die gleichen 
Anwender, wenn sie denn mal den I2C außerhalb des Arduino programmieren 
müssen, wieder umdenken oder mit einer falschen (weil unvollständigen) 
Adresse kämpfen.
Gruß, Helge

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.