
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> > > ich hab mir das Beispiel von der CD mal angesehen so funktioniert es tadellos nur bei minus Graden hängt es sich auf warum? > > Diese Demo berücksichtigt Minusgrade einfach nicht. > > Du könntest mal mein Beispiel ausprobieren: > > > '----------- 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 > > > Grüße > Henrik Ich haben das Programm von Henrik im Winter bei minusgrade getestet.Und siehe da die anzeige waren auch bei null und minus Grade richtig. Als es Funkt. Gruß Lorenz |
| Antwort schreiben |