Eigene Zeichen im CGRAM des KS0070B definieren funktioniert nur teilweise

OP #3273409
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
Gast #3273420
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.
Gast #3273431
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);
OP #3273434
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
Gast #3273463
Hi

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

Im Datenblatt vom KS0070 steht das.

MfG Spess
Gast #3273491
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.