Atmega8-Projekt: wie Assembler-Quellcode compilieren?

Gast #3546895
Lesenswert?

Hallo,

ich möchte gerne dieses Projekt hier mit Atmega8 aufbauen:

http://www.avr-asm-tutorial.net/avr_de/rechteckgen/rectgen_m8.html

Hier der gezippte Assembler-Quellcode:

www.avr-asm-tutorial.net/avr_de/rechteckgen/rectgen_src.zip


Ist es möglich, den Quellcode mit dem AVR-Studio4 zu compilieren und 
wenn ja, wie muss man vorgehen?

Der Quellcode besteht aus zwei INC-Dateien und einer ASM-Datei.

Nehme an, dass man ein neues ASM-Projekt im AVR-Studio starten muss und 
dass der Inhalt der ASM-Datei ins Texteditor-Fenster gehört.

Dann muss man noch "irgendwie" die beiden INC-Dateien einbinden?!?

Liege ich da so weit schon mal richtig?

Viele Grüße
Gast #3547026
Lesenswert?

Hi

>Dann leite ich daraus ab, dass es reicht, die beiden INC-Dateien im
>Projektordner unterzubringen, wo auch die ASM-Datei abgespeichert ist
>und dass das AVR-Studio sie dort auch ohne weitere Hinweise findet!?!!

Wenn du den Assembler2 des 4er Studios benutzt, bracht sich die 
m8def.inc nicht im Projektverzeichnis befinden. Die wird automatisch 
gefunden.

MfG Spess
Gast #3547499
Lesenswert?

Hallo.

Der asm-Quellcode ruft drei Include-Dateien auf:
- die Typdefinition m8def.inc (die findet sich im oben genannten 
Verzeichnis des Studios, den Pfad weiß das Studio von selber),
- eine Frequenztabelle mit den Teilerwerten,
- die LCD-Routinen.
Die beiden letzteren sollten im gleichen Verzeichnis wie die asm-Datei 
liegen, dann werden sie ohne Weiteres vom Assembler gefunden.

Liegen sie da nicht, sondern woanders, dann kann man den ganzen Pfad 
dahin in die .INCLUDE-Angabe mit aufnehmen, also etwa so:

.INCLUDE "C:\Mein\Lieblingsfad\Nach\Irgendwo\MeinLieblingsTeil.inc"

Von irgendwelchen anderen Methoden kann man nur abraten, das ist zwar 
seit  seligen DOS-Zeiten so üblich, aber nicht so arg transparent.

mfg
gerd
Gast #3548304
Lesenswert?

Danke für die vielen Antworten!

Könnte man eurer Einschätzung nach eigentlich auch einen Atmega88 für 
das Projekt benutzen, wenn man dies dem Compiler mit der entsprechenden 
INCLUDE-Datei mitteil?
Oder müsste dann der Programm-Code an manchen Stellen entsprechend 
angepasst werden?
(Habe noch einige Atmega88 vorrätig, den Atmega8 müsste ich extra 
bestellen)
Gast #3549072
Lesenswert?

... Umschreiben dürfte kein Problem sein ...

Vorsicht mit solchen einfachen Ratschlägen. Schon ein Blick auf die 
Interrupt-Vektortabelle von ATmega8 und 88 zeigt, dass da so gut wie nix 
übereinstimmt ausser INT0 und INT1. Da im Rechteckgenerator zwei 
Interrupts benutzt werden, ist mit einfachem Austauschen der def.inc 
Sense.

Tauscht man einen gegen einen anderen,
- muss die Hardware und noch genauer: deren benutzte Funktionen 
übereinstimmen,
- die Ints und Vektortabelle überprüft/angepasst werden,
- der Takt übereinstimmen oder übereinstimmend gemacht werden,
- bei einigen sind auch noch noch einzelne Symbole mit anderen Namen 
versehen.

Mit dem Satz "hatte ich noch so rumliegen" fangen oft arg lange 
Debugging-Sitzungen an. Dagegen dürfte so ein Bestellvorgang bei einem 
Versender wesentlich einfacher sein und weniger Fallen aufweisen.

mfg
gerd
Gast #3549180
Lesenswert?

gerd schrieb:
> Vorsicht mit solchen einfachen Ratschlägen. Schon ein Blick auf die
> Interrupt-Vektortabelle von ATmega8 und 88 zeigt,

daß es dort Unterschiede gibt, durch die man das Programm anpassen muß 
Die Register heissen auch anders, usw.

Na und?
Das ist kein Hexenwerk, und in ein paar Minuten erledigt. Das wichtigste 
dabei ist, die Datenblätter zu Rate zu ziehen.
Dazu schreibt Atmel dann sogar alles wissenswerte in ein Dokument:
http://www.atmel.com/images/doc2553.pdf

gerd schrieb:
> Ach ja: der ATmega88 hat gar keinen ADC. Schon bei der Hardwareprüfung
> duchgefallen ...

Blafusel...
Wie bei allem in diesem Bereich gilt Dieter Nuhr und RTFM.
Selbstverständlich hat der Mega88 einen ADC, wie alle anderen MEgas 
auch.

Oliver
#3550980
Lesenswert?

Na ja, mancher wächst mit seinen Aufgaben.

Der Mega88 ist zum Mega8 funktionell abwärtskompatibel und auch 
pinkompatibel.

Einfach Abschnitt für Abschnitt das Atmel-Dokument durchgehen, und die 
nötigen Änderungen anwenden:
http://www.atmel.com/images/doc2553.pdf

Zwischendrinn das Programm mal wieder durch den Assemlber schicken, und 
auch dessen Fehlermeldungen nutzen.

Die Register heissen im Mega88 anders, die folgen dem neueren 
Atmel-Namensschema mit Modulnummer im Namen (z.B. UDR0 statt UDR). 
Ähnlich sieht es bei den Bitnamen aus. Die Funktionalität ist aber 
meistens 1:1 die gleiche, wenn nicht (z.B. bei der USART), steht es im 
Dokument.

Mittles des o.a. Atmel-Dokuments, den Datenblättern, und einem guten 
Editor per "suchen/ersetzen" lässt sich die umbenannten Register schnell 
erledigen.

Etwas Aufmerksamkeit erfordern "umgelegte" Bits in den Controlregistern. 
Aber auch da hilft die Suchfunktion im Editor, keine zu übersehen.

Eine neue Interrupt-Vectortabelle anlegen ist ja nun auch kein Problem, 
die kopiert man sich aus dem Datenblatt.

Am Ende noch die Fuses für den 88er raussuchen, fertig.

Das ganze ist ja eher eine Fleißarbeit, und sollte keine halbe Stunde 
dauern.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren