Forum: Mikrocontroller und Digitale Elektronik Eigene Zeichen im CGRAM des KS0070B definieren funktioniert nur teilweise


von Christian W. (christian_w)


Lesenswert?

Hallo zusammen,

wie der Titel schon sagt, ich würde gerne selbst definierte Zeichen auf 
meinem 2x16er LCD darstellen, in meinem Fall ein Glockensymbol, einmal 
hohl, und einmal ausgefüllt.

Das übertragen und Darstellen eines einzelnen Zeichens klappt wunderbar, 
ich kann das Zeichen auch auf dem Display darstellen.

Wenn ich jedoch ein zweites und drittes selbstdefiniertes Zeichen an's 
Display sende, kommt am LCD nur Müll raus, beispielsweise zwei 
senkrechte Striche und Punkte, statt einer Glocke.

Hier mal meine entsprechenden Teile des Quellcodes:


Arrays für die beiden Glockensymbole:
1
// Zeichen für den CG RAM definieren
2
// ---------------------------------
3
uint8_t cgramsymbol_glocke_leer[8] =
4
{
5
  0b00000100,
6
  0b00001010,
7
  0b00001010,
8
  0b00001010,
9
  0b00010001,
10
  0b00011111,
11
  0b00000100,
12
  0b00000000,
13
};
14
15
uint8_t cgramsymbol_glocke_voll[8] =
16
{
17
  0b00000100,
18
  0b00001110,
19
  0b00001110,
20
  0b00001110,
21
  0b00011111,
22
  0b00011111,
23
  0b00000100,
24
  0b00000000,
25
};


Übertragen der Bitmuster in den CGRAM:
1
// Leeres Glockensymbol in CG RAM übertragen
2
  LCD_RS(0);
3
  LCD_RW(0);
4
  LCD_DATA(0b01000000);    
5
  LCD_EN();  
6
  
7
  for(uint8_t n=0; n<8; n++) LCD_CHAR(cgramsymbol_glocke_leer[n]);
8
  
9
// Volles Glockensymbol in CG RAM übertragen
10
  LCD_RS(0);
11
  LCD_RW(0);
12
  LCD_DATA(0b01000001);
13
  LCD_EN();
14
  
15
  for(uint8_t n=0; n<8; n++) LCD_CHAR(cgramsymbol_glocke_voll[n]);
16
  
17
// Cursorposition festlegen
18
LCD_LOCATE(1, 1);


...und dann noch die Darstellung auf dem Display:
1
// Leeres Glockensymbol darstellen
2
LCD_LOCATE(1, 16);
3
LCD_CHAR(0b00000000);  
4
5
// Volles Glockensymbol darstellen
6
LCD_LOCATE(1, 15);
7
LCD_CHAR(0b00000001);



Die Darstellung der leeren Glocke in Spalte 16 klappt wunderbar (nur 
wenn ich ein einzelnes Zeichen definiere und übertrage), aber die volle 
Glocke in Spalte 15 will nicht so, wie sie soll (wenn ich zwei oder mehr 
Zeichen definiere), da stehen nur Striche durcheinander...

Nur warum? Ich komm nicht drauf.

Grüße, Christian

von holger (Gast)


Lesenswert?

Versuchs mal so:
1
// Volles Glockensymbol in CG RAM übertragen
2
  LCD_RS(0);
3
  LCD_RW(0);
4
  LCD_DATA(0b01001000);
5
  LCD_EN();

Dein zweites Zeichen beginnt an CG-RAM Adresse 8 und nicht 1.
Dein drittes Zeichen beginnt an CG-RAM Adresse 16 und nicht 2.

von holger (Gast)


Lesenswert?

Bevor ich es vergesse.

Diese Ausgabe ist dann trotzdem richtig:
1
// Leeres Glockensymbol darstellen
2
LCD_LOCATE(1, 16);
3
LCD_CHAR(0b00000000);  
4
5
// Volles Glockensymbol darstellen
6
LCD_LOCATE(1, 15);
7
LCD_CHAR(0b00000001);

von Christian W. (christian_w)


Lesenswert?

holger schrieb:
> Dein zweites Zeichen beginnt an CG-RAM Adresse 8 und nicht 1.
> Dein drittes Zeichen beginnt an CG-RAM Adresse 16 und nicht 2.

Perfekt, hab ich versucht, es klappt. Genau die Speicheradressierung war 
der Haken.

Danke

Christian

von Christian W. (christian_w)


Lesenswert?

holger schrieb:
> Bevor ich es vergesse.
>
> Diese Ausgabe ist dann trotzdem richtig:
>
>
1
> // Leeres Glockensymbol darstellen
2
> LCD_LOCATE(1, 16);
3
> LCD_CHAR(0b00000000);
4
> 
5
> // Volles Glockensymbol darstellen
6
> LCD_LOCATE(1, 15);
7
> LCD_CHAR(0b00000001);
8
>
Ich weiß. Hab's grade bemerkt ;)

Nur komischerweise steht von der CGRAM-Adressierung nix detailliertes im 
mitgelieferten Datenblatt. Da hätt ich lange suchen und basteln 
können...

Christian

von Spess53 (Gast)


Lesenswert?

Hi

>Nur komischerweise steht von der CGRAM-Adressierung nix detailliertes im
>mitgelieferten Datenblatt.

Im Datenblatt vom KS0070 steht das.

MfG Spess

von Christian W. (christian_w)


Lesenswert?

Spess53 schrieb:
> Im Datenblatt vom KS0070 steht das.
>
> MfG Spess

OK, werd' ich mal studieren. Wär ich ehrlichgesagt nicht drauf gekommen 
dass der Controllerchip auf dem Display ein extra Datenblatt hat.

Danke,
Christian

von Spess53 (Gast)


Lesenswert?

Hi

> Wär ich ehrlichgesagt nicht drauf gekommen
>dass der Controllerchip auf dem Display ein extra Datenblatt hat.

Ja, da gibt es eigene Datenblätter. Und die sind meist wichtiger als das 
eigentliche Displaydatenblett.

MfG Spess

von Christian W. (christian_w)


Lesenswert?

Ja, hab's bemerkt. Allein schon an der Seitenzahl.

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.