Gast
#947754
Hi, ich habe ein Problem mit meinem Mega32: Ich benutze Timer0 um mir eine genaue Zeit zu erzeugen während der ein Pin auf 1 sein soll. Habe einen 14.7456 MHz Quarz. Timer0 hat einen Prescaler von 64. Da der Timer alle 256 Schritte überläuft, und ich in der ISR eine Variable bis 90 hochzähle entspricht das genau 100ms. Während dieser 100ms sollen nun die Impulse einer Frequenz gezählt werden. Hierzu habe ich einen externen Zählerbaustein den ich nach diesen 100ms auslese. Über ein UND-Gatter wird dafür gesorgt, dass keine Impulse mehr in den Zähler laufen wenn der Pin nicht auf 1 ist. Das Problem ist folgendes: mit diesem Code (BASCOM): Torzeit = 1 Waitms 100 Torzeit = 0 funktioniert das Ganze sehr gut (Zähler verzählt sich + - 1 ist aber normal) Benutze ich Timer0 um mir die 100ms zu erzeugen verzählt sich mein Zähler teilweise um bis zu 50 Stellen. Benutze dabei folgenden Code: ... Torzeit = 1 Start Timer0 Do If Tor_over = 1 Then Exit Do Loop ... und die Timer0 ISR: Timer0_isr: Incr Tor_zaehler If Tor_zaehler = 90 Then Torzeit = 0 Tor_zaehler = 0 Tor_over = 1 Stop Timer0 End If Return Eigentlich müsste die Zeitberechnung über den Timer des Mega32 doch wesentlich genauer funktionieren als der Waitms-Befehl oder? Weiß irgendjemand woran das liegen könnte?