DOGM Eigener Zeichensatz

OP #2340054
Kann mir da jemand weiterhelfen:

Ich möchte gerne auf einem DOGM 2x16 einen eigenen Zeichensatz anzeigen.
Für ein HD44780U Kompatibles gibt es ja schon genug Beispiele dafür.

Für das DOGM habe ich das Beispiel von Mario Richter genommen und um 
etwas erweitert.
Leider bekomme ich es nicht hin meine Zeichen darzustellen.

Hat jemand einen Idee dazu?

Wie kann ich überprüfen ob die zeichen ins cgram geschrieben wurden?
Ich vermute nämlich fast das die selbstdefinierten zeichen zwar drinnen 
sind, aber nicht ausgelesen werden.
Angehängte Dateien:
OP
Hier:
1
// Selbstdefinierter Zeichensatz in den CGRAM kopieren
2
// ---------------------------------------------------
3
  dogm_putc_cgram_p(PfeilL,0);
4
  dogm_putc_cgram_p(PfeilR,1);
5
  dogm_putc_cgram_p(BalkenLL,2);
6
  dogm_putc_cgram_p(BalkenRL,3);
7
  dogm_putc_cgram_p(KugelL,4);
8
  dogm_putc_cgram_p(KugelV,5);
9
  dogm_putc_cgram_p(BalkenL,6);
10
  dogm_putc_cgram_p(BalkenV,7);
Manfred W. schrieb:
> Dachte man liest die direkt aus dem CGRAM aus?

Ja. Das macht der Controller des LCDs. Du musst ihm nur mitteilen an 
welcher Stelle er die Zeichen ausgeben soll.

Hier definierst Du eine Zeichenkette zur Ausgabe auf dem LCD:
>  const char menu_103[] PROGMEM = "{##=======}    2";
Der ASCII-Code der Zeichen ist:
 { -> 0x7B
 # -> 0x23
 = -> 0x3D
Das ergibt: [0x7B 0x23 0x23 0x3D 0x3D 0x3D 0x3D ...] Diese Bytes werden 
zum Display gesendet und dort ins DDRAM geschrieben.
(Der ASCII-Code entspricht der jeweiligen Adresse des Zeichens im 
CGRAM.)

Wenn jetzt statt "#" BalkenV und statt "=" BalkenL angezeigt werden 
soll, dann musst du die Zeichenkette entsprechend ändern.
 BalkenL -> 0x06 (Adresse im CGRAM)
 BalkenV -> 0x07
Das ergibt: [0x7B 0x07 0x07 0x06 0x06 0x06 0x06 ...]

Gruß
John
(dogm.c)
1
// ************************************************************
2
// Store individual character from flash on cgram
3
// ************************************************************
4
void dogm_putc_cgram_p(const char *progmem_s, unsigned char _position)
5
{
6
  dogm_write_nocheck(0, (1<<LCD_CGRAM)+_position*8);
7
  register char c;
8
  register char x1;
9
  for (x1=0;x1<=7;x1++)
10
  { 
11
    (c = pgm_read_byte(progmem_s++));  
12
    dogm_putc(c); <<HIER schreibst du wieder ins DDRAM und nicht ins CGRAM!
13
  }
14
  dogm_clear();
15
}

Sascha
halt Kommamdo zurück - in *dogm_putc(c)* setzt du ja nicht die Adresse 
sondern gibts nur die Daten aus. Allerdings könnte dir deine 
Switch-Verzweigung die binärdaten der Zeichen unbrauchbar machen. Nimm 
lieber dogm_write_check.

Aber das sieht komisch aus ...
1
  dogm_write_nocheck(0, (1<<LCD_CGRAM)+_position*8);

die CGRAM-Adressen beginnen zumindest beim HD44780 mit Null - bei dir 
aber mit 64!

Sascha
Manfred W. schrieb:
> dogm_write_check schreibt aber mit 8Bit.
ja und 1 Byte eben, als Command oder Data

> Damit bekomme ich nichts mehr aufs LCD.
wieso??

> Wie kommst du auf 64? LCD_CGRAM ist mit 6 deklariert.
na (1<<6) = 64
Ich hab mir die DOGM's noch nicht angesehen, scheinen aber ja HD44780 
kompatibel zu sein. Dort beginnen die Ardessen für's CGRAM bei 0x00.

Sascha
so nun hab ich mir doch noch das Datenblatt angeschaut ...
das LCD_CGRAM=6 passt beim dogm doch, aber wie Spess schon schreibt, 
stellst du während des Init's
1
dogm_write_check(0, 0x29);// 4-Bit Datenlänge, 2 Zeilen, Instruction table 1
auf Instruction table 1, um die CGRAM-Adresse zu setzen musst du am Ende 
des Init's wieder auf Instruction table 0 zurückschalten (0x28)

Sascha

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.