ATtiny13 - Frage zu Timer Interrupt

Gast #3334742
Lesenswert?
• ▲
▼
Hallo,

folgendes Programm toggelt aus dem Interrupt heraus in periodischen 
Abständen PB1.

1
#include <avr/io.h>
2
#include <avr/interrupt.h>  
3

4
// *** TIMER 0  Zeitschleifen ***
5

6
ISR(TIM0_OVF_vect)       
7
  
8
{
9
  
10
  PORTB ^= ( 1 << PB1 );
11

12
}  // Ende ISR
13

14

15
int main()
16
{
17
  
18
  TCCR0B |= (1<<CS00 | 1<<CS02);     
19
  TIMSK0 |= (1<<TOIE0);    
20
                
21
  sei();       // enable timer interrupt
22
  DDRB |=( 1 << PB1 );        // PB0 an PORTB als Ausgang setzen
23
    
24

25
  while(1)          
26
      {
27
    } // Ende while
28

29
  return 0;
30
} //Ende main

So weit funktioniert es.

Was mich aber wundert: woher weiß der Counter, wie oft er durchlaufen 
soll, bevor ein Match vorliegt und das IRQ aufgerufen wird?

Hätte gedacht, dass man im OCR0A-Register einen Wert ablegen müsste.

Wenn ich es richtig sehe (und richtig gemessen und gerechnet habe), wird 
die Interrupt-Routine alle 256 Takte aufgerufen (wenn Vorteiler = 1).

Was muss man machen, damit das IRQ z.B. alle 100 Takte aufgerufen wird ?


Nachtrag: habe versuchsweise auch schon in die OCR0A/OCR0B-Register 
verschiedene Werte zwischen 10 und 240 geschrieben, das ändert aber 
leider nichts an der Ausgabefrequenz an Pin B1.
Gast #3334755
Lesenswert?
• ▲
▼
ISR(TIM0_OVF_vect) ist die Routine für eine Counter Overflow ( 
Zählerüberlauf ). Was du suchst ist ISR(TIM0_COMPA_vect), hier wird der 
Zähler mit dem Wert was im Register COMPA steht verglichen.

Aber lese dir doch bitte nochmal das Datenblatt durch oder Google da 
wirst du das mit Sicherheit noch genauer finden.

Grüssle.....
Gast #3334770
Lesenswert?
• ▲
▼
Vielen Dank für die superschnellen Antworten!!!

Speakless schrieb:
> ISR(TIM0_OVF_vect) ist die Routine für eine Counter Overflow (
> Zählerüberlauf ). Was du suchst ist ISR(TIM0_COMPA_vect), hier wird der
> Zähler mit dem Wert was im Register COMPA steht verglichen.

Ach so, dann bedeutet Counter Overflow, dass der Counter von Hause aus 
immer voll durchzählt, also hier 8 Bit; ein 16-Bit-Counter würde in dem 
Fall immer 65535 mal durchlaufen?!?
#3334796
Lesenswert?
• ▲
▼
Wie breit ist den der jeweilige Timer?

Ein 8 Bit Timer kann mit 8 Bits zählen. Drum heisst er ja auch 8-Bit 
Timer.  Wie weit kann man mit 8 Bits zählen, ehe es grundsätzlich nicht 
mehr weiter geht und ein Overflow passieren MUSS?

Ein 16 Bit Timer hat ein 16 Bit breites Zählregister. Wie weit kann man 
mit 16 Bit zählen, bis es prinzipbedingt nicht mehr weiter geht?


Deine Frage lautet im Grunde:
Wenn ich an 2 Händen 10 Finger habe und ich bei jedem Zählvorgang einen 
Finger mehr ausstrecke, wie weit kann ich dann mit 2 Händen zählen?
Na, bis 10. Denn mehr Finger hast du nun mal nicht.
Zählst du binär (also genau so wie es der Timer macht), dann kannst du 
bis 1023 zählen. Denn 2 hoch 10 ist 1024. Mehr unterschiedliche Zustände 
kannst du mit 10 Fingern und ausstrecken/nicht ausstrecken nicht 
erreichen.
Gast #3334816
Lesenswert?
• ▲
▼
Peter II schrieb:
> Karl Heinz Buchegger schrieb:
>> Ein 16 Bit Timer hat ein 16 Bit breites Zählregister. Wie weit kann man
>> mit 16 Bit zählen, bis es prinzipbedingt nicht mehr weiter geht?
>
> dumm nur das ein 16Timer auch im 8, 10 bit modus laufen kann.

Das ist dann aber ISR(TIM0_COMPA_vect) und nicht Counter Overflow.



Peter II schrieb:
> http://www.atmel.com/images/doc2535.pdf
> seite 72

Danke!
Gast #3334818
Lesenswert?
• ▲
▼
Karl Heinz Buchegger schrieb:
> Deine Frage lautet im Grunde:
> Wenn ich an 2 Händen 10 Finger habe und ich bei jedem Zählvorgang einen
> Finger mehr ausstrecke, wie weit kann ich dann mit 2 Händen zählen?
> Na, bis 10. Denn mehr Finger hast du nun mal nicht.
> Zählst du binär (also genau so wie es der Timer macht), dann kannst du
> bis 1023 zählen. Denn 2 hoch 10 ist 1024. Mehr unterschiedliche Zustände
> kannst du mit 10 Fingern und ausstrecken/nicht ausstrecken nicht
> erreichen.

Danke für das Bild, ist klar geworden!
#3334885
Lesenswert?
• ▲
▼
Peter II schrieb:
> idil schrieb:
>> Das ist dann aber ISR(TIM0_COMPA_vect) und nicht Counter Overflow.
>
> doch (denke ich zu mindest), siehe:
>
>> http://www.atmel.com/images/doc2535.pdf
>> seite 72
>
> TOV kann bei MAX, BOTTOM oder TOP je nach modus gesetzt werden.

Ja.
Aber bisher war immer von ganz normalen 08/15 Modus die Rede.
Dass die Timer unterschiedliche Modi können, ist klar. Aber in einer 
Einführung geht man vom einfachsten Standardfall aus.
Gast #3334887
Lesenswert?
• ▲
▼
Hi

>TOV kann bei MAX, BOTTOM oder TOP je nach modus gesetzt werden.

Bei PWM-Modi mit OCRA als Top wird aber der Overflow-Interrupt nur 
ausgelöst wenn OCRA je nach Mode 0xFF bzw 0x00 ist. Ansonsten wird nur 
der OC-Interrupt ausgelöst.

MfG Spess
#3334966
Lesenswert?
• ▲
▼
spess53 schrieb:
> Hi
>
>>TOV kann bei MAX, BOTTOM oder TOP je nach modus gesetzt werden.
>
> Bei PWM-Modi mit OCRA als Top wird aber der Overflow-Interrupt nur
> ausgelöst wenn OCRA je nach Mode 0xFF bzw 0x00 ist. Ansonsten wird nur
> der OC-Interrupt ausgelöst.
>
> MfG Spess

Das ist nicht richtig. Bei den Fast-PWM-Modes wird das Overflow-Flag 
gesetzt wenn OCRxA bzw. ICRx erreicht wurde. Bei den Phase-Correct-Modes 
beim Erreichen von Bottom(0).
Einzig in den CTC-Modes wird der Overflow nur bei MAX ausgelöst. Also 
nur wenn OCRxA bzw. ICRx = MAX ist.

mfg.

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.