Forum: Mikrocontroller und Digitale Elektronik RAIO RA8872 mit ATMega328P Ansteuern


von Moot S. (mootseeker)


Lesenswert?

Hallo Zusammen,

ich habe folgenden Display Kontroller: RAIO RA8872
Ansteuern möchte ich diesen mit einem AVR ATMega328P, den ich auf einem 
Arduino Uno habe. Mit Ansteuern meine ich nur mal ein Hello World 
ausgeben auf dem Display um herauszufinden ob das Display überhaupt 
meinen Erwartungen entspricht.

Meine Erwartungen sind eigentlich nur, dass ich das Display einfach mit 
wenig Code ansteuern kann.

Zu der ganzen Sache habe ich folgende Datenblätter:

Modul mit Display Kontroller und Display:
https://www.mouser.ch/datasheet/2/1015/INT028ATFT-v11-1650666.pdf

Display:
https://www.displaytech-us.com/sites/default/files/display-data-sheet/DT028ATFT-v21.pdf

Kann ich den Kontroller überhaupt mit dem ATMega328P ansteuern?

Hat jemand von euch das schon mal gemacht und kann mir die Richtung 
zeigen in die ich gehen muss? Oder hat jemand ein Beispiel an das ich 
mich lehnen kann?

von pegel (Gast)


Lesenswert?

Sicher geht das. Ist ein ILI9341.

Musst nur genügend Zeit mitbringen.

von Stefan F. (Gast)


Lesenswert?

Das wird wohl gehen. Bei deinem "kleinen" Mikrocontroller passt es ganz 
gut, dass der Display Controller eingebaute Zeichensätze hat.

von Arduinoquäler (Gast)


Lesenswert?

Moot S. schrieb:
> Meine Erwartungen sind eigentlich nur, dass ich das Display einfach mit
> wenig Code ansteuern kann.

"mit wenig Code" ist relativ. Was du erwartest und was du
bekommst wirst du nicht so leicht in Einklang bringen können.

Aber wenn du diesen Thread liest

Beitrag "ILI9341 langsam Verbesserungsvorschläge?"

wird dir vielleicht geholfen. Der Titel ist nicht ganz passend
zu dem was du suchst, trotzdem soltest du durch sorgfältiges
lesen fündig werden.

von fchk (Gast)


Lesenswert?

Der Mega328 ist dafür ungünstig, weil das Board gemäß dem Mouser-Link 
ein paralleles CPU-Interface hat. Für so etwas nimmst Du besser einen 
Mega 128/1280/1281/2560/2561. Diese Prozessoren haben ein External Bus 
Interface (EBI), d.h. der interne Adress/Datenbus ist nach außen 
geführt.

Den musst Du aktivieren (siehe Datenblatt)

Pins DDB0...DDB7 kommen an Port A vom AVR
RS kommt an Port C0 vom AVR (Adressleitung A8)
RW und WR kommen an die Ports G0 und G1 vom AVR
CS kannst Du beispielsweise an Port C7 hängen.

Auf das Datenregister kannst Du dann z.B. unter Adresse 0x4000 
zugreifen, das Adressregister ist 256 Byte höher (0x4100).

Diese Methode ist der schnellstmögliche Weg, das Display anzusteuern und 
Daten ins GRAM zu transportieren. Es gibt keinen performanteren Weg, 
weil die Logik des EBI vieles macht, was Du sonst in Software machen 
müsstest.

fchk

von lowpegel (Gast)


Lesenswert?

> Ist ein ILI9341

???

von Moot S. (mootseeker)


Lesenswert?

Vielen Dank für deine Antwort @Arduinoquäler.

Mit nicht so viel Code meine ich eigentlich Das Display Ansteuern ohne 
irgendwelche Libraries sondern nur das nötigste.

Wie kommst du drauf, dass das ein ILI9341 ist? Ich habe diese 
Information nicht gefunden, und wo schliesst du die SPI an?

Gruss
Mootseeker

: Bearbeitet durch User
von Moot S. (mootseeker)


Lesenswert?

Danke für deine Antwort @fchk!

Ich verstehe, dass ich das ganze mit dem grösseren Kontroller machen 
muss, dass macht auch ziemlich sinn.

Den Bus Aktivieren blike ich auch noch so 3/4 durch, mit Hilfe des 
Datenblattes verstehe ich das sogar noch.

Aber wie schreibe ich nun meine Daten an das Display und wie müssen die 
Aussehen? Das verstehe ich noch nicht ganz. Kannst du mir da ein 
Beispiel machen?

Gruss
Mootseeker

von pegel (Gast)


Lesenswert?

Moot S. schrieb:
> Wie kommst du drauf, dass das ein ILI9341 ist?

Steht in deinem 2. link auf Seite 4 und im 1. link in der Zeichnung.

Also wie ich das sehe, ist der "Display" link das Eine und der RA8872 
ein Controller, der den ILI9341 steuert. Deshalb wird auch die Selbst 
Initialisierung erwähnt.

Du musst also das Format finden, dass der RA8872 benötigt, bzw. diesen 
programmieren.

Das Ganze ist schon leistungsfähiger als dein AVR und macht alles 
allein.

https://www.youtube.com/watch?v=z2bTInaDucE

von pegel (Gast)


Lesenswert?

Hier noch ein "richtiges" Datenblatt:

http://datasheet.elcodis.com/pdf2/109/54/1095442/ra8872.pdf

von Moot S. (mootseeker)


Lesenswert?

pegel schrieb:
> Also wie ich das sehe, ist der "Display" link das Eine und der RA8872
> ein Controller, der den ILI9341 steuert. Deshalb wird auch die Selbst
> Initialisierung erwähnt.

Aha oke, das ist zwar interessant aber bringt mich nicht ganz weiter.

> Du musst also das Format finden, dass der RA8872 benötigt, bzw. diesen
> programmieren.

Das hat @fchk probiert zu erklären, ich verstehe es aber noch nicht 100%

von pegel (Gast)


Lesenswert?

pegel schrieb:
> Du musst also das Format finden, dass der RA8872 benötigt, bzw. diesen
> programmieren.

Im "richtigen Datenblatt" sind die Register beschrieben.
Damit kannst Du die Grafikfunktionen bzw. den Zeichengenerator benutzen 
oder im Transparent Modus direkt in den Graphik RAM schreiben.

von pegel (Gast)


Lesenswert?

Wenn ich das Teil hier hätte und einen µC programmieren wollte um dem 
etwas zu senden, würde ich zuerst das Diagramm zum CGRAM write durch Bit 
wackeln nachvollziehen und ein paar Bytes auf den Display darstellen.

Damit sollte das Prinzip erst einmal klar sein und das schreiben in die 
Register auch für komplexe Funktionen verständlich sein.

Bitte die Spannungen bzw. Pegel beachten!

von pegel (Gast)


Lesenswert?

Seite 48 im DB ganz oben.

von pegel (Gast)


Lesenswert?

Vor dem ersten senden, wie beschrieben, eine Sekunde warten.
Dann 02h .....

von Moot S. (mootseeker)


Lesenswert?

Danke @pegel,

ich werde es mal versuchen, ich muss zuerst noch einen Arduino Mega 
auftreiben. Dann werde ich mal ausprobieren was dabei rauskommt :)

Gruss
Mootseeker

von Frank K. (fchk)


Lesenswert?

Moot S. schrieb:

> Aber wie schreibe ich nun meine Daten an das Display und wie müssen die
> Aussehen? Das verstehe ich noch nicht ganz. Kannst du mir da ein
> Beispiel machen?

Hier mal etwas vereinfacht:

Der Controller hat zig interne Register, alle durchnummeriert. Nach 
außen sind aber nur drei, Adressregister (nur schreiben), Status (nur 
Lesen) auf Adresse 0x4000, und das Datenregister auf 0x4100.
1
volatile unsigned char* addrstat=0x4000;
2
volatile unsigned char* datarw=0x4100;

Schreiben von Wert 198 in Register 27:
1
*addrstat=27;
2
*datarw=198;

Zuerst Registernummer schreiben, dann Daten. Lesen geht genauso.

Um Bilddaten zu schreiben, gibts Du x und y der oberen linken Ecke sowie 
Breite und Höhe des Bereiches an, den Du schreiben willst. Dann 
aktivierst Du den Transfer durch Schreiben eines Wertes in ein Register 
und schreibst deine Bilddaten nacheinander weg ins Datenregister.

Die Details sind komplizierter, aber das ist das Grundprinzip.

fchk

von pegel (Gast)


Lesenswert?

Du brauchst einmal 8 Bit und noch 4 einzelne Pins.

Also 12 Leitungen.
Die sind bestimmt auch bei kleinen µC verfügbar, oder?

von DRM (Gast)


Lesenswert?


von pegel (Gast)


Lesenswert?

DRM schrieb:
> Vollversion von Google

Reicht nicht.

Du brauchst die Extended Version. ;)
Die muß auch was zum RA8872 wissen. (Hast Du alles gelesen?)

von Frank K. (fchk)


Lesenswert?

pegel schrieb:
> Du brauchst einmal 8 Bit und noch 4 einzelne Pins.
>
> Also 12 Leitungen.
> Die sind bestimmt auch bei kleinen µC verfügbar, oder?

Ja, aber der Datenport ist nicht als zusammenhängender 8 Bit Port 
verfügbar, sondern das muss man sich zusammenschieben. Und da die 
Logikhardware des EBI fehlt, muss alles per Software gemacht werden. Das 
verlangsamt die Übertragung eines Bytes schätzungsweise um Faktor 10. 
Ist also nicht sinnvoll.

Außerdem sind ein paar k RAM extra auch ganz nützlich. Die kann man in 
Form eines 62256 (32KB) und eines HC573 Latches für die unteren 8 
Adressbits auch noch ans EBI anschließen, wenn man schon eines hat.

fchk

von pegel (Gast)


Lesenswert?

Mir würde das jetzt keine Ruhe lassen.
Ich würde, wenn auch langsam, erst einmal Bits schubsen und mich über 
Erfolg freuen. ;)

Jeder wie er mag.

von Moot S. (mootseeker)


Lesenswert?

Also ich habs vorhin mit dem kleinen Arduino probiert, konnte mein Ziel 
etwas sinvolles anzuzeien aber noch nicht richtig erreichen. Es ist 
sicher schon mal ein Schritt in die richtige Richtung. Ich werde mir 
morgen mal einen Arduino Mega gönnen und es mit dem Versuchen :)

von Moot S. (mootseeker)


Lesenswert?

Für alle die es interessiert ich habes es heute hingekriegt, schau noch 
das ich den Code mit euch teilen kann wenn jemand Interesse hat :)

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.