Forum: Mikrocontroller und Digitale Elektronik Bezeichnung zur Identifikation der AVR Core Version?


von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Hi, gibt es eigentlich Bezeichnungen oder Identifikationsmöglichkeiten 
für die Core Version bei AVR Controllern?

Es gibt ja verschiedene Versionen. von den alten AT90S über die ersten 
ATmega bis hin zu den aktuellsten.

Ich meine damit die Cores, die identische Befehlssätze, Features usw 
haben. So können die Mega8 noch nicht das Togglen durch Beschreiben des 
PIN Registers, die Mega88 können das.

Wie kann man rausfinden, welche zusammengehören, ohne jedes einzelne 
Datenblatt zu studieren?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Zusammen gehören definitiv die Typen, die in einem Datenblatt 
zusammengefaßt sind, bspw. Mega48/88/168/328 oder Tiny24/44/84. Bei 
allen anderen sind, wenn auch kleine, Unterschiede zu erwarten.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Das es kleine Unterschiede vor allem in der Registerbelegung gibt ist 
klar.

Ich meine jetzt eher grundlegendere Unterschiede wie zb der Sprung von 
Mega8 auf Mega88, Erweiterungen wie die Möglichkeit, über das PIN 
Register zu toggeln und sowas.

Ich vermute, dass alles vom Mega8 bis Mega128 einschließlich Mega8515 
und 8535 den gleichen Core hat. Genauso wie Mega48 bis Mega644. Die P 
und PA Versionen sollten zumindest von der Funktion identisch sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die definitive Antwort hat nur das Datenblatt.

Grob gerechnet ist der jüngste Schnitt bei den ,normalen' AVRs (also
nicht Xmega) gemacht worden mit folgenden Eigenschaften, die du dann
auch wieder gemeinsam findest.  Jeweils eins davon genügt letztlich
als Kriterium.

. nur noch ein RC-Oszillator (8 MHz bzw. 9,6 Mhz bei ein oder zwei
  Typen), dafür einen clock prescaler (CLKPR), mit dem man den
  Takt runterteilen kann, sowie eine CKOUT-Fuse, mit der man den
  Takt auf ein Pin rausführen kann

. neuer Watchdog, der alternativ zum Reset auch einen Interrupt
  auslösen kann und ein wenig mehr Streicheleinheiten benötigt
  (WDRF manuell löschen), bevor man ihn nach einem Reset wieder
  los wird

. Beschreiben von PINx togglet ein Ausgangspin

Weiß nicht, ob ich was vergessen habe.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus Burrer schrieb:

> Ich vermute, dass alles vom Mega8 bis Mega128 einschließlich Mega8515
> und 8535 den gleichen Core hat.

Das betrifft übrigens weniger den CPU-Core, sondern die Peripherie-
module.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Jörg Wunsch schrieb:
> Das betrifft übrigens weniger den CPU-Core, sondern die Peripherie-
> module.

Die Peripheriemodule sind eh ein Krampf bei den AVR. Die unterscheiden 
sich ja teilweise sogar innerhalb eines Controllers voneinander, 
speziell im Mega128. Sprich, die Register liegen bei gleichen Modulen 
nicht in der gleichen Reihenfolge. Zum Glück haben die bei den Xmega 
aufgeräumt, auch wenn damit die Abwärtskompatibilität aufgegeben wird.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Die Peripheriemodule sind eh ein Krampf bei den AVR.

Nanana!

von spess53 (Gast)


Lesenswert?

Hi

>Sprich, die Register liegen bei gleichen Modulen nicht in der gleichen
>Reihenfolge.

Wen interessiert das?

MfG Spess

von (prx) A. K. (prx)


Lesenswert?

Jemanden, der den gleichen Code für multiple Peripheriemodule verwendet, 
und dafür die Register relativ zu einem Pointer addressiert, der auf die 
Basisadresse des Peripheriemoduls zeigt. Sowas geht beispielsweise bei 
ARMs und PIC30 weil die I/O-Register dort in geschlossenen Blöcken 
angeordnet sind.

Dürfte aber bei AVRs eher selten vorkommen.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Beim XMega geht das auch.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

spress schrieb:
Wen interessiert das?


A. K. schrieb:
> Jemanden, der den gleichen Code für multiple Peripheriemodule verwendet,
> und dafür die Register relativ zu einem Pointer addressiert, der auf die
> Basisadresse des Peripheriemoduls zeigt. Sowas geht beispielsweise bei
> ARMs und PIC30 weil die I/O-Register dort in geschlossenen Blöcken
> angeordnet sind.
>
> Dürfte aber bei AVRs eher selten vorkommen.

Genau deshalb hat Atmel bei den Xmega so radikal aufgeräumt. Versuch 
doch mal beim Mega128, beide USARTs zu nutzen. Du darfst den kompletten 
Code 2x schreiben oder musst dir einen dabei abbrechen, den Code so 
anzupassen, dass er mit beiden USARTs funktioniert.

Beim Mega128 liegen die Register für USART1 schön hintereinander von 
0x98 bis 0x9D. USART0 liegt verteilt von 0x09 bis 0x0C, 0x90 und 0x95.

Beim 2560 sind zwar alle Module identisch, aber in einer anderen 
Reihenfolge als zb USART1 beim Mega128.

Und so zieht sich das durch sämtliche AVR.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus Burrer schrieb:

> Beim Mega128 liegen die Register für USART1 schön hintereinander von
> 0x98 bis 0x9D. USART0 liegt verteilt von 0x09 bis 0x0C, 0x90 und 0x95.

Dafür kannst halt die UART0 noch mit IN/OUT benutzen.

Das dürfte aber in erster Linie historischer Ballast gewesen sein:
das Teil war eine Ablösung für den ATmega103, und damit war die
Kompatibilität zu diesem (siehe M103C-Fuse, die bei Auslieferung
gesetzt ist) wichtiger als irgendwelche Neuerungen.  Letztlich ist
das Teil ja nun auch fast 10 Jahre alt, ich würde es als Anfangs-
fehler beiseite legen, aus denen sie später gelernt haben.

> Und so zieht sich das durch sämtliche AVR.

Nö, die neueren (so ab ca. 2005) sind allesamt deutlich
,,rechtwinkliger'', auch schon vor dem Xmega.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Ja, es wurde mit der Zeit besser, dass stimmt. Trotzdem dürften vor 
allem die Compiler Programmierer fluchen. Da sind die Xmega ein echter 
Segen

von (prx) A. K. (prx)


Lesenswert?

Markus Burrer schrieb:

> Ja, es wurde mit der Zeit besser, dass stimmt. Trotzdem dürften vor
> allem die Compiler Programmierer fluchen. Da sind die Xmega ein echter
> Segen

Was interessieren den Compiler-Programmierer die Peripheriemodule?

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

A. K. schrieb:
> Was interessieren den Compiler-Programmierer die Peripheriemodule?
Ich rede von Bascom, IAR usw. Das es die gcc Programmierer nicht 
interessiert ist klar. Da fluchen höchstens diejenigen, die versuchen, 
brauchbare Librarys zu schreiben, die universell einsetzbar sind. Dazu 
gehöre ich auch

von (prx) A. K. (prx)


Lesenswert?

Ok, du meinst die Library-Programmierer der Compiler-Hersteller. Dem 
IAR-Compiler selbst ist das genauso egal wie dem GCC.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Ja, das ist jetzt Haarspalterei

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus Burrer schrieb:

>> Was interessieren den Compiler-Programmierer die Peripheriemodule?

> Ich rede von Bascom, IAR usw.

Bascom ja. IAR ist in dieser Hinsicht genauso wenig betroffen wie GCC,
da er keine Peripherie-Bibliotheken auf höherer Abstraktionsebene
(Zeichen-Ein-/Ausgabe statt Registerebene) mitliefert.

Ist aber alles in allem simpel zu lösen, indem man einfach eine
Tabelle mit den Steuerregistern des jeweiligen Peripheriemoduls
anlegt.  Auf Effektivität (mögliche Benutzung von IN/OUT statt
LDS/STS) kommt es ja dann sowieso nicht mehr an.

Sicher, die Lösung beim Xmega sieht schöner aus.  Im Prinzip könnte
man eine derartige Variante wohl auch für andere moderne AVRs
schreiben, wenn man will.  Man darf ja auch als Programmierer ruhig
mal aufhören, rückwärtskompatibel bis zur Jungsteinzeit sein zu
wollen.  Wer eben unbedingt einen ATmega128 dem ATmega1281 vorziehen
will, kann sich dann halt seinen Kram selbst zimmern.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Jörg Wunsch schrieb:
> Bascom ja. IAR ist in dieser Hinsicht genauso wenig betroffen wie GCC,
> da er keine Peripherie-Bibliotheken auf höherer Abstraktionsebene
> (Zeichen-Ein-/Ausgabe statt Registerebene) mitliefert.

Nicht? Ich dachte, der bietet sowas auch an. Oder war das Keil? Irgend 
ein C Compiler hatte sowas meine ich
>
> Sicher, die Lösung beim Xmega sieht schöner aus.  Im Prinzip könnte
> man eine derartige Variante wohl auch für andere moderne AVRs
> schreiben, wenn man will.  Man darf ja auch als Programmierer ruhig
> mal aufhören, rückwärtskompatibel bis zur Jungsteinzeit sein zu
> wollen.  Wer eben unbedingt einen ATmega128 dem ATmega1281 vorziehen
> will, kann sich dann halt seinen Kram selbst zimmern.

Da hast du wohl recht. Aber die Leute kaufen immer noch Mega32 mit 16MHz 
Quarz und wundern sich, wenn es Datensalat bei der Datenübertragung 
gibt. Wie kann man dann erwarten, dass die so weit denken?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus Burrer schrieb:
> Wie kann man dann erwarten, dass die so weit denken?

Indem man sie die Software selbst schreiben lässt. ;-)  Dann werden
sie auch merken, dass der ATmega324 nicht nur pinkomatibel und
viel aufgeräumter ist, sondern auch noch ein paar andere nützliche
Dinge bietet (wie eine zweite USART).

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Jörg Wunsch schrieb:
> Dann werden sie auch merken, dass der ATmega324 nicht nur pinkomatibel und
> viel aufgeräumter ist, sondern auch noch ein paar andere nützliche
> Dinge bietet (wie eine zweite USART).

Und teurer. Und bei Ramschläden wie Pollin oder Reichelt bekommt man den 
nichtmal. Nichtmal Conrad hat den. Und wenn der da nicht zu bekommen ist 
interessiert das auch kaum jemand

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus Burrer schrieb:

[ATmega32 vs. ATmega324]

> Und teurer.

Digikey (um mal jemanden zu nennen, bei dem du sofort beide kaufen
könntest): EUR 6,38 für den ATmega32, EUR 4,70 für den ATmega324P.

> Und bei Ramschläden wie Pollin oder Reichelt bekommt man den
> nichtmal.

Pollin ist da eh' indiskutabel.  Warum Angelika immer so lange wartet,
bis da mal was aktualisiert wird, weiß der Geier.  CSD hat beide,
allerdings ist dort in der Tat der '32 billiger als der '324 (und
beide billiger als Digikey, wenn man die Märchensteuer einrechnet).

Preispolitik, warum auch immer die so verschieden ausfällt.

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.