Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Liebes Forum > > Hab da folgende Mega128 Anwendung. Es werden verschiedene Sensoren mit max. möglicher > Durchlaufzeit in einer Endlosschleife gemessen und ausgegeben. Klappt alles wunderbar. Komme in > Sume auf eine Meßfrequenz von ca. 150Hz, bin sehr zufrieden da ich ca. 20Hz anstreben würde. > Jetzt hab ich da einen weiteren Sensor der mir Pulse von 8msec-4sec! liefert und deren Periodendauer > würde ich gerne mit einem Timer möglichst genau bestimmen. Kann aber nicht einfach im Extremfall > meine anderen Messungen mal bis zu 4sec anhalten. Also muß diese Messung im Hintergrund laufen. > Hab also mal Pulsgenerator als Simulation einer Referenz gebastelt und los gings: > > 1.) Lösungsansatz > Mit Timer_T1PM(1,PS_1024) auf die positive Flanke triggern und mit PM_Wert=Timer_T1GetPM() bei > jeder Schleife PM_Wert einlesen und wenn PM_Wert >0 Pulsdauer verarbeiten. Klappt wunderbar, läuft > im Hintergrund und liefert die volle 16Bit Genauigkeit für die Pulszeit. Aber sobald ich einen Wert ge- > lesen habe muß ich ja leider wieder mit Timer_T1PM(1,PS_1024) starten und da ist die nächste > Messung dann Müll (Startverzögerung?) . Außerdem verliere ich glaub ich den nächsten Puls da die > Funktion ja wieder erst wieder auf eine steigende Flanke triggern muß. Das kann ich mir aber bei > teilweise eh schon 4sec Meßzeit nicht leisten da gleich 1-2 Pulse zu „verlieren“. > > Frage: Gibt es irgendeine Chance das man die Funktion Timer_T1PM(1,PS_1024) irgendwie "manual > zurücksetzen" kann (wenn man mit PM_Wert>0 erfolgreich einen Wert ermittelt hat) um gleich wieder > auf die nächste Flanke warten zu können (und nicht Pulse zu verlieren bzw. falsche Ergenisse zu prod.)? > > 2.) Lösungsansatz > Mit Timer2 (10ms Timer im Hintergrund) die Zeit zwischen den Pulsen messen. Exterenen Interrupt auf > steigende Flanke getriggert in Funktion schicken und dort Timer_TickCount() starten. Bei der nächsten > positiven Flanke wird wieder in den interrupt gesprungen, die Ticks ausgelesen und der Tick counter neu > gestartet. Super elegant und klappt wieder alles super bei den langen Pulsen. Aber mit einem > „10ms Puls“ Pulsweiten von 8msec zu messen geht natürlich nicht :-) und da hakts schon wieder. > > Frage: Kann man diesen Timer2 irgendwie dazu bringen mit 1ms Tackt zu laufen? > > Oder seht ihr irgend eine andere Möglichkeit bzw. könnt ihr mir weiterhelfen? > Vielen, vielen Dank und schöne Grüße > P_ST