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
Gleichzeitige Bearbeitung von Programmteilen
24.12.2013, 13:20
Beitrag #1
Gleichzeitige Bearbeitung von Programmteilen
Hallo zusammen,

hab mich mal in den letzten paar Woche in Arduino hinein gearbeitet und mein Projekt soweit immer wieder ein Stück erweitert.
Habe einen Luftdrucksensor und ein GPS Sensor an meinem Arduino angeschlossen. Beide Sensoren funktionieren und ich kann die Werte einlesen welche ich möchte. Mein Problem ist nun wenn ich die Programmcodes in ein kompletten Programmcode zusammen fassen funktioniert das, nur die Werte vom GPS Sensor kommen dann sehr sehr langsam im Arduino an. GPS Sensor hängt an der seriellen Schnittstelle (RX und TX) und der Luftdrucksensor an der I2C.
Ich habe auch herausgefunden das der Arduino Uno, welchen ich verwende kein Multitasking kann, da es nur ein 1 Kernprozessor ist. Ich würde aber gerne das GPS so zusagen im Hintergrund durch laufen lassen und sobald dieses seine Werte hat auf meinem Display ausgeben. Der Programmabschnitt vom Luftdrucksensor soll vorrangig sein da dieser alle 500ms aktualisiert werden soll. Hat vielleicht jemand eine Idee wie man das Umsetzen kann??
Bin schon am überlegen ob ich ein zweiten Arduino nehmen soll, wo nur das GPS dran hängt und den dann über I2C die Daten an den ersten Arduino übergibt und dann auf dem Panel ausgibt. Was anderes fällt mir selbst nicht ein.

Gruß
Steffen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.12.2013, 17:42
Beitrag #2
RE: Gleichzeitige Bearbeitung von Programmteilen
Hallo Xtremefly,

ich glaube du bringst hier Äpfel und Birnen zusammen.
Zitat:kein Multitasking kann, da es nur ein 1 Kernprozessor
Multitasking hat nix mit einem oder mehreren Kernen zu tun.
Auch Multitasking ist nur ein sehr schnelles hin-und herschalten zwischen verschiedenen Tasks, nur eben sehr schnell und immer hintereinander.
Was du meinst ist Multithreading. Beim Multithreading wird eine Task so programmiert, dass Teilaufgaben dieser Task parallel abgearbeitet werden können, insofern mehrere CPU-Kerne vorhanden sind.
Das Pendant dazu im Bereich der Programmierung ist die Klasse/der Datentyp. Diese haben in aller Regel Eigenschaften und Methoden. Und genau diese Methoden können dann parallel gestartet werden. Diese Art der programmierung ist dann die sog. objektorientierte Programmierung. Dies bietet der Arduino nicht, da er nur einen rein prozeduralen Sprachvorrat hat.
Wenn du also "pseudo prallel" arbeiten möchtest musst du tatsächlich zwei Arduinos einsetzen. Allerdings wird hier der echt "parallele" Charakte gleich wieder durch die Kommunikation zwischen den Arduinos unterbrochen.
Eine Lösung bei zeit-/ereignissensiblen Geschichten ist die Nutzung von Timern bzw. Interrupts.
Zeitsteuerung geht zB. über Scheduler oder Timer Libraries.
Interruptsteuerung ist im Arduino-Sprachvorrat enthalten. Die Interrupts sind jedoch nur als Hardware-Interrupts zu verstehen,beziehen sich also auf Pegeländerungen an den Interrupt-Pins. Wichtig auch: Durch Interrupts ausgelöste Funktionen dürfen weder Werte erwarten noch liefern.

Hope it helps!

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2013, 05:20
Beitrag #3
RE: Gleichzeitige Bearbeitung von Programmteilen
Hmm,
ich hatte das gleiche Problem, weil ich mehrere Funktionen gleichzeitig bedient haben wollte.
Ich habe für mich aber eine Lösung gefunden, weil meine Applikation nicht zeitkritisch ist.

Je nachdem, wie schnell Dein Arduino ist, besteht die Change, das er alle Deine Methoden seriell in weniger gleich 500ms schafft.
Wenn er weniger Zeit braucht, kannst Du die Methode zum Koordinatenmessen und -verarbeiten über eine einfache Zeitmessung steuern, indem Du die millis() abfragst und nachschaust ob die Methode dran ist.

In meinem Code Brennersteuerung Page 6 sollte es in doBrenner() mit drinnen sein.
Nur mal so als möglicher Behelfsansatz.

Gruß Joe

Meine Vision Rolleyes http://global-science-circle.org
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2013, 11:13 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2014 18:28 von Xtremefly.)
Beitrag #4
RE: Gleichzeitige Bearbeitung von Programmteilen
Guten Morgen zusammen,

@ Ricardo, ja genau das war das mit dem Multitrheading was ich meinte.

Mir ist schon klar, dass wenn ich einen zweiten Arduino über i2c anschließe das dann zu meinem Zyklus die Bearbeitungszeit der Schnittstelle dazu kommt.
Wenn ich nur den Code mit GPS laufen lasse, brauch ich ca. 2-3 sek bis ich alle Daten aus dem NMEA Protokoll habe. Was mir für´s GPS reicht. Sobald ich aber meinen Luftdrucksensor zuschalte, habe ich nach 30 Sekunden immer noch keine Werte vom GPS weil die Serielle Schnittstelle vom GPS die Werte nur ganz langsam einliest.

Anbei mal mein Quellcode vielleicht wird es dann etwas besser zum verstehen. Weil ich mir echt nicht richtig vorstellen kann warum die GPS Werte so langsam eingelesen werden, wenn ich die I2C Schnittstelle in jedem Zyklus mit abfrage.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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