PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DS 18S20+ wo ist der Fehler?



apohero
26.03.2008, 12:30
Hallo,
heute bekam ich meine DS18S20+ Bauteile von CSD. Ich habe mich auch gleich schlau gemacht wie ich eins richtig anschliesse und ansteuere. Leider bekomme ich als Ausgabe immer nur 255. Hier ist meine Schaltung:



DS18S20+
-----------------
| |
|________________|
| | |
| | |
/--|4,7k|----| |
5v DQ GND

DQ geht an Portd.3



Ich habe schon viele Codes ausprobiert. Dies ist der Aktuelle:



Config 1wire = Portd.3
........

Do
Wait 1
1wreset
1wwrite &HCC
Waitms 200
1wreset
1wwrite &H33
Tar(1) = 1wread()
1wreset
Locate 2 , 10
Temperatur = Tar(1)
If Temperatur > 127 Then
Lcd "-"
Temperatur = 256 - Temperatur
Else
Lcd ""
End If
Lcd Temperatur;
Lcd " C"
Wait 1
Loop Until Taster = 0


Vielleicht weis einer Rat. Ist wahrscheinlich nur ein Anfängerfehler.
Danke schonmal

apohero
26.03.2008, 12:52
Ich füge noch hinzu das ich einen Atmega88 auf 8mhz benutze mit einem angeschlossenen Display.

apohero
26.03.2008, 18:23
Kann es sein das das '+' bei Ds18S20+ für Parasite steht?

Rofo88
26.03.2008, 18:55
Die DS18S20 mit denen ich bis jetzt zu tun hatte konnten immer beide Spannungsversorgungen nutzen.

Was steht denn auf dem Gehäuse? Dallas schreibt glaube ich immer ein P hinter den Typ für Parasite.

Deinen Wartezeit ist mit 200ms etwas kurz.

apohero
26.03.2008, 20:53
Auf der Rückseite steht:

Dallas
DS1820
(dann irgendeine Nummer)
+440AE



Um noch ins Detail zu gehen:
ich habe den Pullup einfach zwischen DQ und Vdd Pin gelötet.
Vdd geht dann an die 5V.DQ an den Pin und GND...
Hab auch mal den kompletten Array voll gemacht kam aber für jeden Eintrag 255 raus. Muss ich evtl. noch nen search einbauen oder ein verify für den 1wire?

apohero
27.03.2008, 07:30
Hab mal Reg_no(1) = 1wsearchfirst() eingebaut und es mir ausgeben lassen. Kommt aber nur 00000000 raus. Ist das Bauteil evtl. defekt?

apohero
27.03.2008, 14:35
Es hat sich jetzt doch was herausgestellt:
Der eine Temperatursensor war defekt. 2 andere hatten wir zunächst erstmal verpolt (was hoffentlich nicht schlimm ist) dann richtig herum eingebaut. Nun erhalten wir etwas was wie eine Id aussieht. Ein Problem bleibt haben wir nun noch. Der Temperatursensor zeigt immer das gleiche an und zwar 16. Auch wenn wir den Sensor erhitzen ändert sich nichts. Zudem bekommen wir mit einen anderen Sensor einen anderen Wert heraus. Haben die Sensoren einen Schlag weg? Oder fehlt etwas in der Messung?

apohero
27.03.2008, 15:50
Problem gelöst! Es lag an der Zeit. 750 ms haben es behoben. Hier der korrekte Code.




1wreset 'reset the device
1wwrite &HCC 'SKIP ROM command
1wwrite &H44 'CONVERT T
Waitms 750 'read ROM command

1wreset 'reset the device
1wwrite &HCC 'read ROM command
1wwrite &HBE 'read ROM command
'For I = 1 To 2
Ar(1) = 1wread() 'place into array
Ar(2) = 1wread()

Shift Ar(1) , Right , 1

Locate 1 , 1


Lcd Ar(1) ; "." ; Hex(ar(1));

Locate 2 , 1
'Temperatur = Ar(1)

Lcd Ar(2) ; "." ; Hex(ar(2));