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
Was muss ich denn noch mit anschliessen? (Ich gehe ja davon aus das die Pins 1,2,14,15 ausreichend sind)
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:
1 | #include <Wire.h> |
2 | |
3 | void setup() |
4 | { |
5 | Wire.begin(0xDE); // join i2c bus (address optional for master) |
6 | // 8Bit 11011110 / 11011111 |
7 | Wire.beginTransmission(4); // transmit to device #4 ??? |
8 | Wire.send("#TA"); // switches off terminal mode |
9 | Wire.send("#FR"); // fills a rectangle with colour 7 |
10 | Wire.send(100); |
11 | Wire.send(100); |
12 | Wire.send(200); |
13 | Wire.send(200); |
14 | Wire.send(7); |
15 | |
16 | Wire.endTransmission(); // stop transmitting |
17 | } |
18 | |
19 | |
20 | void loop() |
21 | { |
22 | for(;;) |
23 | ; |
24 | } |
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
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
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.
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:
1 | ... |
2 | Wire.begin(); // join i2c bus (address optional for master) |
3 | Wire.beginTransmission(0xDE); // transmit to device 0xDE |
4 | ... |
Danke.
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
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!"
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:
1 | #include <Wire.h> |
2 | #define i2c_eaDIP 0xDE // Ba2|Ba1|Ba0|Sa2|Sa1|Sa0|R/W |
3 | |
4 | byte bcc; |
5 | |
6 | void setup() |
7 | { |
8 | Serial.begin(9600); |
9 | |
10 | Wire.begin(); // join i2c bus (address optional for master) |
11 | Wire.beginTransmission(i2c_eaDIP); // transmit to device #0xDE |
12 | |
13 | Display_loeschen(); |
14 | |
15 | Wire.endTransmission(); // stop transmitting |
16 | |
17 | delay(100); |
18 | |
19 | Wire.requestFrom(0xDF, 1); |
20 | Serial.println(Wire.available(), HEX); |
21 | Serial.println(Wire.receive(), HEX); |
22 | |
23 | } |
24 | |
25 | void Display_loeschen() { |
26 | Wire.send(0x11); // <DC1> |
27 | Wire.send(0x03); // len |
28 | Wire.send(0x1B); // ESC |
29 | Wire.send('D'); |
30 | Wire.send('L'); |
31 | bcc = ( 0x11 + 0x03 + 0x1B + 'D' + 'L' ) % 0x400; |
32 | Wire.send(bcc); |
33 | //D = 0x44 |
34 | //L = 0x1B |
35 | } |
36 | |
37 | void loop() |
38 | { |
39 | for(;;) |
40 | ; |
41 | } |
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
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.
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
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
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
1 | #define i2c_eaDIP 0xDE |
keine gültige Adresse, da 8Bit deshalb muss das r/w Bit weggelassen werden:
1 | #define ( i2c_eaDIP 0xDE >> 1 ) |
. Danke an Claus aus dem arduino.cc forum.
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
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.