Gast
#3100916
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
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.