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
@ 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
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
U2 = mit USB-Schnittstelle, ohne ADC U4 = mit USB-Schnittstelle, mit ADC ATmega644P ist eine gute Wahl, ATmega1284P die "fette" Variante davon.
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. ...
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
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.
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
@ 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
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
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.
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
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 ...
@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! (:
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.