PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu 1-Wire Temperatursensor



demmy
14.01.2013, 12:19
Hallo zusammen,

kann mir einer von euch in etwa sagen wie lange es dauert (Zeitspanne), bis die Temperatur, über einen mittels 1 Wire angeschlossenen, Temperatursensor ausgelesen ist?

Das eigentliche Programm hällt ja während der 1 Wire kommunikation an? Oder Passiert das wie bei der Hardware UART im Hintergrund?

Vielen Dank für die Hilfe

Gruß Jens

for_ro
14.01.2013, 15:58
Hallo Jens,
die Ausführungszeiten der 1w-Befehle liegt für die meisten so um 1ms.
So weit ich mich erinnere dauern nur die Suchbefehle (1wsearchfirst usw) etwas länger. Die Zeiten werden per Wait erreicht, dein Programm wartet also so lange.

wkrug
14.01.2013, 17:27
Ein AVR Controller hat kein Hardware 1wire Interface. Das bedeutet die komplette 1wire Schnittstelle wird mit Software bedient.
Auch wenn man das bei einer fertigen Library nicht sieht.
Das eigentliche Bedienen der 1wire Schnittstelle dürfte sehr schnell gehen.
Allerdings braucht der 1wire Temperatur Sensor eine sog. Conversation Time, also eine Zeit in der er die aktuelle Temperatur Analog/Digital wandelt und in sein scratchpad schreibt.
Wenn der Befehl zum A/D Wandeln gegeben wurde muss eine gewisse Zeit gewartet werden, bis die aktuellen Werte vom 1wire Chip ausgelesen werden können.
In dieser Zeit kann der Controller auch was anderes machen - Wenn man das möchte.

Wie das genau in BASCOM gehandelt wird kann ich leider nicht sagen - Ich bin ein "C" Jünger.

demmy
15.01.2013, 22:17
Ok, jetzt habe ich folgendes Problem, das dauert alles viel zu lange. Die Millisekunde zieht meine Zykluszeit ziemlich runter.

Welche Möglichkeiten gibt es noch an einem Atmega162 die Temperatur zu messen ohne ADC?

Kann evtl. jemand was über den SMT160 sagen? Wie das mit einem PWM Eingang funktioniert?

Oder, was haltet ihr von einem externen AD Converter? Ich hätte noch genügend IO Pins frei!?

Viele Grüße

TheDarkRose
15.01.2013, 23:20
Wo ist dein Zeitproblem? die Takte im Kommunikationszyklus, oder das warten auf den Wert (Conversation Time). Mit richtiger Programmierung (Timerinterrupts), kann der Controller währenddessen was anderes machen.

demmy
16.01.2013, 07:24
Das Warten auf den Wert. Das Programm soll, wenn möglich ohne stehen zu bleiben weiterlaufen. Ich würde also gerne auf Befehle wie "Wait" usw. komplett verzichten.
Wie würde das denn mit Interrupt aussehen?

Gruß

TheDarkRose
16.01.2013, 10:16
Nachdem du die Anforderung gesendet hast, startest du einen Timer, der dir nach ca 1ms einen Interrupt gibt. In diesem Interrupt setzt du ein Flag, das in der main-Schleife abgefragt wird. Ist dieses Flag gesetzt, liest du den Wert vom Sensor aus und setzt das Flag zurück. Somit kann der Microcontroller während dem warten etwas anderes tun, da der Timer hardwarebasiert ist.

demmy
16.01.2013, 22:17
Ahh ok, das hört sich sehr interessant an, und könnte das sein, wonach ich gesucht habe.
Eine Frage nur noch, mit welcher Zeitspanne ist beim Senden der Anforderung sowie beim Auslesen des Temperaturwertes zu rechnen?
Ich werde es in jedem Fall testen.

Vielen Dank schon mal!

peterfido
19.01.2013, 03:11
Das kommt auf den Sensor an. Mit einer Sekunde bist Du auf der sicheren Seite. Geht oft aber auch schon mit 700mS. Falls Du den parasitären Modus nimmst, ist eine Sekunde besser.