Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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)