PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit LCD



Spyder24
24.04.2007, 21:32
Hallo,

ich versuche schon seit einiger Zeit ein LCD anzusteuern. Es kommt folgender Fehler bei der dem Versuch das Programm zu compilieren:

Linking: main.elf
avr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d main.o lcd.h --output main.elf -Wl,-Map=main.map,--cref -lm
main.o: In function `main':
main.c:15: undefined reference to `lcd_init'
main.c:22: undefined reference to `lcd_clrscr'
main.c:25: undefined reference to `lcd_puts'
main.c:28: undefined reference to `lcd_puts'
main.c:31: undefined reference to `lcd_gotoxy'
main.c:34: undefined reference to `lcd_putc'
make.exe: *** [main.elf] Error 1

Klingt fast so, als ob das Hauptprogramm die Routinen nicht findet
Außerdem zeigt das LCD nur die oberste Zeile mit schwarzen Kästchen an. Warum da zweite nicht?

Gruß Stefan

robo junior
24.04.2007, 22:28
ich nehme mal an du benutzt die Peter Fleury lib?
Hast du die beiden Dateien richtig eingebunden? entweder im Makefile oder direkt in main.c
Ich binde sie immer direkt im main-file ein:
#include <lcd.h>
#include <lcd.c>

Wie das mit dem Makefile funktioniert kannst du dir in der Testdatei anschauen, die bei der lib dabei war.

T.J.
25.04.2007, 10:14
LCD's mit hd44780 zeigen bei anlegen der Betriebsspannung immer die ERSTE Zeile mit kästchen an. Da im controller standard 1-Zeilen-Betrieb ist. Du musst es halt erst initialisieren.
Dass es die schwarzen balken anzeigt ist ein gutes Zeichen für die Funktionalität deines LCD ;-)

izaseba
25.04.2007, 18:31
#include <lcd.c>

Man included keine *.c Dateien

robo junior
25.04.2007, 18:35
@izaseba warum nicht?
macht das irgend einen Unterschied ob ich die Datei in meinem Hauptfile include oder ob ich sie ins Makefile schreibe?

izaseba
25.04.2007, 19:19
Warum ?
1. Weil hier auch mal Leute mitlesen, die eventuell denken könnten, das wäre so richtig.
2. weil man nur Header includet, um dem entsprechendem Programm zu sagen, wieviel Speicher zu reservieren ist bei Funktion X oder Variablen Y. Die entsprechende *.c Datei wird später extra übersetzt(falls in Makefile angegeben) und zu dem fertigem Programm gelinkt.
3.Angenommen, Du hast Datei a.c, b.c und c.c, in c.c sind Funktionen drin, die von a.c und b.c gebraucht werden. Was passiert, wenn Du in a.c und b.c die c.c includest anstatt sie extra zu übersetzen und zu linken ?

Gruß Sebastian

robo junior
25.04.2007, 21:43
@izaseba na dann, danke für den Hinweis, werd ich dann in Zukunft nicht mehr machen ;-)

war bei mir halt nie ein Problem, weil ich nur eine Hauptdatei hatte, wo oben alle anderen Seiten included wurden.

Spyder24
26.04.2007, 22:42
Danke für eure Hilfe. Hat mich sehr weiter gebracht.