Forum: Compiler & IDEs GLCD KS0108 und apetech lib aus dem Wiki


von Cabal2002 (Gast)


Lesenswert?

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

von Krapao (Gast)


Lesenswert?

> 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

von Cabal2002 (Gast)


Angehängte Dateien:

Lesenswert?

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

von mthomas (Gast)


Angehängte Dateien:

Lesenswert?

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").

von Cabal2002 (Gast)


Lesenswert?

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?

von Cabal2002 (Gast)


Angehängte Dateien:

Lesenswert?

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

von Krapao (Gast)


Lesenswert?

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?

von Cabal2002 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.