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 Zuberpaul - 25.11.2015 8:50)
Als Antwort auf Re: Temperatur Modul DS1631 von Daneie - 24.11.2015 19:00
Ich nutze:
C-Control Pro AVR32
> > 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: