INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Subs "parallel" laufen lassen..
04.09.2013, 14:00
Beitrag #1
Subs "parallel" laufen lassen..
Hallo zusammen,

ich stehe vor einem Verständisproblem und erhoffe mir Eure Hilfe Smile

Folgendes:

In Subs lese ich 3 Analoge Sensoren aus und bilde über 50 Messwerte das arithmetische Mittel. Diese 3 Werte speichere ich in einer weiteren Sub auf eine SD-Karte (Dataloggershield Adafruit). Zuletzt gebe ich die Werte auf einem LCD Display (LCD Shield Adafruit) aus.
Alles Subs habe ich in void loop () eingebunden. Soweit funktioniert das alles.

Jetzt kommt das "Problem". Die Werte auf dem LCD sollen alle 5s wechseln während die Werte im Datenlogger jede Sekunde gepeichert werden sollen. Wenn ich innerhalb der entsprechenden Subs über delay das Anzeigen bzw. Speichern verzögere, verzögert sich der gesamte Programmablauf.

Daher die frage, mit welchem Befehl ich die Subs parallel laufen lassen kann?
Ich hatte etwas von der Interrupt-Funktion gelesen weiß jedoch nicht, ob die passend ist bzw. wie die aufgebaut wird.

Vielen Dank mal....und Feuer frei Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.09.2013, 19:30
Beitrag #2
RE: Subs "parallel" laufen lassen..
Hee - hier wird nicht rumgeballert und auch nicht geraucht. Die Zeiten sind vorbei.


Ja, da gibt es ein paar Möglichkeiten. Mit "delay" hältst du den ganzen Programmablauf an, was selten sinnvoll ist. "Millis" liefert dir den Haupttimerwert, den du speichern kannst und die jeweilige Funktion erst nach einer bestimmten Wartezeit aufgerufen. Ich denke einmal, damit kannst du das timen....

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.09.2013, 13:46
Beitrag #3
RE: Subs "parallel" laufen lassen..
Alles klar Big Grin Vielen Dank dir, werde es bald ausprobieren..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.09.2013, 23:06 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2013 23:23 von Hobel.)
Beitrag #4
RE: Subs "parallel" laufen lassen..
"Parallel" gibts auf einem solchen CPU nicht aber es gibt eine Lib, die Zeitscheiben einführt, so dass man alles in Tasks managen kann. So mache ich es und mein System ist recht gross.

Such mal nach Arduino Timer oder ähnlich. ich binde timer.h ein und kann so beliebige viele Instanzen der Klasse erzeugen, die alle unabhängig zeitgesteuert Pseudo ISR auslösen.

Init:
Zitat:timer_event_id1 = tim_sensor.every(950, Task_Sensor); // Timer ISR fuer Sensorauslesen
timer_event_id2 = tim_display.every(1000, Task_Display); // Timer ISR fuer Display
timer_event_id3 = tim_pins.every(100, Task_Check_Int_Pins); // Timer ISR fuer Pin Abfrage
timer_event_id4 = tim_sdcard.every(60000, Task_SDCard); // Timer ISR fuer SD Datensicherung Statemachine

In der Loop steht dan nur noch:

Zitat:tim_sensor.update(); // Einlesen der Sensoren
tim_pins.update(); // Testen der IRQ Pins
tim_sdcard.update(); // Sd karte bedienen
tim_display.update(); // Ausgabe auf dem Display


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2013, 17:17
Beitrag #5
RE: Subs "parallel" laufen lassen..
Hallo Hobel,

ja, das Timing ist das A und O, gerade bei leistungsschwachen Rechnersystemen. Es gilt stets, es zu optimieren. Ich suche auch gerade nach einem guten Taskmanagement. Kannst du uns das Programm nennen, mit dem du gute Erfahrung gemacht hast? Da gibt es nämlich einiges....

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2013, 20:46 (Dieser Beitrag wurde zuletzt bearbeitet: 09.09.2013 21:58 von Hobel.)
Beitrag #6
RE: Subs "parallel" laufen lassen..
(08.09.2013 17:17)Stefan schrieb:  Hallo Hobel,

ja, das Timing ist das A und O, gerade bei leistungsschwachen Rechnersystemen. Es gilt stets, es zu optimieren. Ich suche auch gerade nach einem guten Taskmanagement. Kannst du uns das Programm nennen, mit dem du gute Erfahrung gemacht hast? Da gibt es nämlich einiges....

Hier: http://playground.arduino.cc/Code/Timer

Einfaches Pseudo Multitasking, man leitet eine Instanz ab, ordnet eine Zeit zu und schreibt die Subroutinen. Da der Arduino für physical computing gebaut ist und nicht um die Simulation ballistischer Raketen für die NASA durchzuführen reicht das doch. Echtes Hardware Multitasking über Timersteuerung würde die Abstraktionsebene verlassen, man müsste eine tiefer und ich weiss nicht ob das nicht mit den Arduino Funktionen kollidiert, welche Ressourcen die nutzen usw.

Der "Kernel" mein Bastelsystems arbeitet schlichtweg wie eine SPS eine Menge Sensoren ab, speichert die Daten in einem Struct und meine User Task, die indviduell nach Anforderung ist /(Blumengiessen, Ventilator einschalten etc) holt sich einfach die Daten ran, verknüpft die und bedient die Aktoren, welche über eigene Klassen abstrahiert sind, so dass das Hauptprogramm pipi einfach aufgebaut ist, über eine Statemachine stösst es einfach die Tasks an, die es braucht und die arbeiten dann die Daten automatisch ab. zb IR Sendediode kriegt den Puffer vollgeschrieben und spult die Bits dann von allein heraus, wenn sie grad dran ist ist.
Wobe ich zugeben muss, dass der Arduino eine Spieelrei ist, mir meinem 32 Bit ARM System mit eigener Grafikkarte (Gemeinschaftsprojekt von mikrocontroller.net) ist mehr möglich allerdings sind Newbies mit der Low Level Ebene einer derart komplexen CPU völlig überfordert. Null Libs und alles per Hand. Aber 512 MB Flash und 128 kb RAM, dazu 8 Timer sind schon megageil Big Grin Spiele mit dem Gedanken den Beagle Bone mal zu testen, Power wie ein ARM11 eben, Linux und Peripherie wie ein Arduino.

(08.09.2013 17:17)Stefan schrieb:  Hallo Hobel,

ja, das Timing ist das A und O, gerade bei leistungsschwachen Rechnersystemen. Es gilt stets, es zu optimieren. Ich suche auch gerade nach einem guten Taskmanagement. Kannst du uns das Programm nennen, mit dem du gute Erfahrung gemacht hast? Da gibt es nämlich einiges....

http://playground.arduino.cc/Code/Timer

Einfaches Pseudo Multitasking, man leitet eine Instanz ab, ordnet eine Zeit zu und schreibt die Subroutinen. Da der Arduino für psychical computing gebaut ist und nicht um die Simulation ballistischer Raketen für die NASA durchzuführen reicht das doch.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.09.2013, 08:01
Beitrag #7
RE: Subs "parallel" laufen lassen..
Na, da wurde wohl ein Beitrag verschlimmbessert. Big Grin Danke für den Link, ich habe jetzt 3 Timinglibs und werde sie mir demnächst reinziehen. Gerade weil der Ardi kein Leistungsprotz ist, gilt es, seine Leistungsfähigkeit (sprich: die Zeit) optimal zu nutzen. Schnell sind reichlich Bibliotheken eingebunden und er ist mit sinnlosen Tätigkeiten ausgelastet - oder sogar mit Zwangspausen: "delay".

ein schönes Board hast du da aufgebaut - sieht klasse aus!

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.09.2013, 22:00 (Dieser Beitrag wurde zuletzt bearbeitet: 09.09.2013 22:01 von Hobel.)
Beitrag #8
RE: Subs "parallel" laufen lassen..
Leistungsprotz? Arduino? 8 Bit Klappertechnik .....Ein PIC 18F877 ist mit 40Mhz schneller (mein Lieblings PIC Big Grin) Und mein ARM7 rennt mit 80 Mhz ..
trotzdem mag ich die kleinen niedlichen Nano's hier auf dem Schreibtisch..... die kriegt man wenn man einen Ard. Mega und einen Uno in eine dunkle
Schachtel packt und später dann wieder reinschaut :-)))
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  tip für Qellcode nur 1mal ablaufen lassen himbeersirup 4 346 19.05.2016 11:51
Letzter Beitrag: himbeersirup
  Programme lassen sich nicht auf das Gemma Board downloaden! Jack Sparrow 13 561 08.04.2016 10:01
Letzter Beitrag: hotsystems
  Lampe mit Key leuchten lassen FCraftLP 1 462 05.03.2016 11:44
Letzter Beitrag: hotsystems
  Leds blinken lassen mit if-Abfrage und millis ferdi 11 1.502 24.10.2015 08:54
Letzter Beitrag: Bitklopfer
  Counter rückwärts laufen lassen???? Haustechno 6 909 10.08.2015 18:26
Letzter Beitrag: Haustechno
  2 Stepper parallel mit easydrivern Endlagen und Mittelstellung murdok1980 4 1.077 18.06.2015 21:08
Letzter Beitrag: murdok1980
Question MEHRERE Vorgänge parallel ausführen? Much 3 907 26.05.2015 13:39
Letzter Beitrag: tito-t
  mehrere funksteckdosen über arduino laufen lassen. purzele06 12 1.923 28.03.2015 02:03
Letzter Beitrag: Homer
  Arduino mit der Außenwelt kommunizieren lassen raspido 0 743 22.03.2015 19:50
Letzter Beitrag: raspido
  Serielle Kommunikation neben Programmablauf "parallel" ausführen bits10 1 797 16.03.2015 22:32
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste