Julian
24.07.2006, 17:38
Hallo wiedermal ..
ich will mit mit meinem Mega8 eine frequenz messen .. da das duty cycle nicht konstant ist kann ich mich nur auf die periodendauer konzentrieren .. (is ein rechteck signal) .. das signal kann werte zw ~10ms und ~100 ms annehmen ..
so habe ich den timer init. :
Config Timer0 = Timer , Prescale = 256 (auch schon mit 1024 probiert)
so starte/stoppe ich den timer:
While Sensora = 1 : Wend
While Sensora = 0 : Wend 'steigende Flanke abwarten
Start Timer0
While Sensora = 1 : Wend
While Sensora = 0 : Wend 'steigende Flanke abwarten
Stop Timer0
bei einem timerüberlauf erhöhe ich eine variable n um 1 und setz den timer zurück .. wenn der timer gestoppt ist multipliziere ich die variable n mit 255 und addiere sie zum timerwert zurück .. dann noch mit der zeitkonstate multiplizieren und fertig .. allerdings nur in 8-9 von 10 fällen
machmal kommt es vor das ich am ende so ein ergebniss habe:
timer0 = 0 .. is im fehlerfall IMMER 0
ov = crap .. immer kleiner als der soll wert, aber nciht konstant falsch
ich habe das signal mit dem oszi angesehen, aber keine hacker oder spitzen gesehen .. auch entstörkondensatoren bringen nix ..
leider mus das aber IMMER funktionieren .. und möglichst genau sein weil das ergebniss wiederum den input in den noch nicht ausprogramierten pid regler darstellt (wird eine drehzahlregelung)
ach ja .. vieleicht is das wichtig .. wenn ich 1024 als prescaler nem, dann kann ich die schnellsten perioden direkt (ohne interrupts) messen .. und das geht IMMER fehlerfrei .. soblad ich aber mit den interrupts anfange gehts los ..
puh .. so weit mein problem .. :-k .. hat wer rat ??
ps.: ich lass mir auch gern ein anderes verfahren zur messung an sich einreden, halbwegsexakt muss es halt sein ;-)
ich will mit mit meinem Mega8 eine frequenz messen .. da das duty cycle nicht konstant ist kann ich mich nur auf die periodendauer konzentrieren .. (is ein rechteck signal) .. das signal kann werte zw ~10ms und ~100 ms annehmen ..
so habe ich den timer init. :
Config Timer0 = Timer , Prescale = 256 (auch schon mit 1024 probiert)
so starte/stoppe ich den timer:
While Sensora = 1 : Wend
While Sensora = 0 : Wend 'steigende Flanke abwarten
Start Timer0
While Sensora = 1 : Wend
While Sensora = 0 : Wend 'steigende Flanke abwarten
Stop Timer0
bei einem timerüberlauf erhöhe ich eine variable n um 1 und setz den timer zurück .. wenn der timer gestoppt ist multipliziere ich die variable n mit 255 und addiere sie zum timerwert zurück .. dann noch mit der zeitkonstate multiplizieren und fertig .. allerdings nur in 8-9 von 10 fällen
machmal kommt es vor das ich am ende so ein ergebniss habe:
timer0 = 0 .. is im fehlerfall IMMER 0
ov = crap .. immer kleiner als der soll wert, aber nciht konstant falsch
ich habe das signal mit dem oszi angesehen, aber keine hacker oder spitzen gesehen .. auch entstörkondensatoren bringen nix ..
leider mus das aber IMMER funktionieren .. und möglichst genau sein weil das ergebniss wiederum den input in den noch nicht ausprogramierten pid regler darstellt (wird eine drehzahlregelung)
ach ja .. vieleicht is das wichtig .. wenn ich 1024 als prescaler nem, dann kann ich die schnellsten perioden direkt (ohne interrupts) messen .. und das geht IMMER fehlerfrei .. soblad ich aber mit den interrupts anfange gehts los ..
puh .. so weit mein problem .. :-k .. hat wer rat ??
ps.: ich lass mir auch gern ein anderes verfahren zur messung an sich einreden, halbwegsexakt muss es halt sein ;-)