Forum: Mikrocontroller und Digitale Elektronik atmega8 und lcd


von stev (Gast)


Lesenswert?

sorry für den weitern fast unnötigen beitrag!
aber ich hab ein lcd modul mit dem üblichen kontroller
aber bei dem compiler (winavr) bekomm ich immer eine fehlermelung.
es geht überhaupt nicht um den anschluss am lcd sondern nur um das 
programm
sieht momentan folgendermaßen aus:

#include <stdlib.h>
#include <avr/io.h>
#include "D:\lcd\lcd.h"
int main(void)
{

    /* Initialisiere Display, Cursor aus */
    lcd_init(LCD_DISP_ON);

    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
    lcd_clrscr();

    /* String auf Display anzeigen */
    lcd_puts("Hello world.");

}
bekomm aber immer die Fehlermeldung

Compiling C: main.c
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF 
.dep/main.o.d main.c -o main.o
In file included from 
c:/winavr-20090313/lib/gcc/../../avr/include/avr/sfr_defs.h:126,
                 from 
c:/winavr-20090313/lib/gcc/../../avr/include/avr/io.h:99,
                 from main.c:2:
./inttypes.h:232: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'typedef'
In file included from 
c:/winavr-20090313/lib/gcc/../../avr/include/avr/io.h:367,
                 from main.c:2:
c:/winavr-20090313/lib/gcc/../../avr/include/avr/fuse.h:243: error: 
expected '=', ',', ';', 'asm' or '__attribute__' before 'typedef'
In file included from D:\lcd\lcd.h:41,
                 from main.c:3:
c:/winavr-20090313/lib/gcc/../../avr/include/avr/pgmspace.h:215: error: 
expected '=', ',', ';', 'asm' or '__attribute__' before 'prog_int8_t'
make.exe: *** [main.o] Error 1


was hab ich falsch gemacht??

danke für die mühe

von gast (Gast)


Lesenswert?

was ist das für eine lcdlib ..
wo is die her ...
kopiere diese einfach in dein projektverzeichniss ...
dann reicht ein #include "lcd.h"


dann macht man idealerweise

int main (void)
{
  //lcd init
  while(1)
   {
     // main loop
   }
}

von stev (Gast)


Angehängte Dateien:

Lesenswert?

das ist die von Peter Fleury.
glaub ich zumindest!
hab die mir gedownloadet

von gast (Gast)


Lesenswert?

aber irgendwas is da faul ...
der meckert an den typedefs der winavr libs rum

von gast (Gast)


Lesenswert?

mache mal neues projekt

dann


#include <avr/io.h>

int main (void)
{
 while(1)
  {
  }
  return 0;
}


das muss der zumidnest ohne fehler compilieren

von stev (Gast)


Lesenswert?

ja das klappt ohne probleme!!
aber was jetzt tun??
hab extra noch mal winavr neu instaliert mit aktuellsten version...

von Karl H. (kbuchegg)


Lesenswert?

stev schrieb:
> ja das klappt ohne probleme!!
> aber was jetzt tun??

Jetzt nimmst du dieses Testprogramm her und ergänzt es sukzessive bis du 
bei deinem ursprünglichen Testprogramm bist oder der Fehler das erste 
mal wieder auftaucht.

Dein nächstes Testprogramm ist also
1
#include <stdlib.h>
2
#include <avr/io.h>
3
4
int main (void)
5
{
6
 while(1)
7
  {
8
  }
9
  return 0;
10
}

(Ein #include ist dazugekommen)

Wenn das kompiliert, kommt als nächstes
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include "D:\lcd\lcd.h"
4
5
int main (void)
6
{
7
 while(1)
8
  {
9
  }
10
  return 0;
11
}

etc.
Fehler muss man in kleinen Schritten suchen und nicht indem man 
100-tausend Dinge auf gut Glück in einem Rutsch verändert.

von stev (Gast)


Lesenswert?

ja das klappt noch alles
aber sobald ich den ersten befehl reihole sagt der
das der den befehl nicht kennt, aber der müsste doch in
lcd.h difiniert sein oder??
z.b."lcd_clrscr();"

von Karl H. (kbuchegg)


Lesenswert?

stev schrieb:
> ja das klappt noch alles
> aber sobald ich den ersten befehl reihole sagt der
> das der den befehl nicht kennt, aber der müsste doch in
> lcd.h difiniert sein oder??
> z.b."lcd_clrscr();"

Wie lautet die genaue Fehlermeldung?

(und jetzt haben wir eine ganz andere Fehlermeldung als am Anfang)

von holger (Gast)


Lesenswert?

>aber der müsste doch in
>lcd.h difiniert sein oder??
>z.b."lcd_clrscr();"

Nö, die sind in lcd.c definiert.
Die muß man zum Projekt hinzufügen.

von stev (Gast)


Lesenswert?

und wo find ich die datei?
und wie füge ich die dann hinzu?
sorry aber kapier das grad nicht

von Karl H. (kbuchegg)


Lesenswert?

stev schrieb:
> und wo find ich die datei?

Na, wo wohl?
Auf dem Verzeichnis auf dem du die Fleury Lib entpackt hast.
Bei dir wohl  d:\lcd\lcd.c
wenn man davon ausgehen kann, dass der Pfad beim #include richtig ist.

> und wie füge ich die dann hinzu?

http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F

von stev (Gast)


Lesenswert?

ja jetzt kommt:

undefined reference to `lcd_puts'

von Karl H. (kbuchegg)


Lesenswert?

stev schrieb:
> ja jetzt kommt:
>
> undefined reference to `lcd_puts'

Füg endlich die lcd.c in dein Projekt ein.

von Dieter E. (netdieter) Benutzerseite


Lesenswert?

Das hier sieht komisch aus: #include "D:\lcd\lcd.h"

Ich glaube nicht, dass ein Laufwerksbuchstaben dort richtig 
Interpretiert wird.

von stev (Gast)


Lesenswert?

so blaub jetzt hats geklappt
ich musste doch noch genauso
#include "D:\lcd\lcd.c"
anhängen oder?
auf jedenfall diesmal ohne fehlermeldung
danke schön

von Dieter E. (netdieter) Benutzerseite


Lesenswert?

Sourcefiles werden nicht includiert!!!!!!

Die werden separat Compliliert und nur die Interfaces werden per include 
bekannt gegeben.

Und einen Laufwerksbuchstaben habe ich nochn in keinem C-Projekt 
gesehen!!!!

von Vlad T. (vlad_tepesch)


Lesenswert?

ich vermute mal, dass es weniger an dem Laufwerksbuchstaben, als viel 
mehr an den Backslashes liegt.

BtW:
Und Bibliohekspfade sollten dem compiler und nicht dem Quelltext 
mitgegen werden

von Karl H. (kbuchegg)


Lesenswert?

stev schrieb:
> so blaub jetzt hats geklappt
> ich musste doch noch genauso
> #include "D:\lcd\lcd.c"
> anhängen oder?

Nein!
Was ist bitte so schwer daran, im AVR-Studio auf 'Source Files' zu 
klicken, dann rechte Maustaste 'Add Source Files' im Menü auswählen und 
dann dem Studio dieses 1 File lcd.c zu zeigen.

von Karl H. (kbuchegg)


Lesenswert?

Dieter Engelhardt schrieb:
> Das hier sieht komisch aus: #include "D:\lcd\lcd.h"
>
> Ich glaube nicht, dass ein Laufwerksbuchstaben dort richtig
> Interpretiert wird.

Man macht es zwar nicht so, aber grundsätzlich ist das kein Problem.

von Karl H. (kbuchegg)


Lesenswert?

Vlad Tepesch schrieb:
> ich vermute mal, dass es weniger an dem Laufwerksbuchstaben, als viel
> mehr an den Backslashes liegt.

Auch das nicht.
Das hier ist die Spezifikation eines Dateinamens für den Präprozessor. 
Das hat nichts mit der Sonderstellung des Backslash in Strings zu tun.
Der kann so angegeben werden, wie er auf dem Zielsystem üblich ist. Die 
C-Spez hält sich da raus, wie der auszusehen hat. (Sonst müsste der 
C-Standard auch noch eine Definition beinhalten, wie ein Dateisystem in 
einer bestimmten Notation aussehen muss. Das würde wiederrum 
Schwierigkeiten bedeuten, wie man eine bestimmte Notation des 
tatsächlichen Systems in diese Notation überführt. Nicht alle 
Dateisysteme beruhen darauf, dass es eine einzige Root gibt, in die 
alles andere gemountet wird).
Wenn du willst, kannst du das auf einem VAX-VMS System auch in 
VMS-Notation angeben
1
#include "SYS$SYSTEM:[user.subverzeichnis.data]lcd.h;25"

und der Präprozessor muss das akzeptieren.

von gast (Gast)


Lesenswert?

am besten für ein projekt einen neuen ordner erstellen

dort rein werden alle neuen .c und .h files reinkopiert oder erstellt


wenn man die libs  woanders aufhebt und dort in einem anderen projekt 
mal was ändert .... na mahlzeit


es müsen in dem ordner dann die main.c , lcd.c und lcd.h sein


im avr studio hat man dafür das schöne AVR GCC fenster
bei source files kommen alle .c dateien rein
bei Header files alle .h

rechtsklick .. ADD  existing header file oder eben create wenn man 
selbst eine schreiben will

von stev (Gast)


Lesenswert?

danke für eure ratschläge!
wie ihr sicher bemerkt habt programmiere ich noch nicht lange in c.
hab aber schon mit assembler erfahrung und hatte gedacht ich könnte 
einfach mal wechseln.
hatte mit dem komischen programmers notepad programmiert habe dann nach 
den foreneinträgen doch zu avrstudio gewechselt!
und jetzt klappt auch das lcd.

nur noch einige fragen zu den befehlen CD_MOVE_DISP_LEFT
wie setze ich den genau ein?

oder wie sage ich dem controller, dass er 1sekunde warten soll?

das wärs dann auch schon
danke

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.