SPI interface Schaltung für ein 3.2 LCD display am Raspberry Pi

#3803330
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
Angehängte Dateien:
#3803586
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 ?
Gast #3803741
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.
#3803754
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.
#3804046
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.
#3804208
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.
Gast #3804416
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.
#3804467
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 ?
#3804484
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.
#3804665
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.
#3804697
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.
#3804734
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 :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren