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
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.
Christian schrieb: > Sorry, ich stehe gerade auf dem Schlauch, kann jemand mal mein Hirn > anschupsen. http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp2
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
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.
Christian schrieb: > Ich bräuchte einen Interrupt nach ca. 5 sec. Nein, Du willst was machen nach 5s. Der Interrupt kann ruhig öfter auftreten, z.B. alle 100ms und wenn darin eine statische Variable bis 50 gezählt hat, sind die 5s um.
Der Interrupt wird hat alle 100mS oder was es so hergibt aufgerufen und nur wenn die Variable 50 anzeigt (5 Sec) wird der interessante Programmteil in der Interrupt Routine ausgeführt
Matthias Sch. schrieb: > Du müsstest deinen Timerinterrupt so schreiben, das > er hochzählt und dann nach den 5 Sekunden am Portpin wackelt. Warum sollte jemand diesen Weg der maximalen Umständlichkeit gehen?
Peter Dannegger schrieb: > Warum sollte jemand diesen Weg der maximalen Umständlichkeit gehen? Weil er geschrieben hat, das er einen Interrupt braucht. Flag ist auch gut (und so würde ich es machen), aber er schreibt das nun mal so.
Peter Dannegger schrieb: > > Warum sollte jemand diesen Weg der maximalen Umständlichkeit gehen? Weil er dann nach 5s eine echten IRQ hat (nämlich den PIN change IRQ). Und das war ja die Frage des TO's ;-) Gruß Andreas
Andreas B. schrieb: > Weil er dann nach 5s eine echten IRQ hat Er ist doch bereits in einem echten Timerinterrupt, echter gehts nicht.
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
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.
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
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
Andreas B. schrieb: > kannst Du dort eine Zähler hochzählen und solange dieser > nicht erreicht ist, wieder aus der IRQ heraus springen. Ahhh, richtig... ist ja viel einfacher. Hatte die Antworten nur überflogen. Thnx, Christian
Christian schrieb: > .... Hatte die Antworten nur > überflogen. Das motiviert nicht sonderlich, hier im Forum zu helfen. Gruß Andreas
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.