AVR Timer interrupt nach 5 sekunden

Gast #4093558
Lesenswert?

Hallo,

ich habe eine kurze Frage bezüglich Interrupts, Timer interrupt oder 
Compare interrupts.

Ich bräuchte einen Interrupt nach ca. 5 sec. (genau werde ich das noch 
ausrechen). Allerdings komme ich mit den prescalern nicht in die 
gewünschten Zeiten. Nun habe ich schon gelesen, dass man am einfachsten 
eine Variable hochzählt um auf die geünschte Zeit zu kommen.
Nur wie kann ich einen Interrupt auslösen wenn die Variable meinen Wert 
ereicht hat?
Also mir ist klar dass ich mittels Interrupt die Variable hochzähle nur 
nicht wie ich bei meinem Wert einen interrupt auslöse der dann meinen 
gewünschten Code ausfürt...

Bisher habe ich Arduinos benutzt und dort interrupts mit der millis() 
methode ausgelöst. Dort ist es ja eigenlich auch nur eine variable die 
mit dem Timer hochgezählt wird, oder?

Sorry, ich stehe gerade auf dem Schlauch, kann jemand mal mein Hirn 
anschupsen.

Danke Christian
(Firma: matzetronics) #4093561
Lesenswert?

Du kannst mittels Portpin immer einen externen Interrupt oder Pinchange 
Interrupt auslösen. Du müsstest deinen Timerinterrupt so schreiben, das 
er hochzählt und dann nach den 5 Sekunden am Portpin wackelt.
Kostet allerdings einen Pin, den du aber evtl. sowieso schon hast, denn 
du willst ja nach den 5 Sekunden irgendwas anstellen.
#4093569
Lesenswert?

Du zählst im Timer Interrupt einen  Zähler hoch. Beim Erreichen eines 
bestimmten Wertes (= Deines Teilers) setzt Du ein Flag und den Zähler 
wieder auf 0 zurück.
Im Hauptprogramm wird nun dieses Flag ausgewertet. Nach Ausführung 
Deiner gewollten Aktion setzt Du dieses Flag im Hauptprogramm wieder 
zurück.

Gruß
Andreas
Gast #4093572
Lesenswert?

Ich glaube, du verwendest den Begriff Interrupt falsch.
> Bisher habe ich Arduinos benutzt und dort interrupts mit der
> millis() methode ausgelöst.
Zumindest deutet dieses darauf hin.

> Nur wie kann ich einen Interrupt auslösen wenn die Variable meinen Wert
> ereicht hat?
Gar nicht !?!?

Frage in der Hauptschleife diese Variable ab.
Und dann tu das was dann nötig ist.
#4093592
Lesenswert?

Peter Dannegger schrieb:
> Er ist doch bereits in einem echten Timerinterrupt, echter gehts nicht.

Aber in diesem Interrupt eben öfters als alle 5s. Meine Antwort war auch 
nicht so ganz ernst gemeint. Wenn Du darauf abzielst daß die Frage des 
TO's an sich schon unsinning ist, gebe ich Dir Recht.
Ich glaube wir sollten erst einmal den TO fragen, was er denn nun genau 
vorhat.

Gruß
Anreas
#4093677
Lesenswert?

Ja, aber was hindert ihn dran im Timerinterrupt auch noch zu prüfen ob 
nach dem Hochzählen der Variable diese den "Sollwert" übersteigt? Also 
alle Sekunde Reg15 hochzählen und wenn's kleiner 5 ist, interrupt 
beenden, sonst eben ... tjo, was auch immer nach 5 Sekunden passieren 
soll tun.
Gast #4093701
Lesenswert?

Hi Leute,

alles klar, danke für das Lösen des Hirnknotens.

Ich konnte nicht früher antworten, bin ja auf der Arbeit :)

Im Prinzip kann ich in der Hauptschleife mit dem Flag arbeiten, so 
Zeitkritisch ist es bei mir nicht... und so komplex ist diese auch 
nicht, dass es zu lange dauern würde bis sie abgearbeitet ist.

Aber letztenendes ist das Portpinwacklen doch gar nicht so falsch, wenn 
man wirklich zeitkritisch eteas ausgeführt haben möchte, da dann die 
Hauptschleife, egal wo sie wohl sein mag, unterbrochen wird, richtig?

Anyway, das dürft Ihr mir gerne beantworten oder nicht. Geholfen habt 
Ihr mir schon und ich weiss wie ich nun weitermache. Vielen Dank!


Gruss Christian
#4093746
Lesenswert?

Das hast Du scheinbar immer noch nicht verstanden.
Portwackeln nimmt Dir einem Port weg und nützt Dir nichts.
Wenn Du unbedingt während des Interrupt etwas ausführen willst (erkläre 
mal, warum), kannst Du dort eine Zähler hochzählen und solange dieser 
nicht erreicht ist, wieder aus der IRQ heraus springen.
Das macht man aber nur, wenn diese Routine im IRQ kurz ist.

Gruß
Andreas
Gast #4093961
Lesenswert?

Andreas B. schrieb:
> Das motiviert nicht sonderlich, hier im  Forum zu helfen.

Bitte den Zusammenhang sehen. Ich bin wie gesagt auf der Arbeit und kann 
nicht die ganze Zeit im Forum mitlesen. Heute Abend habe ich mehr Zeit 
(Elektronik ist für mich ein Hobby, arbeiten tue ich etwas anderes).
Allerdings wollte ich nach so vielen Antworten wenigstens ein Feedback 
geben, da es mindestens genauso demotivierend ist, wenn sich der TO nach 
zufriedenstellender Antwort nicht mehr meldet.

Ich freue mich immre sehr um eine Antwort, wenn ich nicht weiter komme 
und kann mich noch mal bedanken...

Christian
#4093986
Lesenswert?

Na, ok, ich habe hier auch eine andere Tageszeit.
Dann ist es aber auch besser, zu lesen und darauf zu antworten wenn man 
auch tatsächlich die Zeit dazu hat.
Ansonsten arten solche Threads sonst so aus, daß aufgrund nicht richtig 
gelesener und durchdachter Antworten die Helfer unwillig werden.

Gruß
Andreas

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren