Forum: Mikrocontroller und Digitale Elektronik xmega a1 xplained


von Markus B. (marki)


Lesenswert?

Hallo,

ich habe mir ein Microcontroller (xmega xplain A1) besorgt, weil wir in 
der Uni im nächsten semester damit arbeiten werden. Daher möchte ich 
mich schon ein bischen einarbeiten.   Ich habe vor 6 jahren mal mit C++ 
gearbeitet aber von dem ganzen ist mit fast nichts mehr 
zurrückgeblieben. Nun habe ich mal versucht LED 0 von PORT E (fängt ja 
beim PINS des uC's bei Null an)    durch den Taster 0 von PORT D 
einzuschalten. Das ganze funktioniert wunderbar aber sobald ich einen 
zweiten Taster dazu programmiere heisst wenn ich Taster 1 betätige soll 
LED 0 aus gehen und LED 1 soll an gehen. Wo liegt mein Fehler?


Ich habe gemerkt dass wenn ich nach 'int main ()' so hinschreibe:


  PORTD.DIR = 0x00; //als Eingang festgelegt
  PORTD.PIN0CTRL = 0x18; //Pull-Up zu PIN0 aktiviert
  PORTD.PIN1CTRL = 0x18;
  PORTE.DIR = (1<<0);
  PORTE.DIR = (1<<1);
       PORTE.OUT = (1<<0);
  PORTE.OUT = (1<<1);

dass es DANN nicht geht.


Programm: AVR Studio 5
Microcontroller xmega Xplain A1 verbunden mit JTag über AVR Dragon

Übertragen usw. funktioniert wunderbar da ich die LED's schonmal ein- 
ausschalten kann .

das Programm sieht so aus für das funktionierende:


#include <asf.h>
#include <avr/io.h>

int main (void)
{
  PORTD.DIR = 0x00; //als Eingang festgelegt
  PORTD.PIN0CTRL = 0x18; //Pull-Up zu PIN0 aktiviert
  PORTE.DIR = (1<<0);  //LED 0 von PORT E als Ausgang festgelegt
    PORTE.OUT = (1<<0); //damit das nicht gleich leuchten soll habe ich 
es wieder ausgeschaltet

while (1) {

  if (!(PORTD.IN && (1<<0)))  { //wenn Taste 0 von PORT D gedrückt wird, 
dann...
    PORTE.OUT &=~ (1<<0);  //LED 0 von Port E soll leuchten
  }
}}


---------------------und so funktioniert es nicht 
mehr-------------------



#include <asf.h>
#include <avr/io.h>


int main ()
{

  PORTD.DIR = 0x00; //als Eingang festgelegt
  PORTD.PIN0CTRL = 0x18; //Pull-Up zu PIN0 aktiviert
  PORTD.PIN1CTRL = 0x18;
  PORTE.DIR = (1<<0);
  PORTE.DIR = (1<<1);
    PORTE.OUT = (1<<0);
  PORTE.OUT = (1<<1);

  while (1) {

  if (!(PORTD.IN && (1<<0)))  { //wenn Taste 0 von PORT D gedrückt wird, 
dann...
    PORTE.OUT &=~ (1<<0);  //LED 0 von Port E soll leuchten

  if (!(PORTD.IN && (1<<1))) { // Wenn Taste 1 gedrückt dann soll...
    PORTE.OUT = (1<<0);  //LED 0 aus gehen und...
    PORTE.OUT &=~ (1<<1);  // LED1 soll leuchten
  }
  }
}}

von Nicht neu (Gast)


Lesenswert?

Markus B. schrieb:
> PORTE.DIR = (1<<0);
>   PORTE.DIR = (1<<1);
>        PORTE.OUT = (1<<0);
>   PORTE.OUT = (1<<1);

Der jeweils folgende Befahl macht den vorherigen zunichte.

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.