xMega totaler Anfänger, Frage I/O

Gast #2204950
Lesenswert?

Hallo,

bin wirklich blutiger Anfänger, und möchte mich ein wenig mit 
Microcontrollern beschäftigen. Habe mir schon einige Tutorials 
durchgelesen, und habe nun ein evaluation-Board mit ATXMega 128A1 hier. 
Ich kann auch Code auf mein Board laden, habe aber eine Frage zu Ein- 
und Ausgängen.

Ich komme eher aus dem Bereich SPS, daher komm ich wohl auch nicht auf 
den richtigen PFad, hier mein Code:
1
#include <avr/io.h>
2
#include <stdint.h>
3

4
int main (void) {            
5
 
6
PORTE.DIR = 0x00;       // Alle Pins EINGANG
7
PORTE.DIR |= (1<<PIN5);     // PINE5 auf Ausgang
8

9
  while(1)
10
  {
11

12
// Ist das Signal an PIN0 von PORTE Low so ist der Vergleich wahr Tast nach GND
13
if (!( PORTE.IN & 0x01 )) {
14

15
PORTE.OUT |= (1<<PIN5); //PORTE Pin5 wird HIGH wenn PORTE PIN0 low ist
16
  }
17

18
} 
19
    return 0;
20
}

Ich möchte, dass der Ausgang PORTE PIN5 gesetzt wird, wenn der Eingang 
PORTE Pin0 high ist. Der Ausgang wird aber direkt gesetzt. Kann mir ein 
Profi vlt. einen kleinen Hinweis geben?

Ich bedanke mich jetzt schon mal ;-)

Gruss
Sven
Persönliche Seite #2205003
Lesenswert?

Sven schrieb:
> Ich möchte, dass der Ausgang PORTE PIN5 gesetzt wird, wenn der Eingang
> PORTE Pin0 high ist. Der Ausgang wird aber direkt gesetzt. Kann mir ein
> Profi vlt. einen kleinen Hinweis geben?

Weil du genau das umgekehrte Verhalten in C-Code umgesetzt hast. Wenn 
der Pin0 low ist, ist (PORTE.IN & 0x01) 0, negiert also 1 und dein 
Ausgang wird gesetzt. Im Kommentar ist es jedoch richtig.

Ansonsten, wenn du nur einen Taster dran hast, solltest du auch den 
Pull-Up-Widerstand aktivieren an Pin0 - ansonsten floatet dein Pin. Wenn 
nur einmal ein Low-Pegel erkannt wird, wird dein Ausgangspin gesetzt, 
jedoch nie mehr zurückgesetzt. Eventuell also noch ein else spendieren, 
sofern das Verhalten nicht gewünscht wird. Details zum Pull-Up sind in 
dem verlinkten Tutorial.

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