Is schade, denn offenbar ist da irgendetwas sub-optimales drin.Codeschnippsel kann ich leider ...
Hallo,
ich habe gestern ein LCD Display mit einem AtMega 32 verbunden und eine Kleine Drehzahlmessung programmiert.
Soweit kein Problem. Das ganze ist mit Timer0 gemacht worden und basiert auf interrupts.
Timer1 verwende ich dazu um alle 16 sec die Anzeige des Displays zu verändern.
Ergebnis: Drehzahl funzt, wechsel nicht.
Im Simulator bin ich draufgekommen das sich die Timer " überschneiden" d.h es werd der Drehzahlinterupt ausgelöst und während dieser lauf wird der wechselinterrupt ausgelößt. Ich habe schon probiert den timer1 mit einem anderen wer zu loaden, er fäng jedoch immer bei 0 an.
Codeschnippsel kann ich leider im Mom nicht bieten aber vielleicht hatte jemand ein ähnliches Problem.
MfG Moritz
Is schade, denn offenbar ist da irgendetwas sub-optimales drin.Codeschnippsel kann ich leider ...
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo,
bitte erkläre mir mal suboptimal
MfG Moritz
optimal ~= das Beste
sub = darunter, unterhalb
unterhalb des Besten ==> nicht gar so gut, eher mäßig (eigentlich schrottig)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ich antworte dir jetzt mal weil hier ja sonst lieber gesülzt wird.
Also ein interrupt kann einen anderen nicht unterbrechen. Hatte dieses Problem schonmal. Du kannst das umgehen indem du interrupts wieder mit 'sei' aktivierst. Nachteil: dein Stack kann überlaufen, wenn du schlecht programmiert hast.
Mein vorschlag wäre einen zähler einzusetzen, der im hauptprogramm ausgewertet wird.
angenommen Drehzahlinterrupt 1x pro sekunde
do
if zähler=16 then
displayausgabe
zähler=0
end if
loop
end
timerinterrupt:
incr zähler
(drehzahlauswertung)
.
.
.
return
geht das deutlicher ?.. weil hier ja sonst lieber gesülzt wird..
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
drei antworten, weder fachlich noch zum thema passend.Is schade, denn offenbar ist da irgendetwas sub-optimales drin.
Hallo,
bitte erkläre mir mal suboptimal
MfG Moritz
optimal ~= das Beste
sub = darunter, unterhalb
unterhalb des Besten ==> nicht gar so gut, eher mäßig (eigentlich schrottig)
präpotent = überheblich, klugsch...r
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Merkst du eigentlich das du ein kleines bisschen unsachlich wirst?
Leider ist nicht nur dein Ton ein Problem, sondern auch Inhalte, bei denen nix fachliches dabei ist.
@moritz: wenn noch fragen sind PM mich
hier ist anscheinend niemand an einer problemlösung interessiert sondern eher am lustig machen und eigene schlechte laune abreagieren. [/quote]
Vielleicht sollte man das Posten von Codeschnipseln in den Forumsregeln verankern um solche ausufernden nichtssagenden threads zu vermeiden.
Dann genügt ein einfacher Hinweis auf die Forumsregeln.
Überschneidungen lassen sich nur mit Enable/Disable Interrupt und TimerX erzeugen. Ansonsten wartet der µC mit der ISR des ausgelösten Interrupts bis er wieder auf ein RETI stößt.Zitat von Moritz f.
Prüfe bei zwei ISR mal den $hwstack!
Lesezeichen