Forum: Mikrocontroller und Digitale Elektronik Anfängerproblem LED Lauflicht


von Valerie D. (valerie)


Lesenswert?

Hallo miteinander,
ich habe an einem MSP430F2272 8 LED´s angeschlossen. An Port 1.
So, nun habe ich hier ein Minimalbeispiel:
1
int main(void)
2
{
3
  WDTCTL = WDTPW + WDTHOLD;    
4
  P1DIR = 0xFF;       
5
  P1OUT = 0xBF;
6
}

Ich setze alle Ports auf Ausgang.
Danach, so dachte ich, müsssten alle leds leuchten, bis auf die zweite 
von links, da 0xBF in Binärzahlen ausgedrückt folgendes ergibt: 10111111
P1.1 sollte doch 0 sein, also nicht leuchten?
Allerdings ist es nun so, dass genau nur diese LED leuchtet.
Kann mir jemand weiterhelfen?
Dankeschön schonmal.

Valerie

von Karl H. (kbuchegg)


Lesenswert?

Valerie D. schrieb:

> Danach, so dachte ich, müsssten alle leds leuchten,

Das hängt davon ab, wie deine LED angeschlossen sind.

> Allerdings ist es nun so, dass genau nur diese LED leuchtet.

Scheinbar sind deine LED so angeschlossen, wie wir das hier (mehr aus 
hostorischen Gründen) auch machen.

An einem Ende der LED ist sie an Vcc (also an die Versorgungsspannung) 
angeschlossen und das andere Ende führt zum Pin.
D.h. die LED leuchtet, wenn der Pin auf 0 ist.


> P1.1 sollte doch 0 sein, also nicht leuchten?
Hüte dich davor, mit 0 und 1 irgendwelche physikalischen 'Gegebenheiten' 
zu assozieren. Das hängt einzig und alleine davon ab, wie diese 
Zusatzhardware angeschlossen ist. Beides ist möglich: Aktion bei 1 und 
Aktion bei 0.

von Valerie D. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

Hallo Herr Buchegger,
>
> Das hängt davon ab, wie deine LED angeschlossen sind.
>

Ok.

>
> Scheinbar sind deine LED so angeschlossen, wie wir das hier (mehr aus
> hostorischen Gründen) auch machen.
>
> An einem Ende der LED ist sie an Vcc (also an die Versorgungsspannung)
> angeschlossen und das andere Ende führt zum Pin.
> D.h. die LED leuchtet, wenn der Pin auf 0 ist.

Genau das war der Fehler! ;-)

> Hüte dich davor, mit 0 und 1 irgendwelche physikalischen 'Gegebenheiten'
> zu assozieren. Das hängt einzig und alleine davon ab, wie diese
> Zusatzhardware angeschlossen ist. Beides ist möglich: Aktion bei 1 und
> Aktion bei 0.

Ok super. Das werde ich in Zukunft im Hinterkopf behalten.
Danke vielmals für die super schnelle, gute und zielführende Antwort.

Valerie

von Harald W. (wilhelms)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Beides ist möglich: Aktion bei 1 und  Aktion bei 0.

Ausserdem kan "1" auch 0V und "0" 5V bedeuten. (Invertierte Logik)
Gruss
Harald

von Dietrich L. (dietrichl)


Lesenswert?

Valerie D. schrieb:
> So, nun habe ich hier ein Minimalbeispiel:
> int main(void)
> {
>   WDTCTL = WDTPW + WDTHOLD;
>   P1DIR = 0xFF;
>   P1OUT = 0xBF;
> }

Nebenbei: hier fehlt noch die Endlosschleife. Auch wenn es so 
funktioniert: das kann Zufall sein.

Gruß Dietrich

von Valerie D. (valerie)


Lesenswert?

Dietrich L. schrieb:
> Nebenbei: hier fehlt noch die Endlosschleife. Auch wenn es so
> funktioniert: das kann Zufall sein.

Ja, das war mir bewusst. Trotzdem danke für Ihre Hilfe. Ich poste hier 
vollständigkeitshalber meinen kompletten Code:
1
#include  <msp430x22x2.h>
2
3
4
void delay(unsigned int i);      
5
6
int main(void)
7
{
8
  unsigned int i;
9
  unsigned int pattern;
10
11
  WDTCTL = WDTPW + WDTHOLD;    
12
13
  P1DIR = 0xFF;          
14
15
  pattern = 0x03;         
16
  while(1)          
17
  {
18
19
    P1OUT=~0x81;
20
    delay(65000);
21
    P1OUT=~0x42;
22
    delay(65000);
23
    P1OUT=~0x24;
24
    delay(65000);
25
    P1OUT=~0x18;
26
    delay(65000);  
27
    P1OUT=~0x24;
28
    delay(65000);
29
    P1OUT=~0x42;
30
    delay(65000);
31
    P1OUT=~0x81;
32
    delay(65000);
33
    delay(65000);
34
35
    for (i=0; i<6; i++)
36
      {
37
      pattern <<=1;
38
      P1OUT = ~pattern;    
39
      delay(40000);      
40
      }
41
    for (i=0; i<6; i++)
42
      {
43
      pattern >>=1;
44
      P1OUT = ~pattern;    
45
      delay(40000);      
46
      }
47
  }
48
}
49
50
void delay (unsigned int i)
51
{
52
  while(i > 0)
53
    i--;
54
}

Valerie

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.