Werbung
ja danke :-D
ich habe jetzt noch eine doofe frage aber was soll schon passieren..
also die 1 ms habe ich jetzt aber ich soll ja jede zweite LED 9 ms leuchten lassen.
muss ich dafür einen zweiten timer einfügen oder reicht dass mit diesem invertierenden befehl bei else? ist das programm denn sonst richtig??
grüss dich,
Ich habe noch etwas am quellcode geändert.
Wenn ich das programm laufen lasse, funktioniert es immernoch nicht so wie gewünscht...
warum hast du in dein Interrupt eine Endlosschleife?Code:ISR (TIMER1_OVF_vect) { long timer_1 = 0 ; // Variable "Timer1" deklarieren long timer_2 = 0 ; // Variable "Timer2" deklarieren while (1) { timer_1 ++; // Vorladewert von 0 an inkrementieren PORTB = 0xAA ; // ungerade LED´s werden für 1 ms beleuchtet if (timer_1 = preload_value_1) { TIMSK = (1 << TOIE1); // 1 ms ist vergangen -> Interrupt einschalten } else { timer_2 ++; PORTB=0x55 ; // gerade LED´s werden für 9 ms beleuchtet if (timer_2 = preload_value_2) { TIMSK = (1 << TOTIE1); // 9 ms sind vergangen-> Interrupt einschalten } } } }
Dein Programm ist schneller beendet, als der Timer1 sein Interrupt auslöst.Code:int main (void) { DDRB |=(1<<PB2); // Output 1 DDRB |=(1<<PB3); // Output 2 sei (); }
Und du greifst gar nicht auf deine init_Timer1 Funktion zu. Also läuft dieser erst gar nicht an.
Okay... ich erkläre es dir, aber ich sehe hier ein großes Wissensdefizit im Bereich Progammierung von Microcontroller in der Sprache C bzw. C++!
(Und ja... ich bin auch nicht der super Programmierer)
sei(); gibt hier die Interrupt global frei. Soll heißen, dass du den Controller erlaubst auf Interrupt zu reagieren. cli(); ist dem entsprechen die Sperrung von Interrupt.
Deine Endloschleife (oder auch Arbeitsschleife genannt) sollte in der Main Funktion sein (hinter der Initialisierung).
Interrupts sollten immer so kurz und knapp programmiert werden wie möglich, um die Unterbrechung vom Programm möglichst kurz zu halten (ist aber in deinem Fall egal).
von daher würde ich dein Code so strukuieren:
Sry, dass ich meine Antwort möglichs oberflächlich halte. Aber ich lese aus deinem ersten Post herraus, dass du den Auftrag hast den Code zu entwickeln bzw. dir Gedanken dazu zu machen sollst. Wir sind alle bereit dir zu helfen, aber ich werde dir keinen fertigen Code anbieten.Code:- Einbinden von Headerdatein - Funktionen und Interruproutinen -Hauptfunktion + Portrichtung konfigurieren + Timer initialisieren + Interrups global freigeben + Arbeitsschleife
Darf man hier fragen, wer dich dazu verdammt hat?
Lesezeichen