Suche Code für DS1631

adelinde

Mitglied
21. Feb. 2009
60
3
8
Hallo zusammen, hab hier noch einen DS1631 Temperatursensor.
Hat vielleicht noch einer einen Beispielcode dazu?

Gruß Siggi
 
Hallo Siggi !

Frag doch mal StevieL hier im Forum ganz direkt, ob er dir evtl. helfen möchte!
Er hat bei sich jedenfalls den DS1631 erfolgreich im Einsatz.

Ich habe damit aber nicht gesagt, dass er dir komentarlos seinen Programmcode überlassen wird. Bin mir auch nicht sicher, ob das sinnvoll wäre. ;)


Gruß,
Cassio
 
Hi Siggi,

ich hab mir mal das Datenblatt gezogen ... Erst dachte ich auch an einen
1Wire-Sensor. Aber das Ding ist ja nen I2C-Sensor ;) So kann man sich irren.

Hier das Datenblatt ... Anhang anzeigen DS1631__.pdf

Ab Seite 11 ist der gesamte Prozess für die Datenübertragung gut erklärt.
Eigentlich recht einfach ...

Adresse, Befehl, evtuelle Restbytes, ....

Gruß Dino
 
Hallo Siggi,

dieser Code sollte funktionieren. Stammt allerdings nicht von mir, habe ich irgendwo mal aufgeschnappt:

Code:
$regfile = "m8def.dat"
$crystal = 8000000
$lib "i2c_twi.lbx"

$hwstack = 128
$swstack = 128
$framesize = 32

Dim Temp As Word
Dim T1 As Single
Dim Dat(2) As Byte
Dim Tempvar As Byte

Declare Sub Ds1631_gettemp(byval Device As Byte)
Declare Sub Ds1631_convert(byval Device As Byte)
Declare Sub Ds1631_setstatus(byval Device As Byte , Byval Status As Byte)
Declare Sub Ds1631_por(byval Device As Byte)
Declare Sub Ds1631_waitready(byval Device As Byte)


'SDA und SCL definieren
Config Sda = Portc.4
Config Scl = Portc.5

Ddrb = &B00000111
Portb = &B11111000
Led Alias Portb.2

Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.0 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.4
Config Lcd = 16 * 1a
Config Lcdmode = Port
Config Lcdbus = 4
Cursor Off Noblink

Enable Interrupts
Config Clock = Soft                                         'Softclock aktivieren
Config Date = Dmy , Separator = .                           'Deutsches Datumsformat
Time$ = "00:00:00"                                          'Setzen auf Startwert
Date$ = "18.12.07"
'-------------------------------------------------------------

I2cinit
Cls

Call Ds1631_Por(&H90)
Call Ds1631_setstatus(&H90 , 13)


Do
Call Ds1631_convert(&H90)
Call Ds1631_Waitready(&H90)
Call Ds1631_Gettemp(&H90)
Locate 1 , 1
Lcd Time$
Locate 2 , 1
T1 = Temp
If Dat(1).7 = 1 Then T1 = T1 - 4096
T1 = T1 / 16
Lcd Fusing(t1 , "+##.#") ; "ßC  "
If T1 > 24.8 Then
   Led = 1
Else
   Led = 0
End If
Waitms 20
Loop

Sub Ds1631_convert(device As Byte)
    I2csend Device , &H51
End Sub

Sub Ds1631_Gettemp(device As Byte)
    Dat(1) = &HAA
    I2creceive , Device , Dat(1) , 1 , 2
    Temp = Dat(1)
    Shift Temp , Left , 4
    Shift Dat(2) , Right , 4
    Temp = Temp + Dat(2)
End Sub

Sub Ds1631_Por(device As Byte)
    I2csend Device , &H54
End Sub

Sub Ds1631_Setstatus(device As Byte , Status As Byte)
    Dat(1) = &HAC
    Dat(2) = Status
    I2csend Device , Dat(1) , 2
End Sub

Sub Ds1631_Waitready(device As Byte)
    Waitms 200
    Dat(1) = &HAC
    Do
      I2creceive Device , Dat(1) , 1 , 1
    Loop Until Dat(1).7 = 1
End Sub
 
Hallo Siggi,
dieser Code sollte funktionieren. Stammt allerdings nicht von mir, habe ich irgendwo mal aufgeschnappt:

Danke mal für die Antwort,
leider bekomme ich kein Antwort.
Mit dem Datenblatt hab ich's auch probiert, mein Versuch sieht so aus:
Code:
Get_ds1631:
'por
I2cstart
I2cwbyte &H90
I2cwbyte &H54
I2cstop
Waitms 500

'Access Config    (1101->12Bit und single temperature conversion)
I2cstart
I2cwbyte &H90
I2cwbyte &HAC
I2cwbyte 13
I2cstop
Waitms 500
'Start Convert
I2cstart
I2cwbyte &H90
I2cwbyte &H51
I2cstop

Waitms 500
' Stop Convert
I2cstart
I2cwbyte &H90
I2cwbyte &H22
I2cstop

Waitms 500
'reed
I2cstart
I2cwbyte &H91
I2cwbyte &HAC
I2cstart
I2cwbyte &H91
I2crbyte Dat_1631(1)
I2crbyte Dat_1631(2) , Nack
I2cstop
Lcdat 2 , 1 , Dat_1631(1) ; " " ; Dat_1631(2)
Wait 2
Return

geht auch nicht:(

Ps. merkwürdiges Phänomen:
Hatte einen LM75 am laufen, zum Test gegen den DS1631 getauscht.
Wenn ich den Code vom LM75 nach dem von "Stevil" aufrufe (vergessen Auszukommentieren) liest die Rutine des LM75 den DS1631 korrekt aus


Grüße an alle
Siggi
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)