Pages: [1]   Go Down
Author Topic: timer Interrupt  (Read 686 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tag Leute
bei einem Projeckt, das ich momentan bastle, will ich 4 Analog werte in gleichmäßigen zeitabständen einlesen.
dafür will ich einen Timer losbrausen lassen, der mir alle 6min einen Interrupt auslöst um dann die vier Messwerte aufzunehmen!
In der zeit zwichen den Messungen ist der Controller anderweitig beschäftigt, desshalb der Timmer mit dem Interrupt.
was ich wissen muss:
   Timer einschalten,
   Timer starten,
   Timer überlauf löst interrupt aus....Messwerte werden aufgenommen.
   ..?

Dann habe ich noch zwei taster ein LCD und vier LED's am Controller.   (falls es jemand interessiert smiley-roll)
Logged

Germany
Offline Offline
Edison Member
*
Karma: 47
Posts: 2314
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich denke nicht, dass du mit Interrupts arbeiten musst. Das sieht hier sehr zeitunkritisch aus. Schau dir das Beispiel BlinkWithoutDelay mal an. Das Intervall legst du auf 6 Minuten fest, statt LED blinken zu lassen liest du deine Analogwerte aus. Fertig ist die Laube...
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

zeitkritisch ist das in sofern da die Messwerte in 6min abständen über einen längeren Zeitraum erfasst werden müssen, da ist Zählervariante vom "blink with out delay" öhm nicht der super Schlager!
Außerdem will ich auf jeden Fall wissen wie ich die Timer bedienen werden, ich hätte nämlich schon einen bei nem anderen Projekten gut gebrauchen können und ddieser Fall wird wiederkehren!
Also leute, heute ist "Timer" angesagt!  smiley-wink
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21468
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

millis() ist gleich genau wie wenn Du mit Timer arbeiten würdest ( es benutzt einen Timer)
grüße Uwe
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
in 6min abständen über einen längeren Zeitraum erfasst werden müssen, da ist Zählervariante vom "blink with out delay" öhm nicht der super Schlager!
Willst du das ganze Uhrzeit-synchron haben ? Jede Stunde um xx:00:00, xx:06:00, xx:12:00 ?
Hängt deine loop() "minutenlang" in delays ?

Wenn nicht, verstehe ich dein "öhm" nicht, bzw. was ein Timer da wesentlich verbessern kann.

Wenn du bei jedem 6 Minuten Zyklus das unsigned long lastmillis nicht auf die aktuellen millis() setzt, sondern das Intervall ( 1000L * 60 * 6 ) draufaddierst, hast du keine Drift durch evtl. kleine Verzögerungen, sondern arbeitest mit derselben Genauigkeit wie jeder andere Timer.

4 * analogRead() braucht eine halbe milliSekunde, und ist daher nicht ohne weiteres für eine Interrupt-Routine geeignet.
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3480
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Interrupts sind aber bequem smiley-wink Ich würde mit msTimer2 anfangen: http://arduino.cc/playground/Main/MsTimer2. Das sollte schon sehr nah an der geünschten Funktion sein smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wenn ich richtig informiert bin dann ist ein Timer Hardwaremäßig vom Programm zyklus getrennt.
der interrupt wird bei überlauf ausgelöst, die Analogwerte eingelesen und der rest der Kiste wird durch den timer nicht aufgehalten, wie bei einem einfachen delay.
sollte es nun probleme, durch die Interrupt-Kiste, mit der Analogwertmessung geben ist das natürlich blöd!
ich habe mir gedenkt, in meinem Kopfe drinne: das ich den timer losrattern lassen kann, jeweils beim Überlauf wirt der Interrupt ausgelöst und der widerum startet das Analogwert einlesen.
ist das so falsch gedacht?
Wisst ihr, ich habe vor einigen Jahren mit der Kail entwiklungsumgebng LPCs der 900er-Reie (8051 controller) programmiert. damals habe ich schon ein bisschen Erfahrung sammeln können gerade was Analogwerteinlesen angeht. Timer habe ich auch verwendet. Dort wusste ich genau in welcher Reihenfolge und wodurch ein Interrupt ausgelöst wird. Mann muss dort ja jeden fitzelkram in den SFR' einstellen. Ich hatte ein Buch, vom Baldischwiler, wo die Register und deren Einstellungsmöglichkeiten aufgeführt waren. Beim Arduino ist vieles so prima einfach, haben sie gesagt.  Mann braucht sich "nur" die Beispielprogramme anschauen, haben sie gesagt. Und zusammenbasteln... haben sie gesagt.
Hmmmh.
Ich bin Sau froh das es generell so einfach ist!
Manchmal aber, macht es eben gerade das ordentlich Anspruchsvoll!
Ich möchte gerne einfach den Timer ausprobieren.
Der At-Mega hat zwar andere SFR's, dennoch stelle ich mir vor, dass er vom Grundprintiep nicht sooo weit vom LPC weg sein kann.
Was meint Ihr?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ups jatzt hab ich dermaßen viel geschriben das mir doch glatt einer zwischen reingerutscht ist
@ sth77 Timer finde ich auch toll, mit dem Timer2 hm da habe ich mich auch schon mal rumgequält, hat damals vermutlich wegen der PWM nicht hingehauen... mal sehen ob mir diemal ein licht aufgeht!
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sieh dir mal bei Nick Gammon Im Interrupts - Blog den Abschnitt  Read the Analog-to-Digital converter asynchronously an.
Beim Arduino ist zwar alles super einfach, aber man kann auch alles selber machen, und braucht so ein langweiliges analogRead() überhaupt nicht.

Da in der Nähe ist auch ein Extra-Kapitel über timer. Das erspart dir die millis() Funktion.

Sollte dir doch sehr entgegenkommen ...
Logged

Pages: [1]   Go Up
Jump to: