Hallo Leute, hat jemand von euch in letzter Zeit mal die KS0108 GLCD lib von ape hier aus dem Wiki benutzt? http://www.mikrocontroller.net/articles/KS0108_Library WinAVR-20100110 und das AVR Studio5 kommen damit nicht klar. Ich habe das Problem bis zu den inline Funktionen ks0108ReadData und ks0108Enable zurück verfolgt. Fehlermeldung lautet: function is declared but not defined Ich habe versucht das Handling von inline Funktionen zu verstehen und einiges gefunden. Aber das war gestern um 3:35Uhr und deswegen habe ich die Materie nicht wirklich durchdrungen. ;) Bevor ich da jetzt noch lange rum mache vielleicht hat ja jemand einen heißen Tip für mich. Gruß Cabal
> Ich habe das Problem bis zu den inline Funktionen ks0108ReadData und > ks0108Enable zurück verfolgt. Fehlermeldung lautet: function is declared > but not defined Das ist nur eine Warnung (warning) und nicht für den Fehler (error) beim make verantwortlich. Durchsuche die Ausgabe deines make-Laufs mal nach error Meldungen. Bei mir gibt es zwei Errormeldungen; ich habe allerdings aus eine andere Toolchain:
1 | In file included from ks0108Test.c:16:0: |
2 | arial_bold_14.h:48:16: error: variable 'Arial_Bold_14' must be const in order to be put into read-only section by means of '__attribute__((progmem))' |
3 | In file included from ks0108Test.c:17:0: |
4 | corsiva_12.h:48:16: error: variable 'Corsiva_12' must be const in order to be put into read-only section by means of '__attribute__((progmem))' |
5 | ks0108Test.c: In function 'main': |
6 | ks0108Test.c:28:2: warning: pointer targets in passing argument 1 of 'ks0108SelectFont' differ in signedness [-Wpointer-sign] |
7 | In file included from ks0108Test.c:15:0: |
8 | ks0108.h:86:6: note: expected 'const char *' but argument is of type 'uint8_t *' |
9 | ks0108Test.c:38:2: warning: pointer targets in passing argument 1 of 'ks0108SelectFont' differ in signedness [-Wpointer-sign] |
10 | In file included from ks0108Test.c:15:0: |
11 | ks0108.h:86:6: note: expected 'const char *' but argument is of type 'uint8_t *' |
12 | ks0108Test.c: At top level: |
13 | ks0108.h:97:16: warning: inline function 'ks0108ReadData' declared but never defined [enabled by default] |
14 | ks0108.h:97:16: warning: inline function 'ks0108ReadData' declared but never defined [enabled by default] |
15 | make: *** [ks0108Test.o] Error 1 |
Anbei mal der output vom build mit dem AVR Studio. Ich hatte mich auf die inline Funktionen eingeschossen, weil das mit so das Erste ist was er anmeckert. Irgendwie schien mir der Rest dann ein Ergebniss dieser 'declared but never defined' Meldungen zu sein. Im WinAVR sieht das Ganze heute auf einmal ganz anders aus da bekomme ich 'nur' 5 warnings er läuft aber durch und spuckt sogar ein .hex file aus.
1 | s0108Test.c: In function 'main': |
2 | ks0108Test.c:28: warning: pointer targets in passing argument 1 of 'ks0108SelectFont' differ in signedness |
3 | ks0108Test.c:38: warning: pointer targets in passing argument 1 of 'ks0108SelectFont' differ in signedness |
4 | ks0108Test.c: At top level: |
5 | ks0108.h:97: warning: inline function 'ks0108ReadData' declared but never defined |
6 | ks0108.h:97: warning: inline function 'ks0108ReadData' declared but never defined |
7 | |
8 | Compiling: ks0108.c |
9 | avr-gcc -c -mmcu=atmega32 -I. -gstabs -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=ks0108.lst -std=gnu99 -Wp,-M,-MP,-MT,ks0108.o,-MF,.dep/ks0108.o.d ks0108.c -o ks0108.o |
10 | ks0108.c: In function 'ks0108SelectFont': |
11 | ks0108.c:300: warning: pointer targets in assignment differ in signedness |
Das Display bleibt aber trotzdem leer :( Die gleiche Hardware läuft mit Version V0.5 der apetech lib tadellos. Gruß Cabal
Anbei eine Fassung, die unter AVRStudio 5.1 mit der darin enthaltenen GNU-Toolchain "3.3.1.27" keine Warnungen/Fehler beim "build" ausgibt. Zum echten Test leider gerade keine Hardware zur Hand, Simulator bleibt allerdings nicht hängen. Bei Problemem mit der Hardware evtl. die Wartezeiten etwas verlängern (inline assembler NOPs und die "volatile for delay loops").
Hmm ich bekomme beim Build Solution "undefined reference to `ks0108Enable'" in der ks0108.c in Zeile 528, 571, 585 und 592. Wenn ich in der ks0108.c in Zeile 456 aus
1 | inline void ks0108Enable(void) { |
ein
1 | static inline void ks0108Enable(void) { |
mache lässt es sich zwar bauen aber das Display bleibt immer noch leer. Hatte erst mit AVR Studio5.0 probiert aber auch mit der 5.1 gleiches Verhalten. Dabei ist mir gleich nochwas aufgefallen. Wieso steht im Wiki als Stolperfalle:
1 | Diese Library verwendet nicht den RW-Pin des Displays. Mann muss also selber entweder per Hardware oder Software dafür sorgen, dass dieser auf HIGH gesetzt wird. |
Im Header File wird der RW Pin aber definiert und in den Funktionen auch benutzt?
So ich habe jetzt die angepasste Version von mthomas nochmal frisch ins AVR Studio geladen. Jetzt läuft das Build ohne Änderungen sauber durch. Aber das Display bleibt leer. Mit einer frühreren Version der gleichen lib funktioniert es. Da habe ich aber das Problem, dass ich in der Mitte des Displays keine senkrechte Linie zeichnen kann. Ich habe versucht zwischen beiden Versionen einen Unterschied zu finden aber die Funktionen für die Hardwareinitialisierung sind identisch. Die Portdefinitionen habe ich auch tausendmal kontrolliert. Delays verlängert und zusätzliche nops eingefügt, den AVR mal auf 1MHz runtergetaktet das hat alles nix gebracht. Das besagte Display ist ein Powertip PG-12864A. Ich hänge mal den funktionierenden Code mit an. Vielleicht sieht von euch jemand warum das mit der aktuellen Version nicht funktioniert. Gruß Cabal
Die Version ks0108_12_untested.zip (14,3 KB, 2 Downloads) hat sehr verschiedene Port und Pinzuordnungen. Ob du alle Anpassungen richtig gemacht hast, kann man nicht kontrollieren, weil deine angepasste Version und der Schaltplan fehlt. In deiner lauffähigen Version ist in der ks0108Init() diese zusätzliche Zeile drin: LCD_CMD_PORT |= (1<<PC2); Die Zeile passt nicht zum Schema der freien Pinzuordnung in der Headerdatei; PC2 ist dort auch nicht beschrieben. Möglicherweise wurde die später eingefügt. Man müsste mal im Schaltplan nachsehen, was an PC2 hängt... vielleicht ist das die von dir angesprochene /RESET Leitung des GLCD?
Danke! Du hast Recht vom atmega32 geht PC2(Pin24) zum Display RST(Pin17). So lag der natürlich auf Masse und dann kann sich auch nichts rühren. Ich habe im Header File jetzt ein #define für RST angelegt. Damit sollte ich das in Zukunft nicht mehr vergessen können.
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.