Forum: Mikrocontroller und Digitale Elektronik Komisches Verhalten Pollin Evaluationsboard


von Tobias H. (matrix-ntn)


Lesenswert?

Hallo zusammen,

ich habe gerade nen kleinen Code für mein Pollin Evaluationsboard V 2.01 
geschrieben:
1
DDRD = 0xE0; // Die letzten 3 Ausgänge
2
while(1)
3
{
4
  if(bit_is_set(PIND,PD2))
5
  {
6
    PORTD |= (1<<PD5);
7
  }
8
  else
9
  {
10
    PORTD &= (1<<PD5);
11
  }
12
13
  if(bit_is_set(PIND,PD3))
14
  {
15
    PORTD |= (1<<PD6);
16
  }
17
  else
18
  {
19
    PORTD &= (1<<PD6);
20
  }

Der Code soll folgendes machen:
Wenn ich Taster1(PD2) drücke soll LED1(PD5) leuchten
Wenn ich Taster2(PD3) drücke soll LED2(PD6) leuchten
Beim loslassen sollen die LED jeweils zurückgesetzt werden.

Soweit so gut. Wenn ich meinen Code so ansehe, sollte es doch eigenlich 
gehen oder nicht?!

Programm geflasht und nach drucken des Tasters1 leuchtet LED1. Beim 
loslasen geht diese wieder aus. freu
Das gleiche auch bei Taster2 und LED2.
Wenn ich nun aber beide Taster drücke und lasse einen z.B. Taster1 los 
sieht man das die LED1 etwas (aber nur ganz gering) dunkler wird bleibt 
aber an. Erst wenn ich dann den Taster2 loslasse gehen beide aus. Dies 
funktioniert auch andersrum, wenn ich Taster1 gedrückt halte und Taster2 
loslasse.

An was liegt das? Ist der COde falsch oder ist da ein problem auf dem 
Board?

Bin um jeden tip Dankbar.

Grüße
Matrix-NTN

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Es sollte
1
PORTD &= ~(1<<PD6);
bzw
1
PORTD &= ~(1<<PD5);
lauten.

von Εrnst B. (ernst)


Lesenswert?

Der Code zum Ausschalten ist falsch, statt
1
  PORTD &= (1<<PD5);
muss es
1
  PORTD &= ~(1<<PD5);

heißen.

Edit:
Grmpf. Maik war schneller.

von holger (Gast)


Lesenswert?

>    PORTD &= (1<<PD5);

    PORTD &= ~(1<<PD5);

von Tobias H. (matrix-ntn)


Lesenswert?

Oh... Ups.... wohl ein anfänger fehler :-)
Funktioniert nun perfekt auf dem Board...

Nun ist mein Ziel dies über ein Angeschlossenes IDE kabel zu machen...
Dabei setzte ich nun einen Ausgang(PA0) und sage, wenn der Eingang(PA1) 
kommt setze LED2 und ansonsten LED1.

Nun habe ich das IDE Kabel angeschlossen... Aber es leuchtet die LED2 
dauernd auser wenn ich den draht von PA1 mit meiner Hand berühre, dann 
gehen abundzu beide LEDs an und abundzu geht denn nur die LED1 an.
Wie wenn er irgendwie induktivitäten oder sowas hätte.

Hier noch der COde
1
PORTA |= (1<<PA0);
2
  if(bit_is_set(PINA,PA1))
3
  {
4
    PORTD |= (1<<PD6);
5
    PORTD &= ~(1<<PD5);
6
  }
7
  else
8
  {
9
    PORTD |= (1<<PD5);
10
    PORTD &= ~(1<<PD6);
11
  }

von Marius W. (mw1987)


Lesenswert?

Interne Pullups für die Taster-Eingänge aktiviert?

So ein Kabel ist ne schöne Antenne und zieht Störungen magisch an. Wenn 
die Pins als Eingang geschaltet sind, dann haben die ne recht hohe 
Eingangsimpedanz. Deshalb wirken sich Störungen so extrem aus.

Abhilfe: Pullups aktivieren und den Schalter nach GND schalten lassen.

MfG
Marius

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.