Re: Temperatur Modul DS1631 Kategorie: I²C-Bus (von Zuberpaul - 25.11.2015 8:50) | ||
Als Antwort auf Re: Temperatur Modul DS1631 von Daneie - 24.11.2015 19:00 | ||
| ||
> > 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 Danke für die prompte Antwort! Habe das Problem gelöst nachdem ich die IDE Beta Version heruntergeladen hatte. Werde trotzdem versuchen Dein Programm auf die AVR32 umzumodeln! Grü�e vom Zuberpaul | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum