Offline
Full Member
Karma: 1
Posts: 171
|
 |
« on: January 10, 2013, 01:30:14 am » |
Hallo, ich programmiere momentan eine Art Mediensteuerung und habe diverse zeitkritische Komponenten im Code. Da das Ganze am Ende fest installiert und praktisch ununterbrochen laufen soll, stellt sich mir die Frage, was ich gegen sog. Überlaufprobleme machen kann. Gerne einfach nur evtl. passende Links posten. Ich wühl mich dann durch.  Gruß Chris
|
|
|
|
|
Logged
|
Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. 
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #1 on: January 10, 2013, 02:52:43 am » |
Überlauf von was? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Hamburg, Germany
Offline
Sr. Member
Karma: 3
Posts: 285
|
 |
« Reply #2 on: January 10, 2013, 02:59:03 am » |
Wenn Du hardwarenah programmierst dürfte bei richtiger Strukturierung kein ungewollter Überlauf erfolgen. Wenn Du allerdings bestimmte Arduino-Funktionen wie delay(), digitalWrite() benutzt, kannst Du sehr schnell Probleme bekommen, da diese im Gegensatz zur direkten Programmierung viele Taktzyklen verbrauchen. Für zeitkritische Abläufe empfiehlt sich i.d.R. die Benutzung von Interrupts - generell würde ich die Register der MCU direkt beschreiben und auf den Arduino-Layer verzichten. Ein Blick ins Atmel-Datenblatt ist da vielleicht ein erster Ansatzpunkt.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 171
|
 |
« Reply #3 on: January 11, 2013, 01:45:23 am » |
Hallo,
was meinst Du mit "direkter Programmierung". Bin Anfänger und arbeite bisher ausschließlich mit der Arduino IDE. Kann man mit ihr auch "direkt" programmieren. Hast Du mir evtl. eine Buchempfehlung?
Interrupts kann ich laut dem was ich darüber gelesen habe nicht nutzen, da mein Arduino nur zwei InterrupteingÄnge hat, ich jedoch mehr als zwei "Eingabekomponenten" (Taster) verbauen werde.
Gruß Chris
|
|
|
|
|
Logged
|
Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. 
|
|
|
|
Germany, Osnabrück
Online
Sr. Member
Karma: 8
Posts: 340
E-Technik Student - Master
|
 |
« Reply #4 on: January 11, 2013, 03:44:31 am » |
Direkte Programmierung => arbeiten mit Registern ohne das Arduino Framework. Taster sollten nicht unbedingt an Interrupts angeschlossen werden, da die Interrupts dafür viel zu schade sind. (Der Interrupt Kontroller würde sich langweilen ;-)) So programmiert man Mikrocontroller allgemein/direkt, ohne Framework: //2 Pins als Ausgang deklarieren und einen als Eingang DDRA = 0b00000011; // 6 Eingänge 2 Ausgänge
//den ersten Pin auf "High" setzen PORTA |= (1 << PA0); //den gleichen Pin auf "Low" setzen PORTA &= ~(1 << PA0);
//überprüfen ob der Eingang gesetzt ist if(PINA2) { //Ausgang setzen PORTA |= (1 << PA1); } else { PORTA &= ~(1 << PA1); }
|
|
|
|
« Last Edit: January 11, 2013, 04:01:45 am by Jomelo »
|
Logged
|
~Es ist so grausam, das der Intelligenz Grenzen gesetzt sind und der Dummheit keine.~
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #5 on: January 11, 2013, 04:12:43 am » |
Ich wiederhole meine Frage: Von welchen Überlaufproblemen redest Du? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 171
|
 |
« Reply #6 on: January 11, 2013, 04:15:16 am » |
Sorry. Es geht mir um den zeitlichen Überlauf.
Danke, Jomelo.
Gruß Chris
|
|
|
|
|
Logged
|
Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. 
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1297
|
 |
« Reply #7 on: January 11, 2013, 04:22:35 am » |
Sorry. Es geht mir um den zeitlichen Überlauf.
Meinst Du damit das der millis() Zähler nach 59 Tagen überläuft? Das ist unkritisch, wenn man "richtig" herum rechnet: Siehe hier: http://arduino.cc/forum/index.php/topic,85706.0.htmlDie Frage, bzw. mit diesem Problem hab ich mich vor einiger Zeit auch schon beschäftigt. Mario.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #8 on: January 11, 2013, 07:17:49 am » |
Sorry. Es geht mir um den zeitlichen Überlauf.
Meinst Du damit das der millis() Zähler nach 59 Tagen überläuft? Das ist unkritisch, wenn man "richtig" herum rechnet: Siehe hier: http://arduino.cc/forum/index.php/topic,85706.0.htmlDie Frage, bzw. mit diesem Problem hab ich mich vor einiger Zeit auch schon beschäftigt. Mario. Kleine Korrektur: millis() läuft nach ca 49,5 Tagen über (genaugesagt nach 4294967,295 Sekunden). Wie Maio bereits sagte ist der Überlauf bei richtiger Differenzzeitberechnung unkritisch, solange nur 1 Überlauf stattfindet. Wenn mehr als ein Überlauf stattfindet (also der Zeitinterwall größer als ca 49,5 Tage ist) kann der Arduino nicht feststellen wieviele Überläufe stattgefunden haben und somit den Intervall nicht bestimmen. Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 171
|
 |
« Reply #9 on: January 11, 2013, 04:54:46 pm » |
Danke für die Erklärungung.
Was kann man also unternehmen, damit es (auch nach über 50 Tagen) nicht zu solchen Problemen kommt?
Gruß Chris
|
|
|
|
|
Logged
|
Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. 
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #10 on: January 11, 2013, 05:00:37 pm » |
Probleme hast Du nur wenn Du Intervalle haben willst, die länger als 49,5 Tage sind. Und falls das der Fall ist nimm eine RTC oder http://www.faludi.com/2007/12/18/arduino-millis-rollover-handling/. Grüße Uwe
|
|
|
|
« Last Edit: January 12, 2013, 11:50:52 am by uwefed »
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 171
|
 |
« Reply #11 on: January 12, 2013, 04:13:44 am » |
Super! Danke.  Gruß Chris
|
|
|
|
|
Logged
|
Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. 
|
|
|
|
|