PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturregelung mit DS1820



Duesentrieb
11.05.2008, 00:11
Hallo zusammen,

ich beschäftige mich gerade mit 1-wire Bausteinen. Genauer gesagt mit dem DS1820 zur Temperaturmessung.
Im Web habe ich eine passenden Code gefunden mit dem ich experimentieren kann.

$regfile = "m32def.dat"
$crystal = 7372800

' LCD konfigurieren Port auf Ausgabe setzten und Pin's entsprechend zuordnen
Ddrd = &HFF
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.7
Config Lcd = 16 * 2

' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config 1wire = Portc.0

Dim Ar(2) As Byte

Cls

Do
1wreset
1wwrite &HCC
1wwrite &H44
1wreset
1wwrite &HCC
1wwrite &HBE
Ar(1) = 1wread(2)

Waitms 500
Locate 1 , 1
Lcd Hex(ar(2)) ; Hex(ar(1))
Locate 2 , 5
Shift Ar(1) , Right , 1
Lcd Ar(1)
Loop

End

Der hier beschriebende Code läuft mit einem DS1820 an einem Port.
Ich möchte nun einen zweiten an Port Portc.1 anschließen.

Wie muss ich diesen im Programm einbauen?

Schöne Grüße
Daniel

elkokiller
11.05.2008, 10:54
Hallo Düsentrieb,

du kannst, soviel ich weis, über Bascom nur einen Port als 1wire definieren

Zapo.
11.05.2008, 11:37
es ist ja ein BUS ! also kannst an einen PIN mehrere 1Wire Bausteine dranhängen... fertig!

um nun den richtig anzusprechen mußst du bevor du im Programm beginnst natürlich seine "Adresse" (bei 1Wire Bausteinen Seriennummer!) ausglesen werden.

dann gibts verschiedene Befehle --> siehe Datenblatt DS1820 (z.B. skip ROM; readROM oder auch MatchRom!!)

damit sprichst du dann explizit den Baustein an den du auch abfragen möchtest.

um die Adressen übrigens auszulesen welche beim einschalten der Schaltung am BUS hängen verwendest du 1wsearchfirst bzw. 1wsearchnext!

Zapo.

siehe hier:
http://www.pirnaer.de/bascom_fuer_myavr_temperatur_ds1820.html

Duesentrieb
11.05.2008, 12:45
das Auslesen der Adresse wollte ich mir gerne sparen da ich nur zwei Fühler anschließen möchte.
Gehrt es nicht auch mit 2 Port's?

stefan_Z
11.05.2008, 15:35
Ja, man kann auch nen zusätzlichen Pin als 2. 1Wire definieren. Siehe Handbuch.
Das mit der Seriennummer ist allerdings sauberer...

for_ro
11.05.2008, 15:47
Das mit der Seriennummer ist allerdings sauberer...

Warum soll das "sauberer" sein?
Es braucht weniger Ressourcen, das stimmt. Aber wenn er genügend davon hat und nur zwei Sensoren braucht, ist das vollkommen ok.
Viele Leute haben Probleme mit Auslesen von mehreren Sensoren auf einem Pin.
Config 1wire kannst du natürlich nur einmal angeben, aber wie Stefan gesagt hat, kannst du in jedem 1wire Befehl den Pin angeben, auf den er sich beziehen soll. Z.B.
1wread(8 , Pinb , 2).

Die Wartezeit musst du eigentlich nach dem Start der Konvertierung machen, direkt danach auslesen geht nicht.
Allerdings kannst du das auch etwas eleganter machen, ohne extra Wartezeit. Wenn du das Ganze in einem größeren Programm machst und sowieso nur einmal jede Sekunde konvertierst, machst du die beiden Befehle anders herum, also erst auslesen, dann Konvertierung starten und nach einer Sekunde kommst du dann wieder an die Stelle, wo ausgelesen wird. Klaro?

Gruß

Rolf

Duesentrieb
11.05.2008, 16:29
oh super, dann muss ich mich da noch mal einlesen.

Mal ne andere Frage zu gleichen Thema.
Ich habe irgentwo mal gesehen, dass ein DS1820 Temperaturfühler über nur zwei Leiitungen betrieben wurde.
GND und + waren auf Masse gelegt. Der Messausgang ging direkt auf einen Port.
Geht sowas? Wenn ja, gibt es dafür auch ein Beispiel in Bascom?
Recoursen auf dem Cip habe ich genügend. Mit den Leitungsverbindunegn hapert es allerdings

stefan_Z
11.05.2008, 21:04
Schau im Datenblatt.. da braucht man glaubich nen "Strong-Pullup" oder sowas und der DS ernährt sich dann von den parasitären Strömen der Busleitung...