bei meinem programm habe ich einen timer der hochzählt --> ISR alle 100ms wärenddessen blinkt eine LED mit _delay_ms(500); wenn jetzt das delay_ms fertig ist wird ein interrupt des timer ausgelöst und zwar 5 mal. ist es so dass delay_ms und der timer zusammenhängen. gibt es keine möglichkeit das delay_ms zu unterbrechen und einen timerinterrupt auszulösen?
tobias schrieb: > ist es so dass delay_ms und der timer zusammenhängen. nein ist es nicht, so wie du es schreibst kann es nicht sein.
naja aber wie kann ich das umgehen damit der timer alle 100ms auslöst und nicht erst nach dem delay_ms 5 mal hintereinander?
tobias schrieb: > naja aber wie kann ich das umgehen damit der timer alle 100ms auslöst > und nicht erst nach dem delay_ms 5 mal hintereinander? der Timmer löst immer aus egal wei lange ein dalay läuft, das was du schreibt kann nicht sein. Zeige und etwas von den Quellcode sonst können wir nur raten.
Das starten des timer erfolgt über tastendruck, somit zeitunabhängig --> interrupt des taster ist im code aber jetzt nicht dabei. int main (void) { if((count <= 10) && (count > 0)) { startup = 0; while(startup == 0 || ((TCCR0B & 0x03) == 0x03)) { LED_Cells_I(); } } } ISR(TIM0_COMPA_vect) // Timeroverflow alle 100ms { count++; TCNT0=0; // Timer zurücksetzen } void LED_Cells_I(void) { for (x=0; x < 2; x++) { PORTB |= (1 << PB3); // setzt Pin3 in PORTB auf "1" _delay_ms(500); // warten PORTB &= ~(1 << PB3); // löscht Bit 3 in PORTB delay_ms(500); // warten } _delay_ms(1000); }
Ein Codeschnipsel, der nicht compiliert, geschweige denn läuft und aus dem alles Wichtige gekonnt rausgekürzt wurde, z.B. ob count als volatile deklariert wurde. Damit fängt keiner was an.
natürlich ist count volatile sonst würde es ja nicht laufen es funktioniert ja alles bis auf das interrupt dass immer auslöst ich glaube jeder kann damit etwas anfangen so schwer sind while und for schleifen ja nicht
Läuft, obwohl der Compiler meckert? Bitte auch richtig einrücken, damit man das auch lesen kann. Was soll man damit, wenn man die Initialisierung nicht sieht? Also gesamten Code als Anjang posten. Und hier den Fehler entfernen: > >if((count <= 10) && (count > 0)) > { > startup = 0; > while(startup == 0 || ((TCCR0B & 0x03) == 0x03)) > { > LED_Cells_I(); > } > }
tobias schrieb: > natürlich ist count volatile sonst würde es ja nicht laufen Völliger Quatsch. Das ist kein Kriterium, um zu beurteilen, ob etwas volatile ist. Und zu Ratespielen habe ich keine Lust. Du hast die nötigen Informationen und lieferst sie nicht. Erwartest aber maßgeschneiderte Antworten. > es funktioniert ja alles bis auf das interrupt dass immer auslöst > ich glaube jeder kann damit etwas anfangen so schwer sind while und for > schleifen ja nicht Aha. Ich bin raus.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.