Hallo,
ich bin langsam am Verzweifeln. Vieleicht kann mir ja jemand von euch
helfen.
Ich habe ein Projekt für einen AtMega644p mit dem AVR Studio 4.19 in cpp
geschrieben.
Es sind einige Variablen mit "extern" in einer Header Datei deklariert,
die ich in mehreren cpp Dateien einbinde. So haben alle Cpp Dateien
Zugriff auf diese Variablen. In der Cpp datei mit der main() Funktion
sind die Variablen auch implementiert worden.
In den Variablen können Werte von 0 bis 255 gespeichert werden. An Hand
dieser Werte wird mit einem Timer0 in einer ISR ein PWM Signal auf
angeschlossene RGB LED generiert.
Ein weiterer Timer1 ist so programmiert, dass er Millisekunden Zählen
kann.
In der Main Funktion habe ich zunächst einige Test Werte in die
Variablen für die LEDs geschrieben. Es stellen sich die richtigen
Helligkeiten an den einzelnen Farben ein.
In der While(1) Schleife kommt jetzt das Problem.
Hier steht der Folgende code:
1 | while(1)
|
2 | {
|
3 | if (Millisekunden > 200)
|
4 | {
|
5 | Gruen1 = 0;
|
6 | Blau1 = 120;
|
7 | }
|
8 |
|
9 | if (Millisekunden > 5000)
|
10 | {
|
11 | Gruen1 = 120;
|
12 | Blau1 = 0;
|
13 | }
|
14 |
|
15 | //USART0_send_String("T;");
|
16 | }
|
Es sollte also erst nach 200ms die Blaue LED schwach Leuchten. Nach 5
Sekunden dann die Grüne und die Blaue soll aus gehen. (Ist nur für einen
Test)
Bei der Ausführung dieses Programms, bleiben die Grüne und die Blaue LED
aber aus. Wenn ich den auskommentierten USART0 send Befehl wieder mit
kompilieren lassen, funktioniert alles wie gewollt.
mache ich anstatt dem USART0 send ein _delay_ms(2), bleiben auch alle
LEDs aus.
Stelle ich die Compiler Optimierungsoption um, von Os auf O0, so geht
auch mit auskommentierten USART0 send erst die Blau LED an. Nach 5
Sekunden auch die Grüne. Die Blaue erlischt aber nicht.
Ich habe die AVR Toolchain, MinGW und WinAVR Probiert. Überall das
gleiche Verhalten. Der Code muss ich richtig sein, sonst würde ja mit
aktiviertem USART0_send auch nicht gehen. Der Controller hängt sich
nicht auf. Das erkenne ich an einem 2. LED Lichtband, indem ich mit Rot2
= 20 ein schwach leuchtendes Rot anzeigen lasse.