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?
Sicher geht das. Ist ein ILI9341. Musst nur genügend Zeit mitbringen.
Das wird wohl gehen. Bei deinem "kleinen" Mikrocontroller passt es ganz gut, dass der Display Controller eingebaute Zeichensätze hat.
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.
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
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
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
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
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%
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.
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!
Vor dem ersten senden, wie beschrieben, eine Sekunde warten. Dann 02h .....
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
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
Du brauchst einmal 8 Bit und noch 4 einzelne Pins. Also 12 Leitungen. Die sind bestimmt auch bei kleinen µC verfügbar, oder?
Biin ich der einzige, der die Vollversion von Google installiert hat? https://educ8s.tv/arduino-2-8-ili9341-tutorial/ https://create.arduino.cc/projecthub/calogerus/arduino-uno-2-4-tft-lcd-display-shield-touch-panel-ili9341-576b1b
DRM schrieb: > Vollversion von Google Reicht nicht. Du brauchst die Extended Version. ;) Die muß auch was zum RA8872 wissen. (Hast Du alles gelesen?)
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
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.
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.