Forum: Mikrocontroller und Digitale Elektronik Probleme mit WinAVR-Programmierung (ATmega8)


von GrossmeisterB (Gast)


Lesenswert?

Also, habe ein myAVR-Board, und will es mit WinAVR programmieren, doch
leider ist mir nach bislang 10-maligem lesen des Tutorials noch immer
nicht klar, wie man damit jetzt was wo und wie macht...hab folgendes
gemacht (so in der Art hätte ich mir eine Beschreibung im Tutorial auch
gewünscht...)

1. WinAVR installiert
2. Programm "Mfile" gestartet
3. MCU = ATmega8 eingestellt
4. Output format = IHEX
5. Programmer = SP12
6. Port = LPT1

die restlichen Einstellungen habe ich so gelassen.

Dann habe ich mir aus dem Netz eine .c-Datei und eine .h-Datei gezogen,
diese dienen zur Ansteuerung eines Display, habe die Dateien schon auf
meine Hardware "abgeändert" (im "Original" war das Display an Port
C, bei mir ist es an Port B)....

Also, ich hab die Dateien lcd.c und lcd_tools.h, die in der lcd.c
"included" wird...

Wie mache ich jetzt weiter? Programmieren selber kann ich auch mit dem
myAVR-Workpad, aber ich brauche ja erstmal eine HEX-Datei...

Wenn ich auf "Makefile ALL" gehe im WinAVR "Programmers-Notepad",
kommt der Fehler:

"> "make.exe" all
makefile:5: *** missing separator.  Stop.

> Process Exit Code: 2
"

Au man, warum kann man es nicht ganz einfach machen, und muss über 7
verschiedene Programme gehen?!?!?!

Also, wäre für jede Hilfe dankbar!

von GrossmeisterB (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal die Dateien

von GrossmeisterB (Gast)


Angehängte Dateien:

Lesenswert?

Und die .h-Datei...

von Hannes L. (hannes)


Lesenswert?

Ich habe zwar keine Ahnung von C, glaube aber mal gelesen zu haben, dass
Programmcode in einer Headerdatei nix zu suchen hat. Dort gehören nur
Definitionen rein.

Aber dazu können dir die "großen Meister" vielleicht mehr sagen.

...

von GrossmeisterB (Gast)


Lesenswert?

Mmmmmmh...hat sich eh erledigt, Bascom funzt jetzt, also progge ich
jetzt da mit... ;-)

von Hannes L. (hannes)


Lesenswert?

Versuchs doch mal mit Assembler (AVR-Studio von www.atmel.com), damit
lernt man die Architektur der AVRs bedeutend besser kennen.

Das ist übrigens viel einfacher als Viele hier meinen. Da genügt als
Informationsquelle das Datenblatt des AVRs und das Befehlsverzeichnis
(auch bei ATMEL zu finden).

...

von GrossmeisterB (Gast)


Lesenswert?

Ja, Assembler wäre auch eine Möglichkeit, aber habe mich jetzt so
langsam an das Bascom gewöhnt...*ggg*

Gibt's da eigentlich "Listen" mit den Befehlen zur Ansteuerung des
ADCs?

von Hannes L. (hannes)


Lesenswert?

Für die Ansteuerung eines ADCs braucht man keine speziellen Befehle.

Man schaut sich im Datenblatt die I/O-Register des ADC an und setzt die
betreffenden Bits, mit dem OUT-Befehl. Mit dem IN-Befehl kann man dann
das Ergebnis der Wandlung aus den ADC-Registern auslesen.

Listen für die I/O-Register und die unterstützten ASM-Befehle enthält
das Datenblatt des AVRs. Aber darauf achten, dass das vollständige
Datenblatt benutzt wird, nicht die "Marketing-Kurzfassung".

Viel Erfolg...

...

von GrossmeisterB (Gast)


Lesenswert?

Also, Bascom läuft, das Display und der ADC auch, aber ich möchte es
trotzdem mit C/C++ versuchen, habe jetzt nochmal WinAVR installiert,
und möchte nochmal die genaue Reihenfolge geklärt haben...

Also, meiner "Meinung" nach müsste es wie folgt funktionieren:

1. Schreiben des Programmes im "Programmers Notepad", als .c-Datei
speichern
2. Aufrufen von "Mfile", einstellen aller Parameter, inklusive der
richtigen in 1. geschriebenen Datei
3. "Make All" auswählen
4. Hex-Datei auf Controller brennen

Ist diese "grobe" Reihenfolge soweit richtig?

von GrossmeisterB (Gast)


Lesenswert?

Also, habe es jetzt mal wieder mit WinAVR versucht, bin auch ein Stück
weiter, er fängt an mit

-----begin--------
bla bla bla

make.exe: ***No rule to make target 'main.o', needed by 'main.elf'.
stop.

Process Exit Code: 2



Was ist denn jetzt noch falsch?!?!

von _CH_ (Gast)


Lesenswert?

Hallo!
das hört sich ganz danach an, dass da mit dem Makefile was nicht passt.
Hast du im Makefile deine main.c eingetragen?

Gruß,
Christian

von Hermann G. (hahgeh)


Lesenswert?

Hallo,

Hast du vielleicht vergessen im Makefile TARGET = lcd anstatt dem
Standardwert TARGET = main anzugeben?

von GrossmeisterB (Gast)


Lesenswert?

Mmmmh...ich werde das nochmal genau prüfen...aber ich habe immer noch
nicht genau verstanden, welche Datei sich in welchem Verzeichnis
befinden muss...

Also, ich schreibe das Programm mit dem "Editor", speichere es als
"lcd.c" ab, die .h-Datei ist im selben Verzeichnis, dann mit Mfile
das Makefile erstellen, auch "Save As" in das gleiche Verzeichnis wo
auch schon lcd.c und die .h-Datei ist, dann im "Editor" auf Make
Clear, dann auf Make All??!!?

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Wenn Du den Code in lcd.c schreibst, und dieses dann als solches
abspeicherst, dann must Du in MFile unter Menü "Makefile" -> "Main
file name..." eintragen "lcd" anstatt "main".

MFile geht davon aus, das sich die Hauptroutine main() in einer Datei
befindet die main.c heist.

/Michael

von Gross M. (grossmeisterb)


Lesenswert?

Hallo!

Ich werde das nochmal versuchen, ich denke ich habe es soweit
"fertig", aber der Compiler haut trotzdem jede Menge Fehler raus.
Welche Include-Dateien muss ich denn wie vorher "includen"?
Also welche Dateien müssen Standardmäßig enthalten sein?

von Rolf Magnus (Gast)


Lesenswert?

> Ich werde das nochmal versuchen, ich denke ich habe es soweit
> "fertig", aber der Compiler haut trotzdem jede Menge Fehler raus.

Welche denn?

> Welche Include-Dateien muss ich denn wie vorher "includen"?
> Also welche Dateien müssen Standardmäßig enthalten sein?

"Standardmäßig" müssen gar keine enthalten sein. Du brauchst halt die
Header, die die von dir benutzen Funktionen deklarieren.

von Gross M. (grossmeisterb)


Lesenswert?

Also Standardmäßig muss keine drin sein?
Keine stdio.h oder so?!?!

Habe nur immer was von "avr/io.h" gelesen...

Mmmh...ich teste nachher direkt mal, und schreibe dann rein was für
Fehler er anzeigt.
Man könnte doch auch die Funktionen, die in der .h-Datei stehen, vor
die main-funktion setzen, und hätte ja somit das gleiche "Gebilde",
richtig?

von Rolf Magnus (Gast)


Lesenswert?

> Habe nur immer was von "avr/io.h" gelesen...

Die brauchst du halt, wenn du irgendwelche I/O-Registernamen oder
Funktionen aus diesem Header benutzt.

> Man könnte doch auch die Funktionen, die in der .h-Datei stehen,
> vor die main-funktion setzen, und hätte ja somit das gleiche
> "Gebilde", richtig?

Ja, aber Header sind ja gerade dazu da, daß man sich das sparen kann.

von Gross M. (grossmeisterb)


Lesenswert?

Ja, aber um eine "Fehlerquelle" auszuschließen werde ich das mal
versuchen...das dass der Sinn ist war mir auch klar... ;-)

Habe aber nochmal geschaut, es kommt diese Meldung/Fehler:

Compiling: main.c
avr-gcc - -mmcu=atmega8 ...

main.c8: warning: function declaration isn't a prototype
main.c:34: "         "         "          "       "
main.c:74: "         "         "          "       "
main.c:97: error: parse error before "Main"
main.c: In function 'Main':
main.c:99: warning: implicit declaration of function 'lcd_init'
main.c:101: warning:   "          "            "
'lcd_writechar'
.
.
.
.
.

make.exe*** [main.o] Error 1
Process Exit Code: 2

von Karl H. (kbuchegg)


Lesenswert?

Wie sieht denn Dein main.c aus?

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.