Zähler mit Interrupts

Gast #1020480
Hallo,

habe mit Atmega8 mit f_cpu=8MHz einen Zähler aufgebaut. Gesteuert wird 
er über die beiden externen Interrupts. INT0 erhält eine Art Gate 
Signal, wenn das Low ist sollen an INT1 Impulse gezählt werden. Das 
ganze funktioniert leider nur bis zu einer Impulsfrequenz von ca. 
180kHz. Das kommt mir etwas lahm vor. Bin dankbar für Tips zur 
Verbesserung.

Hier der Code:
1
volatile uint8_t FLAG;
2
volatile uint16_t cnt;
3

4

5
ISR (INT0_vect)  {    // Gate
6
  GIMSK |= (1 << 7);  // INT1 an
7
  FLAG=1;
8
}
9

10
ISR (INT1_vect)  {    // Counter
11
  cnt++;
12
}
13

14
...
15

16
int main() {
17

18
//Interupt 0: Gate
19
MCUCR &= ~(1 << 0);   //ISC00
20
MCUCR |= (1 << 1);    //ISC01
21
GIMSK |= (1 << 6);
22

23
//Interupt 1: Clock
24
MCUCR &= ~(1 << 2);   //ISC10
25
MCUCR |= (1 << 3);    //ISC11
26
...
27
sei();
28
FLAG=0;
29
cnt=0;
30
...
31
while(1) {
32
  if (FLAG) {   //Gate down
33
    loop_until_bit_is_set(PIND, 2);  //Gate up
34
    GIMSK &= ~(1 << 7);    //INT1 aus
35
//  in cnt steht jetzt der Zählwert...
36
        ...
37
    FLAG=0;
38
    cnt=0;
39
  }        
40
}
Gast #1020484
>an INT1 Impulse gezählt werden ... Impulsfrequenz von ca. 180kHz.
1
ISR (INT1_vect)  {    // Counter
2
  cnt++;
3
}

Was hast du erwartet, wenn du das "per Hand" machst. Nutze doch den 
Timer als Zähler mit externem Clock. Du musst den nur in abhängigkeit 
von deinem FGatesignal ein/ausschalten bzw parametrieren.

Siehe Datenblatt mega8, Seite 98, Tabelle40. Die untersten beiden 
Zeilen.
Gast #1020651
ok, das klappt. Hätte ich selber drauf kommen müssen. Mir war nicht 
klar, daß der interne Counter so viel schneller ist als ein cnt++ in der 
ISR.
Danke!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.