Frage zum Interrupt

Gast #2821825
Lesenswert?
• ▲
▼
Ich habe TCCRO deaktiviert und wollte mal schauen, ob sich was tut. 
Leider ist es nicht so. Warum?
Doch sobald ich TCCRO aktiviere, gibt es alle 30ms einen Überlauf und 
die LED fängt an zu blinken.
1
#define F_CPU 8000000UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5

6
// Timer/Counter0 Overflow
7
ISR (TIMER0_OVF_vect)
8
{
9
  PORTA ^= (1 << PA0);    // PA0 togglen
10
}
11

12
int main()
13
{
14
  DDRA |= (1 << DDA0);          // PORT A0 als Ausgang
15

16
  TIMSK |= (1 << TOIE0);          
17
  sei();                  
18
  
19
  // TCCR0 |= (1 << CS00) | (1 << CS01) | (1<<CS02);    // Prescaler: 1/1024 (CS1=0 per default)
20

21
  while (1);    
22
  return 0;
23
}


gruß Tim
Gast
Lesenswert?
• ▲
▼
Keine Ahnung von welchem Mikrocontroller du hier sprichst. Aber wenn wir 
mal annehmen, dass es sich beim Timer0 um einen 8 Bit Timer/Counter 
handelt, dann gibt es bei deinen Einstellungen alle 30,63 Sekunden einen 
Overflow.

8000000  1024  255 = 30,63

Und was genau ist jetzt die Frage? Der Timer/Counter läuft nur, wenn du 
eine Clock Source auswählst.
Gast
Lesenswert?
• ▲
▼
Übrigens dürften es nach nochmaligem Nachrechnen 30,52 Sekunden sein, da 
man natürlich durch 256 teilen muss und nicht durch 255. 255 ist nur der 
höchste Werte, weil man ja bei 0 anfangt zu zählen.

Daher:

8000000/1024/256 = 30,52
Gast
Lesenswert?
• ▲
▼
Cube schrieb:
> Übrigens dürften es nach nochmaligem Nachrechnen 30,52 Sekunden sein, da
> man natürlich durch 256 teilen muss und nicht durch 255. 255 ist nur der
> höchste Werte, weil man ja bei 0 anfangt zu zählen.
>
> Daher:
>
> 8000000/1024/256 = 30,52

keine 30,52s , sondern 30,52ms
Lesenswert?
• ▲
▼
Tim schrieb:
> Ich meinte, wenn ich nun den Prescaler deaktiviere, dann müsste doch
> alle 31s ein Overflow geben.

Da muss man mal ein wenig Ordnung ins Chaos bringen.

Wenn du den Prescaler deaktivierst, dann hat der Timer keinen Clock 
mehr. Ohne Clock läuft er auch nicht. Ein Timer der nicht läuft kann 
auch keinen Overflow generieren.

> denn
>
> 8000000 / 256 = 31,25s

Das ist aber nicht 'kein Prescaler' sondern ein Prescaler von 1. Auch 
den kann man mit den CS Bits auswählen.
Lesenswert?
• ▲
▼
Tim schrieb:
> Spess53 schrieb:
>> Hi
>>
>>>keine 30,52s , sondern 30,52ms
>>
>> Auch das stimmt nicht.
>>
>> 1/(8000000/256) = 32µs
>>
>> MfG Spess
>
> woher hast du die 1?

ok.
Es wird Zeit auch da ein wenig Ordnung reinzubringen.

Wenn eine Zählschaltung in 1 Sekunde bis 8 Millionen zählen kann 
(könnte), wie lange braucht sie dann um von 0 bis 255 (256 Zählschritte) 
zu zählen?


   8000000     .....    1 Sekunde
       256     .....    x
  ------------------------
         256 * 1
    x = ---------- = 0.000032 Sekunden
         8000000


Jetzt hast du einen Prescaler von sagen wir mal 1024. D.h. in 1 Sekunde 
zählt der Timer nicht mehr 8 Millionen Pulse, sondern ein 1024-tel 
davon. 8000000 / 1024 = 7812.5

Wenn also der Timer in 1 Sekunde 7812.5 Zählschritte macht, wie lange 
braucht er dann um 256 Zählschritte auszuführen?


       7812.5     .......   1 Sekunde
        256       .......   x
     ----------------------------
              256 * 1
        x = ----------- = 0.032768 Sekunden
              7812.5
Gast
Lesenswert?
• ▲
▼
Hi

>woher hast du die 1?

8000000/256 ergibt die 'Frequenz' der Überläufe. Um die Zeitdauer zu 
bestimmen muss man halt 1/... rechnen. Bei 8MHz und Vorteiler 1024 
kommst du auf 32,768 ms. Für Blinken inner noch etwas kurz.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.