Hallo Leute ich bin gerade dabei, von den MEGAs auf die XMEGAs umzusteigen. Der erste Schritt war erst einmal ein Schock. Nichts ist noch so, wie ich es gewohnt war. Als hätte ich noch nie einen AVR programmiert. Mit Hilfe der Appnotes (Treiber) für die Hardware finde ich mich aber inzwischen in dem Konzept einigermaßen zurecht. Da kann ich nur jedem anderen auch raten, sich die genau anzusehen. Ich muss da die Ingenieure von Atmel echt einmal loben. Die haben sich wirklich Gedanken gemacht, wie man derartige Controller besser programmieren kann und hatten den Mut, die ganzen "alten Zöpfe" abzuschneiden. Jetzt muss nur noch die Errata-Liste kürzer werden. ;-) Neueinsteiger aus der PC-Welt haben es wahrscheinlich noch leichter, sich hier zurecht zu finden als alte AVR-Hasen, die sich umgewöhnen müssen. Das neue Konzept unterstützt eine abstraktere Herangehensweise als bisher indem man z.B. einer Routine zur Ansteuerung der Hardware einen Zeiger auf die Hardware mitgibt anstatt in deren Quelltext die Ports "hard" zu kodieren. Man schreibt also nicht mehr Routinen der Art uart_init(), uart1_init() usw. - was bei bis zu 7 USARTs ein nicht zu unterschätzender Vorteil ist. :-) Also - nicht gleich nach dem ersten Blick in die Datenblätter aufgeben. Die Mühe lohnt sich meiner Meinung nach. Nur XMEGAs im DIP-Gehäuse könnte man noch vemissen. Gruß, DetlevT
XMEGAS in DIL/DIP dürfte wohl kaum möglich sein in der größe... Ist aber auch nicht so schwer zu löten das 0.5mm Raster. Ja die neuen Atxmegas sind schon recht gut! Kenn sogar einen der hat den Webserver (normalerweise atmega32/64?) auf einem atxmega128 zum laufen gebracht. war viel arbeit, hat aber funktioniert.
Dein A-Ha Erlebnis hat jeder der einmal von µC X auf µC Y umgestiegen ist ;-). Also nicht besonderes ! Wenn du uns im Forum etwas mitteilen möchtes (ausser dass du den XMega nun toll findest!) dann beschreib doch mal wo deine Probleme beim Umstieg waren, welche Internetseiten dir ggf. weitergeholfen haben etc. Aber evtl steht du ja noch unter Schock :-)
Detlev T. schrieb: > und hatten den Mut, die ganzen "alten Zöpfe" > abzuschneiden. Leider nicht nur die Zöpfe! Pin- und spannungskompatibel zu den üblichen ATtiny/ATmega wäre schon sinnvoll gewesen. Dann würde das Pimpen existierender Projekte erheblich leichter fallen. Aber nichtmal die 64- und 100-Pinner sind pinkompatibel. Daher, wenn ich eh alles komplett neu machen muß, dann kann ich ja gleich nen Cortex M3 nehmen. Peter
@Peter: Hm, das ist glaube ich nicht so einfach, weil der ATxmega ja intern komplett anders funktioniert. Aber mit dem Cortex M3 hast du Recht. Hab zwar auch schon was mit dem ATxmega gemacht, aber so richtig "gezündet" hat der bei mir nicht. Einen ARM kriegt man schon fast günstiger, ist schneller, hat 32-Bit und den gibt es von mehreren Herstellern.
Detlev T. schrieb: > Jetzt muss nur noch die Errata-Liste kürzer werden. ;-) Wird sie aber nicht, denn Atmel kümmert sich nicht drum. Seit der Ankündigung der Serie in 2008 ist die Liste nur gewachsen.
aaaaa schrieb: > XMEGAS in DIL/DIP dürfte wohl kaum möglich sein in der größe... > > Ist aber auch nicht so schwer zu löten das 0.5mm Raster. > Ich seh das ähnlich wie die anderen. Wenn schon TQFP, dann kann ich direkt nen CortexM3 nehmen. Ist auch einfach zu programmieren aber ist dann direkt noch ne ganze ecke Leistungsfähiger. Zumal es Preislich überhaupt keine Unterschiede macht. Die Cortex bekommt man ja auch schon ab 1-2€. Die XMega wären nur als DIL/DIP interessant wenn man mal schnell ne Schaltung auf Lochraster bauen möchte. Aber da tun es im Normalfall auch die normalen ATMega :)
Simon K. schrieb: > Aber mit dem Cortex M3 hast du Recht. Hab zwar auch schon was mit dem > ATxmega gemacht, aber so richtig "gezündet" hat der bei mir nicht. Einen > ARM kriegt man schon fast günstiger, ist schneller, hat 32-Bit und den > gibt es von mehreren Herstellern. Ich hatte mich auch erst gefragt, wozu der XMega gut sein soll, wenn wir doch schon Erfahrungen mit den normalen ATmegas und den Cortex-M3 haben - inzwischen möchte ich die XMega aber nicht mehr missen, da wir zum einen die AES-Einheit sehr gut gebrauchen können (die selbst in vielen Cortex-M3 nicht enthalten ist) und die XMega relativ viele UARTS in Bezug auf die Gehäusegröße haben. Viel mehr brauche ich für viele unserer Projekte derzeit nicht und da sind die XMegas auch einfach günstiger.
gibts den Cortex M3 als irgendeine DIP-Variante? Ich überlege auch schon, mir die dinger mal anzuschauen, aber TQFP lötet sich schlecht auf Experimentierplatinen und ich muß auch mal schauen was man da für eine Programmierumgebung bzw. Programmer braucht.
Ben _ schrieb: > gibts den Cortex M3 als irgendeine DIP-Variante? Ich überlege auch > schon, mir die dinger mal anzuschauen, aber TQFP lötet sich schlecht auf > Experimentierplatinen und ich muß auch mal schauen was man da für eine > Programmierumgebung bzw. Programmer braucht. Die meisten Cortex-M3 kommen mit Bootloader, so dass man nur noch eine serielle Schnittstelle benötigt. Ansonsten eignen sich viele JTAG-Adapter natürlich auch zum Programmieren. DIP-Versionen kenne ich keine, aber es gibt recht viele einfache Eval-Boards. Wir haben uns selber mal beispielsweise Platinen gemacht, wo ein STM32F103 drauf passt, inklusive USB, LDO, JTAG-Buchse, paar Taster und LEDs und halt Stiftleisten zum Aufstecken auf Bread-Boards. Ähnliches gibt es von Olimex und anderen Anbietern aber auch.
Die Bootloader-Variante mag ich nicht. Ich flash die Dinger lieber komplett, dann kann man sich keinen Bootloader zerschießen woraufhin man sich aus dem Ding aussperrt. Gibts die Dinger auch mit 40-60 Pins, so daß man sie vielleicht auf einer Adapterplatine nach DIP verwenden kann?
Ben _ schrieb: > Die Bootloader-Variante mag ich nicht. Ich flash die Dinger lieber > komplett, dann kann man sich keinen Bootloader zerschießen woraufhin man > sich aus dem Ding aussperrt. Ich arbeite seit Anfang 2009 mit den STM32, mich auszusperren habe ich bislang noch nicht geschafft und es ist mir auch von keinem anderen bekannt. > Gibts die Dinger auch mit 40-60 Pins, so daß man sie vielleicht auf > einer Adapterplatine nach DIP verwenden kann? Klar, LQFP-48 beispielsweise.
Hmm ist die Verwendung eines Bootloaders zwingend notwendig? Wenn nicht krieg ich den mit Sicherheit irgendwie getrasht... **fg**
Ben _ schrieb: > Hmm ist die Verwendung eines Bootloaders zwingend notwendig? Du kannst auch über JTAG programmieren. Geht zwar schneller, benötigt aber einen Adapter und normalerweise mehr Platz auf der Platine. > Wenn nicht > krieg ich den mit Sicherheit irgendwie getrasht... **fg** Sag Bescheid, wenn du es geschafft hast. Mir fällt spontan nichts ein, wie man das ohne weiteres hinbekäme (abgesehen vom Zerstören des gesamten Chips).
Ben _ schrieb: > Hmm ist die Verwendung eines Bootloaders zwingend notwendig? Wenn nicht > krieg ich den mit Sicherheit irgendwie getrasht... **fg** Ohne Gewähr: Der Bootloader läßt nur mit parallel Programmierung killen. Das JTAG läßt sich aber durch Setzen der PLL auf unsinige Werte killen. Der Bootloader ist somit der Notnagel. Beitrag "Cortex-M3 "Core is locked-up" (J-Link + Segger)" Peter
Zwei Pins des Mikrocontrollers dienen zur Auswahl des Speichers, aus dem der Mikrocontroller starten soll: User Flash, System Memory (=Bootloader) oder SRAM.
Simon K. schrieb: > @Peter: Hm, das ist glaube ich nicht so einfach, weil der ATxmega ja > intern komplett anders funktioniert. Warum sollte man nicht VCC, GND, Reset, XTAL und UART, I2C usw. auf die gleichen Pins legen können? Die zusätzlichen Funktionen kann man ja verteilen, wie man lustig ist. Ich weiß jetzt nicht, ob das durch Patenschutz gesperrt ist, aber es gibt einen PIC, wo die Peripherie ziemlich wahlfrei geroutet werden kann. Sowas hätte man selbstverständlich auch in den XMega einbauen müssen. Es ist schon seltsam, wie die einzelnen MC-Hersteller absichtlich nicht über den Tellerrand schauen und einfach den aktuellen Stand der Technik ignorieren. Peter
Ben _ schrieb: > gibts den Cortex M3 als irgendeine DIP-Variante? Ich überlege auch > schon, mir die dinger mal anzuschauen, aber TQFP lötet sich schlecht auf > Experimentierplatinen und ich muß auch mal schauen was man da für eine > Programmierumgebung bzw. Programmer braucht. Gibt eigentlich für alle Größen Adapterplatinen die man problemlos verwenden kann. Kann dann z.B. aussehen wie im angehängten Bild :) Programmer gibts den J-Link von Segger für 60€ (für Privat). So nen Teil für den Preis hätte ich für die ATMegas auch gerne :)
Au jaaaa ... manhatten-style... **fg** Kommt der JTAGICE MK2 mit den Dingern klar? Wahrscheinlich nicht, aber 60 Euro ist auf jeden Fall ziviler als ein JTAGICE. Schön wäre eine Adapterplatine wo die benötigten Quarze usw. gleich mit drauf sind, dann braucht man sich damit nicht mehr auf dem Lochraster rumzuplagen.
aaaaa schrieb: > XMEGAS in DIL/DIP dürfte wohl kaum möglich sein in der größe... Die 4-er im TQFP-44 Gehäuse haben doch auch nicht mehr Beinchen als ein ATMEGA32, oder? Peter Dannegger schrieb: > Pin- und spannungskompatibel zu den üblichen ATtiny/ATmega wäre schon > sinnvoll gewesen. > Dann würde das Pimpen existierender Projekte erheblich leichter fallen. > Aber nichtmal die 64- und 100-Pinner sind pinkompatibel. 5V halte ich heute für nicht mehr sinnvoll. Viele Peripherie-ICs vertragen nur noch 3,3V. Und die Hardware ist dann doch so unterschiedlich, dass ich mich frage, was da "Pinkompatibel" heißen soll. Ein funktionierendes Mega-Projekt würde ich nicht auf XMEGA umstellen wollen, das ist doch zuviel Arbeit. Visitor schrieb: > Wenn du uns im Forum etwas mitteilen möchtes (ausser dass du den XMega > nun toll findest!) dann beschreib doch mal wo deine Probleme beim > Umstieg waren, welche Internetseiten dir ggf. weitergeholfen haben etc. Das größte Problem: Die Peripherie ist nicht mehr da, wo sie war. Und sie wird anders angesprochen. Beispiel: PB4 als Eingang konfigurieren:
1 | alt:
|
2 | DDRB &= ~(1 << PB4); |
3 | neu: |
4 | PORTB.DIRCLR = PIN4_bm; |
Diese Struktur bringt mich auch dazu, die Treiber deutlich abstrakter zu schreiben. Eine blinkende LED an PB4 würde ich z.B. jetzt so machen:
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | typedef struct{ |
5 | Port_t * port; |
6 | uint8_t pin_bm; |
7 | } LED_t; |
8 | |
9 | void LED_init(LED_t * led) |
10 | {
|
11 | led->port->DIRSET = led->pin_bm; // Pin als Ausgang |
12 | }
|
13 | |
14 | void LED_toggle(LED_t * led) |
15 | {
|
16 | led->port->OUTTGL = led->pin_bm; |
17 | }
|
18 | |
19 | int main(void) |
20 | {
|
21 | LED_t led; |
22 | |
23 | led.port = &PORTB; |
24 | led.pin = PIN4_bm; |
25 | |
26 | LED_init(&led); |
27 | |
28 | while(1) |
29 | {
|
30 | LED_toggle(&led); |
31 | _delay_ms(250); |
32 | }
|
33 | }
|
Vorteil: Ist bei meinem nächsten "Projekt" die LED an einem anderen Pin, muss ich nur die Werte im LED_t-struct ändern, nicht mehr den Quelltext des Treibers. Das ist viel eleganter, aber ich muss mich halt stark umstellen. Geholfen haben mir da die Texte und vor allem der Quelltext der Appnotes von Atmel für die Peripherie, um dieses Prinzip zu verstehen.
Detlev T. schrieb: > Ist bei meinem nächsten "Projekt" die LED an einem anderen Pin, > muss ich nur die Werte im LED_t-struct ändern, nicht mehr den Quelltext > des Treibers. Das ist viel eleganter, aber ich muss mich halt stark > umstellen. Geholfen haben mir da die Texte und vor allem der Quelltext > der Appnotes von Atmel für die Peripherie, um dieses Prinzip zu > verstehen. Alternativ schon mal über defines nachgedacht
1 | #define LED_PORT PORTB
|
2 | #define LED_PIN_BM (1U << 1U)
|
2ter Gast schrieb: > Alternativ schon mal über defines nachgedacht Ja klar, so geht es auch - bis man zwei LEDs blinken lassen will. Ich brauche dann nur eine zweite Variable vom Typ LED_t - und du? :-) Die MEGAs hatten bislang nur eine SPI-Schnittstelle, eine TWI und ein USART (ja,ja, inzwischen gibt es auch welche mit zweien). Da gab es keine Auswahl. Die XMEGAs haben da viel mehr. Da will ich doch nicht für jeden der 7 USARTs eigene Routinen schreiben müssen - auch wenn das größtenteils Copy&Paste ist. Das ist so schon eine prima Idee.
Detlev T. schrieb: > Ja klar, so geht es auch - bis man zwei LEDs blinken lassen will. Ich > brauche dann nur eine zweite Variable vom Typ LED_t - und du? :-) Letzlich ist der Schreibaufwand gleich, nur belege ich bei LED usw. mit ner Variable keinen Speicher. Du musst die ja auch erstmal "initialisieren". Ich schreibe weiteres define. Deine Abstraktion zum Ansteuern der Port Pin finde ich nicht elegant. Und natürlich mache ich kein Copy&Paste bei identischen Peripherals. Die "Idee" mit den structs von Atmel ist ein alter Hut.
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.