Sie sind der . Besucher seit dem 23.01.2008

DS1620 - aufgewärmte Bratkartoffel  

Im Haus meiner Eltern wird die Ölheizung lediglich von einem Außenfühler gesteuert. Bei Sonneneinstrahlung steigt deshalb die Raumtemperatur unnötig an, deshalb soll ein Raumthermostate installieret werden, der bei Überschreiten einer bestimmten Temperatur die Umwälzpumpe einfach abschaltet.

Vor Jahren habe ich für den IC DS1620 (Thermometer und Thermostat) mit CCBasic (von Conrad-Elektronik) ein Terminalprogramm geschrieben, mit dem man - u.a. - die Schaltschwellen in den DS1620 für dessen Stand-Allone-Betrieb programmiern konnte. Ich hatte dieses Programm auch in ein Internet-Forum gestellt - aber heute finde ich es im Internet nicht mehr.

Auf meinem alten PC ist es aber noch - und hier ist es:

' Digital-Thermometer-Baustein DS1620           09.01.99
' Zusätzlich mit "l - Start Stand-Allone-Mode"
' ergänzt am 30.10.00 um Kommentare
' e-Mail: Peter.Boesche@t-online.de, Internet: www.peter-boesche.de
'
'                                     pins
' Datenein-/ausgang              DQ  1  u  8 Vdd       (+2,7V bis) +5Volt
' Clockinput bzw. Convert  CLK/CONV  2     7 T-high    Trigger obere Temperatur
' Reset-Eingang                 RST  3     6 T-low     Trigger untere Temperatur
' Masse (Ground)                GND  4     5 T-com     Kombitrigger obere/untere Temp
'
'
' Programmieren des Bausteins DS1620:
' C-Control ist über die RS232-Schnittstelle mit dem PC zu verbinden. Von PC aus wird
' der DS1620 mittels diesem Terminalprogramm programmiert, gesteuert und abgefragt.
' So wird z.B. bei Eingabe von a die aktuelle Temperatur ausgelesen und angezeigt.
' Zu beachten ist, das Write-Befehle vom PC als ASCII-Codes gesendet werden. Um
' beispielsweise eine Triggertemperatur von 34°C in den DS1620 zu schreiben,
' muss man den ASCII-Code für 68 senden. Das erreicht man entweder indem man den
' Buchstaben D eintippt oder die Alt-Taste gedrückt hält und auf der Nummern-
' tastatur 68 tippt.
'
' Im Stand-Allone-Modus (Pin 2 an Masse, auch C-Control NICHT erforderlich!) schaltet
' der Baustein dann bei den programmierten Temperaturen die Trigger-Pins. Wenn man
' an diese Pins LED's über 1kOhm an Masse legt, kann man das beobachten.


Define DHbyte Byte[1]
Define DLbyte Byte[2]
Define DWord Word[1]
Define Daten Byte[3]
define n Byte[4]
Define RST Port[1]      'mit Pin 3 des DS1620 verbunden
Define CLK Port[2]      'mit Pin 2 des DS1620 verbunden
Define DQ Port[3]       'mit Pin 1 des DS1620 verbunden

RST = OFF
CLK = ON       'OFF für Start in stand-allone-Modus
DQ  = ON

#Menue
print
print "a - Read  Temperatur"    ' a=97 als ASCII-Code, s. Zeile 57
print "b - Read THigh"
print "c - Read TLow"
print "d - Write  THigh"        '
print "e - Write  TLow"
print "f - Read  Counter"
print "g - Read  Slope"
print "h - Start Convert"       ' muss ausgegeben werden, damit Messung startet
print "i - Stop  Convert"       '
print "j - Write Config"        ' vorher sollte man das Datenblatt lesen!
print "k - Read  Config"        '
print "l - Start Stand-Allone-Mode"

get Daten
Daten = Daten - 97
on Daten gosub s1,  s4, s5, s2, s3, s6, s7, s8, s9, s10, s11, s12
pause 50
get Daten
goto Menue

#s1
print "Read  Temperatur:"
gosub Start
Daten = 170
gosub WriteDS
gosub ReadDS
DLbyte = Daten
gosub ReadDS
DHbyte = Daten
gosub Stop
gosub PrintTemp
return

#PrintTemp
if DHbyte = 0 then print 5*DLbyte/10;",";5*DLbyte mod 10;"°C"
if DHbyte = 1 then print "-";5*(256-DLbyte)/10;",";5*(256-DLbyte) mod 10;"°C"
return

#WriteDS
for n = 1 to 8
DQ = OFF
if (Daten AND 1) = 1 then DQ = ON
'pulse CLK
CLK = OFF
CLK = ON
Daten = Daten shr 1 ' 1 Bit nach rechts
next
return

#ReadDS
Daten = 0
deact DQ
for n = 1 to 8
Daten = Daten shr 1 ' 1 Bit nach links
CLK = OFF
if DQ then Daten = Daten + 128
CLK = ON
next
return

#Start
RST = ON
CLK = ON
DQ = OFF
return

#Stop
CLK = ON
DQ  = ON
RST = OFF
return

#s2
print "Write THigh"
gosub Start
Daten = 1
gosub WriteDS
#s2TLow
print "n - neg. Temp."
print "p - pos. Temp."
print "z - für 0°C"
get Daten
if Daten = 122 then DHbyte = 0
if Daten = 122 then DLbyte = 0
if Daten = 122 then print "=> Temp.: "
if Daten = 122 then goto 0Grad
if Daten = 110 Then print "=> neg. Temp.:" else print "=> pos.Temp.:"
DHbyte = 0
if Daten = 110 then DHbyte = 1 ' bei n - negative Temperatur
print "AltInput 2*Temp.: "
get DLbyte
#0Grad
if DHbyte = 1 then DLbyte = 256 - DLbyte
gosub PrintTemp
Daten = DLbyte
gosub WriteDS
Daten = DHbyte
gosub WriteDS
gosub Stop
return

#s3
print "Write TLow"
gosub Start
Daten = 2
gosub WriteDS
goto s2TLow

#s4
print "Read THigh"
gosub Start
Daten = 161
gosub WriteDS
#s4TLow
gosub ReadDS
DLbyte = Daten
gosub ReadDS
DHbyte = Daten
gosub Stop
gosub PrintTemp
return

#s5
print "Read TLow"
gosub Start
Daten = 162
gosub WriteDS
goto s4TLow

#s6
print "Read Counter"
gosub Start
Daten = 160
gosub WriteDS
gosub ReadDS
DLbyte = Daten
gosub ReadDS
DHbyte = Daten
gosub Stop
print DWord
return

#s7
print "Read Slope"
gosub Start
Daten = 169
gosub WriteDS
gosub ReadDS
DLbyte = Daten
gosub ReadDS
DHbyte = Daten
gosub Stop
print DWord
return

#s8
print "Start Convert"
gosub Start
Daten = 238
gosub WriteDS
gosub Stop
print "OK"
return

#s9
print "Stop Convert"
gosub Start
Daten = 34
gosub WriteDS
gosub Stop
print "OK"
return

#s10
print "Write Config"
gosub Start
Daten = 12
gosub WriteDS
print "AltInput ConfigStatus:"
get Daten
DLbyte = Daten  'nur Merker
gosub WriteDS
gosub Stop
print "ConfigRegister = ";DLbyte
return

#s11
print "Read Config"
gosub Start
Daten = 172
gosub WriteDS
gosub ReadDS
gosub Stop
print "ConfigRegister = ";Daten
return

#s12
CLK = OFF
print "Stand-Allone-Mode gestartet"
print "Programm beendet"
#endlos
goto endlos
end


Wichtig ist, dass das Terminalprogramm tatsächlich nur ein "a"
( also 97 als ASCII-Code) ausgibt und kein CR anhängt!

Hier ein Foto meines Versuchsaufbaus:




Termialprogramm: