mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega8 und lcd


Autor: stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
   }
}

Autor: stev (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
das ist die von Peter Fleury.
glaub ich zumindest!
hab die mir gedownloadet

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber irgendwas is da faul ...
der meckert an den typedefs der winavr libs rum

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mache mal neues projekt

dann


#include <avr/io.h>

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


das muss der zumidnest ohne fehler compilieren

Autor: stev (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
#include <stdlib.h>
#include <avr/io.h>

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

(Ein #include ist dazugekommen)

Wenn das kompiliert, kommt als nächstes
#include <stdlib.h>
#include <avr/io.h>
#include "D:\lcd\lcd.h"

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

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

Autor: stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();"

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: stev (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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_ha...

Autor: stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja jetzt kommt:

undefined reference to `lcd_puts'

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stev schrieb:
> ja jetzt kommt:
>
> undefined reference to `lcd_puts'

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

Autor: Dieter Engelhardt (netdieter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier sieht komisch aus: #include "D:\lcd\lcd.h"

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

Autor: stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Engelhardt (netdieter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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!!!!

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
#include "SYS$SYSTEM:[user.subverzeichnis.data]lcd.h;25"

und der Präprozessor muss das akzeptieren.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.