Forum: Mikrocontroller und Digitale Elektronik KS007x CGRAM Adressen


von Björn R. (sushi)


Lesenswert?

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...

von spess53 (Gast)


Lesenswert?

Hi

Zu Schreiben in den CG-Ram gibt es ein extra Kommando: 0b01xxxxxx.

>0b0001|0x40

Was soll das sein?

MfG Spess

von Björn R. (sushi)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Björn R. (sushi)


Lesenswert?

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!!!

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

>War doch so gemeint, oder?

Eigentlich ja. Meine Assemblerroutine prinzipiell genau so aufgebaut.

MfG Spess

von Björn R. (sushi)


Lesenswert?

Wie gesagt, danke, funktioniert jetzt perfekt...

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.