Hallo,
habe mal angefangen meine eigenen Routinen für die Ansteuerung eines
grafischen Displays zu schreiben nachdem ich mit den vorhandenen immer
wieder Fehldarstellungen hatte (wahrscheinlich weil ich das ganze mit
16 MHz betreibe).
Habe dann bei der „Fehlersuche“ festgestellt das das ganze ja doch
relativ einfach ist, und das man hier und da was verbessern könnte, naja
geendet hat das ganze mit einer komplett eigenen Bibliothek.
Das ganze benutzt Fonts die mithilfe des GLCD FontCreators 2 von ape
(auch hier im Forum zu finden) erstellt wurden, an dieser Stelle ein
großes Lob an dieses sehr gelungene Programm. Die Texte können beliebig
groß sein und an beliebiger Stelle stehen.
Über ein define im Header kann angegeben werden ob die Texte die auf den
Modulo 8 Grenzen liegen über „Pages“ geschrieben werden, also ohne die
Zeitaufwendige Funktion set_pixel zu nutzen. Dabei sollte man auf jeden
Fall darauf achten das die Schriftart genau 8/16/24/... Pixel hoch ist,
sonst überschreibt man sich ggf. anderen Text, denn bei einer Schriftart
die 9 Pixel hoch ist werden im FASTTEXT Modus 2 komplette Pages gefüllt
ohne Rücksicht auf Verluste.
Habe keine besonderen Grafik Funktionen eingebaut (nur Linien und
Rechtecke), da ich Sie selber nicht brauche und man sie einfach über
set_pixel selbst realisieren kann (vielleicht anderen Bibliotheken
entnehmen).
Im Header kann man dann auch noch gnadenlos Funktionen rausschmeißen die
man nicht braucht. Z.B. kann man den „Bresenham“ Kram für die schiefen
Linien rausschmeißen wenn man eh nur vertikale/horizontale braucht.
Die wichtigen Funktionen mal kurz zusammengefasst:
--------------------------------------------------
Allgemeines:
- init()
- clear()
- invert()
Text-Funktionen:
- set_cursor
- putc , puts , puts_p
Grafik-Funktionen:
- set_pixel
- draw_line , draw_rect, fill_rect
- draw_fullscreen_bitmap
Hoffe jemand freut sich drüber.
Ps:
Würde mich mal interessieren was ihr von den Routinen haltet und wie ihr
meinen Programmierstil bewertet.
Gruss Andre
Servus,
Danke für die Library, ich brauchte gerade ein LCD um was auszutesten,
da kam mir Deine gerade recht. So musste ich da nicht selber was auf die
schnelle Programmieren ;-)
alle achtung, kann deine routinen gut gebrauchen, die von ape
funktionieren zwar aber mehr auch nicht, bei dir funktioniert sogar das
scrolling flüssig, cool :)
Moin,
werde das mit den Pin-Namen übernehmen, ist ein bisschen
übersichtlicher. Wenn ein paar Änderungen zusammengekommen sind werde
ich das hochladen.
Gruss
Andre
Ich habe für meine Zwecke noch ne routine gebraucht die mir kleinere
bmp's darstellt. Das is jetzt vielleicht nicht sauber geschrieben aber
es funktioniert ...
Hallo.
Kann ich das ganze auch aufn Mega8 flashen, weil irgendwie funkt das
nicht ?
Das Display zeigt nichts an, obwohl alle Anschlüsse korrekt sind.
Compilieren und proggen ging problemlos.
CU
Bernd
Hallo Andre,
vielen Danke für deinen Code! Leider funktionierte es bei mir nicht auf
anhieb. Ich musste erst wait_while_chip_is_busy() durch ein Delay
ersetzen. Warum dem so ist habe ich noch nicht herausfinden können.
Gruß
Björn
Hallo Leute,
hatte die letzten Tage sehr viel zu tun. Musste mich da um nen paar
wichtige Sachen kümmern.
Fangen wir mal an:
zu Alex:
-------------------------------
habe auch schon angefangen sowas zu implementieren, dazu hab ich nen
kleines Programm in C# geschrieben um die Bilder (bzw. Arrays) zu
erstellen, das Programm binarisiert das Bild direkt. Man kann zwischen
drei Bildern wählen, eines ist mit ner einstellbaren Grenze, eines mit
ner automatischen Grenze und das dritte wurd über nen Halbtonverfahren
erstellt. Bis das ganze fertig ist kann aber noch ne Weile dauern, da
ich momentan überhaupt keine Zeit dazu finde.
dein code sieht auf den ersten blick doch garnicht so wild aus, bissle
aufräumen (zeilenumbrüche etc.),
dann schreibst du temp =0 und fünf zeilen drunter temp |= ...... das
kommt mir ein wenig komisch vor, hängt es mit der IF-Abfrage darüber
zusammen? ich hab den code aber nur überflogen.
zu Bernd:
------------------------------
also ja wie du festgestellt hast sollte es auf jedem avr mit genügend
pins und speicher laufen (jetzt mal so salopp gesagt ohne lange
nachzudenken).
da das display was anzeigt würde ich nicht davon ausgehen das es defekt
ist (gib ihm noch ne chance). lade doch mal nen bild von deiner anzeige
hoch.
Ggf. sind die Leitungen zu lang oder deine Spannungsversorgung unsauber
vielleicht hast du auch die flasche Frequenz für deinen Quarz definiert
(Stichwort F_CPU), mir fallen da ne ganze menge Gründe ein.
Habe mein Display mal irrtümlich falschrum angesteckt (alle pins
vertauscht 20 auf 1,19 auf 2 ...) das Ding geht immer noch bestens,
nur die leds leuchten jetzt nen bissle blau anstatt weiß :).
zu Björn:
------------------------------
was genau ist bei dir im Header (mylcd.h) bei:
#define LCD_DATA_PIN .... eingestellt ?
hast du in deinem Projekt die Taktrate richtig eingestellt ?
#define F_CPU xxxxx
und ggf. Fusebits checken -> ckdiv8
ich habe das ganze bei 16 MHz am laufen
------------------------------
mfg
Andre
Hallo Andre,
LCD_DATA_PIN ist PINC, F_CPU via makefile auf 16MHz, Fuses auf externer
Takt vom Quarz. Reset hängt bei mir an Pull-Up. Möglicherweise hat das
was damit zu tun? Bisher kann ich mir keinen Reim darauf machen.
Gruß
Björn
Hallo Björn,
also Reset ist unkritisch, wenn du einen Pullup dran hast sollte es
funktionieren. Wie lang sind denn die Leitungen zu deinem Display? bei
mir sehen die Signale mit 20cm IDE Kabel schon ein wenig verhuntzt aus.
kann mir vorstellen das es vielleicht daran liegt. durch dein delay wird
ja alles ausgebremst, dann siehts auch mit den signalen besser aus...
gruss
Andre
Super ;-)
Hab das Ding ohne Probleme zum laufen gekriegt, nur sind wohl die Fonts
bischen zu klein für mein 128x64 Display, werd später noch nen Foto hier
einfügen ;)
Hallo und vielen Dank Andre,
die Lib funktioniert wunderbar!
Das austauschen der Fonts funktioniert auch 1A, ich habe mir den großen
kleiner gemacht und den kleinen größer, aber nicht auf dem Bild zu
sehen.
Es handelt sich um das KS0108 LCD von Pollin für ~17 Euro.
Mfg,
Peter
Hallo Freunde.
Ich interessiere mich auch für ein glcd und möchte Euch fragen, welche
LCD´s ihr mir empfehlen könntet.
Ich habe mir schon paar herausgesucht, kann mich jedoch nicht wirklich
entscheiden.
1. 64128C von Displaytech ( 25,49 € )
http://docs-europe.electrocomponents.com/webdocs/06dd/0900766b806dda2b.pdf
2. 64128A von Displaytech ( 34,85 € )
http://docs-europe.electrocomponents.com/webdocs/06dd/0900766b806dda2a.pdf
(Braucht das LCD eine negative Spannung ??? s. Datenblatt Pin 18 VOUT
-5V )
3. LCD-Modul TG12864B-03 ( erhältlich bei Pollin für 19,95 EUR)
Hat jemand Erfahrungen mit diesen Displays ?
Laufen sie mit den Bibliotheken von master.andre ???
Welche Displays habt Ihr benutzt ????
Für einige Antworten würde ich mich sehr freuen .
Liebe Grüße
Adam B.
Hallo zusammen,
ich habe zu der Bibliothek eine Anfänger-C Frage.
Wie kann ich einen integer Wert oder unsigned char direkt auf dem
display schreiben lassen.
Beispiel:
lcd_puts_p(small_font,PSTR("1")); schreibt eine 1 auf dem Display.
Wie mache ich das, wenn ich jetzt eine unsigned char Variable habe, die
den Wert 0x01 -0xff hat um das dynamisch auszugeben?
vielen Dank für eure Hilfe,
Sammy
Hallo,
ich habe die lib mit einem mega32 bei 16MHz getestet. Auf PORTA
funktioniert das auch wunderbar. Allerdings wollte ich den Datenport
gerne auf PORTC haben und dort kommen nur noch Balken im Display (ist
das ks0108 vom Pollin). Weis jemand woran das liegen könnte?
Gruss Ulrich
Danke!!!
Da hab ich nicht dran gedacht. Jetz gehts!
Das einzige was ich mir noch icht ganz erklären kann ist warum ich an
meinen Enable-Pin 1nF gegen Masse löten musste damit beide
Displayhälften und nicht nur die rechte beschrieben werden. Am timing
liegts meiner meinung nach nicht, den "Enable-impuls" hab ich schon von
300ns bis 600ns getestet.
>den "Enable-impuls" hab ich schon von 300ns bis 600ns getestet.
Dann nimm noch längere Werte. Die im Datenblatt angegebenen Werte sind
manchmal sehr optimistisch.
Oliver
Guten abend
Kann mir jemand helfen, und mir sagen wie ich eigene bmps einbinden
kann??
das will alles nicht so wie ich
Ich bedanke mich schonmal vorab für eure hilfe
Hallo zusammen,
habe mehrfach versucht das Codebeispiel von Andre auf meinem LCD
(RG12864B von Lynx-dev.com) zum laaufen zu bekommen, aber habe es nicht
geschafft! Anbei mein Schaltplan mit Mega644 mit 20MHz...diese sind auch
unter AVRStudio eingestellt! Es erscheint rein gar nichts auf dem
Display,
Datenleitungen sind mehrfach überprüft worden.
Das einzige was ich geändert habe ist:
//###################################################################
// Ports
#define LCD_CMD_PORT PORTA // Command Output Register
#define LCD_CMD_DDR DDRA // Data Direction Register for Command
Port
#define LCD_DATA_PIN PINB // Data Input Register
#define LCD_DATA_PORT PORTB // Data Output Register
#define LCD_DATA_DDR DDRB // Data Direction Register for Data Port
// Command Port Bits
#define CD 0x03 // Data/Control (RS) PinNumber
#define RW 0x04 // R/W PinNumber
#define EN 0x05 // EN PinNumber
#define CS1 0x01 // CS1 PinNumber
#define CS2 0x02 // CS2 PinNumber
#define LCD_NO_RES // uncomment this line if you have an pullup on
reset
#ifndef LCD_NO_RES
#define RES 0x00 // Reset Pin
#endif
Habt Ihr einen Tipp? Kann es ein Timingproblem sein? oder hatte jmd das
schon mal???
Hallo,
kann mir vielleicht einer erklären wo das Bild der Sanduhr im Code
gespeichert ist, bzw wie ich ein selbst erstelltes Bild mit dem "bmp2c"
Programm einbinde?
MfG Daniel
Daniel schrieb:
> push
Gerade mal 7 Minuten warten und dann schon den Thread hochschieben
wollen ist schon unverschämt.
Schau im Quellcode nach warum das so ist.
Erstellt wird das Leerzeichen anscheinend nicht, aber selbst wenn man es
erstellt, wird es nicht dargestellt.
Wenn die Schriftbreite und die Höhe ermittelt, wird nichts geschrieben
da beides 0 ist.
Oder sehe ich das falsch?
Es werden ja anscheinend sowieso nur die gesetzten Pixel geschrieben.
Da sich die Schriften ja überlagern.
Weiss jemand Rat, wie man das Programm dazu bringen könnte auch die
weissen nicht gesetzten Pixel zu schreiben?
Ich möchte eigentlich erstmal nur eine Uhr auf dem Display darstellen.
Jedoch flackert das ganze ein wenig wenn ich vorher das komplette
Display lösche.
Vielleicht hat einer eine andere Lösung bzw einen Tip für mich.
>Ich frage mich gerade, ob das Leerzeichen vom FontCreator überhaupt>erzeugt wird.
Der Fontcreator 2 hat ein paar Macken. Das Leerzeichen ist immer Null
Pixel breit. Das lässt sich aber nachträglich in der erzeugten Datei von
Hand beheben.
Oliver
Nachtrag:
Ich hatte vor einiger Zeit mal eine Version des Fontcreators gebastelt,
die u.a. das Leerzeichen richtig ausgibt. Vielleicht hilft das weiter:
http://www.mikrocontroller.net/attachment/29112/GLCDFontCreator2.1_all.zip>Leerzeichen sind jetzt mit der Breite drin, wie sie vom Windowsfont>vorgegeben werden. Ausserdem lässt sich per Edit der Fontnamen>nachträglich ändern, und die Berechnung der Fontgröße stimmt jetzt auch.>Falls was nicht funktioniert, bitte meckern, oder gleich verbessern.>Alle sourcen, auch die Originale von apetech, hab ich dazugepackt.
Oliver
Hallo!
Ist mit "Command Output Port" in mylcd.h der Output von CD, RW, EN und
CS1/2 gemeint?
Und bedeutet dann z.B.
"#define LCD_CMD_PORT PORTA // Command Output Register"
"#define LCD_CMD_DDR DDRA // Data Direction Register for Command Port"
"#define CD 0x07 // Data/Control (RS) PinNumber",
dass mit dem "Command/Data"-Pin des LCDs der PA07 des Avr's verbunden
sein muss?
Danke!
J!M!
Hi,
kann mir mal einer nen Belegungsplan senden?
Ich verstehe es nicht ganz. Oder:
PIN LCD
1 GND
2 +5V
3 Poti Schleifer
4
5 PA4
6 PA5
7 PC0
8 PC1
9 PC2
10 PC3
11 PC4
12 PC5
13 PC6
14 PC7
15
16
17 PA0
18 Poti
19
20
Poti an Masse
Peter schrieb:
> Hallo und vielen Dank Andre,> die Lib funktioniert wunderbar!>> Das austauschen der Fonts funktioniert auch 1A, ich habe mir den großen> kleiner gemacht und den kleinen größer, aber nicht auf dem Bild zu> sehen.> Es handelt sich um das KS0108 LCD von Pollin für ~17 Euro.>> Mfg,> Peter
Hallo Peter,
hättest du für das Pollin Display evtl. noch einen Anschlußschaltplan?
Danke
Stefan
Servus leute,
großes Danke an den Autor der Lib hier. geflashed, display richtig
angeschlossen und es lief auf anhieb :-) ihr habt mir viel viel arbeit
erspart! danke dafür.
mfg Christoph
Mit diesem Programm von Holger Klabunde ist es möglich.
Ich habs einfach mal hochgeladen, ich hoffe in seinem Sinne...
Schwirrt hier auch irgendwo anders noch herum.
Funzt super..
Kann mir jemand sagen ob entweder das Display von Farnell mit der
Bestellnummer:
Bestellnummer: 1220443
Display: MG1206B-SYL
Controller: S6B0108A
bzw:
Bestellnummer: 9449469
Display: MG12064E3-SBLW
Controller: S6B0107B
mit der Library compatibel sind...?
Ich denke mal ja, nachdem der Samsung controller KS0107/KS0108 heißt und
die controller auf diesen Displays S6B 0107 bzw S6B 0108 heißen...
Im inet ist ja zu lesen dass der KS0107/KS0108 ein weit verbreiteter LCD
Controller sein soll, ich habe aber bisher noch kein Display gefunden wo
dieser dezidiert dabei steht...
lg
Ich hoffe mir kann einer von euch helfen.
ich versuche seit geraumer zeit bitmaps auzugeben.
mit dem Bitmap von der Sanduhr klappt auch alles
nur leider nicht mit eigenen habe schon Image2glcd, bmp2glcd und bmp2ks
versucht
hat es einer von euch schon hinbekommen
Servus liebe Leute,
ich hätte mal eine Frage an Euch, werte KS0108-Display-Benutzer:
Ich verwende das tolle Display von Mikroelektronika mit Touch in
Verbindung mit einem Microchip PIC24FJ128.... So weit so gut, Bilder
lassen sich damit schon malen....
ABER:
Kann es sein, dass das Timing im Datenblatt von hinten bis vorne nicht
stimmt?
Besonders das Busy-Flag scheint manchmal ewig zu dauern.
Das Display wird mit richtig "Dampf" angefahren, nur das Busy-Flag
dauert manchmal ewig.
Hat jemand Erfahrungen mit 3V3-Pegeln auf den Datenleitungen anstatt 5V?
Es scheint auch so zu sein, das die Reset-Leitung des Displays extrem
"kräzig" reagiert. Nur ein (zugegebenermaßen auf den ersten Blick völlig
sinnloser) Kondensator von 47nF zwichen Reset und GND (oder Vee) macht,
dass Display einigermaßen stabil läuft.
Hallo zusammen
Ich hab ein kleines Problem und zwar kriege ich das Programm nicht auf
dem mega16 zum laufen...
Also Prozessor Typ und FCPU (8 MHz) habe ich angepasst in AVR-Studio...
Jetzt muss ich noch die MCU spezifischen Pins anpassen und ggf. weitere
Einstellungen.
Ich habe aber nicht so viel Routine mit solchen Einstellungen und wollte
hier mal um eure Hilfe diesbezüglich bitten.
Also die einstellungen habe ich gefunden in der mylcd.h nur was muss ich
jetzt genau verändern ?
GLCD MCU Pin
-------------------
D0-7 D0-7 14-21
CD A3 37
RW A4 36
EN A5 35
CS1 A2 38
CS2 A1 39
Rst. VCC --
Der Reset Pin war in der vorherigen Beschaltung am parallel Port vom PC
auf VCC gelegt muss der für den MCU auf einen Pin gelegt werden ?
1
2
3
// Ports
4
#define LCD_CMD_PORT PORTA // Command Output Register
5
#define LCD_CMD_DDR DDRA // Data Direction Register for Command Port
6
7
#define LCD_DATA_PIN PINC // Data Input Register
8
#define LCD_DATA_PORT PORTC // Data Output Register
9
#define LCD_DATA_DDR DDRC // Data Direction Register for Data Port
10
11
// Command Port Bits
12
#define CD 0x07 // Data/Control (RS) PinNumber
13
#define RW 0x06 // R/W PinNumber
14
#define EN 0x02 // EN PinNumber
15
#define CS1 0x05 // CS1 PinNumber
16
#define CS2 0x04 // CS2 PinNumber
17
//#define LCD_NO_RES // uncomment this line if you have an pullup on reset
18
19
#ifndef LCD_NO_RES
20
#define RES 0x03 // Reset Pin
21
#endif
Sind das alle Einstellungen die ich ändern muss oder muss ich wo anders
noch was ändern ?
Das wäre klasse wenn ihr mir ein bischen unter die Arme greifen könntet.
Gruß Alex
> #define LCD_DATA_PORT PORTC // Data Output Register>Sind das alle Einstellungen die ich ändern muss oder muss ich wo anders>noch was ändern ?
Schalte die JTAG Fuse aus.
Hey danke für die Antwort
Wie mache ich das genau ? hab schon im tut nach JTAG gesucht und im
AVR-Studio nichts finden können.
Muss ich die Bits für die Ausgänge anpassen und wenn wie ?
Ich hab schon ins Datenblatt vom Atmega16 geschaut aber nichts
hilfreiches finden können bzw. wo muss ich nach schauen um die richtigen
werte für die Bits zu finden ?
Das mit dem Reset Pin hat sich erledigt den kann man ja abschalten in
der Config.
Gruß Alex
Also !
JTAG ist aus
Low fuse 0x3F
High fuse 0xC9
Habe die Pis mit PA0 - PA5 zugewiesen
an Port C sind die datenleitungen
Frequenz ist auf 8 MHz eingestellt am ext. Oszilator
Prozessor ist Richtig eingestellt ATmega16
Keine Fehler Warnungen beim Compilen
Brennen Klappt wunderbar
Trotzdem ist mein Display Leer
Hab ich noch etwas vergessen ?
Gruß Alex
So es läuft :D simpler schaltungsfehler aufem steckbrett hatte sich ne
brücke 5V -> D7 versteckt brücke raus und siehe da es funktioniert
Danke Für die software und dieses tolle Forum
Gruß Alex
Hallo ihr
Ich spiele schon seit einiger Zeit mit der Lib von ape rum. An sich
funktioniert auch alles und ich habe die Funktionen, die ich brauche.
Doch jetzt habe ich eine andere Schriftart mit dem FontCreator2
gebastelst, aber komischerweise funktioniert die nicht...ebensowenig wie
die mega-Schriftart aus dem Beispiel.
Im Anhang ist ein CharTable, den ich sehr gerne 3-fach vergroessert
haben moechte.
Die Ausgabe als txt ist auch angehaengt.
Koennte vielleicht jemand mal testen, obs nur bei mir nicht geht?
Oder vielleicht seht ihr ja einen groben Fehler meinerseits.
MfG stgtroman
Ok nochmal ich.
Ich hab inzwischen herausgefunden was los ist/war. Der FontCreator2
macht einen Vorzeichenfehler bei der Hoehe (zumindest unter Win7 x64).
Und die mega-Schriftart hat natuerlich auch funktioniert. Hatte wohl
etwas geaendert.
Hallo, nutze gerade die "mylcd" routine...
Leider zeigt das Display nichts an. (Ein mal zufällig linke seite stück
vom "Ladebalken")
Hardware fehler schließe ich aus, da ich noch eine Bascom erzeugte HEX
liegen hab, die Funktioniert einwandfrei.
Pinbelegung kenne ich mitlerweile nach dem ganzen Kontrollieren
auswendig :(
Kontroller KS0108 Display 128x64
Evtl jemand eine Idee? Bin für jede Hilfe dankbar...
MFG
Ich nochmal...
Was merkwürdig ist, wenn ich nach dem flashen kurz warte, dann im Source
CD & RW Pin tausche und neu flashe, wird mir ein teil von Daniel
Steiner´s "Bild 3" (siehe oben) angezeigt. Aber auch nur so lang ich die
Spannungsversorgung nicht trenne, denke also es wird aus dem Display-Ram
angezeigt. Aber der Enable-Pin bleibt dann auf "High" (LED
angeschlossen).
Echt merkwürdig...
Bitte um Hilfe
So, ich nochmal.
Fehler hab ich zwar noch nicht gefunden, aber mit einem anderen Display
läufts nun auch. Kann eig. nur ein timing Problem sein, da beide
Display´s mit der Bascom HEX funktionieren...
MFG
Nabend
Ich wollte soeben mal auf Grundlage dieser lib mein Display ans Laufen
bekommen mit AvrStudio.
Bisher habe ich es nur in Bascom laufen gehabt, geht auch soweit bis auf
die Tatsache das der rechte Teil des Bildes um eine Zeile (Pixel nicht
Schrift) nach unten verschoben ist was natürlich unschön ist grade in
einer Menustruktur mit invertierten Einträgen. Falls dazu jemand eine
Lösung hat, nur her damit. Ich habe schon seit 2 Tagen Google befragt
aber eine Lösung habe ich nicht gefunden.
Display: RG12846B-BIW-V (KS0108 Controller)
µC: Mega32 @ 16MHz, Verbindungen sind ca 8cm lang und gelötet, nicht
gesteckt. Der Fehler bleibt auch konstant bei einem Pixel also sollte
eine Störung der Leitung nicht das Problem sein.
Ich habe gehofft das dieser Fehler an Bascom liegt und ich ihn mit
Wechsel auf C loswerden kann. Mein Problem, da ich mit AvrStudio vorher
nicht wirklich was gemacht habe (ausser meine µC zu flashen), ich habe
die Lib in ein neues Projekt gepackt, die includes geprüft und wollte
compilieren. Dies gab dann 46 Fehler. Er findet die Includes, aber er
kennt nicht eine der darin enthaltenen Funktionen, finde ich merkwürdig.
Ich habe schon mit dem alten Borland C Compiler gearbeitet, da musste
man eine Reihenfolge einhalten damit der Compiler Funktionen erkennt,
aber hier stehen diese doch auch ganz oben in den Includes, warum also
bei jedem Aufruf ein "undefined reference to XXXXX"? In diesem Punkt
weis ich nicht weiter, die Funktion ist in den Includes deklariert, also
sollte er sie kennen.
m32 schrieb:> aber hier stehen diese doch auch ganz oben in den Includes, warum also> bei jedem Aufruf ein "undefined reference to XXXXX"? In diesem Punkt> weis ich nicht weiter, die Funktion ist in den Includes deklariert, also> sollte er sie kennen.
Nö. Er kennt genau das, was in den include-Dateien drinnsteht. Das sind
nur die Funktionsdeklarationen. Die eigentlichen Funktionen dazu stecken
in den anderen Dateien, und die muss der linker dazulinken, was er
offensichtlich nicht tut.
Du musst schon alle .c-Dateien aus mylcd.zip in den Source-Ordner des
Studios (oben links) hinzufügen.
Oliver
Oliver schrieb:> Du musst schon alle .c-Dateien aus mylcd.zip in den Source-Ordner des> Studios (oben links) hinzufügen.
Habe ich, er findet sie auch alle (zumindest kommt keine Fehler er würde
die Datei nicht finden) aber kann mit den Funktionsnamen nichts
anfangen. Darum bin ich mal auf CodeBlocks umgestiegen das kenne ich vom
C Programmieren aus der FH, dort funktioniert das Compilieren gleich auf
Anhieb, nur leider gibt das Display keine Mucken von sich. Und ja, ich
habe die Pins richtig eingestellt und auch andere Dinge wie
Controllertyp, Quarz etc.
Woran könnte es denn liegen das die rechte Seite des Display bei
Bascomnutzung um einen Pixel nach unten verschoben ist? Das sieht echt
nicht schön aus (siehe Anhang). Wie schon gesagt, die Zuleitungen sind
ca 8cm lang und bestehen aus altem Festplattenflachbandkabel.
Datenport ist B, ISP abgezogen
Controllerport ist D2-D7
Display, RG12864B-BIW-V (KS0108 Controller)
Ich habe Google schon befragt, aber wirklich was hilfreiches habe ich
nicht gefunden. Ich habe hier im Forum einen Beitrag gefunden wo dieses
Problem schonmal auftrat und durch höhere Delayzeiten beseitigt wurde,
aber da ich die in den libs enthaltene Sprache bisher nie benutzt habe
wollte ich da nicht drin herumpfuschen.
Nach einem timing-Problem sieht das zar eher nicht aus, aber man soll
nie nie sagen.
Im Code findest du einige Aufrufe der Funktion _delay_us.
Das steht dann
1
delay_us(1);
oder
1
delay_us(2);
Änder die mal alle in
1
delay_us(20);
und schau, was dann passiert. Wenn es damit geht, kannst du dich
schrittweise an einen kleineren Wert herantasten.
Oliver
Sehr komisch... Ich habe eine neue Oberfläche gemacht die das Display
ausserhalb des Menüs anzeigen soll, und nun ist da nichts mehr
verschoben. Ich kann Text und Linien reinpacken wie ich will, alles
passt.
Durch schrittweises verkleinern meines Programms konnte ich das Problem
eingrenzen und auch finden. Ich habe den Befehl Lcdat falsch benutzt.
Ich bin auf diesen Befehl in einem Beispielprogramm gestoßen und wusste
nichts von dieser Einschränkung.
Lcdat y,x, string,inv
Gibt eine Variable an der Stelle aus, ich hatte bei X = 0 angefangen,
aber es musste X = 1 sein, und nun ist auch nichts mehr verschoben.
Interessante Auswirkung eines vom Compiler geschluckten Fehlers..
Hi,
vielleicht kann mir hier jemand helfen.
Wenn ich mit der LIB Zahlen oder auch text ausgebe der sich ändert
löscht es die alten Pixel nicht. Hat vielleicht schon jemand eine Lösung
dafür oder einen Lösungsvorschlag.
Das Hab ich versucht bekomms aber irgendwie nicht richtig hin hier mal
die Funktion vielleicht hast du einen Vorschlag wie man es am besten
macht:
void lcd_putc(uint8_t* font,uint8_t chr)
{
uint8_t x,page,bit,data,cnt=0;
if (font_char_present(font,chr)==1) // print only if letter is
present in font
{
if ( ( (cursor_x + font_char_width(font,chr)) <128) &&
((cursor_y+font_char_height(font))<=64)) // only print leeter if it
fits in screen
{
uint16_t offset= font_start_offset(font,chr); // get the position
of the first byte in font-array
for(page=0;page<=(font_char_height(font)-1)/8;page++) // write
all pages(rows)
{
lcd_write_cmd(LCD_SET_PAGE|((cursor_y/8)+page),CHIP1|CHIP2); //
calc the current page
if (cursor_x<64) // set cursor to its poition (0 on the
inactive controller so it can start directly on chip change)
{
lcd_write_cmd(LCD_SET_ADD|cursor_x,CHIP1);
lcd_write_cmd(LCD_SET_ADD|0,CHIP2);
}
else
{
lcd_write_cmd(LCD_SET_ADD|(cursor_x-64),CHIP2);
}
for (x=cursor_x;x<cursor_x + font_char_width(font,chr);x++)
//fill "pages"
{
data= pgm_read_byte(font+offset+cnt++);
if ( page==font_char_height(font)/8)
data>>=8-(font_char_height(font)%8); // if char height is
bigger than 8 we have to remove some leading zeros
#ifdef FASTTEXT // this is much much faster
than using set_pixel (see discription in header file)
if (cursor_y%8==0 )
{
if (x<64)
lcd_write_data(data,CHIP1);
else
lcd_write_data(data,CHIP2);
}
else
#endif
{
for(bit=0;bit<8;bit++)
{
if ((data&(1<<bit))!=0)
lcd_set_pixel(x,cursor_y+page*8+bit,BLACK);
}
}
}
#ifdef FASTTEXT
if(cursor_y%8==0)
{
if (x<64)
lcd_write_data(0,CHIP1);
else
lcd_write_data(0,CHIP2);
}
#endif
}
cursor_x += font_char_width(font,chr)+1;
}
}
}
ich hab es mal so versucht
if ((data&(1<<bit))==0)
lcd_set_pixel(x,cursor_y+page*8+bit,WHITE);
else
lcd_set_pixel(x,cursor_y+page*8+bit,BLACK);
hat aber das Problem wenn die 1 nach einer anderen Zahl kommt bleiben
wieder Pixel stehen auch bei verschiedenen Buchstaben.
Hallo Master Andre,
ich habe ein 128x64 Display und bekomme da auch Zeichen ausgegeben mit
der LIB von Ape.
Ich möchte jedoch deine Lib verwenden, da ich diese Strukturierter finde
und auch BMP ausgeben kann. ... probiere da jetzt schon paar Std. dran
aber bekomme kein Zeichen auf dem Display ausgegeben.... woran kann das
liegen ?
Ports & DDR ist wie bei der LIB von Ape eigestellt, kann also nicht
daran liegen.
Ich habe soweit nichts an der Lib verändert außer die Porteinstellungen.
Hast du noch eine Idee was ich ausprobieren kann ?
Habe einen Beitrag gefunden wo das selbe Problem aufgetreten ist, leider
ohne Ergebnisse bei der Fehlersuche
Beitrag "KS0108 GLCD lib von master.andre funzt nicht"
P.S verwende einen Atmel AT90CAN128
Hallo @ all,
ich benutze den oben genannten GLCD Treiber für ein Display mit dem
Treiberbaustein PT6608. Ich habe mir das gleiche Display nochmal
bestellt, auf diesem befindet sich jedoch der Treiberbaustein SBN0064G.
Diese sind soweit auch baugleich, am Telefon wurde mir jedoch gesagt das
der SBN0064G "schneller" reagiert.
Beide Display sollten eigentlich mit dem gleichen Quellcod laufen,
jedoch ist beim SBN0064G (währende des Start vorgangs) die rechte/linke
Seite verschoben und 2 sek. später verschwindet der Text auf der Rechten
Seite komplett.
Weiterhin wurde mir am Telefon gesagt, das ich etwas an den Timings
ändern soll, jedoch weiß ich nicht wo und wie!
Hat jemand eine Idee wo man da auf Fehlersuche gehen könnte?
P.S Ein defekt bei dem SBN0064G Display ist auszuschließen, da ich drei
Stück von denen hier habe und alle gleich reagieren... nur das mit dem
Treiber PT6608 läuft problemlos, dieses wird aber nicht mehr produziert,
da der Hersteller pleite ist :-(
Hallo Allerseits,
jetzt noch mal ein zweiter Versuch. Irgendwie ist beim ersten Beitrag
was schief gelaufen und ich hab ihn wieder gelöscht...
Ich benutze die eingangs angebotene Bibliothek für dieses Display:
http://www.sure-electronics.net/mcu,display/DE-LM106.pdf
Controller ist ein ATMEGA32 (mit 8 MHz intern). Beides habe ich im
Projekt (AVR-Studio) eingestellt und die Pins habe ich auch angepasst.
Die Ausgabe ist prinzipiell zu erkennen, aber es ist nicht i.O. (siehe
angehängtes Bild) Die "clearscreen"-Funktion löscht irgendwie nicht das
gesamte Display. Die vier einzelnen Striche und die zwei großen Bereiche
werden danach immer noch dargestellt.
Hat jemand einen Tipp für mich woran es liegen kann? Timingproblem?
Grüße
Ich denke mein Schaltplan dürfte soweit stimmen....
Auf der suche nach Kurzschlüssen konnte ich sobald JP3 und JP4
eingesteckt sind zwischen Reset und GND einen ständig zunehmenden
Widerstand messen. Auch ohne Strom und eingebautem Atmega...
1
// Ports
2
#define LCD_CMD_PORT PORTA // Command Output Register
3
#define LCD_CMD_DDR DDRA // Data Direction Register for Command Port
4
5
#define LCD_DATA_PIN PINC // Data Input Register
6
#define LCD_DATA_PORT PORTC // Data Output Register
7
#define LCD_DATA_DDR DDRC // Data Direction Register for Data Port
8
9
// Command Port Bits
10
#define CD PA0 // Data/Control (RS) PinNumber
11
#define RW PA1 // R/W PinNumber
12
#define EN PA2 // EN PinNumber
13
#define CS1 PA3 // CS1 PinNumber
14
#define CS2 PA4 // CS2 PinNumber
15
#define LCD_NO_RES // uncomment this line if you have an pullup on reset
Für alle bei denen es nicht klappt: JTAG fuse überprüfen wie bereits in
einem Beitrag erwähnt hat mich bestimmt nun 2 Stunden gekostet. Vielen
Dank für die Library !
Hallo,
Danke erstmal für diese Routine. Habe bis jetzt mit der von ape
gearbeitet aber bei dieser sind manche Funktionen einfacher.
Zu meinem Problem:
Wenn ich mit einer großen Font auf das Display schreibe dann beginnt das
Display zu flackern.
Die erste Zeile flackert weniger als z.b: die dritte Zeile.
An was kann das liegen?
Habe ein Arduino Board mit mega2560 (16MHz)
Bester Dank im Voraus für eure Antworten.
mfg max
Markus O. schrieb:> Wenn ich mit einer großen Font auf das Display schreibe dann beginnt das> Display zu flackern.
Edit: Es ist nicht nur bei einer großen Font sondern auch bei einer
kleinen.
Hatte das selbe Problem schon bei der Routine von ape aber auch dort
leider noch keine Lösung gefunden.
Danke
lcd_draw_line(x, y+radius, x,height-radius,color); // left
33
lcd_draw_line(x+width, y+radius, x+width,height-radius,color); // right
34
}
Desweiteren habe ich die Funktion invertieren noch erweitert.
Nun kann ein bestimmter Bereich angegeben werden.
Allerdings werden immer 8 Bits gelesen und geschrieben worüber mir
hierbei ein "Zeilenweises" Lesen und Schreiben lieber wäre da man damit
nicht nur 8 Zeilen zur Verfügung hätte, sondern in dieser Hinsicht auch
noch flexibler wäre. Wenn also jemand weiß wies besser geht bitte
bescheid sagen.
Hallo,
ich habe mich jetzt nur angemeldet, weil ich mithilfe dieser Bibliothek
das Pollin Display zum laufen gebracht habe und mich eingfach beim
Urheber bedanken möchte.
Ich bin noch recht neu in dem Bereich und der Fakt das ich ein
Grafisches LCD Display ansteuern kann haut mich richtig um.
Ich freue mich einfach sehr darüber.
Dankeschön :D
-------------------------------
Ich habe aber eine Anmerkung. Ich nutze das AVR Studio 4 und beim
compilieren (oder wie man das nennt) der Dateien im ersten Post, gibt
mir mein AVR Studio fehermeldungen und ich musste einige "static" in
"const" umschreiben.
Das wird hier aber von niemanden angesprochen.
Desweiteren bekomme ich unzählige warnungen: "../glcd.c:29:2: warning:
passing argument 1 of 'lcd_puts_p' discards 'const' qualifier from
pointer target type [enabled by default]
"
Liegt das eventuell an dem alten AVR Studio? Das Display funktioniert
aber trotz der Warnungen einwandfrei.
mfg mario
Hallo zusammen. Ich suche auch nach einer neuen lib und finde diese vom
code und vom Aufbau sehr interessant.
aber wie umgehe ich diese fehlermeldung.?
variable 'img' must be const in order to be put into read-only section
by means of '__attribute__((progmem))'
Danke euch. schönen Sonntag noch
Hallo,
habe die Funktionen + Font-Generator verwendet und es läuft alles wie
gewollten.
Nun stehe ich vor der Frage, wie kann ich Werte, welche ich auf dem
Display anzeigen möchte und die sich während der Laufzeit ändert so
aktuallisieren, dass nicht einzelne Pixel/Fragmente von dem vorrigen
Wert/Zeichen noch übrig bleiben.
- vor jeden neuer Darstellung immer clear_lcd(); aufrufen
- immer einen "weißen" Kasten über den Bereich legen, der erneuert
werden soll?
- vor dem erneuert der Werte, die alten mit "weißer" chrift
überschreiben?
Alle Varianten habe ich ausprobiert, doch immer ist der Aufbau des
Displays sehr sichbar und damit störend.
Noch eine Idee, eine Schriftart zu verwenden, bei der alle
Zeichen+Zahlen immer die gleiche Größe haben. Habe ich versucht zu
verwenden, jedoch zerschießt der Font-Generator diese Eigenschaft. Hat
jemand so eine Font für die LCD Funktionen mit diese Eigenschaften?
Hat noch jemand eine Idee, oder wird das dann mit höherer Taktrate
(Quarz) besser?
Ich verwende eine ATmege324pa mit internen 8MHz (will aber auch
14,7456MHz) umsteigen.
Danke für eine Antowrt
Moin,
hab jetzt doch noch eine Möglichkeit gefunden, Text einfach mit neuem
Text zu überschreiben, ohne ihn vorher löschen zu müssen.
Hierzu muss lediglich 2 Zeile in der mylcd.c ergänzt werden:
//Zeile 513
for (bit=0;bit<8;bit++)
{
if ((data&(1<<bit))!=0)
lcd_set_pixel(x,cursor_y+page*8+bit,BLACK);
else lcd_set_pixel(x,cursor_y+page*8+bit,WHITE);
}
Grüße Henning
Moin zusammen,
kann mir mal einer sagen wie man eine Variable anzeigen lässt????
sprintf funzt nicht richtig, itoa auch nicht. Nur das Beispiel mit den
4stelligen Zahlen aus dem anderen Beitrag funktioniert.
Da habe ich aber vorangestellte Nullen und auch keine Kommazahlen!
ich verzweifel hier :(
Hallo Zusammen
Also erstmal herzlichen dank für diese Bibliothek, habe heute mein
erstes glcd in betrieb genommen und hat auf anhieb funktioniert.
Wirklich eine tolle sache.
Da ich mich auch etwas tiefer für dieses thema interessiere habe ich
noch ein paar fragen dazu:
1. Sehe ich das richtig, dass man in dieser bibliothek zwischen 2 fonts
wählen kann, nämlich small_font und mega?
Was sind das genau für daten welche in den entsprechenden files
small_font.h und mega.h stehen? Da gibts jede menge hex zahlen und ich
verstehe nicht was für information da drin steckt.
2. Generell ist für mich die small_font zu klein und die mega font zu
gross. Gibt es eine einfache möglichkeit die grösse zu ändern oder muss
ich irgendwie eine eigene font "designen"? Wenn ja, wie mach ich das und
auf was muss ich achten? Kenne mich damit überhaupt nicht aus. Hab in
diesem thread auch schon vom fontgenerator von ape gelesen, aber seine
seite ist irgendwie down?
das wärs erstmal, kommt aber sicher noch die einte oder andere frage ;)
besten dank nochmal
tom
Moin,
So, nachdem das ganze Projekt, welches auf einem USB Stick war,
geschrottet wurde, musste ich alles nochmal neu machen :(
Vorab gibt es ein paar neue Fotos und ein paar Routinen für das Display.
Das weiß/blaue GLCD habe ich mit einer Polarisitionfolie neu gestaltet.
Zu den Displayroutinen:
Funktionen sind als Kommentar hinterlegt. Für die Spieleprogrammierung
habe ich hier unter anderen Sprite Funktionen mit hinzugefügt.
Dominik schrieb:> So, nachdem das ganze Projekt, welches auf einem USB Stick war,> geschrottet wurde, musste ich alles nochmal neu machen :(
Schon mal über einen SVN-Server auf einem eigenen Webspace nachgedacht?
Jein,
es gibt ja zahlreiche Backup- und Speichermöglichkeiten. Die Frage ist
ob man sowas auch konsequent nutzt! :)
Ich bin da eher aus der C64 Fraktion: 2000 zeilen Code abgetippt und
dann fällt der Strom aus! 2 tage geflucht und sich vorgenommen öfter zu
speichern und zu archivieren. Dennoch nicht daraus gelernt! :)