Forum: Mikrocontroller und Digitale Elektronik Wechsel ATmega48PA zu ATmega168PA


von Andreas H. (heilinger)


Lesenswert?

Hallo,

da ich zu wenig Speicherplatz bei dem ATmega48PA habe, bin ich nun zum 
ATmega168PA gewechselt.

Beide haben zwar das gleiche Datenblatt, gibt es aber trotzdem 
Unterschiede, die ich beachten muss?

Wo muss ich diese Umstellung im AVRStudio eingeben?
Bisher habe ich unter Project -> Configuration Options -> Device 
geändert und im Reiter "Main" des AVR Dragon ebenfalls Device auf 
ATmega168P geändert. Habe ich noch was vergessen?

von Hc Z. (mizch)


Lesenswert?

> Habe ich noch was vergessen?

Probier's einfach aus.  So kann z.B. keiner wissen, ob Du für 
EEProm-Adressen uint8_t bzw. char verwendet hast, das reicht beim 48, 
aber nicht mehr beim 168.  Wenn Du Berechnungen hast, in die die 
EEProm-Größe mit eingeht, gehen die jetzt schief.  Ob sowas vorkommen 
kann, weißt nur Du.

von Michael H. (mha1)


Lesenswert?

Das Datenblatt unterscheidet an den kritischen Stellen die verschiedenen 
Typen. Wenn die Programmierung in C erfolgt, sollte der Compiler 
eigentlich alles Notwendige erledigen. Das Programm sollte danach 
zumindest noch funktionieren. Wenn die größeren Speicherbereiche bei RAM 
und EEPROM auch genutzt werden sollen, müssen eventuell Variablen von 8 
Bit auf 16 Bit geändert werden.

Bei Assemblerprogrammierung musst Du aber eventuell selbst aufpassen.

Interrupt Vektoren sind ab 168PA länger (2 Words / 4 Bytes anstelle 1 
Word / 2 Bytes) -> macht insgesamt 52 Bytes zusätzlich. Der Aufruf der 
Interrupt Routine braucht dadurch ebenfalls einen Takt länger.

Zusätzlich zu beachten bei zeit- bzw. platzkritischen Anwendungen:

Aufgrund des größeren Flash funktionieren einige Befehle wie z.B. RJMP 
und RCALL ab 88PA nicht über den gesamten Adressbereich und müssen bei 
Bedarf durch JMP bzw. CALL ersetzt werden. Das erhöht den Speicherbedarf 
pro Aufruf um 2 Bytes und verlängert die Ausführungszeit um einen Takt.

von Andreas H. (heilinger)


Lesenswert?

Ich programmiere in C.
Den größeren Speicher im EEPROM brauche ich nicht, brauche ihn nur im 
Flash.

Die Variablen, die ich ins EEPROM schreibe sind unsigned int und werden 
gesplittet in 2 Byte und dann jeweils ins EEPROM geschrieben. 
Berechnungen zur EEPROM-Größe habe ich nicht.

Wenn die Programmlaufzeit an der ein oder anderen Stelle nen Takt länger 
läuft, kann ich damit leben.

von schlaumeier (Gast)


Lesenswert?

Dafür hat Atmel die App-Note AVR095 veröffentlicht!

von Andreas H. (heilinger)


Lesenswert?

schlaumeier schrieb:
> Dafür hat Atmel die App-Note AVR095 veröffentlicht!

Optimal, genau das habe ich gesucht!

Danke

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.