Forum: Mikrocontroller und Digitale Elektronik Atmega88 Timer und ICP


von Steffen H. (stef_fen)


Lesenswert?

Hallo Zusammen,

kann der 16Bit Timer 1 des Atmega88 gleichzeitig hochzählen, wenn er 
nicht zurück gesetzt wird einen Interrupt auslöst aber auch über den ICP 
ein PPM Signal einlesen? Vielen Dank.

Gruß Steffen

von Falk B. (falk)


Lesenswert?

Sicher.

von Steffen H. (stef_fen)


Lesenswert?

Später soll das mal einen BLDC Regler geben. Der Timer 1 ist sowohl für 
die Start Kommutierung, bei verlorem gegangenem BEMF und des ICP 
zuständig. Ich habe eine ISR zum TIMER1_OVF_vect. Der Wert des TCNT1 
wird jedes mal nach einer erfolgreichen Kommutierung in einer Switch 
Case Anweisung auf 1 gesetzt. Sollte das mal nicht der Fall sein kommt 
es ja zu einem Overflow und der Timer löst einen Interrupt aus. Die ISR 
zum TIMER1_CAPT_vect wertet mir das PPM Signal von der Fernsteuerung 
aus. Können die verschiedenen ISR sich ins gehege kommen? Hängt doch 
beides mit dem Timer 1 zusammen.

Danke. Gruß Steffen

1
ISR (TIMER1_OVF_vect)
2
{  
3
  next_commutate_state (1);
4
  rotor_run = 0;
5
  OCR2A = START_PWM;
6
  OCR2B = START_PWM;
7
  OCR0B = START_PWM;
8
}
9
10
11
ISR (TIMER1_CAPT_vect)
12
{
13
  if (flanke==0) {
14
    flankeStart = ICR1;
15
    TCCR1B &= ~(1<<ICES1); // fallende Flanke zur Auswertung des ICP
16
    flanke = 1;
17
  }
18
  else {
19
    rx_pwm = ICR1 - flankeStart;
20
    flanke = 0;
21
    TCCR1B |= (1<<ICES1); // steigende Flanke zur Auswertung des ICP
22
  }
23
  TIFR1 = (1<<ICF1);
24
}

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.