Re: Temperatur Modul DS1631 Kategorie: I²C-Bus (von Daneie - 24.11.2015 19:00) | |
Als Antwort auf Temperatur Modul DS1631 von Zuberpaul - 24.11.2015 18:01
| |
> Mein Temperatur Modul zeigt konstant 196,0°C an. Alles richtig angeschlossen und mit Demoprogramm > DS1631.cprj gestartet. Bin kein Profi auf C und brauche eine Demoversion welche funktioniert! > Bitte um Hilfe! Hallo, hast du Pullup-Wiederstände dran. 2 x 4,7k SDA u. SCL gegen + Oder schau mal ob die Adresse stimmt. Hier noch der Code mit dem du 1/10° und minus messen kannst. Ist leider nicht für die AVR32, aber wenn du immer von Start bis Stop in I2C_Write(... oder I2C_Read(... umschreibst dann funktioniert das auch. Schau aber erst das deine Demo läuft, damit du sicher bist, dass alles richtig angeschlossen ist. #define DS1631_W &H9E ' Schreibadresse #define DS1631_R &H9F ' Leseadresse Sub DS1631_READ() Dim Counter, Slope, DS1631Byte1, DS1631Byte2 As Byte Dim T As Integer Static vAgain As Byte Static vIICResetCnt As Word 'zählt die Aufrufe der DS1631_READ() für den regelmäsigen Neustart der IIC If vIICResetCnt > 600 Then 'wurde die Tempmessung zum 600sten Mal durchgeführt vIICResetCnt = 0 'löschen I2C_Init(150) 'Reset Else If vAgain <> Clock_GetVal(0) Then 'nur ein Mal pro Sekunden die Temperatur abfragen vAgain = Clock_GetVal(0) 'aktuelle Sekunde in die Varable vIICResetCnt++ I2C_Start() I2C_Write(DS1631_W) I2C_Write(&HEE) I2C_Stop() I2C_Start() I2C_Write(DS1631_W) I2C_Write(&H22) I2C_Stop() I2C_Start() I2C_Write(DS1631_W) I2C_Write(&HAA) I2C_Stop() I2C_Start() I2C_Write(DS1631_R) DS1631Byte1 = I2C_Read_NACK() I2C_Stop() I2C_Start() I2C_Write(DS1631_W) I2C_Write(&HA8) I2C_Stop() I2C_Start() I2C_Write(DS1631_R) Counter = I2C_Read_NACK() I2C_Stop() I2C_Start() I2C_Write(DS1631_W) I2C_Write(&HA9) I2C_Stop() I2C_Start() I2C_Write(DS1631_R) Slope = I2C_Read_NACK() I2C_Stop() Slope = Slope DS1631Byte2 = (((Slope - Counter) * 100 / Slope * 100) / 100) / 10 If (DS1631Byte1 And 128) = 0 Then T = DS1631Byte1 * 10 + DS1631Byte2 Else 'bei negativer Temperatur DS1631Byte1 = (Not DS1631Byte1) + 1 'bilde Zweier Komplement DS1631Byte2 = 9 - DS1631Byte2 T = DS1631Byte1 * 10 + DS1631Byte2 T = - T End If If T < 430 And T > (0 - 320) Then 'nur realistische Werte zulassen DS1631Temp = T Else Thread_Delay(200) I2C_Init(150) 'bei unrealistischem Wert I2C neu starten Thread_Delay(20) End If End If End If End Sub | |
Antwort schreiben Antworten: Re: Temperatur Modul DS1631 (von Zuberpaul - 25.11.2015 8:50) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum