größeres Display für Uno oder 2009, einfach anzusteuern mit einfacher lib?

hallo,
da die Display-Ausgabe nicht ganz einfach ist und wenn ich schon etwas mehr Geld (<=50 EUR) für was fertiges ausgeben muss, dann eher etwas größeres…

so wie hier:

oder hier:

oder hier:

die kosten ja auch alle keine 50 EUR so wie ichs gesehen habe.

Aber wie ist dann der elektrische Anschluss (höchstens ein paar wenige Kabel oder direkt dranstecken, nicht mehr als 3-4 analoge oder digitale pins)?

Und wie ist die softwaremässige Ansteuerung?
Ist die auch wirklich einfach möglich so wie

ANSI-C printf(fmtstring, val [, val, val,…])
z.B.: printf (“radices: %d %x %o %#x \n”, 100, 100, 100, 100);

oder entsprechend für exakt lokalisierte Ausgabe an pixel (x,y):
printfxy(x, y, fmtstring, val [, val, val,…])

?

Indirekt kann man printf() natürlich verwenden. Die Libs funktionieren meistens so:

display.print(string, x, y);

Da legt man sich dann einmal einen globalen Puffer für alle String Funktionen an und verwendet snprintf() um in den Puffer zu schreiben. Diesen kann man dann auf dem Display ausgeben.

Hier empfiehlt sich gerade auf dem UNO übrigens die _P Version. Damit bleibt der Format-String im Flash wenn man ihn in ein PSTR() packt.

super, danke, sprintf kenne ich ntl, snprintf ist auch klar. Das mit dem _P oder dem Entpacken ist mir noch nicht klar, kann aber warten.

Wer hat denn hier im Forum eigene, praktische Erfahrung mit irgendwelchen dieser oder ähnlicher Displays (Matrixdisplays ntl am liebsten)?

Wie ist das mit dem Hardware-Anschluss im Einzelfall geregelt?

Die kleinen Displays werden meistens über SPI angeschlossen (ein schnellerer 8 Bit Modus geht auch bei manchen, aber das braucht dann I/Os). Das ist trivial und braucht 5 Pins für das Display und 1-4 für das Touchscreen: http://www.exp-tech.de/Displays/1-8-18-bit-color-TFT-LCD-display-with-microSD-card-breakout-ST7735R.html http://www.exp-tech.de/Displays/TFT/2-8-TFT-LCD-with-Touchscreen-Breakout-Board-MicroSD.html http://www.exp-tech.de/Displays/2-8-TFT-Touch-Shield-for-Arduino.html

Mit dem Touchscreen gibt es Unterschiede. Das untere mittlere Shield braucht 2 digitale und 2 analoge Pins, da es direkt gemacht wird. Das mittlere untere hat einen Controller dafür drauf, der das erledigt. Das wird dann auch über SPI ausgelesen und braucht daher nur einen weiteren Pin für Chip Select. Also 6 insgesamt.

Wenn du die Touch Funktion nicht braucht, muss man das natürlich nicht anschließen. Viele der ganz kleinen TFT Displays haben es auch gar nicht erst.

Das mit dem _P oder dem Entpacken ist mir noch nicht klar, kann aber warten.

Normalerweise landen allen String Literale im RAM (da Harvard Architektur). Das auf dem UNO und mit RAM intensiven Libs wie TFTs nicht gut. Also macht man es so:

sprintf_P (buffer, PSTR("radices: %d %x %o %#x  \n"), 100, 100, 100, 100);

Und schon belegt der String kein RAM mehr. Das _P steht für PROGMEM und PSTR entsprechend für Progmem String

danke - diese LCD Displays sind ja echt der Hammer - und das für schlappe 30 EUR! kaum zu glauben...!!!

wie schließt man nun SPI an (entschuldige, bin kompletter Arduino-Noob... ) :(

Schau dir die Bilder hier an: http://www.exp-tech.de/Displays/TFT/2-8-TFT-LCD-with-Touchscreen-Breakout-Board-MicroSD.html Vor allem das zweite und dritte

SPI liegt auf dem UNO auf Pins 9-13: http://arduino.cc/en/Reference/SPI Außerdem parallen auf dem ICSP Header in der Mitte

Das Adafruit Shield kann man direkt aufstecken. Man kann es natürlich auch abgesetzt betreiben und Kabel anschließen.

danke dir! :)

jetzt bräuchte ich nur noch mal kurz feedback von jemandem, der dieses Teil schon in Gebrauch hat, vllt auch mit einem sehr einfachen Sketch-Demo-Programm mit SPI-Verbindung 8-)

Folge halt einfach den Links dort: https://learn.adafruit.com/adafruit-2-dot-8-color-tft-touchscreen-breakout-v2 Da wird auch der Anschluss genau beschrieben: https://learn.adafruit.com/adafruit-2-dot-8-color-tft-touchscreen-breakout-v2/spi-wiring

Und die Lib verlinkt: https://github.com/adafruit/Adafruit_ILI9341

Text geht z.B. so:

tft.setCursor(0, 0);
tft.setTextColor(ILI9341_WHITE); 
tft.setTextSize(1);
tft.println("Hello World!");

Wenn du die Touchfunktion verwenden willst, ist die Shield Version wie gesagt besser, da die nur einen Pin braucht statt 4. Die Lib funktioniert aber genauso.

Es gibt aber noch andere Displays, die alle ähnlich funktionieren. Wenn du nach "Arduino SPI TFT" und ähnlichem suchst. Da findest du vielleicht noch was billigeres oder passenderes für dich.

klingt wirklich einfach. der hier http://www.ebay.de/itm/Adafruit-2-8-TFT-Touch-Shield-v2-for-Arduino-UNO-MEGA-etc-/171288039445?pt=DE_Computer_Sonstige&hash=item27e1901015

scheint komplett zu sein, einfach anzuschließen, offenbar dann wohl auch nur 1 Kabel

Das ist das hier: http://www.exp-tech.de/Displays/2-8-TFT-Touch-Shield-for-Arduino.html Das ist ein Shield direkt zum Aufstecken: https://learn.adafruit.com/adafruit-2-8-tft-touch-shield-v2/connecting

Kann man natürlich auch mit Kabeln anschließen. Was du da auf der eBay Seite siehst ist der Stromanschluss. Der Arduino ist unter dem Shield.

oh - Aufstecken ist nicht gut, dann komme ich ja gar nicht mehr an die pins ran fürs Breadboard, oder...? ( Stelle ich mich zu dumm an ?) :(

ps - das hier wären jedoch wieder bei weitem zu viele Kabel mit Pins, die dann besetzt sind. Also - nur 1 Kabel für SPI wäre schon optimal!

Das geht nicht! Das ist schon minimal. Clock, Data In, Data Out, Chip Select für SPI. Und dann noch Data/Command Select zusätzlich für das Display.

SPI: http://de.wikipedia.org/wiki/Serial_Peripheral_Interface http://arduino.cc/en/Reference/SPI

Wenn du du weniger willst, verabschiede dich von TFTs und nimm ein 20x4 Zeichen I2C LCD. Das braucht 2 Pins.

Ansonsten kann man auch I/Os mit I2C Port Expandern erweitern, oder externe ADCs mit mehreren Eingängen verwenden.

Hallo, also das hier: http://www.exp-tech.de/Displays/2-8-TFT-Touch-Shield-for-Arduino.html habe ich in gebrauch gehabt. Ist zwar zum aufstecken, geht aber auch auf einem Steckbrett. 6 Leitungen für SPI und vier für den Rest. Das Ding ist hübsch anzusehen und funktinoiert sofort. Aber- schneckelangsam, liegt wieder in der Bastelkiste. Bin wieder auf 4x20 zurück. Mein nächster Versuch wird dieses sein: https://www.sparkfun.com/products/8884 oder das: https://www.sparkfun.com/products/8799 mit dem: https://www.sparkfun.com/products/9352 ich weiß noch nicht was besser sein könnte. Wenn Du darüber mehr erfahren möchtest, dann mußt Du bis Juli warten. BastelKistenEbbe. Gruß und Spaß Andreas

i2c port expander klingt gut… :slight_smile:
schließlich brauch noch ein paar freie pins übrig für die Sensor-Daten, die ich dann auf dem Display anzeigen möchte :sunglasses:

ps, die Sparkfun-Displays sehen auch gut aus! Anzahl Verbindungskabel=...? Bin gespannt auf deine Erfahrungen!

Hallo HaWe,

ein bisschen googlen kann nicht Schaden. Viele der Fragen kann man innerhalb 1 Minute problemlos mit Google erfragen.

Zu deiner letzten Frage, das Serielle GLCD braucht mit dem Backpack nur Tx und Rx sowie die Spannungsversorgung. Es wird aber sicherlich nicht so schnell laufen wie die einfachen 16x02 Displays. TFTs gibt es meiner Meinung nach keine wirklich schnellen für den Arduino Uno etc. Wenn Touch dazukommt, sind die meisten Pins weg. Das ist einfach so, für solche Aufgaben ist ein soclher Arduino nicht ausgelegt. Was abhilfe schafft, ist ordentlich zu Programmieren. Nur die Daten am Display abändern, die wirklich neugeschrieben werden müssen.

Beispiel wenn ich die Zeit auf einem Display anzeigen möchte, dann gehe ich bei einem TFT wie folgt vor Immer nur die Stelle, die geändert wird mit überschreiben mit Schrifthintergrund. Bei einem TFT gehe ich mit dem cursor an die richtige Stelle und überschreibe hier die Stelle. lcd.clear und ähnliche Konsorten machen auch einem schnellen LCD eine lahme Ente.

sschultewolter: TFTs gibt es meiner Meinung nach keine wirklich schnellen für den Arduino Uno etc.

Das kommt auch darauf an was man machen will. Nur für ein paar Menüs, Buttons und Anzeige von Werten reicht es locker. Da sieht man zwar auch wenn größere Flächen neu gezeichnet werden, aber das ist vertretbar.

Wenn Touch dazukommt, sind die meisten Pins weg. Das ist einfach so, für solche Aufgaben ist ein soclher Arduino nicht ausgelegt

Das Adafruit Shield geht da eigentlich. Das braucht für Touch nur einen weiteren Pin, da das auch über SPI und den Controller auf dem Shield gemacht wird. Und nicht direkt vom Arduino.

so ein I/O multiplexer shield wär da nicht schlecht, und sei's nur fürs Display... aber ich komme grad schon sehr schnell an die Speichergrenze - 1kb für Variablen sind wirklich äußerst mager...

vllt sollte man da einfach einen Mega nehmen und den Uno per i2c oder SPI dranhängen, und den dann nur fürs Display nutzen....

...wird dann ntl wieder super-kompliziert mit den printf Ausgabe-Routinen...

nachdem man aber sowieso pin ana 4+5 für i2c braucht, wär ein i2c-Display nicht schlecht, denke ich. bis zu 127 Geräte an den i2c dranhängen ist sicher ausreichend ;) und wenns dann sogar mit 400kHz geht, um so besser... 8-)

Brauchst bzw. willst du den Touch unbedingt?
Kleine, monocrome Grafikdisplays für I2C gibts nämlich, die Crius OLED (im Kontrast umd Tempo um ganze Klassen besser als die grottigen TFT`s). Beim Chinesen für rund nen Fünfer (128<64)- aber eben kein Touch…