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: DS1621 Minuswerte - bin ja kein Unmensch Kategorie: Programmierung Basic (von Henrik, Homepage - 30.01.2005 16:17)
 Als Antwort auf Re: DS1621 Minuswerte von Lorenz - 30.01.2005 14:10
So, weil das wirklich etwas Verrenkungen erfordert, habe  ich mein Beispiel für
die Auswertung von Minusgraden angepasst. Ist ausprobiert und funktioniert.
(Minusgrade mit Peltierelemet erzeugt).


'----------- 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.
'Die 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



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

 Antwort schreiben

Bisherige Antworten: