www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Unterschied ATmega88 / ATmega168


Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

versuche einen funktionierenden Quellcode von einem mega88 auf einem 
mega168 laufen zu lassen. Controller sind hardwaremäßig gleich, nur 
unterschiedlicher Flash-Speicher. Habe nur das Headerfile in <mega168.h> 
geändert, Programm (Kommunikation über RS232) läuft aber nicht.
Sind die Controller nun doch nicht so gleich, wie angenommen?

Freue mich über Ratschläge.

Gruß
Richard

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interruptvektoren sind beim 88er nur 1 Byte breit, beim 168 ein Word!

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Worte nicht Bytes. Also 1 Wort vs. 2 Worte.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig!

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Info.
Habe ich im Datenblatt übersehen.
Aber das nur nebenbei.

Der Fehler lag in der Baudrateneinstellung.
Ich musste den Wert etwas anpassen, da sich der interne
Oscillator bei 2MHz anscheinend etwas anders verhält
als der des ATmega88. Nun läuft die Anwendung.

Aber noch eine weitere Frage zum Verständnis:

Der kompilierte Quellcode besteht beim mega88 aus 3015 words, und beim 
mega168 aus 3569 words. Hat das mit der oben erwähnten Breite der 
Interruptvektoren zu tun?

Gruß
Richard

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Richard (Gast)

>Der Fehler lag in der Baudrateneinstellung.
>Ich musste den Wert etwas anpassen, da sich der interne
>Oscillator bei 2MHz anscheinend etwas anders verhält
>als der des ATmega88. Nun läuft die Anwendung.

Du hast soeben einen Preis gewonnen.

1000er UART-User, der mit internem Oszillator arbeitet.

Das soll man nicht machen. Warum? Lesen Sie hier.

AVR-Tutorial: UART

>Der kompilierte Quellcode besteht beim mega88 aus 3015 words, und beim
>mega168 aus 3569 words. Hat das mit der oben erwähnten Breite der
>Interruptvektoren zu tun?

Ja, un der Tatsache, dass beim 168er JMP und CALL anstatt RJMP und RCALL 
verwendet werden, 2 Worte vs. 1 Wort.

MfG
Falk

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richard wrote:
> Der kompilierte Quellcode besteht beim mega88 aus 3015 words, und beim
> mega168 aus 3569 words. Hat das mit der oben erwähnten Breite der
> Interruptvektoren zu tun?
550 Words Interrupt-Vektoren? Nein, definitiv nicht. Bei 21 Vektoren 
macht das genau 21 Worte mehr...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:
> Ja, un der Tatsache, dass beim 168er JMP und CALL anstatt RJMP und RCALL
> verwendet werden, 2 Worte vs. 1 Wort.
Also mein WINAVR-Compiler verwendet beim ATMega16 jmp nur in der 
Vektortabelle und ist ansonsten schlau genug, die "relativen" Befehle 
einzusetzen, wenn sie ausreichen. Und bei einem Programm mit weniger als 
4 KiWorten reichen rjmp und rcall allemal...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Johannes M. (johnny-m)

>Vektortabelle und ist ansonsten schlau genug, die "relativen" Befehle
>einzusetzen, wenn sie ausreichen.

Hab ich im einzelnen nicht nachgesehen, aber den Effekt der 
Programmaufblähung bei "grossen" AVRs hab ich auch schon gesehen und das 
war bisher meine einzige Erklärung.

> Und bei einem Programm mit weniger als
>4 KiWorten reichen rjmp und rcall allemal...

Nicht unbedingt. Man kann ja nur +/- 2KWorte springen, dam man den 
Overflow des Programm Counters nicht nutzen kann. Da kann es bisweilen 
zu Enpässen kommen.

MFG
Falk

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:
> Nicht unbedingt. Man kann ja nur +/- 2KWorte springen, dam man den
> Overflow des Programm Counters nicht nutzen kann.
Da haste natürlich recht. Allerdings erscheinen mir 550 Worte mehr schon 
ein bisschen viel. Aber wer weiß, was er da programmiert hat...

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei alten AVR-GCC Versionen war es so, dass nahezu überall rjmps durch 
jmps ersetzt wurden, egal ob es globale oder lokale Sprünge waren. Bei 
den neueren Versionen ist das anscheinend nicht mehr so.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Johannes M. (johnny-m)

>Da haste natürlich recht. Allerdings erscheinen mir 550 Worte mehr schon
>ein bisschen viel. Aber wer weiß, was er da programmiert hat...

Naja, ich hab auch mal ein Programm gehabt, das auf einem 8515 knapp 
über 8 KiBi lag, auf einem mega16 waren es auch um die 500 Byte mehr. 
Und es wahre recht viele Unterprogramme bzw. deren Aufrufe drin. Werde 
ich heute Abend mal prüfen.

MFG
Falk

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, 500 Worte mehr hieße unter den Annahmen, dass im Schnitt 
mindestens jeder fünfte bis sechste Befehl des Programms ein rjmp oder 
rcall ist. Und das dürfte zumindest nur in Ausnahmefällen auftreten. 
Deshalb ja auch der Satz "Aber wer weiß, was er da programmiert hat..."

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.