Forum: Mikrocontroller und Digitale Elektronik Welchen ATmega soll ich nehmen?


von Marco U. (Gast)


Lesenswert?

Hallo zusammen!

Ich habe bisher mit einem ATmega8 gearbeitet, allerdings genügt mir 
dessen Funktionsumfang für mein nächstes Projekt nicht mehr.
Ich habe mich bereits auf der Atmel Seite etwas umgeschaut ( 
http://atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=part_no&Direction=ASC 
), allerdings bin ich durch die rießige Auswahl und die doch teils sehr 
kryptischen Controllerbezeichnungen etwas eingeschüchtert worden. ;)

Ich suche im wesentlichen einen Controller der ähnlich dem ATmega8 ist, 
jedoch mit folgenden Zusatzkriterien:

Mind. 6 externe Interrupts, mind. 3 PWN Pins, DIP Format.

Ich liebeugle z.Zt. mit dem ATmega644, bin mir mit der Auswahl aber noch 
nicht so 100%ig sicher. Hättet ihr andere Vorschläge?
Wofür steht eigentlich die zusätzliche 4? Was sagen Kürzel wie A, P, U2 
usw. eigentlich aus?

PS: Die Auswahl des Controllers beschränkt sich aufgrund des Programmers 
auf folgende:

AT90PWM3
AT90S1200
AT90S2313
AT90S2343
AT90S4414
AT90S4433
AT90S8515
AT90S8535
ATmega103
ATmega128
ATmega16
ATmega161
ATmega162
ATmega163
ATmega164P
ATmega168
ATmega169
ATmega32
ATmega324P
ATmega328P
ATmega329
ATmega3290
ATmega48
ATmega64
ATmega644
ATmega8
ATmega8515
ATmega8535
ATmega88
ATtiny12
ATtiny13
ATtiny15
ATtiny2313
ATtiny24
ATtiny25
ATtiny26
ATtiny44
ATtiny45
ATtiny84
ATtiny85

PPS: (Das ist mein erster Post hier im Forum, ich hoffe ich habe soweit 
alles richtig gemacht. ;))

Gruß
Marco

von Chris (Gast)


Lesenswert?

ATmega48/88/168

von Falk B. (falk)


Lesenswert?

@  Marco Ullrich (wuesten)

>), allerdings bin ich durch die rießige Auswahl und die doch teils sehr
>kryptischen Controllerbezeichnungen etwas eingeschüchtert worden. ;)

Wohl wahr, so langsam wird die AVR-Familie genauso riesig und 
unübersichtloch wie die PICs :-(

>Mind. 6 externe Interrupts, mind. 3 PWN Pins, DIP Format.

Haben viele.

>Ich liebeugle z.Zt. mit dem ATmega644,

Der ist OK.

> bin mir mit der Auswahl aber noch
>nicht so 100%ig sicher. Hättet ihr andere Vorschläge?

Ja, aber das ist egal.

>Wofür steht eigentlich die zusätzliche 4?

Da gabs mal ne kryptishe Kodierung von Atmel, 64 für 64 kB Flash, die 4 
für 4K SRAM.

> Was sagen Kürzel wie A, P, U2 usw. eigentlich aus?

A, ist die neue Version, praktisch aber dem "normalen" 664 identisch.
P, ist etwas aufgebohrt, hat u.a. einen 2. UART.
U2, keine Ahnung.

>PPS: (Das ist mein erster Post hier im Forum, ich hoffe ich habe soweit
>alles richtig gemacht. ;))

Ja. Das können viele andere mit deutlich mehr Postings teilweise nicht.

MFg
Falk

von Oliver (Gast)


Lesenswert?

Die wesentliche Frage ist, ob du ein DIP-Gehäuse möchtest oder nicht. 
Wenn ja, reduziert sich deine o.a. Auswahl ganz erheblich.

Oliver

von avrfreak (Gast)


Lesenswert?

U2 = mit USB-Schnittstelle, ohne ADC
U4 = mit USB-Schnittstelle, mit ADC
ATmega644P ist eine gute Wahl,
ATmega1284P die "fette" Variante davon.

von Hannes L. (hannes)


Lesenswert?

Oliver schrieb:
> Die wesentliche Frage ist, ob du ein DIP-Gehäuse möchtest oder nicht.

Diese Frage wurde bereits im ersten Beitrag geklärt.

> Wenn ja, reduziert sich deine o.a. Auswahl ganz erheblich.
>
> Oliver

@Marco:
Schaun, was der Brenner unterstützt,
schaun, was der Handel liefern kann (Preisvergleich),
Datenblätter besorgen und vergleichen,
entscheiden und kaufen...

Du fragst nach der Serie "4"...
Diese AVRs sind (neben TQFP) im 40-poligen DIL-Gehäuse lieferbar. Die 
Serie umfasst ATMega164/324/644/1284. Der Mega1284 in DIP40 ist momentan 
bei CSD sehr günstig und hat sogar 16 KB RAM.

Schau betreffs der Gehäuse-Suffixe einfach mal ins Datenblatt, die 
ausführliche Erklärung findet sich bei den Gehäusebeschreibungen 
(ziemlich am Ende). Mit den Suffixen P und A sind Serien in neuer 
Technologie gekennzeichnet. Siehe dazu die Datenblätter und die 
Migrations-Appnotes, die es bei Atmel zum kostenlosen Download gibt.

...

von Verwirrter Anfänger (Gast)


Lesenswert?

Um sich mal einen etwas besseren Überblick zu verschaffen, würde ich 
AVR Typen empfehlen, insbesondere der dort erwähnte Link auf 
avrFreaks:
http://www.avrfreaks.net/index.php?module=Freaks%20Devices&func=devCompare

von Marco U. (Gast)


Lesenswert?

Vielen Dank schon mal für die Informationen und Tips! (:

von Chris (Gast)


Lesenswert?

Marco Ullrich schrieb:
> Leider fällt dann der ausgewählte ATmega644 ebenfalls weg, da er nicht
> genug extern Interrupt Vektoren bietet.

Der würde schon passen. Laut Atmel "Ext Interrupts: 32". Im übrigen 
würden die weiter oben von mir vorgeschlagenen Controller 
ATmega48/88/168 deine Anforderungen auch für weniger Geld abdecken.

von Peter D. (peda)


Lesenswert?

Marco Ullrich schrieb:
> Mind. 6 externe Interrupts, mind. 3 PWN Pins, DIP Format.

Mich beschleicht das ungute Gefühl, daß Du fälschlich vermutest 6 
Interrupts benötigen zu müssen, weil Du 6 Tasten abfragen willst.


Peter

von Marco U. (Gast)


Lesenswert?

@ Chris Da warst du wohl schneller als ich. Habe mich vertan. : /
Ich hatte etwas bei den PCINT`s falsch verstanden.

Die ATmega48/88/168 würden meiner Meinung nach leider nicht ausreichen, 
da sie nur 5 externe Interrupt Vektoren haben (INT0-1 und PCINT 0-2 = 5 
Vektoren).

PS: Das PCINT Thema ist für mich noch Neuland, ich habe hierzu (noch) 
keine Praktischen Erfahrungen. Ich habe mich eingelesen und es so 
verstanden das eine Gruppe von Pins alternativ für externe Interrupts 
genutzt werden können. Wenn nun an einem der Pins, eines Bereichs, ein 
externer Interrupt auftritt, so wird der entsprechende Vektor 
aufgerufen. Jedoch teilen sich mehrere Pins den gleichen Vektor.

z.B. Anhand des Atmega64
PCINT31:0

PCINT31:24 ->Jeder PIN im Bereich 31-24 löst aus-> PCINT3_vect
PCINT23:16 ->Jeder PIN im Bereich 23-16 löst aus-> PCINT2_vect
PCINT15:8  ->Jeder PIN im Bereich 15-8  löst aus-> PCINT1_vect
PCINT7:0   ->Jeder PIN im Bereich 7-0   löst aus-> PCINT0_vect

Stimmt das soweit?! Oder hat jeder Pin seinen eigenen Interrupt Vektor?!

Schonmal Danke im Voraus! :)

Nachtrag:
Wofür ich die 6 Interrupts benötige:
Ich möchte 6 unterschiedliche Sensoren abfragen. Jeder Sensor hat im 
C-Programm seine eigene Variable die inkrementiert wird sobald der 
entsprechende Sensor einen Interrupt auslöst (Es handelt sich bei den 
Sensoren um Schrittzähler von Schrittmotoren, es soll dadurch möglich 
sein die momentane Stellung jedes Motors zu ermitteln).

Gruß Marco

von Peter D. (peda)


Lesenswert?

Marco Ullrich schrieb:
> Die ATmega48/88/168 würden meiner Meinung nach leider nicht ausreichen,
> da sie nur 5 externe Interrupt Vektoren haben (INT0-1 und PCINT 0-2 = 5
> Vektoren).

Man kann dann noch den Analog Komparator und den Captureeingang als 
externe Interrupts verwenden.

Bei den PCINTs sollte man immer nur einen Pin pro Vektor verwenden. 
Sonst hat man bei kurzen Impulsen das Problem festzustellen, welcher Pin 
das war.


Die Frage ist auch, wie kurz die Signale sind und ob sie von Kontakten 
kommen, d.h. erstmal entprellt werden müssen.
Entprellen geht erheblich besser im Timerinterrupt, d.h. man braucht 
keine externen Interrupts.


Peter

von Chris (Gast)


Lesenswert?

Sorry, ich kann dir nicht folgen. Der von dir angesprochene ATMega64 
verfügt lediglich über 8 externe Interrupts. Des Weiteren ist er auch 
nicht im DIP Gehäuse erhältlich. Hast Du dich vertippt?

Bei einem Device, bei dem sich mehrere Pins für externe Interrupts einen 
Interrupthandler teilen wäre es jedoch auch kein großes Problem. Du 
müsstest in deinem Handler schauen, welcher Pin sich seit dem letzten 
Aufruf des Handlers geändert hat. Das Du hier sicherstellen musst, dass 
kein Interrupt verloren geht hat Peter ja bereits geschrieben.

von Oliver (Gast)


Lesenswert?

Marco Ullrich schrieb:
> Ich habe mich eingelesen und es so
> verstanden das eine Gruppe von Pins alternativ für externe Interrupts
> genutzt werden können. Wenn nun an einem der Pins, eines Bereichs, ein
> externer Interrupt auftritt, so wird der entsprechende Vektor
> aufgerufen. Jedoch teilen sich mehrere Pins den gleichen Vektor.

Da stimmt schon. Allerdings gibt es dann dazu ein Register, in dem ein 
Flag anzeigt, welcher der Eingänge den Interrupt ausgelöst hat. In der 
ISR kannst du das auswerten, und dann die passende Funktion aufrufen. 
Insofern reichen auch 6 dieser "gemeinsamen" externen Interrupteingänge 
für deine Anforderungen.

Oliver

von Hannes L. (hannes)


Lesenswert?

Oliver schrieb:
> Marco Ullrich schrieb:
>> Ich habe mich eingelesen und es so
>> verstanden das eine Gruppe von Pins alternativ für externe Interrupts
>> genutzt werden können. Wenn nun an einem der Pins, eines Bereichs, ein
>> externer Interrupt auftritt, so wird der entsprechende Vektor
>> aufgerufen. Jedoch teilen sich mehrere Pins den gleichen Vektor.
>
> Da stimmt schon. Allerdings gibt es dann dazu ein Register, in dem ein
> Flag anzeigt, welcher der Eingänge den Interrupt ausgelöst hat.

Das kenne ich anders. Mit dem Register wird festgelegt, welche Pins 
(welche Bits) den PCI auslösen dürfen.

> In der
> ISR kannst du das auswerten, und dann die passende Funktion aufrufen.
> Insofern reichen auch 6 dieser "gemeinsamen" externen Interrupteingänge
> für deine Anforderungen.
>
> Oliver

...

von Marco U. (Gast)


Lesenswert?

@Peter: Ach so, mittels des ADC und Compare Interrupts würde es 
natürlich dann von der Anzahl her hin kommen, das stimmt. Die Signale 
müssen nicht entprellt werden, da Sie von einem magnetischen Impulsgeber 
kommen. Die Zeit zwischen zwei Flanken müsste ich mit einem Oszi noch 
feststellen.

@Chris:  Entschuldige, ich meine natürlich den ATmega644, hatte mich 
vertippt. Den Ansatz mit dem Überprüfen des PINX Registers finde ich 
super! (:
Ich werde das mal im Hinterkopf behalten, falls noch weitere Sensoren 
hinzukommen sollten. Momentan wäre es mir jedoch lieber wenn jeder seine 
eigene Routine hätte.

@Oliver: Auf so ein Register bin ich im Zusammenhang mit PCINT noch 
nicht gestoßen, oder meinst du das jeweilige PINX Register?

Ich werde wohl den ATmega644 nehmen (lieber momentan etwas 
überdimensioniert, als in Zukunft dann unter dimensioniert. ;) ).

Eine Frage zu PCINT hätte ich noch:
Wird der PCINT bei jedem Flanken wechsle ausgelöst (Fallend und 
Steigend)? Ich habe kein Register gefunden wo man das konkret angeben 
könnte (Ähnlich dem EICRA) Oder habe ich etwas übersehen?

Es hat sich sehr gelohnt mich bei mikrocontroller.net anzumelden, danke 
für eure Hilfen! (:

von Entwickler (Gast)


Lesenswert?

Der PCINT wird bei jedem Flankenwechsel ausgelöst: siehe Schaltbild im 
Datenblatt.
Für jeden Pin einer Gruppe gibt es ein enable bit in PCMSKx. Der INT 
einer Gruppe wird in PCICR freigeben; das auslösende Flag dazu steht in 
PCIFR.

Soweit aus dem Datenbaltt zum ATmega48.

von Klaus W. (mfgkw)


Lesenswert?

Dazu meint das Datenblatt zum 644:


The External Interrupts can be triggered by a falling or rising
edge or a low level. This is set up as indicated in the
specification for the External Interrupt Control Registers
EICRA (INT2:0).
When the external interrupt is enabled and is configured as
level triggered, the interrupt will trigger as long as the pin
is held low. Low level interrupts and the edge interrupt on INT2:0
are detected asynchronously. This implies that these interrupts
can be used for waking the part also from sleep modes other
than Idle mode. The I/O clock is halted in all sleep modes except
Idle mode.

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.