Hallo,
wie kann ich ein selbst erstelltes Zeichen auf meinem LCD anzeigen in
C?
Das zeichen das ich darstellen will soll ein "U" sein bloß nach rechts
offen und nicht nach oben.
Hardware: Atmega8, LCD16x2 (HD44780)
Hier mein Versuch:
ich will jetzt nichts falsches schreiben, aber ich bezweifle stark dass
das möglich ist.
Denn du sprichst den Controller an und sagst ihm welches seiner
vorprogrammierten Symbole er auf das Display schreiben soll.
das ist eben der unterschied zwischen richtigen displays und diesen
zeilendisplays.
Anfänger schrieb:> Hier mein Versuch:
Ähm. Und der Rest?
Sag doch mal, ob du das Display prinzipiell angesteuert bekommst.
Kannst du einen Text auf dem Display darstellen? Und fehlt jetzt nur
noch dein Zeichen?
> char abc[8]={0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff};
So sieht aber kein liegendes U in einer 5x7 Matrix aus. Das ist nur ein
Strich oben und einer unten...
Das da hast du schon gesehen?
http://www.mikrocontroller.net/articles/HD44780#Benutzerdefinierte_Sonderzeichen
ja kann normen Text anzeigen lassen mit "lcd_string("Text")...
Achso ja natürlich:
char abc[8]={0xff,0x10,0x10,0x10,0x10,0x10,0x10,0xff};
Bekomme aber immer nur dieses Zeichen " ` " angezeigt.
Anfänger schrieb:> Bekomme aber immer nur dieses Zeichen " ` " angezeigt.
Mit dem geposteten Code?
Es ist ganz klar, dass du damit nur (und bestenfalls) Käse angezeigt
bekommst, denn eines der 8 benutzerdefinierten Zeichen wird
1. im RAM definiert, und dann
2. wie ein Text angezeigt.
Du machst hier zwar bestenfalls 1. (aber mit irgendwie undefinierter
Adresse), keinesfalls aber 2.
Was meinst du, warum hier noch 2 Bytes vor den eigentlichen Zeichendaten
kommen:
http://www.darreltaylor.com/files/CustChar.htm
Ja hab mir schon beiträge durchgelesen aber versteh sie nicht wirklich
sonst würd ich ja euch nicht um hilfe bitten.
Ich muss doch zuerst in einme Array meine Pixel festlegen (5x7 Pixel).
----- 0xff
| 0x10
| 0x10
| 0x10
| 0x10
| 0x10
| 0x10
----- 0xff
Danch will ich halt dieses Array anzeigen lassen weiß aber nicht wie.
Hallo,
zeige uns doch bitte den gesamten Code, insbesondere:
"lcd-routines.h" und "lcd-routines.c"
müssen erweitert werden.
Das benutzerdefinierte Zeichen wird vor der Darstellung "dauerhaft" in
das Controller-Ram geladen.
Strom weg ==> neue laden.
Diese "spezial" Zeichen liegen im Ram und werden über die Zeichen-Code
'\x00' bis '\x07' angesprochen.
Ich verwende dieses Tool zum definieren eigener Zeichen:
"HD44780 LCD User-Defined Graphics"
http://www.quinapalus.com/hd44780udg.html
Vielleicht hilft Dir dieser Artikel zum Verstehen weiter, ich mag jetzt
nicht alles noch auf deutsch Schreiben:
http://www.circuitvalley.com/2012/02/lcd-custom-character-hd44780-16x2.html
_
Anfänger schrieb:> Ich muss doch zuerst in einme Array meine Pixel festlegen (5x7 Pixel).
Und den Ihnalt dieses Arrays dann an die richtige Adresse ins RAM
schreiben.
Und dann noch sagen, dass dieses so hübsch neu definierte Zeichen
engezeigt werden soll.
vn nn schrieb:> Hast du denn irgendeinen der Artikel auch mal gelesen?
Das frage ich mich auch, denn in diesem Link ist doch alles genau
beschrieben:
http://www.mugui.de/bin/menu.php?link=hd44780_demo
BTW:
> ----- 0xff
müsste richtigerweise eigentlich 0x1f heißen.
Anfänger schrieb:> Ja hab mir schon beiträge durchgelesen aber versteh sie nicht wirklich> sonst würd ich ja euch nicht um hilfe bitten.
Welche Artikel hast du konkret gelesen? Sicher nicht HD44780 und die
darin verlinkten.
Anfänger schrieb:> Ja hab mir schon beiträge durchgelesen aber versteh sie nicht wirklich
Was daran verstehst du den nicht?
Wenn du Stoff mit Kartoffeldruck bedrucken willst, ist ja wohl völlig
klar, dass du erst mal das Muster in die Kartoffel schneiden musst, ehe
du damit einen Abdruck auf dem Stoff machen kannst.
So auch hier:
Erst mal musst du dein gewünschtes Zeichen definieren.
Du hast 8 Zeichen zur Auswahl, in denen du dich austoben kannst und bei
denen du festlegen kannst welche Pixel weiß und welche schwarz sein
sollen.
Ist dann die Kartoffel, äh, das Sonderzeichen fertig definiert, kannst
du es einsetzen um damit an einer Zeichenposition genau mit diesem
Zeichen das gewünschte Muster zu erzeugen.
Also: Was ist an den Artikeln daran jetzt so unverständlich?
Sorry aber ich versteh des trotzdem nicht...
Ich benutze die lcd-routines.c und lcd-routines.h Standartdateinen.
In der lcd-routines.c gibt es am Ende diese Funktion:
Ist die Funktion für das schreiben in den RAM oder muss ich die von
dieser Seite "http://www.mugui.de/bin/menu.php?link=hd44780_demo"
rauskopieren.
Wenn ich nach dieser Anleitung gehe brauche ich ja eine neue Libary
oder? Hab ja nicht z.B die Funktion lcd_putc();...
Kann mir keiner ganz einfach sagen wie ich meine lcd-routines.c,
lcd-routines.h und mein Programm.c anpassen muss das z.B ich die
Sonderzeichen von "HD44780_demo.h"
(http://www.mugui.de/bin/menu.php?link=hd44780_demo) anzeigen lassen
kann.
Ich verstehe nicht was ich machen muss.
Ich hab den Artikel gelesen aber ich versteh des trotzdem nicht...
Ich versteh schon gar nicht was diese Funktion macht.
1
voidlcd_save_cg(constunsignedchar*cg){inti=0;//Byte counter lcd_command(0x40); //CG-RAM Address = 0 for(i= 0; i <64 ; i++) //Write 64 Bytes of 8 characters { lcd_data(pgm_read_byte(&cg[i])); } lcd_command(0x80); // Set DD-RAM Address = 0 }
Die Header Datei HD44780_demo.h schreibt ja bloß die acht sonderzeichen
in ein Array.
Aber die ganzen Funktionen wie
lcd_save_cg(), lcd_data(),lcd_putc()...
muss ich mir die alle in meine libary kopieren???
Anfänger schrieb:> Wenn ich nach dieser Anleitung gehe brauche ich ja eine neue Libary> oder?
Nein. Das einzige, was du brauchst, ist ein Zugriff auf den Port, an dem
das Display angeschlossen ist. So ein LC-Display ist wahnwitzig einfach
anzusteuern, ehrlich.
Das einfachste ist, anhand des Datenblatts wenigstens verstehen zu
wollen, wie so ein LCD angesteuert wird. Und nicht irgendwo irgendwie
irgendwelche Libraries hin&herzukopieren und auf Besserung zu hoffen...
Also:
1. schnitz dir die Kartoffel (CGRAM)
2. druck damit aufs Display (DDRAM)
Anfänger schrieb:> Die Header Datei HD44780_demo.h schreibt ja bloß die acht sonderzeichen> in ein Array.
Da ist dann schon mal der Schritt 1 erledigt, und die 8 möglichen
Kartoffelstempel geschnitzt.
Jetzt kannst du damit drucken. Nur mußt du da auch die richtige deiner 8
Kartoffeln auswählen. Die findest du als Zeichen 0..7 ganz am Anfang des
Character ROMs...
Siehe dort die Seite 17:
http://adafruit.com/datasheets/HD44780.pdf
Anfänger schrieb:> Ich hab den Artikel gelesenvn nn schrieb:> Welche Artikel hast du konkret gelesen? Sicher nicht HD44780 und die> darin verlinkten.Lothar Miller schrieb:> Nein. Das einzige, was du brauchst, ist ein Zugriff auf den Port, an dem> das Display angeschlossen ist. So ein LC-Display ist wahnwitzig einfach> anzusteuern, ehrlich.
Programme zusammenzukopieren ist eben vermeintlich einfacher.
Anfänger schrieb:> Sorry aber ich versteh des trotzdem nicht...> Ich benutze die lcd-routines.c und lcd-routines.h Standartdateinen.>> In der lcd-routines.c gibt es am Ende diese Funktion:>>
>> Ist die Funktion für das schreiben
Na ja.
Was MACHT denn die Funktion? Lies sie doch mal! Das ist nicht verboten.
Genausowenig wie es verboten ist, mal zu eruieren, was es mit dem
LCD_SET_CGADR auf sich hat.
Und es ist auch nicht verboten in diversen Artikeln auf die Links zu
klicken. Gerade hier auf mikrocontroller.net finden sich in den Artikeln
meistens viele, viele Links die wieder auf andere Artikel führen auf
denen man Dinge lernen kann.
So zb auch auf diesen Link
http://www.mikrocontroller.net/articles/Pseudo-Graphische_LCD-Ansteuerung
welcher sich im Tutorial Artikel über das LCD findet (wo du die
Funktionen geklaut hast)
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung> Wenn ich nach dieser Anleitung gehe brauche ich ja eine neue Libary> oder? Hab ja nicht z.B die Funktion lcd_putc();...
Gewöhn dich daran, dass funktionsgleiche Funktionen manchmal anders
heissen. Wir in Österreich sagen ja auch 'Fleischlaibchen' und in Bayern
heißt das ganze 'Fleichpflanzel' und in Berlin sagen sie dazu
"Buletten". Ändert aber nichts daran, dass es immer dasselbe ist.
> Kann mir keiner ganz einfach sagen wie ich meine lcd-routines.c,> lcd-routines.h und mein Programm.c anpassen muss das z.B ich die> Sonderzeichen von "HD44780_demo.h"> (http://www.mugui.de/bin/menu.php?link=hd44780_demo) anzeigen lassen> kann.
in lcd-routines.c (zumindest in dem von microkontroller.net) sind doch
die Funktionen schon vorhanden. Du musst sie nur benutzen.
1.Zuerst fülle ich ein Arry mit meinem Bitmuster.
2.Lade ich mein Array mit der Funktion lcd_generatechar in den RAM auf
Speicherplatz 0
3.Gebe ich mit lcd_data(LCD_GC_CHAR0); mein Zeichen aus.
Aber es funktioniert immer noch nicht... :-(
Ich glaub ich such mir ein anderes Hobby.
Dein Fehler liegt hier:
lcd_setcursor(0,0);
Mach da mal
lcd_setcursor(0,1); raus. dann müsste es gehen.
0,0 ist gar nicht definiert, es geht mit 1 los.
Gruß