interrupt mit timer

Gast #1923907
Lesenswert?
• ▲
▼
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?
Gast #1923919
Lesenswert?
• ▲
▼
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.
Gast #1923931
Lesenswert?
• ▲
▼
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);
}
Gast #1923954
Lesenswert?
• ▲
▼
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
Gast #1924189
Lesenswert?
• ▲
▼
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();
>  }
>  }
#1924335
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.