Hallo Leute, ich habe schon vor längerer Zeit mein Atmel Xmega-A1 Xplained Board bekommen und möchte nun das Programmieren üben. Ich verwende dazu das AVR-Studio 5 und FLIP. Debuger habe ich leider keinen. Progammiert wird in C. Als erste Aufgabe möchte ich nur ne LED Toggeln lassen sowie ich auf einen Taster drücke. Ausgangszustand der LED ist an. Hier nun mal das Prog was ich geschrieben habe. #include <asf.h> //wird automatisch von AVRStudio eingefügt... habs erstmal drin gelassen. #include <board.h> int main (void) { for(;;) { PORTE.DIRSET = (0x01); //PortE Ausgabe PORTD.PIN0CTRL = (0x1A); //Fallende Flanke und Buskeeper PORTD.INT0MASK = (0x01); //Interrupt Control Mask0, Low-level PORTD.INTCTRL = (0x01); //Interrupt Control = PIN0 PORTD.DIRCLR = (0x01); //PORTD Eingang 0 = Eingabe PORTE.OUTCLR = (0x01); //PORTE Ausgang 0 = LOW -> LED0 an sei(); } } IRS(PORTD_INT0_vect) { PORTE.OUTTGL = (0x01); } Wenn ich das Prog in den µC schreibe dann passiert nichts weiter als das die LED angeht. Beim betätigen des Tasters passiert nichts. Hat jemand ne Idee woran das liegen könnte? Danke im Vorraus. TT
Hallo, wenn du mit GND schaltest.... PORTD_PIN0CTRL = PORT_OPC_PULLUP_gc; // Pullup einschalten für Taster IRS(PORTD_INT0_vect)? ISR(PORTD_INT0_vect) { ....... } Gruß xmega
Hi, danke erstmal für deine Hilfe. Beim PinCTRl hatte ich nen Denkfehler dirn. IRS gibts natürlich auch nicht... Leider klappt es immer noch nicht. Ich werd es dann nochmal auf nem anderen Pin versuchen. Wenn ich: PORTE.DIRSET = (0x01); //PortE Ausgabe stehen habe, dann hat PORTE die Farbe violett und .DIRSET die Farbe blau. Wenn ich schreibe: PORTE_DIRSET = (0x01); //PortE Ausgabe dann sind beide Violett. Der Compiler bringt aber keine Fehlermeldung. Wo liegt der unterschied bei den beiden befehlen??? Danke und bis später. TT
Hallo, .DIRSET -> typedef struct PORT_struct _DIRSET -> #define Anweisung Ist aber egal, beides funktioniert! Bei der PIN-Deklaration würde ich dir vorschlagen, das so zuschreiben. Es ist für alle anderen besser zu verstehen. PORTD_DIRTGL = PIN0_bm; // Toggle Als Ausgang PORTD_DIRTGL = (1<<PIN0_bp); // Toggle Als Ausgang oder so: PORTD.DIRTGL = PIN0_bm; // Toggle Als Ausgang PORTD.DIRTGL = (1<<PIN0_bp); // Toggle Als Ausgang Gruß xmega
Hi, jetzt hab ich es hinbekommen. Hier der Code: #include <asf.h> #include <board.h> int main (void) { board_init(); PORTE_DIRSET = (1<<1); //PortE Ausgabe PORTD_DIRCLR = (1<<1); //PORTD Eingang 0 = Eingabe PORTD_INT0MASK = (1<<1); PORTD_INTCTRL = (1<<0); PORTD_PIN1CTRL = ((3<<3)|(1<<1));//Fallende Flanke und Pull-up PMIC.CTRL = 7; for(;;) { sei(); } } ISR(PORTD_INT0_vect) { PORTE_OUTTGL = (1<<1); //PORTE Ausgang 0 = LOW -> LED0 an } Was die schreibweise betrifft...: Es ist durchaus nachvollziehbar das die Bitverschiebung bzw. Hexangaben nicht besonders leserlich sind. Ich habe bisher noch nicht erwähnt das ich mich mit diesen Übungen gerade auf eine Prüfung vorbereite im Fach Microcomputertechnik. Unser Doz. hat aber leider keine Ahnung den Stoff zu vermitteln :-( (Ohne Scheiß, er macht das seit 35 Jahren und ist echt ein Profi. Nur die Pädagogik ist sch...) Und so muß ich mich hier quasi selbst reinarbeiten. Ich werde (wegen der Klausur) in den nächsten 2 Wochen daher meine unübersichtlich schreibweise beibehalten. Für die Zukunft nach der Klausur werde ich deinen Rat aber dankend befolgen. Man sieht schließlich gleich was Sache ist und braucht nicht erst in irgendwelche Tabellen reinschauen bzw Bitmuster auflösen. Habe aber schon etwas dazugelernt. Es war also keinesfalls nutzlos. Nochmals vielen Dank TT
http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial Xmegas funktionieren leicht anders, es gibt viel mehr Sachen zum aktivieren usw. Z.B dein
1 | PMIC.CTRL = 7; |
meint eigentlich
1 | //Interrupts (Highlevel,Mediumlevel und Lowlevel freigeben)
|
2 | PMIC.CTRL |= (1<<PIN0) | (1<<PIN1)|(1<<PIN2); |
Die oben genannte Seite half mir, von Atmegas zu Xmegas zu wechseln.
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.