Forum: Mikrocontroller und Digitale Elektronik Input Capture an Mega8535


von A.D. (Gast)


Lesenswert?

Hi,

ich habe folgenden Code, bei dem Zunächst AVR Studio TICIE nicht 
erkennt.

Was soll passieren?

Es soll ein Timer1 gestartet werden, wenn eine fallende Flanke erkannt 
wird. Je nachdem, wird der Timer auf 0 gesetzt (entscheidung per flag) 
und gezählt, bis der nächste interrupt durch fallende flanke kommt.
Der Timer wird gestoppt, Interrupts ausgeschaltet, der Wert des 
Registers gespeichert.

Der Code funktioniert allerdings nicht korrekt.
Der Mikrocontroller scheint "neu zu starten".
(Es ist ein LCD angeschlossen und dieses wird nach ca. 3 s neu 
initialisiert.




Generell wird der Timer aktiviert. In meiner main funktion passiert dann 
nichts mehr.
Sinn ist es, eine zeit  von 20-40ms zu messen.
Habe ich evtl. ein Interrupt flag falsch gesetzt?
Ich habe mich dabei an die Beschreibung von hier gehalten:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#16-Bit_Timer.2FCounter



void TIMER1_enable(void){
TCCR1B&=~(1<<CS12);
TCCR1B|=(1<<CS11);
TCCR1B|=(1<<CS10);

TCCR1B&=~(1<<ICES1);//Fallende Flanke
TIMSK|=(1<<TICIE);
sei();
}



ISR(TIMER1_CAPT_vect){


  if(flag==1){
  time=ICR1;//Wert sichern

  //timer stoppen Interrupts ausschalten
     cli();
   TIMSK&=~(1<<TICIE);
  TCCR1B&=~(1<<CS12);
  TCCR1B&=~(1<<CS11);
  TCCR1B&=~(1<<CS10);

  flag=0;
  COMMAND(LCD_COMMAND_CLEAR);

  //gespeichertern Wert benutzen
  TIMER1_enable();
  //danach Timer starten, interrupts einschalten
  }
     if(flag==0){
     //Timer Zählregister Nullen
    TCNT1H=0x00;
    TCNT1L=0x00;

    //Timer läuft weiter.

    }

}

von A.D. (Gast)


Lesenswert?

Achso, ich sollte noch erwähnen, dass ich den ICP Pin konstant auf Masse 
liegen lasse.

von A.D. (Gast)


Lesenswert?

Hi,

Fehler gefunden.

Laut dem Tutorial ist es beim Mega 8 wohl das Bit nr 3.

Ich habe, da mein AVR STUDIO das TICIE nicht erkennt einen define 
gemacht mit 3.

Ein Blick ins Datenblatt sagt mir, dass es bit 5 ist.
Nun funktioniert es :)

von spess53 (Gast)


Lesenswert?

Hi

>Fehler gefunden.

Das Bit heisst beim ATMega8535 offiziell:  TICIE1 .

MfG Spess

von A.D. (Gast)


Lesenswert?

Dankesehr.

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.