Gast
#315751
Hi Leuts, folgendes: Ich habe hier einen ATMega16 auf dem STK500 und zwei externe Signale, A und B. Diese Signale können 3 Zustände haben: 0V, 5V oder Rechteckimpulse mit ca. 4 Hz. Ich muss alle drei Zustände auswerten. Nun dachte ich, ich könnte mir mit externen Interrupts helfen, deshalb habe ich die Signale auf INT0 und INT1 verdrahtet. Variante 1: Für eine bestimmte Zeit (beispielsweise 600 ms) zähle ich die Flankenwechsel Variante 2: Ich zähle die Zeit zwischen den Flankenwechseln. Nun gehts aber schon generell beim Timing los: Ich habe mir also eine Timer-Overflow-Routine geschrieben, die alle 5 ms aufgerufen wird. Zur Kontrolle toggel ich bei jedem Aufruf PORTA.0. Lt. Oszi klappt das, auch wenn die Werte für TCNT0 nicht nachberechnen kann. Nun möchte ich für rund 600 ms messen, bei einem Aufruf alle 5 ms muss ich also nur bis 120 zaehlen, dann sind 600 ms um. Stimmt aber nicht, das Signal verschleift irgendwie total. D.h. wenn ich bei einem Zählerstand von 120 ein Pin toggle, dann sind die 1 und 0 Zeiten unterschiedlich lang, und einen Zusammenhang mit 120 kann ich nirgendwo entdecken. Also habe ich wohl ein grundlegendes Problem mit den Timern. Oder ? Greets Karlheinz