
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Ich habe von Henrik Reimers das Demo DS1621_auswertung_genau heruntergeladen. Im plus Bereich funkt es rechtgut, im minus Bereich habe ich den wert 254 usw. bekommen. Ich als Leihe habe probiert es umzuschreiben. Im null bereich springt die anzeige von 0 nach -1,5 und nicht von 0 nach -0,9 nach-0,8 usw. Kann da jemand mir helfen. Anschließend die abgeänderte Demo. Gruß Lorenz '----------- 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. 'Henrik Reimers Jan. 2004 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 temp1 AD [1] '---- 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, 5 LCD.PRINT value/10 & "," & value mod 10 & " ßC " LCD.POS 2,5 value =temp1*10 / 2 -250 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 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 temperatur < 128 THEN value=((temperatur * 100 - 25)+((slope-counter)*100/slope*100)/100)/10 ELSE temperatur = (255 XOR temperatur)+1 value=((temperatur * 100 - 25)+((slope-counter)*100/slope*100)/100)/10 value = (NOT value) END IF END FUNCTION |
| Antwort schreiben |