Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: DS1631: 10, 11 oder 12 Bits Konfigurieren/lesen Kategorie: C-Control I V1.2/2.0 (von Henrik, Homepage - 25.10.2005 21:08)
 Als Antwort auf DS1631: 10, 11 oder 12 Bits Konfigurieren/lesen von Daniel - 25.10.2005 8:02
Henrik nutzt:  CC1-M-Unit V1.2/2.0, Micro

> Does anyone know how to config the DS1631 (using Die Hard program) to read 10, 11 or 12 bits Temperatures, that is 0.25, 0.125 or 0.0625 °C increments ?  I am not clever enough to change the Config Register (R0 & R1 bits according to Dallas datasheet).
>
Well... try the following. It works out with minus degrees  as well:

'----------- Beispiel für C-Control1 Version 2x -------------------
'
'--- Nützliche Funktionen für die Auswertung des Temperatursensors-
'-------------------------- DS1621 --------------------------------
'
'Dieses Demoprogramm unterstützt die erweiterte Genauigkeit des
'IC. Gerundet wird auf 10tel Grad Celsius. Theoretisch kann
'eine Auflösung von 0,07 Grad Celsius erreicht werden, in der
'Praxis ist das aber unsinnig.
'Es wird nun auch der negative Temperaturbereich ausgewertet.
'Dies frisst ein paar Byte Programmspeicher und ein Variablenbit,
'daher sollte man, wenn keine Minusgrade zu erwarten sind, die
'vereinfachte Lösung wählen.

'Henrik Reimers Jan. 2005              http://www.henrik-reimers.de
'-------------------------------------------------------------------


'---- Variablen definieren-----------------------------------------

DEFINE value          AS    WORD
DEFINE temperatur     AS    WORD
DEFINE temp           AS    BYTE
DEFINE data           AS    BYTE
DEFINE counter        AS    BYTE
DEFINE slope          AS    BYTE
DEFINE dev            AS    BYTE
DEFINE minusflag      AS    BIT
'---- Funktionsdeklarationen --------------------------------------

DECLARE FUNCTION readtemp()

'------------------------------------------------------------------

#INIT
'*** entbehrlich wenn die Pullups nicht eingeschaltet werden müssen

CONFIG.INIT                            'auf Config Register umleiten
CONFIG.GET TEMP                        'den aktuellen Wert lesen
temp = temp OR 30h
CONFIG.PUT TEMP                        'Bits setzten und zurück schreiben
CONFIG.OFF                             'Umleitung abschalten

'sollte immer sofort erfolgen, bevor I2C benutzt wird

LCD.INIT
LCD.PRINT "1621 TEST"
PAUSE 100
LCD.OFF

'--------- HAUPTPROGRAMM -----------------------------------------

#main

#main1
dev = 144            'Alle Useraddresseingänge auf 0 - ggf.
                     'anpassen.
readtemp()           'ruft die readroutine für ds1621 auf

LCD.INIT SWITCHONLY
LCD.clr
LCD.POS 1,4
IF minusflag THEN LCD.PRINT "-"
LCD.POS 1, 5
LCD.PRINT value/10 & "," & value mod 10 & " ßC "
LCD.OFF

GOTO main1

'---- Funktionen -------------------------------------------------

FUNCTION readtemp()

IIC.INIT

IIC.start
IIC.SEND DEV
IIC.SEND EEh           'temperaturmessung anstoßen
IIC.STOP

PAUSE 10

IIC.start
IIC.SEND dev
IIC.SEND 22h            'temperaturmessung stoppen
IIC.stop

'---------------------------

IIC.start
IIC.SEND DEV
IIC.SEND AAh            'temperaturmessung Lesekommando
IIC.stop

IIC.start
IIC.SEND (DEV+1)        'lowtemperaturbyte auslesen
IIC.GET value

minusflag = OFF
IF value > 128 THEN
 minusflag = ON
 value = (255-value)+1
END IF
temperatur = value

IIC.stop
'------------------------------
IIC.start
IIC.SEND DEV
IIC.SEND A8h           'Counter Lesekommando
IIC.stop

IIC.start
IIC.SEND (dev+1)       'Counter auslesen
IIC.GET value
counter = value
IIC.stop
'-----------------------------

IIC.start
IIC.SEND DEV
IIC.SEND A9h           'Slope Lesekommando
IIC.stop

IIC.start
IIC.SEND (DEV+1)       'Slope auslesen
IIC.GET value
slope = value
IIC.stop

IIC.OFF
IF minusflag THEN
value=((temperatur * 100 - 25)-((slope-counter)*100/slope*100)/100)/10
ELSE
value=((temperatur * 100 - 25)+((slope-counter)*100/slope*100)/100)/10
END IF

END FUNCTION


Regards
Henrik



Meine Homepage: http://www.henrik-reimers.de/control/

 Antwort schreiben

Bisherige Antworten:

Re: DS1631: 10, 11 oder 12 Bits Konfigurieren/lesen (von Daniel - 26.10.2005 14:36)
    Re: DS1631: 10, 11 oder 12 Bits Konfigurieren/lesen (von Henrik - 26.10.2005 15:15)
        Re: DS1631: 10, 11 oder 12 Bits Konfigurieren/lesen (von Daniel - 26.10.2005 17:16)
            Re: DS1631: 10, 11 oder 12 Bits Konfigurieren/lesen (von Daniel - 29.10.2005 9:00)