mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD-Zeichen generieren


Autor: Danny (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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-Tu...).
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/C2...

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 ;)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  lcd_data(0x40);

  lcd_data(0);

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  ////////////////////////////////////////////////////////////////////////////////
  // Schreibt ein Zeichen in den Character Generator RAM
 
  void lcd_generatechar( uint8_t code, const uint8_t *data )
  {
      // Startposition des Zeichens einstellen
      lcd_command( LCD_SET_CGADR | (code<<3) );
 
      // Bitmuster übertragen
      for ( uint8_t i=0; i<8; i++ )
      {
          lcd_data( data[i] );
      }
 
     lcd_command( 0x80 ); // Umschalten auf DDRAM
  }

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.