Forum: Mikrocontroller und Digitale Elektronik xMega totaler Anfänger, Frage I/O


von Sven (Gast)


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

von pegel (Gast)


Lesenswert?


von Christoph B. (christophbudelmann) Benutzerseite


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.

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.