Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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. > <basic> > #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</basic>