xmega a1 xplained

OP #2778426
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
  }
  }
}}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.