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
Temperaturabfrage ohne Verzögerung
01.07.2014, 06:24
Beitrag #1
Temperaturabfrage ohne Verzögerung
Hallo Profis,
ich möchte per onewire zwei DS18x20 abfragen aber ohne diese delays, da ich die Zeit für einen anderen Prozess brauche, der viel wichtigere Dinge regelt.
Hat mir da jemand einen Vorschlag.

LG Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.07.2014, 07:58
Beitrag #2
RE: Temperaturabfrage ohne Verzögerung
(01.07.2014 06:24)futti0 schrieb:  ich möchte per onewire zwei DS18x20 abfragen aber ohne diese delays, da ich die Zeit für einen anderen Prozess brauche, der viel wichtigere Dinge regelt.
Hat mir da jemand einen Vorschlag.
Hi,
ohne Verzögerung geht bei 1-Wire nicht, aber der Arduino kann natürlich während der Wartezeit auch was anderes machen. Dazu musst Du die Lösung mit dem delay gegen eine mit "millis()" ersetzen. Schau Dir mal das hier an: http://arduino.cc/en/Tutorial/BlinkWithoutDelay.
Ich habe mir damit etwas gebaut, was ständig bis zu 10 Sensoren pollt und sozusagen im Hintergrund die Temperatur in ein Array schreibt. Wenn das System dann eine Temperatur braucht, dann greift es einfach auf's Array zu.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2014, 05:52
Beitrag #3
RE: Temperaturabfrage ohne Verzögerung
Hallo Thorsten,
danke für die schnelle Antwort. Das mit den Millis kenne ich schon. Ich mache das immer mit einem Timer/counter der hochläuft.

Weil ich 4 Sensoren brauche, wäre one wire eine elegante Lösung gewesen, auch wegen der Verdrahtung.

Weisst du wie kurz oder wie schnell die DS18x20 antworten können?

Gibt es eine Art PID Regler per Arduino??

Das Problem, der wichtige Prozess ist eine Regelung und arbeitet auch mit Zeiten, die sich ständig, in Abhängigkeit der Temperatur, ändern und darf nicht unterbrochen werden. Bräuchte so eine Art multitasking Programmierung.

Oder ich werd wohl zwei Arduinos zusammenschalten müssen.

Gruß Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2014, 08:34
Beitrag #4
RE: Temperaturabfrage ohne Verzögerung
(02.07.2014 05:52)futti0 schrieb:  danke für die schnelle Antwort. Das mit den Millis kenne ich schon. Ich mache das immer mit einem Timer/counter der hochläuft.
Ich glaube nicht, dass Du mich verstanden hast. Was für ein Timer/Counter?
Schau Dir wirklich mal das Beispiel an, dass ich in meinem letzten Beitrag verlinkt habe.
Zitat:Weil ich 4 Sensoren brauche, wäre one wire eine elegante Lösung gewesen, auch wegen der Verdrahtung.
Klar, warum auch nicht.
Zitat:Weisst du wie kurz oder wie schnell die DS18x20 antworten können?
Das kommt auf die eingestellte Genauigkeit an. Meiner Meinung nach ist das aber egal, da eine Temperaturänderung sowieso ein bisschen braucht, um zum Sensor durchzudringen. Eine Abfrage pro Sekunde ist also mehr als ausreichend.
Zitat:Gibt es eine Art PID Regler per Arduino??
Das dürfte nicht so schwierig sein, aber bekomme doch erstmal das Auslesen Deiner Sensoren in den Griff.
Zitat:Das Problem, der wichtige Prozess ist eine Regelung und arbeitet auch mit Zeiten, die sich ständig, in Abhängigkeit der Temperatur, ändern und darf nicht unterbrochen werden. Bräuchte so eine Art multitasking Programmierung.
So lange Du keine Genauigkeit im Mikrosekunden-Bereich brauchst ist das genau, was Du mit dem "millis()"-Ansatz mchen kannst. Während auf das Ergebnis der Sensoren gewartet wird, kann das System anderen Kram erledigen. Ich habe einen Uno, der bis zu 10 1-Wire Sensoren abfragt und währenddessen auf Tastendrücke reagiert, eine LED blinken lässt und Kommunikation per RS485 erledigt. Trotzdem langweilt sich das Teil die meiste Zeit.
Zitat:Oder ich werd wohl zwei Arduinos zusammenschalten müssen.
Das ist IMHO dafür Overkill. Außerdem wird's dann noch schwieriger.

Zeig doch mal Dein bisheriges Coding, dann kann man vielleicht konkreter helfen.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2014, 14:44
Beitrag #5
RE: Temperaturabfrage ohne Verzögerung
Hallo Thorsten,

ja so ähnlich wie die millis mache ich es mit einem timer/counter. Mit den millis geht es aber besser, also danke für den Tipp.

Ich brauche ein Programm das mir am Ausgang eine Frequenz von 20k-100kHz liefert. Das mache ich momentan mit der tone() Funktion. Diese Frequenz soll gepulst, wie bei einem PWM ein und ausgeschaltet werden. Am Anfang, wenn das Gerät noch kalt ist, muss ich mehr pulsen um das Gerät warm zu fahren. Nach erreichen der Arbeitstemperatur soll nur noch minimal gepulst werden um die Temp zu erhalten.

Erwähnenswert ist die Tatsache, dass der Ausgang auf gar keinen Fall einfach eingeschaltet bleiben kann, da sonst das Gerät die Funktion verliert, bzw. überladen wird.

Code folgt.....

LG Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2014, 16:02
Beitrag #6
RE: Temperaturabfrage ohne Verzögerung
(02.07.2014 14:44)futti0 schrieb:  Ich brauche ein Programm das mir am Ausgang eine Frequenz von 20k-100kHz liefert. Das mache ich momentan mit der tone() Funktion.
Wenn ich mir die Beschreibung fuer tone() betrachte, dann ist die Frequenz in Hertz ein unsigned int. D.h. die maximale Frequenz ist ca. 65,5kHz. Wie kommst Du auf 100kHz?

Zitat:Diese Frequenz soll gepulst, wie bei einem PWM ein und ausgeschaltet werden.
Da kommt's jetzt darauf an, wie lange ein Puls sein muss und wie gross die erlaubte Toleranz ist. Du kannst tone() ja so aufrufen, dass es nur einen Puls von ein paar Millisekunden produziert. Eine andere Moeglichkeit waere, eine Handler-Funktion dafuer zu schreiben, die sich darum kuemmert nach einer bestimmten Zeit noTone() aufzurufen. Dann kannst Du das ganz flexibel gestalten.
Vielleicht kann man das auch mit einem Timer-Interrupt machen, aber wahrscheinlich ist das schon Overkill.

Zitat:Erwähnenswert ist die Tatsache, dass der Ausgang auf gar keinen Fall einfach eingeschaltet bleiben kann, da sonst das Gerät die Funktion verliert, bzw. überladen wird.
Meinst Du jetzt, dass das Signal komplett abgeschaltet werden muss, oder dass der Rechteckgenerator weiterhin laufen muss? Letzteres funktonier mit tone() sowieso.
Wenn nur die Datenuebertragung zu/von den 1-Wire-Sensoren parallel laufen muss, dann duerfte der Fehler irgendwo im einstelligen Millisekundenbereich liegen. Bei Prozessen, die irgendwas heizen oder kuehlen, kann ich mir nicht vorstellen, dass das ein Problem ist.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2014, 17:27
Beitrag #7
RE: Temperaturabfrage ohne Verzögerung
Hallo Thorsten,

hier der Code......und dazu sollen die Temperaturen eingelesen werden. Zur not muss ich die analog in Funktionen mit ntc Widerständen nehmen.

//Variablen, die sich nicht ändern
const int ausgang=13;

//variablen
unsigned int frequenz=42000;
byte solltemperatur=80;
byte isttemperatur=40;
int ontime=0;
int ontimemin=20;
int ontimemax=200;
int offtime=0;


void setup(){
Serial.begin(9600);
Serial.println("Setup...");
delay(500);
pinMode(ausgang, OUTPUT);
Serial.println("Setup done");
delay(500);
}
void loop()
{
ontime = map(isttemperatur, 0, solltemperatur, ontimemax, ontimemin);
offtime=ontimemax-ontime;
Serial.print("on = ");
Serial.println(ontime);
Serial.print("off = ");
Serial.println(offtime);
tone(ausgang, frequenz);
delay(ontime);
noTone(ausgang);
delay(offtime);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2014, 18:05
Beitrag #8
RE: Temperaturabfrage ohne Verzögerung
(02.07.2014 17:27)futti0 schrieb:  hier der Code......und dazu sollen die Temperaturen eingelesen werden. Zur not muss ich die analog in Funktionen mit ntc Widerständen nehmen.
Das wuerde ich nicht machen. Um das genauso gut wie mit 1-Wire hinzubekommen, musst Du einiges an Aufwand treiben. Z.B. musst Du ueber mehrere Messungen Ausreisser wegwerfen und ueber den Rest mitteln. Alles andere liefert Dir zu viel Rauschen. Ich mache sowas in meiner Heizungsanlage und weiss wovon ich rede.

Zu Deinem Coding:
Da sind ja schon wieder zwei delay() drin. Vergiss mal ganz schnell, dass es den delay() Befehl jemals gab. Schreib das erstmal so um, dass kein (!!!) delay() mehr darin vorkommt. Ich kann auch nur zum wiederholten mal auf das "Blink without Delay" hinweisen.
Wenn Du Dein Coding entsprechend umgebaut hast, dann mach dasselbe fuer einen Sketch, der die 1-Wire-Sensoren ausliest.
Die beiden Sketches dann zusammenzubauen muesste dann recht einfach gehen.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  PID ohne Library MeisterQ 5 532 01.05.2016 09:23
Letzter Beitrag: MeisterQ
  nur ein URL aufruf ohne PHP toto1975 3 607 05.04.2016 08:26
Letzter Beitrag: iks77
  Zeit - Verzögerung bergfrei 12 769 14.01.2016 22:09
Letzter Beitrag: Bitklopfer
  Rampe ohne Delay DC-Motor de_flexus 3 1.944 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 857 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  LED ohne Brightnes Mathias 2 465 21.10.2015 16:33
Letzter Beitrag: Mathias
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.734 06.07.2015 15:59
Letzter Beitrag: Sbbfreack
  Hilfe Möchte meinen schritt Motor ohne mastermann7 4 1.028 09.06.2015 14:28
Letzter Beitrag: fraju
  Arduino / ATtiny Uhrzeit ohne RTC und LCD - geht das? Gelegenheitsbastler 6 1.891 12.05.2015 11:42
Letzter Beitrag: itsy
  Blink ohne Delay - Merkwürdiger Fehler rave 7 1.835 11.05.2015 06:29
Letzter Beitrag: Bitklopfer

Gehe zu:


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