Anfängerproblem LED Lauflicht

OP #3210757
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
#3210766
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.
Gast #3210885
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
OP #3212777
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

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