Hallo... Also die DDRAm Adressen hab ich jetzt zuhauf gefunden. Ich bräuchte aber mal die Adressen vom CGRAM meines Display Moduls. In einem Buch habe ich für den HD4470 die folgenden Adressen gefunden: zeichen Adresse 0 0x40 1 0x48 2 0x50 3 0x58 4 0x60 5 0x68 6 0x70 7 0x78 Damit funktioniert die Sache auch, nur dass die zeichen durcheinander und teilseise nicht vollständig sind. Ich nehme also an, mein Display hat keinen HD4470 sondern einen KS007x oder sowas. Nur dafür finde ich nirgendwo die Adressen. Auf ausprobieren hab ich keine Lust, und das Datenblatt, da steht irgendwas ganz anderes drin? Oder ich bin zu blöd es zu lesen, oder ich hab noch n ganz anderen Display controller. Die normale Ausgabe auf dem Display funktioniert aber wie am Schnürchen(mit dem Code aus dem GCC-Tutorial). hier noch ein Codeschnipsel: lcd_command(0b0001|0x40); for(i=0;i<8;i++) lcd_data(bug[0][i]); lcd_command(0b0001|0x48); for(i=0;i<8;i++) lcd_data(bug[1][i]); lcd_command(0b0001|0x56); for(i=0;i<8;i++) lcd_data(bug[2][i]); lcd_command(0b0001|0x64); for(i=0;i<8;i++) lcd_data(bug[3][i]); lcd_command(0b0001|0x72); for(i=0;i<8;i++) lcd_data(bug[4][i]); lcd_command(0b0001|0x80); for(i=0;i<8;i++) lcd_data(bug[5][i]); lcd_clear(); Damit gedenke ich die zeichen an den Controller zu übermitteln. Die Adressen sind jetzt schon wieder andere, weil ich halt dioch noch ein bischen rumexperimentiert habe... in bug[x][y] sind meine 6 zeichen gespeichert. Danke schonmal... Update: Da das erste Zeichen bei benutzung von 0x40 als Startadresse genau um eine zeile nach unten verschoben aufgetaucht ist, dachte ich mir, ich versuchs einfach mal mit 0x39... Jetzt mag er das aber anscheinend gar nicht, da spinnt das ganze Display...
Hi
Zu Schreiben in den CG-Ram gibt es ein extra Kommando: 0b01xxxxxx.
>0b0001|0x40
Was soll das sein?
MfG Spess
Das ist der befehl, um die CGRAM-Adresse zu setzen... 0001xxxx laut diesem Artikel: http://www.mikrocontroller.net/articles/HD44780 hatte das so verstanden, erst die Adresse setzen, dann die 8 Bytes senden, die das Zeichen beschreiben. Der Befehl den du gepostet hast, wird doch durch lcd_data umgesetzt, und ist der gleiche, der auch fürs DDRAM benutzt wird... Wie gehts richtig? ;-) Danke, Björn.
Hi Dann sieh dir die Tabelle mal richtig an. Die ersten beiden Nullen gehören zu RS und RW. Abgesehen davon muss man Binärzahlen ausschreiben. Also z.B. 0b01000000|$48. Der CG-Ram fängt übrigens bei Null an und nicht bei 40H. Du musst also mit 'lcd_command(0b01000000)' die CG-Ramadresse setzen und danach deine Bitmuster reinschaufeln. MfG Spess
Ok das mit dem ausschreiben war mir klar, aber nicht aufgefallen... Und das andere auch nicht. Klingt vernünftig. Die frage nach der Startadresse wäre dann auch geklärt. mal gucken, sollte ich wohl jetzt mal zum laufeen bringen! Danke! ich schreib, wenns geklapopt hat! Edit: leider überhaupt nicht...
1 | lcd_command(0b01000000); |
2 | for(j=0;j<6;j++) |
3 | {
|
4 | for(i=0;i<8;i++) |
5 | lcd_data(bug[j][i]); |
6 | }
|
7 | lcd_clear(); |
War doch so gemeint, oder? Kommt nur Müll bei raus.. Das dritte und vierte zeichen sind komplett schwarz, bei den anderen nur vereinzelte Pixel... Edit 2: ich bin etwas zu überhastet... funktioniert doch. Man sollte nur den Code neu compilen bevor man ihn in den AVR brennt ;-) DANKE fürs Brett vorm kopf wegnehmen!!!
Hi
>War doch so gemeint, oder?
Eigentlich ja. Meine Assemblerroutine prinzipiell genau so aufgebaut.
MfG Spess
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.