Forum: Mikrocontroller und Digitale Elektronik Atmega8-Projekt: wie Assembler-Quellcode compilieren?


von Holm (Gast)


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

von Georg G. (df2au)


Lesenswert?

Holm schrieb:
> Dann muss man noch "irgendwie" die beiden INC-Dateien einbinden?!?

Dann lies dir doch einfach einmal das ASM File durch, nur lesen, ganz 
verstehen musst du es nicht einmal. Bestimmt fallen dir dann die 
"include" Anweisungen auf.

von Holm (Gast)


Lesenswert?

Georg G. schrieb:
> Bestimmt fallen dir dann die
> "include" Anweisungen auf.

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!?!!

von Georg G. (df2au)


Lesenswert?

Sollte es sie nicht finden, bekommst du eine Fehlermeldung.

von spess53 (Gast)


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

von Holm (Gast)


Lesenswert?

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

Danke für die Info!

Assembler2 sagt mir auf Anhieb nichts.

Wie, und das AVR Studio 4 sucht notfalls den ganzen Rechner nach der 
Datei m8def.inc ab???

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

>Assembler2 sagt mir auf Anhieb nichts.

Siehe Anhang.

>Wie, und das AVR Studio 4 sucht notfalls den ganzen Rechner nach der
>Datei m8def.inc ab???

Nein. Die xyzdef.inc-Dateien gehören zum AVR Studio und befinden sich im 
AVR Studio Verzeichnis unter AVRASSEMBLER2\APPNOTES.

MfG Spess

von Amateur (Gast)


Lesenswert?

Du darfst ruhig in die Include-Anweisung deinen Lieblingspfad einbauen.
Normal ist aber, das aktuelle Verzeichnis oder ein in der Umgebung 
(Environment auf Auswärts) definierter Pfad.

von gerd (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

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

Im AVR Assembler2 lässt sich unter Project->Assembler 
Options->Additional include path ein Verzeichnis angeben, das ebenfalls 
automatisch abgesucht wird.

MfG Spess

von Holm (Gast)


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)

von Oliver (Gast)


Lesenswert?

Das Problem lässt ich selbstverständlich nur und auschliesslich mit 
einem AtMega8 lösen ;)

Natürlich kannst du dafür auch einen 88er nehmen. Ja, du musstd as 
Programm anpassen, aber das ist für jemanden, der den 88er schon kennt, 
kein Problem.

Oliver

von gerd (Gast)


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

von gerd (Gast)


Lesenswert?

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

gerd

von Oliver (Gast)


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

von wendelsberg (Gast)


Lesenswert?

Oliver schrieb:
> hat der .... einen ADC, wie alle anderen MEgas
> auch.

Nein, mindestens der Atmega32U2 hat keinen.

wendelsberg

von Oliver (Gast)


Lesenswert?

Keine Regel ohne Ausnahme ;)

Oliver

von Ezis B. (ezis_b)


Lesenswert?

Bei Mega88 muss lds&sts nutzen statt in&out
Edit: nicht immer, aber oft

: Bearbeitet durch User
von gerd (Gast)


Lesenswert?

Wer mit der Frage kommt, wie er von meiner Webseite heruntergeladenen 
fertigen Quellcode assemblieren kann, dürfte kaum zu der Sorte Mensch 
gehören, die versiert Interrupttabellen umstellen und schon alle 
Fallstricke der AVR-Typen kennen.

gerd

von Oliver S. (oliverso)


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

: Bearbeitet durch User
von gerd (Gast)


Lesenswert?

Sehr schöne Beschreibung ...

mfg
gerd

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.