AT90CAN32 - Zeitmessung zw. Flanken

Gast #2310021
Lesenswert?

Hallo!
Wir sind dabei mit einem Ultraschallsensor den Abstand eines 
Gegenstandes zu programmieren.
Bei einer fallenden Flanke sendet der Sensor ein Signal, ab dieses 
Zeitpunkt soll die Messung beginnen. Sobald der Sensor ein Echo empfängt 
zieht er das Signal wieder auf low. Dann soll die Messung enden und der 
Zeitwert in eine Variable zur weiteren Verarbeitung geschrieben werden.

Unser Problem: Das Programm geht bei einer fallenden Flanke in den 
Interrupt, allerdings stimmt mit unserem Timer irgendetwas nicht, TCNT1 
passt nicht.

#define TIM0_TOP        0x9B
#define TIM1_TOP        0x61A
uint16_t g_delaysens2_uint16 = 0xFFFF;


ISR(INT1_vect)
{

      EIMSK  &= ~(1<<INT1);
      EIFR |= (1<<INT1);
      g_delaySensor_uint16 = TCNT1;

}


Hat jemand eine Idee???
Gast #2310244
Lesenswert?

Nun es gibt ja noch EICRA und EICRB. Dort kann man bestimmen, bei 
welcher Flanke oder Signal der Interrupt ausgelöst werden soll.

Wie sind die denn bei Euch eingestellt? Sollten diese Null sein, dann 
wird der Interrupt so lange ausgelöst, wie eine Low-Level am Pin 
anliegt. Vielleicht ist das ja schon Eurer Problem.

Ihr müßtet für den externen Interrupt 1 für die Steigende Flanke das Bit 
ISC11 im EICRA bzw. ISC10 für die Fallende Flanke setzen.

Vielleicht hilft es ja...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren