Forum: Mikrocontroller und Digitale Elektronik LCD-Zeichen generieren


von Danny (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen...

Ich hoffe Ihr könnt mir helfen - ich verzweifle... Habe schon unzählige 
Beiträge im Forum durchsucht und auch schon im mikrocontroller.net Chat 
mehrfach nachgefragt - leider bisher ohne Erfolg...

Mein Display an sich (C216x05xxW00) wird wunderbar initialisiert und 
arbeitet soweit fehlerfrei. Ich habe mir alles zusammen mit dem 
AVR-GCC-Tut erarbeitet und auch diese lcd-routine.c und lcd-routine.h 
verwendet.

Das Problem, um das es sich handelt ist - wie der Betreff schon sagt - 
das generieren eigener Zeichen... Ich habe mal eine Art Codesammlung 
angehängt, da sind Auszüge aus meiner lcd-routines.c, lcd-routines.h und 
meiner main-Fkt. (alles nachzulesen unter 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung).
Was ich daran nun einfach nicht verstehe ist, dass zum 1. in der *.h 
steht ich soll data als ein Array[5] schreiben, d.h. also das Array data 
besteht aus 5 Einträgen richtig ? aber Benutzerdefinierte Zeichen werden 
doch Zeilen weise übertragen und noch dazu wundert mich, dass in der 
routines.c innerhalb der for Schleife das i von 1 bis 8 läuft und somit 
8 einträge des Arrays "data" übermittelt werden.
Ok, vllt war das nur ein kleiner schreibfehler - vllt müsste in der *.h 
einfach nur "Array[8]" stehen, aber egal - in meinem Code aus der Main 
habe ich ja auch 8 Zeilen übergeben...

Aber am wenigsten kann ich mit der Startadresse anfangen... ?!
Ich habe hier auch mal den Link zu meinem Datasheet - das ist nur ein 
paar Seiten lang und ich denke Seite 13 und 15 sind die "wichtigsten" 
obwohl sie denke ich nichtssagend sind... 
http://www.cct.com.my/Products/Character_Module/C216x05xxW00_REV1.pdf

Könnte mir bitte jemand Helfen dieses Problem zu lösen ? Es würde mich 
schon stark weiterhelfen, wenn mir jemand helfen würde die nötigen Infos 
aus dem Datenblatt zu ziehen...  Was glaubt ihr ist an meinem Code 
falsch ? Die Startadresse des CGRAM ist 0x40 und da ich in der 
lcd_generatechar() die 0 als "code" übergeben habe müsste das Zeichen 
doch demzufolge auf der Position 40 zu finden sein ?? aber das Display 
bleibt vollkommen leer. Es tut sich nichts - nicht mal ein falsches 
Zeichen :(
Mache ich einen Fehler beim Ausgabe-Syntax ?


Danke schonmal vorab an alle nach diesem Roman ;)

von holger (Gast)


Lesenswert?

>  lcd_data(0x40);

  lcd_data(0);

0 ist die Adresse für das erste Zeichen im CGRAM.

von spess53 (Gast)


Lesenswert?

Hi

>Die Startadresse des CGRAM ist 0x40

Nein. 0x40 ist der Befehl zum setzen der CG-RAM-Adresse. Die Adresse 
(0...$3F) befindet sich in den unteren 6 Bits.

MfG Spess

von holger (Gast)


Lesenswert?

1
  ////////////////////////////////////////////////////////////////////////////////
2
  // Schreibt ein Zeichen in den Character Generator RAM
3
 
4
  void lcd_generatechar( uint8_t code, const uint8_t *data )
5
  {
6
      // Startposition des Zeichens einstellen
7
      lcd_command( LCD_SET_CGADR | (code<<3) );
8
 
9
      // Bitmuster übertragen
10
      for ( uint8_t i=0; i<8; i++ )
11
      {
12
          lcd_data( data[i] );
13
      }
14
 
15
     lcd_command( 0x80 ); // Umschalten auf DDRAM
16
  }

von Falk B. (falk)


Lesenswert?


von Danny (Gast)


Lesenswert?

Ah alles klar - ich probier das denn gleich mal aus !! Danke dafür 
erstmal und gern geschehen dafür die kleine Verständnislücke 
gewschlossen zu haben hehe ;) scherz

Ich meld mich später nochmal bzgl. der Ergebnisse. Danke!

von Danny (Gast)


Lesenswert?

Jouuuu !!!! Danke euch allen !! Vor allem dir, Holger - das war die 
Schlüsselzeile - der Wechsel zurück in den DDRAM:

     lcd_command( LCD_SET_DDADR );

Danke mann !! Es geht - und ich quähl mich so ehwig lange - nur weil ich 
nich "soeiner", der wegen jedem schein n neuen Thread aufmacht ^^
Ich versuch das immer mit allen Mitteln selbst zu lösen - denn nur so 
behalt ichs denn auch danach :) - Danke dir =)

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.