Forum: Mikrocontroller und Digitale Elektronik ATmega328p - Input Capture - Flanke wird übersehen


von Hannes G. (elektroluchs)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich versuche mich gerade an einer Frequenzmessung mit der Input Capture 
Funktion des Timer1 an einem ATmega328p.

In nachfolgendem kurzen Programm habe ich den Kern meines Problems 
zusammengefasst, bei 70 Hz Rechtecksignal am ICP1-Pin funktioniert noch 
alles, bei einer Frequenz von 100 Hz werden schon (reproduzierbar) 
Flanken ausgelassen (siehe Oszibilder) und ab 200-300 Hz, wird die ISR 
gar nicht mehr aufgerufen.

Ich kann mir dieses Verhalten wirklich nicht erklären, weiß jemand Rat?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
5
//Ueberlaufzaehler
6
volatile uint8_t ovf_t1 = 0;
7
8
//Initialize timer
9
void InitTimer1(void)
10
{
11
    //cnt init
12
    TCNT1=0;
13
    //steigende Flanke, noise canceler und kein Vorteiler
14
    TCCR1B|=(1<<ICES1)|(1<<ICNC1)|(1<<CS10);
15
    //Input Capture und Overflow Interrupt enable
16
    TIMSK1|=(1<<ICIE1)|(1<<TOIE1);
17
    //Bereits akt. Interrupts loeschen
18
    TIFR1 |= (1<<TOIE1)|(1<<ICIE1);
19
}
20
21
//capture ISR
22
ISR(TIMER1_CAPT_vect)
23
{
24
    PORTB ^= (1 << PB5);
25
}
26
27
//Overflow ISR
28
ISR(TIMER1_OVF_vect)
29
{
30
  ovf_t1++;
31
}
32
33
void io_init()
34
{
35
  DDRB |= (1 << PB5);
36
}
37
38
int main(void)
39
{
40
  io_init();
41
  //Frequenzmessung mit Timer1 an D8 initialisieren und starten
42
  InitTimer1();
43
  
44
  //globale Interruptfreigabe
45
  sei();
46
  
47
  while(1)
48
  {  
49
  }
50
}

von Uwe D. (monkye)


Lesenswert?

Es gibt hier einen hilfreichen Artikel der Dir sicher weiter hilft, denn 
Deine genannten Probleme werden auch besprochen:

https://www.mikrocontroller.net/articles/High-Speed_capture_mit_ATmega_Timer

Uwe

von Hannes G. (elektroluchs)


Lesenswert?

Danke für den Artikel!

Der Fehler war in der Schaltung versteckt, jetzt geht es.

von Dieter F. (Gast)


Lesenswert?

Stefan H. schrieb:
> bei 70 Hz Rechtecksignal am ICP1-Pin funktioniert noch
> alles, bei einer Frequenz von 100 Hz werden schon (reproduzierbar)

Ja, bei 70 und 100 Hz sprechen wir noch nicht von Highspeed :-)

Uwe D. schrieb:
> Es gibt hier einen hilfreichen Artikel der Dir sicher weiter hilft, denn
> Deine genannten Probleme werden auch besprochen:
>
> https://www.mikrocontroller.net/articles/High-Speed_capture_mit_ATmega_Timer

von Dieter F. (Gast)


Lesenswert?

-1 - Danke Autor: Uwe Der B.B. :-) (monkye) :-)

von Uwe D. (monkye)


Lesenswert?

Naja, in dem Artikel werden sehr klar die Gründe für die möglichen 
Lösungswege beschrieben, warum das eine oder andere so seine Grenzen 
hat.
Selbst bei 100 Hz kann es ein Thema sein, wenn der Prozessor mit < 1MHz 
läuft usw.

Wer Highspeed baut, beherrscht vermutlich schon den "normalen Weg"...

Auf jeden Fall staune ich immer wieder, wie viele und vor allem 
umfassende Beiträge hier zu finden sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.