Forum: Mikrocontroller und Digitale Elektronik Atmega 8 ./. Atmega 16


von Jürgen M. (jmayer) Benutzerseite


Lesenswert?

hallo,

ich habe hier zwei kleinere Projekt für die ich einen Atmega-Controller 
aussuchen muss. Die Software wird weitgehend ähnlich sein.

Die Vorauswahl ist jeweils auf den Atmega 8 und auf den Atmega 16 
gefallen.

Wenn ich dir Datenblätter vergleiche finde ich beim oberflächlichem 
Vegleich bis auf die Anzahl der I/O, des Speichers und bei den 
AD-Wandlern keine Unterschiede.

Ich möchte nun bei der Software den selben Quellcode weitgehend in 
beiden Projekten verwenden.

Die Frage ist nun ob es über die von mir oben aufgeführten Unterschiede 
weitere Punkte gibt wenn man eine Software für diese beiden Atemgas 
entwickelt.

Gibt es weitere Fallstricke?

Gruss Jürgen

von A.K. (Gast)


Lesenswert?

In Assembler gibt's eine Falle, da die Typen <= 8KB den JMP Befehl nicht 
kennen und die Interrupt-Tabelle anders aussieht. Ist in C jedoch egal.

von Jürgen M. (jmayer) Benutzerseite


Lesenswert?

A.K. wrote:
> In Assembler gibt's eine Falle, da die Typen <= 8KB den JMP Befehl nicht
> kennen und die Interrupt-Tabelle anders aussieht. Ist in C jedoch egal.

aha - dachte ich mirs doch ;-()

ist das dann der Unterschied:

Atmega 8:  130 Powerful Instructions
Atmega 16: 131 Powerful Instructions

Jürgen

von A.K. (Gast)


Lesenswert?

Letztlich ja. Es müsste sich allerdings eine Differenz von 2 ergeben, 
weil das gleiche auch für CALL gilt. Kannst ja mal nachzählen ;-).

von A.K. (Gast)


Lesenswert?

Apropos Assembler: Wenn das ein Problem sein sollte - dem ist mit 2 
bedingten Assembler-Makros problemlos abzuhelfen.

von Jürgen M. (jmayer) Benutzerseite


Lesenswert?

A.K. wrote:
> Letztlich ja. Es müsste sich allerdings eine Differenz von 2 ergeben,
> weil das gleiche auch für CALL gilt. Kannst ja mal nachzählen ;-).

die zwei Angaben über die Anzahl der Befehle habe ich direkt aus den 
Datenblätter des Atmega 8 bzw. 16.

Jürgen

von Peter D. (peda)


Lesenswert?

A.K. wrote:
> Apropos Assembler: Wenn das ein Problem sein sollte - dem ist mit 2
> bedingten Assembler-Makros problemlos abzuhelfen.

Warum so umständlich.
Einfach die Interruptvektoren wie es sich gehört per .org Anweisung 
einstellen und schon ists egal.

Ich finds immer wieder lustig, wenn sich einer bei den RETIs verzählt 
und dann ewig den verschwundenen Interrupt sucht.


Peter

von A.K. (Gast)


Lesenswert?

> Einfach die Interruptvektoren wie es sich gehört per .org Anweisung
> einstellen und schon ists egal.

Ich finde es nicht ganz so egal, ob man nun RJMP oder JMP verwendet. 
Nicht im Programm und erst recht nicht in der Interrupt-Tabelle.

Missverstanden, glaube ich.

von A.K. (Gast)


Lesenswert?

Prinzip:
   macro jump
     if mega8 oder kleiner
         rjmp $1
     else
         jmp $1
     endif
   end macro

Wenn man dann noch die Includes als Quelle der Vektoradressen verwenden, 
dann sieht das ungefähr so aus:
   .org uart_receive
   jump uart_receive_handler

Kann man dann auch im Rest des Programms verwenden, wenn man zu den 
Spezialisten gehört die mehr als 4KB als Assembler-Code fabrizieren (die 
sollten allerdings gerüchteweise in der PIC-Fraktion häufiger zu finden 
sein als bei AVRs). Bis 4KB ist es wieder egal, dann kann man überall 
RJMP verwenden.

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.