Prog. im Xmega128 A1 läuft nicht - Hilfe gesucht

Gast #2367599
Lesenswert?

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
Gast #2367652
Lesenswert?

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
#2367818
Lesenswert?

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
Gast #2368405
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren