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???
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.