Forum: Mikrocontroller und Digitale Elektronik AT90CAN32 - Zeitmessung zw. Flanken


von Manuel Marion Tina (Gast)


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???

von cskulkw (Gast)


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...

von Manuel Marion Tina (Gast)


Lesenswert?

Vielen Dank!

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.
Lade...