INFO - FAQ - CC2-Forum - CCPro-Forum |
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 |