mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2.2'TFT ILI9340 und Arduino


Autor: Marksu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

da ich gerade etwas Lust zum spielen habe und hier ein kleines 
TFT-Display
( 
http://www.instructables.com/id/Cheap-TFT-22-inch-Display-on-Arduino-ILI9340C-or-I/ 
)
rumliegt, habe ich es mal in Betrieb genommen.

Ich habe es an einen Arduino DUE angeschlossen, die Libs von Adafruit 
runtergeladen und siehe da: es funktioniert ohne Probleme. 
Inbetriebnahme: ca. 30 Minunten.

Jetzt überlege ich mir, was man Lustiges damit machen könnte.

Hier eine kleine Funktion um den Adc anzuzeigen:
void testAdc(uint16_t color)
{
  int n;

  int oldx;
  int oldy;
  int y;

  for (n = 1; n < 480; n++)
  {
    y = analogRead(A0) / 4;
    if (n == 1)
    {
      oldx = n;
      oldy = y;
    }

    //tft.drawLine(n   ,    0, n   ,240, ILI9340_BLACK);
    tft.drawLine(oldx, oldy, n   , y  , color);
    oldx = n;
    oldy = y;
  }
}

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal eine Version für einen deutlich schnelleren Signalupdate. Damit 
wird das Signal im Bildschirm "flüssig". Man merkt sich einfach das 
letzte Signal und überzeichnet dann die alte Linie mit "schwarz". Der 
Vorteil: eine Linie Zeichnen braucht weniger Punkte als eine Bereich 
löschen.
Der Nachteil: Mit dem Speicher auf einem Arduino Uno wird es eng.
#define SIGNAL_LENGTH 480

uint16_t oldSignal[SIGNAL_LENGTH];

void testAdc(uint16_t color)
{
  int n;

  int oldx;
  int oldy;
  int y;

  for (n = 1; n < 480; n++)
  {
    y = analogRead(A0) / 4;

    if (n == 1)
    {
      oldx = n;
      oldy = y;
    }

    tft.drawLine(n - 1 , oldSignal[n - 1], n , oldSignal[n], ILI9340_BLACK);
    tft.drawLine(oldx,           oldy, n , y  , color);
    oldSignal[n - 1] = oldy;
    oldx = n;
    oldy = y;
  }
}

void loop(void) {

  testAdc(ILI9340_GREEN);

}
Die benötigten Libs:
https://github.com/adafruit/Adafruit_ILI9340
https://github.com/adafruit/Adafruit-GFX-Library

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab grad gesehen, das Display gibt es in der Bucht für 5€:

Ebay-Artikel Nr. 291778276496

Bei Amazon kann man auch 30€ zahlen.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was möchtest Du uns mitteilen?

Das machen täglich 100 Leute in 10 Minuten und die hälfte davon 
schreiben in Foren ihre Probleme!

Das die Displays nix kosten ist auch jedem hier klar, soll das ein 
Projekt werden?

Autor: Thomas F. (igel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marksu schrieb:
> Jetzt überlege ich mir, was man Lustiges damit machen könnte.

Na dann programmiere doch Pac-Man, Phönix-Arcade oder wenigstens den 
Amiga-Ball drauf.

Youtube-Video "Amiga Boing Ball on C64"

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Na dann programmiere doch Pac-Man, Phönix-Arcade oder wenigstens den
>Amiga-Ball drauf.

Das wäre eine lustige Idee. Einfach das fertige boing.c nehmen und die 
Grafikroutinen umbiegen:

https://github.com/glfw/glfw/blob/master/examples/boing.c

Allerdings ist vermutlich die SPI zum Display zu lahm.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Foto vom Anschluss des TFT an den Arduino DUE.
Die MISO Leitung ( braun ) scheint man nicht zu brauchen.

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Hier ein Foto vom Anschluss des TFT an den Arduino DUE.

Grossartig! Ich bin stolz auf dich.

Und was jetzt?

Autor: STMler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:

> Allerdings ist vermutlich die SPI zum Display zu lahm.

Nö, wieso?

Bei mir läuft der Ili9341 mit 20MHz am STM32 und DMA ohne Probleme.

Autor: Markus F. (Firma: Student) (blackflip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Die MISO Leitung ( braun ) scheint man nicht zu brauchen.

Das wäre für solch ein einfaches Display auch seltsam.
MISO heißt einfach, Master Input <- Slave Output

Was sollte dir da der Slave auch mitteilen. Bei der Verwendung von den 
Cardslot könnte das anders sein. Damit habe ich mich aber nicht 
beschäftigt ob dieser nur für den Controller IC da ist, oder aber auch 
für den Atmega

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> Was sollte dir da der Slave auch mitteilen.

Da bist du offensichtlich noch sehr am Anfang deiner Kenntnisse
über Displays.

Intelligente Applikationen können das auslesen was im Display-
Speicher geschrieben steht um diese Daten zu verändern.

Ausserdem ermöglich das Lesen die Fähigkeit zu kontrollieren
ob überhaupt ein Display angeschlossen ist und welche Infos
der Hersteller gespeichert hat.

Nicht zuletzt könte man sich eine Loopback Funtionalität
schreiben welche die Zuverlässigkeit der Datenübertragung
überprüft/bestätigt.

Autor: Markus F. (Firma: Student) (blackflip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduinoquäler schrieb:
> Da bist du offensichtlich noch sehr am Anfang deiner Kenntnisse
> über Displays.

Dies mag ich nicht verneinen und kann mir das auch sehr gut bei 
Komplexeren aufgaben sehr gut vorstellen. Was ich mir aber nicht 
vorstellen kann ist, das diese Funktionen von den meisten Arduino Usern 
sinnvoll genutzt werden. Die gewünschte Interaktion mit einen Display 
beschränkt sich dort meistens doch eher auf die Anzeige.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was ich mir aber nicht vorstellen kann ist, das diese Funktionen von den
> meisten Arduino Usern sinnvoll genutzt werden.

Für einen Arduino UNO ist es nützlich, weil 2K Ram nicht für ein Bild 
ausreicht.
Der Arduino DUE hat dagegen genug Speicher.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STMler (Gast)
>Markus schrieb:
>> Allerdings ist vermutlich die SPI zum Display zu lahm.
>Nö, wieso?
>Bei mir läuft der Ili9341 mit 20MHz am STM32 und DMA ohne Probleme.
Ein sehr guter Hinweis. Standardmäßig ist die Arduino DUE SPI auf 4MHz 
gestellt:
https://www.arduino.cc/en/Reference/SPISetClockDivider

Hinter tft.begin kann man den Clock für den Arduino DUE hoch setzen:
  tft.begin();
  SPI.setClockDivider(5); 

Ich habe ihn mal auf 5 gestellt, also 84MHz/5=16.8Mhz

Damit läuft das ganze etwas schneller. Allerdings nicht so viel 
schneller wie es die Clock hergeben würde. Zwischen den SPI Bytes sind 
Lücken weil  in der SPI-Lib nicht die DMA verwendet wird:

https://github.com/arduino/Arduino/blob/master/har...

Sie nutzt einen Interrupt. Da gäbe es also etwas Optinierungsbedarf.

Autor: Ardu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Verkabelung als Shield.

Die Pin Definitionen sind dabei 'default' wie im Adafruit-Beispiel.
#define _sclk 13 // nicht benutzt beim Arduino DUE
#define _miso 12 // nicht benutzt beim Arduino DUE
#define _mosi 11 // nicht benutzt beim Arduino DUE
#define _cs   10
#define _dc    9
#define _rst   8

Autor: ef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei diesen Displays wird oft noch ein Vorwiderstand für die 
Hintergrundbeleuchtung benötigt.

Autor: Ardu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ef schrieb
>Bei diesen Displays wird oft noch ein Vorwiderstand für die
>Hintergrundbeleuchtung benötigt.

Gute Anmerkung. Leider finde ich bei keinem der Anbieter ein 
vernünftiges Datenblatt:

http://www.ebay.de/sch/i.html?_from=R40&_trksid=p2...

Autor: ef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
https://cdn-shop.adafruit.com/datasheets/TM022HDH26_V1.0.pdf dieses 
Display wird von Adafruit verwendet.

Die ebay/aliexpress Verkäfer können manchmal auf Nachfrage Datenblätter 
liefern.

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Da gäbe es also etwas Optinierungsbedarf.

Jetzt brauchst du also nur noch die doofen Universal-Libs
von Arduino durch selbstgeschriebene ersetzen damit du hier
nicht immer herumjammern musst dass alles so langsam ist.

Autor: Ardu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ef schrieb
>https://cdn-shop.adafruit.com/datasheets/TM022HDH26_V1.0.pdf dieses
>Display wird von Adafruit verwendet.

Das Adafruit-Display unterscheidet sich von den 4€ Displays: Es hat 
Pegelkonverter für 5V eingebaut. Ich bin mir also nicht sicher, ob man 
die LED-Versorgung vergleichen kann.

Autor: ef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pegelkonverter sind auf der blauen Adafruit Printplatte, hier geht es 
aber um das Display an sich. Im Datenblatt zum Displaymodul wird 
angegeben, wie viele LEDs verbaut wurden und wie hoch If/Uf sind.

Auf den roten Printplatten von ebay ist oft nur ein 3.3V LDO + SD card 
slot.

Autor: Spannungsteiler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @Marksu,

Marksu schrieb:
> Ich habe es an einen Arduino DUE angeschlossen, die Libs von Adafruit
> runtergeladen und siehe da: es funktioniert ohne Probleme.
> Inbetriebnahme: ca. 30 Minunten.

kannst du mal hier die Libs auflisten, die du verwendest?

Und wieviel Flasch belegen die Libs (in Kb) ?
Danke!

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den 2.ten Post uebersehen?

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Sketch für einen durchlaufenden Zähler auf dem Display.
Es ist ein gewisser Aufwand: Die Library löscht beim Textzeichnen den 
Hintergrund nicht. Deshalb muss man vorher ein gefülltes Rechteck über 
die alten Werte zeichnen.

Ergebnis des Compiler bzgl. Speicherauslastung:

"Der Sketch verwendet 18.380 Bytes (3%) des Programmspeicherplatzes. Das 
Maximum sind 524.288 Bytes."

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte eigentlich mit der Kombination Arduino DUE und 2.2' TFT ein 
schönes Universalmessgerät basteln.

Hier mal am Beispiel Frequenzzähler. Mein Signalgenerator kommt leider 
nicht ganz auf die 10MHz. Theoretisch sollte der DUE-Frequenzzähler aber 
22MHz können.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für LCDs scheint es einige andere Libs zu geben:

Beitrag "Arduino / Grafik LCD User Interface"

Theoretisch sollte es einfach sein, eine Grafik-Lib mit einer 
Treiber-Lib für die passende Anzeige zu finden. Adafruit macht das so 
mit seinen beiden Libs.

https://github.com/adafruit/Adafruit_ILI9340
https://github.com/adafruit/Adafruit-GFX-Library

Kennt jemand eventuell noch andere gute Libraries, die man verwenden 
könnte?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein schönes Projekt mit dem Display aber mit Touch:

https://github.com/jasiek/antenna-analyser

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt 1000 schöne Projekte wenn man mal google nutzt und bestimmt 20 
Libs.

z.B

U8G
Utft

Dazu gibt es noch soviele "tolle" Standard Libs, da kann man seine 
eigene Implementierung für das Display einbringen.. diese muss man von 
einer vorhandenen Lib fast nur noch rüberkopieren.

EDIT: Hab so eines auch noch rumliegen und habe eine Große Auswahl an 
Code falls ich es benutzen möchte.. vor dem Kauf "ergoogelt".

: Bearbeitet durch User
Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>z.B
>
>U8G
>Utft

U8G: Die hatten wir schon, sie für einfarbige LCDs:
https://github.com/olikraus/u8glib

Utft: Das könnte interessant sein, allerdings wird nur das ILI9341 
aufgeführt und nicht das ILI9340, möglicherweise sind die aber gleich?
https://github.com/dgolda/UTFT/tree/master/tft_drivers

>Es gibt 1000 schöne Projekte wenn man mal google nutzt und bestimmt
>20 Libs.

Ja, das ist war. Im Grund braucht man die Unterhaltung im MC-Netz gar 
nicht, weil schon alles "im Google" steht ;-)

Scherz bei Seite: Dieser Thread dient als Anleitung für die schnelle 
Inbetriebnahme des Displays und zum Erfahrungsaustausch über gute 
Software dazu.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist mir jetzt zu hoch wieso man ein einfaches 1000gleiches SPI Display 
zum 1000sten durchkauen muss.

Nur mal so daherbefürchtet.. ili9325,9340,9341 und andere haben höchst 
identische SPI Instruction Sets damit es schonmal läuft.. Eventuell muss 
man nur nen bisschen die initialisierung anpassen und das Datasheet 
lesen.

: Bearbeitet durch User
Autor: LCDLiebhaber (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Philipp K. schrieb:
> Ist mir jetzt zu hoch wieso man ein einfaches 1000gleiches SPI Display
> zum 1000sten durchkauen muss.

Markus möchte eben auch ein bisschen mit herumlabern. Das ist
die Begeistung die daraus spricht mit wenigen Klicks und
ohne wirkliche Eigenleistung etwas zustande gebracht zu haben.

Das wirst du doch verstehen, oder?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir scheint, Du bist hier etwas schwerer von Begriff, deshalb wiederhole 
ich einfach noch mal den Satz von oben:

>Scherz bei Seite: Dieser Thread dient als Anleitung für die schnelle
>Inbetriebnahme des Displays und zum Erfahrungsaustausch über gute
>Software dazu.

Kannst Du folgen?

Da Deine Beiträge dem Ziel des Thread abträglich sind und zum Thema 
nichts beitragen, poste wo anders. Mach Dein eigenes Thema auf.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Kannst Du folgen?
>
> Da Deine Beiträge dem Ziel des Thread abträglich sind und zum Thema
> nichts beitragen, poste wo anders. Mach Dein eigenes Thema auf.

Wen meinst Du?

Also zum Thema, hier hilft jeder mal gerne, da ist Deine Überschrift 
schon zu beklagen und vielleicht auch das falsche Forum gewählt worden.

Ich würd sogar fast "Verschieben" in Projekte oder Offtopic vorschlagen 
da dieser Thread keiner Hilfe Bedarf oder zur allgemeinen Information 
Beiträgt wenn man dazu befähigt ist den ersten Google Beitrag der 
Adafruit Library anzuklicken (Tolles Tutorial).

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wen meinst Du?

Nicht Dich. Ich meine den Typen, der hier die letzte Zeit in 
verschiedene Threads unter verschiedenen Psydonymen reingrätscht und die 
Qualität des MC-Net ganz massiv stört. Hier nennt er sich sich 
LCDLiebhaber, Arduinoqualer und in anderen Thread c-hater oder cyblord.

>Also zum Thema, hier hilft jeder mal gerne, da ist Deine Überschrift
>schon zu beklagen und vielleicht auch das falsche Forum gewählt worden.

Ich weiß, es ist einigen Leuten ein Dorn im Auge, wenn hier der Begriff 
"Arduino" auftaucht. Aber ich bitte zu bedenken, dass es oben in der 
Leiste sogar einen Filterknopf für den Begriff gibt.

>Ich würd sogar fast "Verschieben" in Projekte oder Offtopic vorschlagen

Das würde ich überhaupt nicht vorschlagen. Der Thread ist eine 
Hilfestellung für die Inbetriebnahme und die Optimierung des Displays.
Wenn Du genau hinschaust, findest Du einige Ergebnisse:

1. beschleunigtes Kurvenzeichnen für Analogsignal
2. Hinweise zur Optimierung der SPI am Arduino DUE
3. Link auf das schwer zu findende Datenblatt des Displays
4. Schaltplan für den Displayanschluss, passend zum geposteten Code

Ich bemühe mich, den Thread dahingehend klar strukturiert zu halten. Das 
ist in keinster Weise ein Laber-Thread.
Und um es gleich zu sagen: Die Adafruit-Bibliothek ist nicht das Ende 
der Fanenstange. Dieser Thread kann dazu dienen, falls jemand eine 
bessere, schnellere Bibliothek kann er sie hier posten.
Es gibt hier im Thread auch einige Codebeispiele, die man einfach 
herunter laden kann und in 2 Minuten ausprobieren kann. Open-Source lebt 
von solchen Beispielen. Ich weiß, mittlerweile gibt es eine zunehmende 
"Nehmer-Einstellung" ... die Leute wollen alles in Google finden und 
nichts mehr beitragen.
Ein allgemeiner Hinweis auf Google ist allerdings zu nichts nütze. Schau 
Dir einmal Stackoverflow an, dort sieht man, was Qualität ist.
Wenn Dir der Thread zu "low-level" ist, dann müsstest Du Dir einen 
anderen suchen.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze selbst nur Arduino und Notepad++.

Markus schrieb:
> 1. beschleunigtes Kurvenzeichnen für Analogsignal
Wäre jeder mitm 8bitter draufgekommen um den geringen SPI Speed zu 
kompensieren.

> 2. Hinweise zur Optimierung der SPI am Arduino DUE
Naja mit den 16,8Mhz biste schon nah dran .. ein Write Clockcycle darf 
66ns lang sein.. könnte bedeuten, ich bin jetzt kein Profi, aber da 
sollten 30Mhz drin sein. Vielleicht geht da noch mehr.

> 3. Link auf das schwer zu findende Datenblatt des Displays
Für 9Pins und SPI?

Damit ich auch mal was beitrage, erster google Beitrag "SPI DUE DMA":
ILI9341(new)SPI library for Due supporting DMA transfer(Uno, Mega,.. 
compatible)
https://forum.arduino.cc/index.php?topic=265806.0

Wäre vielleicht mal eine Ansicht wert, habe keinen DUE aber das Display 
sieht identisch aus.

: Bearbeitet durch User
Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Philipp K. (philipp_k59) schrieb
>Markus schrieb:
>> 1. beschleunigtes Kurvenzeichnen für Analogsignal
>Wäre jeder mitm 8bitter draufgekommen um den geringen SPI Speed zu
>kompensieren.
Natürlich. Sogar jemand mit einem 4-Bitter wäre darauf gekommen. Das 
Problem ist nämlich unabhängig von der Wortbreite ;-)
Der Sinn so ein einfaches Beispiel zu posten liegt darin, dass sich 
jemand der es ausprobiert eine halbe bis eine Stunde Arbeit spart. 
Außerdem kann man von Codevorlagen ausgehend seinen eigenen Code 
weiterentwickeln.

>Damit ich auch mal was beitrage, erster google Beitrag "SPI DUE DMA":
>ILI9341(new)SPI library for Due supporting DMA transfer(Uno, Mega,..
>compatible)
>https://forum.arduino.cc/index.php?topic=265806.0
>Wäre vielleicht mal eine Ansicht wert, habe keinen DUE aber das Display
>sieht identisch aus.

Danke dafür. Die Library ist super. Ich habe sie gerade mal mit dem 
ADC-Code ausprobiert ( siehe Anhang ). Der geht ab wie die Post. Die 
Darstellung ist jetzt sehr flüssig, auch bei großen Amplituden.
Das ILI9341 ist so weit ich weiß das gleiche wie ein ILI9340 nur mit 
Touchscreen. Im Bild auf GitHub ist auch nur ein ILI9340 abgebildet, 
weil das ILI9341 mehr Anschlüsse auf der SD-Kartenseite hat.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Natürlich. Sogar jemand mit einem 4-Bitter wäre darauf gekommen. Das
> Problem ist nämlich unabhängig von der Wortbreite ;-)

Hauptaugenmerk lag auf dem SPi Speed.. wenn du einen 4Bitter mit SPI 
kennst biste ja richtiger Profi wa.. kenn ja nichmal ich.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hauptaugenmerk lag auf dem SPi Speed.. wenn du einen 4Bitter mit SPI
>kennst biste ja richtiger Profi wa.. kenn ja nichmal ich.

Ah, ich sehe schon, da sind Dir als Profi die Feinheiten meines 
Software-Designs wohl entgangen. Tatsächlich gibt es bei meinem 
ADC-Graph einen kleinen Trick für die flüssige Darstellung der Kurve:

Üblicherweise wird bei graphischen Anwendungen der neue Bildschirm im 
Hintergrund gezeichnet und dann wenn die Zeichnung fertig ist, der 
Bildschirm umgeschaltet. Das nennt man "Double-Buffering". Das 
verhindert ein Flackern beim Zeichnen und ergibt ein ruhiges Bild.
Ich vermute, dass das Display aus Speicherkostengründen kein 
Double-Buffering erlaubt ( zumindest mir das im Treiber nicht direkt ins 
Auge gesprungen ). Deshalb lösche ich die alten Linienstückchen immer 
kurz vor dem neu Zeichnen eines Linienstückchens. Das ergibt dann eine 
optisch ein deutlich ruhigeren Eindruck.
Einen ähnlichen Optimierungsschritt hat auch die Counterroutine, welche 
ich oben gepostet habe, durchlaufen. Vor dem Neuzeichnen muss nämlich 
der Hintergrund gelöscht werden. Mach man das für den gesamten Screen, 
gibt das kein schönes Ergebnis. Um die Wirkung zu verbessern, muss man 
sich auf Teilbereiche beschränken.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das weiß ich, jetzt denk mal nach..

Die meisten 8bitter z.B AVR können Architekturbedingt nur Mainclock/2 
Spi-Speed.. also bei 8Mhz eben auch mal nur 4Mhz Spi Speed.. wenn Du da 
den Bildschirm löscht und der TFT-Controller keinen befehl dafür hat 
siehst du die Zeilen einzeln Flitzen..5FPS bei Löschen/Neuschreiben 
eines ganzen Schirmes.

Also löscht/überschreibt man nur die gezeichneten Linien in 
Hintergrundfarbe, quasi so wie Du das optimiert hast ;)

Die meisten Librarys sind ja mehr für die Masse und das man erstmal was 
sieht.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja das weiß ich, jetzt denk mal nach..

Denk mal nach: das Verfahren ist auch optimal für eine Software-SPI auf 
einem 4 Bit Controller.

>Die meisten 8bitter z.B AVR können Architekturbedingt nur Mainclock/2
>Spi-Speed.. also bei 8Mhz eben auch mal nur 4Mhz Spi Speed.. wenn Du da
>den Bildschirm löscht und der TFT-Controller keinen befehl dafür hat
>siehst du die Zeilen einzeln Flitzen..5FPS bei Löschen/Neuschreiben
>eines ganzen Schirmes.

Meiner Erfahrung nach gibt es aber auch unschöne Effekte bei relativ 
schneller SPI. Die einzig saubere Methode für den Bildaufbau ist ein mit 
der Updatefrequenz des Displays synchronisierter Bildwechsel mit 
Doppel-Puffer.
Wenn es den nicht gibt, ist es immer gut, die Zeichenroutinen auf 
möglichst kleine Änderungen im Bild zu optimieren.

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Meiner Erfahrung nach gibt es aber auch unschöne Effekte bei relativ
> schneller SPI. Die einzig saubere Methode für den Bildaufbau ist ein mit
> der Updatefrequenz des Displays synchronisierter Bildwechsel mit
> Doppel-Puffer.
> Wenn es den nicht gibt, ist es immer gut, die Zeichenroutinen auf
> möglichst kleine Änderungen im Bild zu optimieren.

Dann hast Du ja eine Menge vor mit Deinem Display, das ist bae rkein 
Monitor, und ein selbst implementierter Framebuffer sieht auc handers 
aus.

Naja weiterhin Viel Spaß ;)

>Denk mal nach: das Verfahren ist auch optimal für eine Software-SPI auf
>einem 4 Bit Controller.

Da bin ich jetzt aber gespannt wie Du mir das mit allem drum und dran am 
praktischen Beispiel mit Produktbeispielen erklärst.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Naja weiterhin Viel Spaß ;)

Philipp, ich bin Dir ja dankbar für den Hinweis auf die Library. Also in 
so fern ist von meiner Seite aus alles gut. Wenn Du durch Zufall auf 
eine schöne Grafikanwendung stößt, würde ich mich freuen, wenn Du den 
Link postest.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier eine etwas "zusammengepanschte" Echtzeit-FFT.
Die Anzeige des Frequenzpeaks liegt etwas daneben und mein 
Sinusgenerator scheint auch nur einen ungefähren Sinus zu produzieren.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die oben verwendete FFT habe ich auf GitHub gefunden und das Display 
dran gebaut und die Ausgabe von Linear auf Log umgestellt.

Obwohl ich einen Sinus angelegt habe, sieht man einige Harmonische. 
Jetzt frage ich mich, ob der Effekt nicht auch von der eigentlichen 
FFT-Berechnung stammen könnte. Ich vermute nicht, denn die ganze 
Rechnerei ist als Double ausgeführt und soweit ich hier im MC-Netz 
gelesen habe, wird auf dem ARM auch wirklich mit Double gerechnet und 
nicht wie beim AVR nur mit Float auch wenn der Typ als Double definiert 
ist.

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich vermute nicht, denn die ganze
> Rechnerei ist als Double ausgeführt und soweit ich hier im MC-Netz
> gelesen habe, wird auf dem ARM auch wirklich mit Double gerechnet und
> nicht wie beim AVR nur mit Float auch wenn der Typ als Double definiert
> ist.


Vermuten kann ich auch, aber warum wenn Man(n) die wahrheit mit objdump 
-d schnell rausfinden kann ! :).
So-wie-so ist wharscheinlich so von egal... stammt dein Sinus signal vom 
12 bit ADC ? oder berechnet ?....
Einfach am PC rechnen lassen und die Ergebnisse anschauen :)

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand von dem Display die Board-Dimensionen?
Im Internet gibt es die zwar Haufenweise zu kaufen, aber ich kann 
nirgends die genauen Größenangaben finden.

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Hat jemand von dem Display die Board-Dimensionen?

Das ist kein 9340 sondern ein 9341, und wenn man die
Angebote sorgfältig durchliest findet man auch die Doku
dazu. So wie hier z.B.:

Ebay-Artikel Nr. 281353505264

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>Das ist kein 9340 sondern ein 9341, und wenn man die
>Angebote sorgfältig durchliest findet man auch die Doku
>dazu. So wie hier z.B.:
>Ebay-Artikel Nr. 281353505264

Danke für den Link, danach hatte ich die ganze Zeit gesucht.
Auf der Ebay-Seite gibt es auch einen Link zum gesamten Doku-Paket mit 
Sourcen für verschiedene Prozessortypen:

http://ecksteinimg.de/Datasheet/CP11002.zip

Im Paket findet sich auch ein "Schaltung.jpg" in dem Header 9 dem 
Anschluss des Displays entspricht.
Es gibt dort auch ein Schaltbild mit Transistor für die 
Hintergrundbeleuchtung, doch wo soll der sein?

Autor: Kostenplaner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> doch wo soll der sein?

Wohl nirgends ....

Die LED Beleuchtung ist nackt herausgeführt ..... nur noch
einen Transistor und zwei Widerstände (Basiswiderstand
und LED Strombegrenzung) aussen dazuschalten.

Vermutlich ist dieser Schaltplan auch nur irgendwo bei
einem Imitator geklaut.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Library mit Grafikelementen für das ILI9341:

https://github.com/Bodmer/TFT_ILI9341/tree/master/examples

Hier ein Uhr mit dem Display:

Beitrag "Re: Suche Sketch für eine Uhr mit Zeigern"

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie bekommt man doch nichts geschenkt: Die Labrary ist for AVRs, 
nicht für den DUE.

Hier also die schöne Uhr überarbeitet für den ARDUINO DUE.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch das Ganz optisch ...

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sinn würde deine Arbeit wirklich machen wenn du mal von diesem Arduino 
Framework weg kommst, so ist das alles nur mit Kanonen auf... Nein halt, 
anders rum... Mit Spatzen auf Kanonen geschossen.

Nimm normales GCC, das können dann die Laien in ihrer ArduinoDingens 
kompilieren und man hat auch was fürs GCC.

Autor: ef (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Im Paket findet sich auch ein "Schaltung.jpg" in dem Header 9 dem
> Anschluss des Displays entspricht.
> Es gibt dort auch ein Schaltbild mit Transistor für die
> Hintergrundbeleuchtung, doch wo soll der sein?

Es gibt das 2.2" Display mit ILI9341 Controller in mehreren sehr 
ähnlichen Versionen. Unterschiede sind z.B. verschiedene Baugrössen der 
SMD Widerstände (0805 vs 1206). Zusätzlich gibt es noch eine Variante 
mit dem Transistor, oft auch an den bereits verlöteten gelben 
Stiftbuchsenleiste zu erkennen + die Möglichkeit einen SPI Flash 
Speicherchip zu verlöten.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>Es gibt das 2.2" Display mit ILI9341 Controller
Danke für die Information, ef.

>Sinn würde deine Arbeit wirklich machen wenn du mal von diesem Arduino
>Framework weg kommst

Der Sinn des Arduino Frameworks und der Boards ist, dass es jeder in 
wenigen Minuten benutzen kann.

Wenn Du z.B. das Display und einen Arduino DUE und ein Steckbrett hast, 
kannst Du dieses wunderbare Demo im Anhang, welches ich gerade aus der 
Library genommen und für den Arduino DUE umgebaut habe, in 5 Minuten 
benutzen.

Im anderen Fall ... nicht.

Autor: ef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch vergessen, ein Unterschied ist auch noch: Bei der Variante ohne 
Transistor sind in den SPI Leitungen zur SD Karte Serienwiderstände 
verbaut. Bei der Variante mit Transistor wurden die Serienwiderstände 
entfernt, dafür bekommen die folgenden Signale einen Pullupwiderstand
- CS für SD Karte
- SCK für SD Karte und Flash Chip
- MOSI für SD Karte und Flash Chip

Autor: Spannungsteiler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Kennt jemand eventuell noch andere gute Libraries, die man verwenden
> könnte?

Ja! Für normalduinos wie UNO, Nano, Mini ist hier ein
fast 10x schnelles Library wie die UTFT.

https://github.com/sumotoy/TFT_ILI9340

Passt hervorragend zum Display QVGA_TFT_LCD_240x320:

http://www.elecfreaks.com/store/22-tft-lcd-tft0122sp-p-672.html

Benötigt wird noch dazu die standard Adafruit_GFX Library!

Beschaltet habe ich die displays wie im beigefügtem Schaltplan.
(Achtung, benötigt Level-Convertierung!!!)

Autor: Spannungsteiler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...und hier ist das Display im Huckepack mit CD4050, das Ganze
kostet etwa 30min Lötarbeit und ca 5€ Displaypreis beim eBay!

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss gestehen, da tendiere ich eher zu 3.3V Arduinos.

Von der Adafruit Feather Serie gäbe es da ein paar:
https://www.adafruit.com/feather

oder der STM32F103:
Beitrag "Re: stm32f103 wav player?"

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch die Starfield-Simulation aus der Lib ... wenn man einen 
Bildschirmschoner braucht :-)

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch mal das Sternenfeld. Ich habe die Helligkeit vom Abstand 
wieder abhängig gemacht und etwas modifiziert, dadurch kommt dann 
wirklich der 3D-Effekt zustande.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch eine letzte Spielerei für heute:

The Matrix Rain

Eine gute Sache für einen Wettbewerb: Wer es schöner hin kriegt ;-)

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, ich hab's noch mal ein wenig "getweaked".
Seine Wirkung entfacht es natürlich nur life.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die neuere Version.
Das Bild oben zeigt nicht ganz die richtigen Farben. Obwohl die Schrift 
auf dem Display grün und der Hintergrund schwarz ist, sieht man auf dem 
Foto der Digitalkamera weiße Schrift auf blauem Grund. Erstaunlich ....

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier gibt es ein kleines Oszilloskopprojekt mit dem ILI9341:

http://www.stm32duino.com/viewtopic.php?f=19&t=107

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das BluePill Arduino Board scheint auch gut für das ILI9143 geeignet:
http://thdarduino.blogspot.de/

Autor: chris_ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mittlerweile ein 1.8' ILI9341 bekommen.
Was seltsam ist:
Die Anschlussbeschriftung zeigt die Namen SDA und SCK was eher auf eine 
I2C als eine SPI-Schnittstelle hin deutet.
Ich habe das Display einfach mal an das Projekt für die SPI 
Schnittstelle angeschlossen und siehe da: es funktioniert trotzdem.

Das einzige Problem: es hat nur 160x128 Pixel. Dadurch ist die 
Grahikausgabe  falsch justiert.
Weiß jemand, wie man das ändern kann?

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
chris_ schrieb:
> Ich habe mittlerweile ein 1.8' ILI9341 bekommen.

Welche Belege veranlassen dich dazu anzunehmen dass es
sich um einen ILI9341 Controller handelt?

chris_ schrieb:
> Die Anschlussbeschriftung zeigt die Namen SDA und SCK was eher auf eine
> I2C als eine SPI-Schnittstelle hin deutet.

Ja, die Chinesen sind da sehr freizügig in ihrer Namensgebung.

chris_ schrieb:
> Ich habe das Display einfach mal an das Projekt für die SPI
> Schnittstelle angeschlossen und siehe da: es funktioniert trotzdem.

Wenn die Software für das ILI9341 so oh-la-la funktioniert heisst
es noch lange nicht dass es sich beim Display um einen ILI9341-
Controller handelt

chris_ schrieb:
> Das einzige Problem: es hat nur 160x128 Pixel.

Das hast du doch vorher gewusst als du das Display bestellt hast?

chris_ schrieb:
> Dadurch ist die Grahikausgabe  falsch justiert.

Nein. Die Software ist falsch, nicht für dieses Display geschrieben.

chris_ schrieb:
> Weiß jemand, wie man das ändern kann?

Ja.

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi chris_,

ich habe auch so ein Display und an einen STM32F103 angeschlossen. Es 
ist ein ILI9341 mit 160x128 Pixel. Es läuft super, aber
man muss aber ein wenig am Adafruit ILI-Treiber drehen:

/* for mirrored display change this
 void Adafruit_ILI9341::writePixel(int16_t x, int16_t y, uint16_t color) 
{
#ifdef DISPLAY_MIRROR_X
 x=ILI9341_TFTHEIGHT-x-1;
#endif
    if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return;
    setAddrWindow(x,y,1,1);
    writePixel(color);
}

void Adafruit_ILI9341::writeFillRect(int16_t x, int16_t y, int16_t w, 
int16_t h, uint16_t color){

#ifdef DISPLAY_MIRROR_X
  x=ILI9341_TFTHEIGHT-x-w;
#endif
 */

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, man braucht nur ein paar Bildchen machen und ein wenig
an der Software herumdaddeln, und ein wenig schönreden, und
schon wird aus dem "unbekannten Display" ein ILI9341.

Nach dem Motto: wenn ich es auch nicht weiss rede ich solange
hin bis es das ist was ich haben will.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein kleiner Hinweis zur seltsamen Pin-Namensgebung auf dem 1.8' 
Display:

A0 = D/C
SDA = MOSI
SCK = CLK

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.