Servus beinand,
da das Ganze vermutlich was Grösseres wird, habe ich mir gedacht, ich dokumentiere den Verlauf meines Vorhabens hier mal mit.
Zielsetzung
Alle bzw. möglichst viele Kommandos der GFX-Bibliothek über eine Datenverbindung zum Display zu schicken und dort ausführen. Zusätzlich soll ein eventuell vorhandener SD-Kartenslot unterstützt werden. Dabei soll es möglich sein, die Karte während des Betriebs zu tauschen oder zu entfernen.
Erster Prototyp
Der erste Prototyp soll ein 1.8" TFT mit ST7735 Controller und SD-Kartenslot unterstützen. Für die Daten soll eine serielle Verbindung genutzt werden. Im ersten Schritt soll die Datenübermittlung über UART, im zweiten Schritt über I2C erfolgen.
Stückliste für den ersten Prototypen:
1 x Arduino Pro Mini
1 x 1.8" TFT mit Kartenslot ( 16-polige Anschlussleiste so wie -> das hier <- )
2 x Levelshifter mit 4 Kanälen ( ich verwende -> solche hier <- )
1 x Spannungsregler 5 <-> 3V3 ( da nehme ich derzeit -> solche hier <- )
1 x LDR ( -> solche <- sind recht preiswert zu bekommen )
1 x Piezo-Summer ( ca. 14 x 7,5 mm -> so was in der Art )
1 x 3,5 mm Stereo-Klinkenbuchse ( für die UART Schnittstelle -> siehe hier <- )
1 x 3,5 mm Stromversorgungsbuchse, Stift Durchmesser 1,1 mm ( -> Beispiel <- )
1 x 4x1 Pinheader ( für I2C )
1 x Widerstand 10 kOhm für den LDR
1 x Widerstand 100 Ohm für den Summer
2 x Widerstand 4.7 kOhm als I2C-Pullup Arduino
2 x KerKo 100 nF als Abblock-Kondensatoren
1 x Streifenraster-Platine RM 2.54 mm, 16 Reihen und 32 Spalten (ca. 42 x 83 mm)
ein paar farbige Kabel, 0.14 Querschnitt
Beschreibung des Prototypen:
Im Anhang findet ihr mein Layout der Streifenraster Platine in der Ansicht von unten (also der Seite mit den Leiterbahnen).
Da die Bauteile-Platzierung auf der linken Seite der Platine stark von den verwendeten Levelshiftern abhängt, spare ich mir einen Verdrahtungsplan.
Das Fritzing-Schema im Anhang soll deshalb nur in etwa die Lage der Bauelemente verdeutlichen. Achtung! Achtet darauf, dass die Fritzing-Ansicht die Platine von oben (also mit den Leiterbahnen nach unten, qasi an der rechten Kante gekippt) darstellt.
Die oben verlinkten Bauteile sind keine Kaufempfehlung sondern dienen nur der Veranschaulichung.
Verdrahtung:
Arduino | 1.8" TFT |
Pin #10 | TFT_CS |
Pin #9 |
TFT_RST |
Pin #8 |
TFT_DC |
Pin #13 |
TFT_SCLK |
Pin #11 |
TFT_SDA |
Pin #7 |
SD_CS |
Pin #12 |
SD_MISO |
Pin #11 |
SD_MOSI |
Pin #13 |
SD_SCLK |
Alle o.g. Verbindungen gehen vom Arduino aus auf die HV-Seite (5V) des/der Levelshifter und von der LV-Seite (3V3) zum TFT.
Achtet zudem darauf, dass der Jumper (Lötbrücke) J1 des TFT offen ist.
Pin #6 des Arduino geht direkt auf den Anschluss LED+ des Displays. Diese Verbindung dient zum Dimmen der Hintergrund-Beleuchtung.
Pin #5 des Arduino geht über den 100 Ohm Widerstand zum Pluspol des Summers. Der Minuspol des Summers kommt auf GND.
Am Arduino wird ausserdem am Pin A0 der LDR angeschlossen. Der 10 kOhm Widerstand geht von A0 als pulldown nach GND. Der zweite Anschluss des LDR geht auf Vcc (5V). Der LDR soll es ermöglichen das Dimmen des Displays von der Umgebungs-Helligkeit abhängig zu machen.
Auf der Connector-Platine werden an SCL und SDA jeweils ein 4k7 Ohm Widerstand als Pullup noch Vcc angeschlossen.
Folgende Funktionen sind im aktuellen Prototypen umgesetzt:
- drawLine()
- drawFastHLine()
- drawFastVLine()
- drawRect()
- fillRect()
- drawCircle()
- fillCircle()
- drawTriangle()
- fillTriangle()
- drawRoundRect()
- fillRoundRect()
- setRotation()
- setTextWrap()
- fillScreen()
- setTextColor()
- fillScreen()
- invertDisplay()
- drawCircleHelper()
- fillCircleHelper()
- drawBitmap()
- drawChar()
- setCursor()
- setTextSize()
- height()
- width()
- write()
- drawPixel()
- print()
- println()
und, weil die Beleuchtung über einen PWM-fähigen Ausgang des Arduino angesteuert wird
- setbrightness()
Aktueller Status
Der erste Prototyp ist aufgebaut und die erste Testphase der Software erledigt.
Das Gehäuses ist ebenfalls fertig.
Wie auf dem Foto zu sehen ist
ist einer der Pegelwandler "normal" und einer "umgekehrt" verbaut. Das hat den Hintergrund, dass dann der Bus zusammenhängend ist und die Stromversorgung einmal oben und einmal unten erfolgt.
Mittlerweile existiert ein Hardware-Prototyp, der schon funktioniert.
Es sind jetzt alle GFX-Funktionen vorhanden.
Alle Funktionen sind grob getestet und das Timing wurde abgestimmt.
Dazu gibt es ein Linux-Programm in C, um die Funktionen zu testen.
Auf die SD-Funktionen habe ich erst mal verzichtet. Es sieht so aus, als würde der Programmspeicher des Arduino sehr knapp. Die Funktionen behalte ich aber mal als Option im Auge.
Der Prototyp ist, bis auf die Funktionen print(), println() und drawPixel(), komplett und funktioniert sogar recht ordentlich.
Ein paar kleineren Ungereimtheiten muss ich noch auf den Grund gehen ... aber sieht gut aus
Die fehlenden Grafik-Funktionen sind jetzt auch drin ... d.h.
Bis auf die neuen sind.
Alle Funktionen sind getestet. Auch das Timing wurde abgestimmt, so dass eine Anteuerung über die serielle Schnittstelle brauchbare Ergebnisse liefert.
Jetzt noch den Rest austesten und
TODO Liste
Feinschliff des sketch.
Um das Timing zu optimieren muss noch ein Feld "Sequence" in das Protokoll eingebracht werden.
SD-Kartenfunktionen einbauen
I2C Ansteuerung implementieren
Gehäuse modellieren und drucken
Testprogramm erstellen
Fragen, Anregungen, ... einfach hier posten.
Dieser Beitrag wird von mir zeitnah immer wieder aktualisiert.
Die Sourcen sind unter der Apache 2.0 Lizenz mittlerweile auf -> github eingepflegt <- und aktualisiert.
Letzter Update: 10.07.2018
ciao,
-ds-