Hallo Forum,
hoffentlich bin ich hier richtig. Falls nein: sorry; vielleicht können
die Mods meinen Thread ja verschieben. Einen passenden älteren Beitrag
habe ich auch nicht finden können.
Ich will acht LEDs auf einem MSP-430-Board als Lauflicht programmieren.
Mein Code sieht so aus:
1 | #include <msp430x16x.h>
|
2 |
|
3 | int main(){
|
4 | int n, i = 0;
|
5 | P3DIR = 0xFF;
|
6 | P3SEL = 0x00;
|
7 |
|
8 | // Endlosschleife
|
9 | while(1) {
|
10 | if (i == 0) {
|
11 | // LEDs alle ausmachen.
|
12 | P3OUT = i;
|
13 | i += 1;
|
14 | continue;
|
15 | }
|
16 | // LEDs auf 1, 2, 4, 8, .... setzen.
|
17 | P3OUT = i;
|
18 | i *= 2;
|
19 | // Wenn die hochwertigste LED geschaltet wurde: von vorne (ab 0).
|
20 | i %= 255;
|
21 | for (n = 0; n < 200; n++) {;} // <- !!!!
|
22 | }
|
23 | return 0;
|
24 | }
|
Soweit funktioniert das alles wunderbar (i nimmt nur 0 und
Zweierpotenzen an, die werden auf das LED-Byte geschrieben), die LEDs
werden jedoch viel zu schnell geschaltet (sie "stehen" sozusagen alle).
Um in meiner Schleife also eine zeitliche Verzögerung zu erreichen (auf
sleep() o.ä. kann ich nicht zugreifen), habe ich das mit "!!!!"
markierte for-Schleifenkonstrukt eingefügt. Mit einem Durchlauf bis 200
blinken meine LEDs aber nur unwesentlich langsamer.
Sobald ich den Durchlauf erhöhe, n also bis zu einem größeren Wert gehen
lasse, werden plötzlich nicht mehr alle LEDs geschaltet. Schon ab einem
Durchlauf bis n=799 leuchten nur noch die niedrigwertigsten 6 LEDs.
Aber wieso!? Ich hab mir darüber heute morgen in der Uni den Kopf
zerbrochen, mein Betreuer wusste auch keinen Rat.
n und i hängen doch nicht zusammen, ich hab' echt keinen Plan.
Hat jemand hier im Forum vielleicht einen Tipp?
Wenn ich das nächste Mal in's Labor darf, würde ich mich gerne mit etwas
anderem beschäftigen.
Habe ich in meinem Programm vielleicht irgendwas übersehen?
Könnte mir außerdem jemand sagen, wieso ich beim Kompilieren einen
Fehler bekomme, wenn ich INTs innerhalb des Quelltextes deklariere, und
nicht unmittelbar nach dem main()-Einsprungpunkt? Ist das einfach eine
Schwäche des verwendeten Compilers (an der Uni benutzen wir die MSP IAR
Embedded Workbench)?
Wenn jemand Rat wüsste oder mir Tipps geben könnte wäre das wirklich
super.
Vielen Dank im Voraus und viele Grüße
Benni