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 } } }}
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.