Forum: Mikrocontroller und Digitale Elektronik SPI interface Schaltung für ein 3.2 LCD display am Raspberry Pi


von Karel M. (karlitos)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte gerne ein 3.2 LCD Display von Sainsmart am Raspberry Pi 
betreiben. Es gibt in Github ein Projekt 
(https://github.com/notro/fbtft) welches Treiber für die SPI 
Schnittstelle am R-Pi entwickelt.

Das Problem ist, dass das Display eine parallele Schnittstelle hat und 
alleine für die Daten 16 Pins benötigt. Deswegen wird es an den R-Pi mit 
einem seriell-parallel SPI Wandler angeschlossen. Die Schaltung habe ich 
angehängt.

So weit ich es verstanden habe funktioniert die Schaltung folgendermaßen 
:
Bei jedem Takt wird ein Bit an die Shift-Register gesendet. Gleichzeitig 
zählt der 74hc4040 bis 16 und dann sendet es ein Signal an die 
Strobe-Eingänge der Shift-Register und die Schicken ihre 16 gespeicherte 
Bits an das Display. Gleichzeitig bekommt das Display ein Signal über 
den Inverter, dass die Daten kommen.

Bitte, habe ich es richtig begriffen ? Ich bin in den Sachen 
Digitaltechnik immer ein blutiger Anfänger.

Zu meinem Problem:

Abgesehen davon, dass ich eine Platine für diese Schaltung realisieren 
muss erreicht man in der Praxis nur eine Taktfrequenz von 16Mhz was etwa 
10FPS entspricht (Laut Wiki von dem fbtft Projekt). Mit einer höheren 
Taktfrequenz könnte man mehr FPS rausholen.
Meine Idee wäre anstelle eines Zählers, 2x Shift-Register und Inverter 
einen Mikrocontroller zu nehmen, der eine entpreschende Geschwindigkeit 
(32Mhz) unterstütz. Dann könnte ich diese Schaltung event. nur mit einem 
Chip ersetzen.

Könnt ihr mir bitte sagen ob diese Idee überhaupt sinnvoll ist und nach 
welche Mikrocontroller würden sich dafür eignen ? Bisher habe ich nur 
Erfahrungen mit Arduino, würde aber gerne eine Programierung eines 
Mikrocontrollers erlernen.

Danke sehr - K

von Noch einer (Gast)


Lesenswert?

Hast du dir das auch gut überlegt? Die 30€ Rückfahrmonitore vom 
Ebay-Chinesen funktionieren recht gut am Raspberry.

Im Netz gab es auch Seiten, wie man so einen Monitor auf 5 Volt umbaut 
und am Raspberry ideal einstellt. Geht zwar über Analog - trotzdem 
landen die Pixel 1:1 am Display.

von Noch einer (Gast)


Lesenswert?

Ahm... 15-20€. Beim 5Volt Umbau wird nur der Spannungsregler überbrückt.

von Karel M. (karlitos)


Lesenswert?

Die 3,2 Sainsmart Monitore sind gerade im Ausverkauf und sehr günstig. 
Klar kann ich mit mehr Geld weniger Aufwand haben. Ich möchte dabei aber 
möglichst viel lernen und für mich selbst Sachen entdecken gerade auf 
dem Gebiet der Digitaltechnik.

Habe ich also die Funktion der Schaltung richtig verstanden oder nicht ?

Und mit welchem Mikrocontroller könnte ich sie realisieren ?

von Grundschüler (Gast)


Lesenswert?

Karel Mácha schrieb:
> idee überhaupt sinnvoll

sehr sinnvoll, als uc z.B. diesen für unter 5€:
http://www.ebay.de/itm/1x-ARM-Cortex-M3-STM32F103C8T6-STM32-Kern-Board-Minimum-System-Entwickeln-Board-/301122848477?pt=Wissenschaftliche_Ger%C3%A4te&hash=item461c5206dd

Alternativ gibt es 2,8" spi-lcds für ~10€. Die kannst du dann direkt 
anschließen.

von Stefan H. (stefan_h16)


Lesenswert?

Ich bin zwar nicht so der Experte für programmierbare Logik, aber ich 
halte das ganze für eine ideale Anwendung für einen CPLD.
Wenn man einen mit 3V3 nimmt, hat man am Ende sogar wesentlich weniger 
Bausteine auf der Platine.

Hier habe ich das GUZUNTY Projekt gefunden, sogar mit Beschreibung der 
Ansteuerung eines SainSmart 3.2 Zoll TFT:
https://github.com/Guzunty/Pi/wiki/gz_lcd_driver-waveform
Vorteil des Projekts: Der RPI programmiert gleich den CPLD. Man braucht 
also keinen externen JTAG Programmer.

Ansonsten würde ich aber einen TFT nehmen, denn man direkt per SPI 
ansteuern kann.

von Karel M. (karlitos)


Lesenswert?

Ich danke euch für die Tips. Dieser ARM Cortex-M3 STM32F103C8T6 Board 
sieht sehr interessant aus. Könnte ich mit dem die Komplette oben 
beschriebene Schaltung ersetzen ?
In der Beschreibung finde ich: Board JTAG interface, On-board Mini USB 
Interface. Heißt es ich kann das development board direkt über USB und 
einen virtuellen COM-Port Programmieren ohne einen externen JTAG 
Programmierer ?

So weit ich es verstanden habe ist das Rasp-Pi der Taktgeber. Der 
Entwickler-Board hat aber einen eigenen Kristall. Kann es auch mit 
externem Taktgeber operieren ?

Danke für den Tipp mit dem 2.8 SPI Display, ich wusste nicht dass es sie 
gibt. Der Unterschied in der Bilddiagonale ist nicht groß und man spart 
sich sehr viel Arbeit.

von Grundschüler (Gast)


Lesenswert?

Karel Mácha schrieb:
> ARM Cortex-M3

ist nur zu empfehlen, wenn du mit uc-Programmierung Erfahrung hast, 
ansonsten ist die Anpassung eines spi-Lcd an den rpi anspruchsvoll 
genug.

von Karel M. (karlitos)


Lesenswert?

Ich habe lediglich Erfahrung mit der Arduino Plattform. Neulich hatte 
ich ein TIVA C Series board in der Hand. Diesen konnte ich mit dem Code 
Composer in C programmieren. Man konnte auch die Wiring 
Programmiersprache nehmen. Angeblich gibt es ein solches IDE für den 
Cortex M3 https://github.com/leaflabs/maple-ide. Könnte ich in dem 
maple-ide den oben erwähnten Board programieren ? Kann ich den externen 
Tagktgeber verwenden ?

Übrigens danke euch sehr für eure guten Tips und Geduld.

von Grundschüler (Gast)


Lesenswert?

Karel Mácha schrieb:
> Kann ich den externen Tagktgeber verwenden ?

??? meinst du den spi-takt? der kommt vom Master, was sinnvollerweise 
der sendende rpi ist.

Kauf dir das spi-lcd für 10€. Schließ es an deinen arduino an und bring 
es dort zum laufen. Wenn das geklappt hat schließt du es an deine rpi an 
und überträgst den arduino-Initialisierungscode auf den rpi.

Wenn du damit erfolgreich fertig bist, hast du genügend Erfahrung, um 
den cortex-spi mit einem größeren LCD angehen zu können.

von Karel M. (karlitos)


Lesenswert?

Grundschüler schrieb:
> meinst du den spi-takt? der kommt vom Master, was sinnvollerweise
> der sendende rpi ist.

Das habe ich verstanden. Wenn man den fbtft Treiber verwendet, kann man 
auch den Takt angeben (16MHz, 32MHz), der für die Übertragung verwendet 
wird. Die von mir oben angehängte Schaltung schafft die 32MHz aber 
nicht.

Ich möchte das Display - welches ich bereits besitze - nicht an Arduino 
oder einem anderen Mikrocontroller direkt betreiben. Ich möchte es 
zusammen mit dem fbtft Treiber von nostro am R-Pi als Display verwenden.

Ich kann auch die obige Schaltung nachbauen - auf einer 
Lochraster-Platine, oder eine Platine selbst entwerfen. Ich dachte, ich 
kann diese Schaltung mit einem Mikrocontroller / Development Board 
realisieren.

Meine Vorstellung war : der Mikrocontroller nimmt bei jedem Takt die 1/0 
die von dem MOSI Pin am R-pi kommt, speichert sie ab und nach dem 16-ten 
Bit schickt diese über seine Pins parallel  an das Display und sendet 
auch eine 0 an das WR Eingang am Display.

Verstehe ich hier etwas ganz falsch ?

von Stefan H. (stefan_h16)


Lesenswert?

Karel Mácha schrieb:
> Meine Vorstellung war : der Mikrocontroller nimmt bei jedem Takt die 1/0
> die von dem MOSI Pin am R-pi kommt, speichert sie ab und nach dem 16-ten
> Bit schickt diese über seine Pins parallel  an das Display und sendet
> auch eine 0 an das WR Eingang am Display.

uC ist meiner Meinung der falsche Ansatz. Der STM32F103C8T6 hat zum 
Beispiel auch nur max. 18 MHz SPI Takt. Dazu brauchst du noch CPU-Takte 
um die Daten von SPI zum Display zu schieben. Viel gewonnen hat man da, 
wenn überhaupt, nicht.

Besser schnellere Logikbausteine nehmen, gleich programmierbare Logik 
(siehe oben) oder am besten Displays mit eingebautem SPI.

: Bearbeitet durch User
von Karel M. (karlitos)


Lesenswert?

Stefan H. schrieb:
> Der STM32F103C8T6 hat zum Beispiel auch nur max. 18 MHz SPI Takt.

Laut der Beschreibung hier 
http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164476?sc=internet/mcu/product/164476.jsp 
kann der Cortex M3 bis zu 72Mhz. Dazu steht da "PLL for CPU clock" Ich 
dachte der STM32F103C8T6 kann also von dem spi-takt angesteuert werden.

Stefan H. schrieb:
> Dazu brauchst du noch CPU-Takte um die Daten von SPI zum Display zu schieben.
So ist es bei der oberen Schaltung auch oder verstehe ich es falsch ?

Ich schaue mir

Stefan H. schrieb:
> Besser schnellere Logikbausteine nehmen
Könntest du mir bitte irgendwelche vorschlagen ?

Ich schaue mir die Programmierbare Logikbausteine an. Mein Wunsch ist 
sich die Arbeit mit der Realisierung der oben beschriebenen Schaltung zu 
erleichtern für vergleichbare Kosten. Ich möchte das Display nicht 
wegwerfen un ich soll auch mit der Technologie nicht überfordert werden.

Ich danke allen die mir hier versuchen zu helfen.

von Stefan H. (stefan_h16)


Lesenswert?

Karel Mácha schrieb:
>> Der STM32F103C8T6 hat zum Beispiel auch nur max. 18 MHz SPI Takt.
>
> Laut der Beschreibung hier
> 
http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164476?sc=internet/mcu/product/164476.jsp
> kann der Cortex M3 bis zu 72Mhz. Dazu steht da "PLL for CPU clock" Ich
> dachte der STM32F103C8T6 kann also von dem spi-takt angesteuert werden.

Vielleicht verstehe ich hier etwas falsch, aber kann es sein, dass du 
SPI bzw Mikrocontroller im Algemeinen nicht ganz verstehst?
Es gibt den Mikrocontroller Takt in dem dieser sein Programm (etwa einen 
Maschinenbefehl pro Takt) abarbeitet und es gibt den SPI Takt, 
vorgegeben vom SPI-Master (in diesem Fall Raspberry Pi), der vorgibt wie 
schnell Daten eingelesen werden (Ein Bit pro Takt). Der STM32 kann mit 
dem eingebauten SPI Modul Daten mit maximal 18 MHz einlesen. Von da aus 
muss das Programm die Daten abe noch zum Display weitergeben. Was noch 
einige CPU Takte bei 72 MHz bedeutet
Du kannst natürlich ein Programm schreiben, dass das SPI Modul nicht 
nutzt sondern alles in Software erledigt. Also die einzelnen Bits 
einlesenm zu einem 16 Bit Datenwort zusammensetzen und dann an den TFT 
ausgeben. Aber bei z.b 30 MHz SPI Takt und 72 MHz CPU Takt dürfte dieses 
Programm nur etwa zwei AMaschinenbefehle lang sein - eher 
unwahrscheinlich.
Verwende doch das von mir zitierte Guzunty. Die ganze Hardware kannst du 
für ein paar Euro auf einer Lochrasterplatine aufbauen. Und die Software 
ist auch schon fertig und kann mit ein paar Befehlen vom PI aus geladen 
werden.

von Karel M. (karlitos)


Lesenswert?

Stefan H. schrieb:
> Du kannst natürlich ein Programm schreiben, dass das SPI Modul nicht
> nutzt sondern alles in Software erledigt. Also die einzelnen Bits
> einlesenm zu einem 16 Bit Datenwort zusammensetzen und dann an den TFT
> ausgeben.

Geeenau so habe ich mir das vorgestellt. :-D So funktioniert die obige 
Schaltung dachte ich nämlich. Sie braucht auch 16 spi-Takte um ein 16bit 
Datenwort an das Display zu schicken. Ich dachte halt, dass ich diese’’n 
Funktionsprinzip mit dem Cortex M3 schneller hin-bekomme.

Ich beschäftige mich gerade mit dem Guzunty. Ich habe gerade erst 
entdeckt, dass es beim GitHub auch die Platinenlayouts gibt !!!  Und die 
XC9500XL kann man ab 1,50€ bestellen. Ich dachte zuerst, ich muss für so 
~15€ ein Kit aus USA bestellen :-)

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
Noch kein Account? Hier anmelden.