www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik interrupt mit timer


Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja aber wie kann ich das umgehen damit der timer alle 100ms auslöst 
und nicht erst nach dem delay_ms 5 mal hintereinander?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: nicht_Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
>  }
>  }

Autor: nicht_Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, mei Fehler, da ist ja keiner, sorry.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.