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: I2c, DS 1621 Kategorie: C-Control I V1.1 (von Jens - 9.06.2010 16:19)
 Als Antwort auf I2c, DS 1621 von Thomas B - 8.06.2010 18:44
Jens nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, sonstige
Hallo Thomas!

> Ich habe einen DS1621 mit der Adresse 000 an den i2c Bus angeschlossen...........

Du meinst sicher die Adress-Pins vom DS1621, die Du alle gegen Masse geschaltet hast. In dem Fall ist die I2C-Bus Adresse des DS1621 dezimal 144. Danach kannst Du wie folgt vorgehen:

Variabeln definieren
Define DS1621_Temperatur Byte
Define DS1621_Kommastelle Byte
Define Tmp Byte
Define Grad Word
Define Counter Word
Define Slope Word

1.) Temperaturmessung starten
I2C_Start
I2C_Write(144)   ‘ Adresse
I2C_Write(238)   ‘ Temperaturmessung anstoßen
I2C_Stop

2.) Kurze Zeit warten
Pause 10

3.) Temperaturmessung anhalten
I2C_Start
I2C_Write(144)   ‘ Adresse
I2C_Write(34)   ‘ Temperaturmessung stoppen
I2C_Stop

4.) Temperatur einlesen
I2C_Start
I2C_Write(144)   ‘ Adresse
I2C_Write(170)   ‘ Temperaturmessung Lesekommando
I2C_Start
I2C_Write(144+1)   ‘ Adresse lesen
Grad = I2C_Read(no ACK)
I2C_Stop

5.) Kommastelle einlesen
I2C_Start
I2C_Write(144)   ‘ Adresse
I2C_Write(168)   ‘ Counter Lesekommando
I2C_Start
I2C_Write(144+1)   ‘ Adresse lesen
Counter = I2C_Read(no ACK)
I2C_Stop
I2C_Start
I2C_Write(144)   ‘ Adresse
I2C_Write(169)   ‘ Slope Lesekommando
I2C_Start
I2C_Write(144+1)   ‘ Adresse lesen
Slope = I2C_Read(no ACK)
I2C_Stop

6.) Kommastelle berechnen
DS1621_Temperatur = ((Grad*100-25)+((Slope-Counter)*100/Slope*100)/100)/100   ‘ Formel Temperatur
DS1621_Kommastelle = ((Grad*100-25)+((Slope-Counter)*100/Slope*100)/100) % 100   ‘ Formel Kommastelle (zweistellig)
‘ Kommastelle auf einstellug einstellen
Tmp = DS1621_Kommastelle % 10   ‘ MOD Kommastelle
DS1621_Kommastelle = DS1621_Kommastelle / 10   ‘ Kommastelle durch 10 teilen (einstellig)
if Tmp >= 5 Then DS1621_Kommastelle + 1   ‘ wenn MOD größer 5, dann aufrunden

7.) Temperatur anzeigen
Print "Temperatur: ",DS1621_Temperatur,",",DS1621_Kommastelle," °C"

Damit kann der DS1621 die Temperatur auf 0,1°C genau anzeigen. Wenn Dir eine Auflösung von 0,5°C ausreicht, dann kannst Du Counter und Slope weg lassen und die Kommastelle direkt auslesen...

LG Jens

 Antwort schreiben

Bisherige Antworten:

Re: I2c, DS 1621 (von Thomas B - 15.02.2011 9:26)