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 ;)
> lcd_data(0x40);
lcd_data(0);
0 ist die Adresse für das erste Zeichen im CGRAM.
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
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 | }
|
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.