PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WinAvr



LC-HC
29.08.2005, 20:01
Hi, hab gerade angefangen den ATmega 8 mit C zu programmieren und hab mich für WinAvr entschieden, da es wohl am verbreitesten ist. Nur komm ich überhaupt nicht weiter, häng grade an der Doku und bin am verzweifeln. Kann mir vielleicht jemand in einigen kurzen schritten erklären, wie das genau abläuft ( Code mit welchem Tool compilieren, Makefiles einstellen, usw.) ?
mfg

maw_hn
30.08.2005, 13:03
Hallo LC-HC,

also als erstes solltest du mit dem MFile- Tool ein Makefile erstellen. In dem Tool klickst du oben auf Makefile. Dann kannst du alles recht komfortabel einstellen. Das fertige Makefile speicherst du dann in den Ordner, in den später auch deine C- Datei kommt.
Anschliessend gehst du ins Programmers Notepad. Darin kannst du dann dein C- Programm schreiben. Compiliert wird ebenfalls mit dem Notepad. Dazu gehst du auf "Tools", "[WinAVR] Make All". Jetzt sollten sich in dem Ordner ausser deinem C- File und dem Makefile noch ne Reihe anderer Dateien befinden (hex- Datei...). Wenn du neu compilieren willst solltest zuerst über "Tools", [WinAVR] Make clean" ausführen... Das löscht alle Dateien ausser deiner c und dem Makefile...

Viel Spaß

Marco

sep
30.08.2005, 14:10
zuallererst solltest du versuchen mit "avrdude" Kontakt zu deinem AVR aufzunehmen. Wenn das nicht klappt kannst du den ganzen Komfort von winavr-c vergessen...

Solltest du ein Standard-ISP verwenden dürfte das aber kein Problem sein. Ansonsten musst du den deinen in die Config-Datei von avrdude eintragen.

Die Doku brauchst du fast gar nicht zu lesen, es steht eh nix wichtiges drin.

Für die Makefiles gibt ein "Sample", in der Anleitung steht ein bisschen...
Aber allzuviel musst du da auch nicht machen.

Ganz vorneweg: Ein großer Bug von winavr ist, dass die delay-Funktionen nicht für beliebige Zeitdauern funktionieren (weil für zu große Zeiten Überläufe entstehen...) man aber nicht gewarnt wird, sondern den Fehler selber suchen darf.
Man kann also nicht
_delay_ms(1000); schreiben, um eine Sekunde zu warten. Je nach CPU-Takt muss man sich das ein bisschen Anpassen, bei mir geht
for(uint8_t i=0; i<20;i++) _delay_ms(50);

Und leider werden diese Timing-Funktionen auch nicht auf den Takt genau ausgetüftelt, sondern nur so ungefähr...