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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren