Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: I2C Thermoelement Kategorie: I²C-Bus (von Peter.O - 6.01.2011 9:56)
Als Antwort auf Re: I2C Thermoelement von Rainer Mandel - 4.01.2011 17:59
Ich nutze:
CC2-ReglerBoard, OSOPT V3.1
Servus Rainer,

also mit der Auswertung habe ich auch Probleme.
Ich habe mir vorerst eine etwas peinliche Lösung zusammengemurkst.
Geht sicher einfacher aber ich habe leider zu wenig Erfahrung.


//*  Testmodul zum Auslesen des Hygrosens THMOD-I2C Modules               *//
//* Habe den Index als Temperatur in °K angenommen, die zugehörigen Werte *//
//* des Sensormodules in die entsprechenden Zellen eingetragen            *//
//* Jedoch nur in 2°K Schritten um Platz zu sparen und wegen faulheit     *//
//*                                                                       *//
//* Ein Ausgabewert von 4167 entspricht Inhalt von Zelle 0                *//
//* So ist die Temperatur 0°K weil eben Zelle 0                           *//
//* Ausgabe 4194 = Zelle 1 entspricht also 2°K                            *//


const THtemp[] =  4167, 4194, 4221, 4248, 4275, 4302, 4329, 4356, 4383, 4410,
4437, 4464, 4491, 4517, 4544, 4571, 4598, 4625, 4652, 4679, 4706, 4733, 4760,
//* snip... sind ca 600 Werte                                             *//
21280, 21304, 21327, 21351, 21375, 21399, 21423, 21446, 21470, 21494, 21518,
21542, 21566, 21589, 21613, 21637;


function readthm(byte addr) returns int
{
 int i, adata, tdata;                             // int reicht, weil bit8 nur bei Fehler gesetzt
                                                  // adata = T_Ausgleichsstelle tdata = Thermospannung
 if i2c.cstart(addr)                              // Wenn THModul ACK dann weiter
 {
  sleep 100;                                      // kleine Pause nach i2cstart
  tdata=(256*i2c.read()+i2c.read());              // MSB und LSB der Thermospannung lesen und zusammensetzen
  adata=((256*i2c.read()+i2c.readlast())/256)-32; // MSB und LSB der Ausgleichsstelle lesen und den Absolutwert berechnen
  i2c.stop();                                     // I2C beenden
  if tdata<4167 tdata=4167;                       // Werte unter 0°K werden ignoriert
  if tdata>21637 tdata=21637;                     // Werte über 1300°K werden auch ausgeblendet
  i=0;                                            // Zähler für Arrayindex setzen
  while tdata > THtemp[i] i=i+1;                  // Schleifendurchlauf solange gemessene Spannung kleinen Array[Wert]
 }
 return adata+i*2;                                // Vergleichsstellentemp + Thermoelementtemp zurückgeben
                                                  // i*2 weil nur in 2°K Schritten im Array
}


Hab bis jetzt keine Formel zur Umrechnung der vom Modul gemeldeten Werte in
Temperatur gefunden. Desshalb der Umweg über das Array.
Noch ne Frage, beim Einlesen von MSB und LSB verwende ich
"INT=MSB*256+LSB". Eigentlich müsste "INT=MSB shl(8) or LSB" das selbe nur
um einiges schneller machen.
Habe aber keinen Unterschied in der Geschwindigkeit feststellen können.
Optimiert der Compiler so etwas von sich aus?

Ach ja noch was, laut Datenblatt hat das Modul die Adresse 0x78.
Ich kann es jedoch nur unter der Adresse 0xf1 auslesen.


mfg
Peter



> Hallo, ich habe ein Problem mit dem gleichen Modul. Wie hast Du die Auswertung hinbekommen ?
> Ein paar Zeilen in c2 wären interessant für mich.
>
> MfG
>
> Rainer
>
>
>
>
> > Hallo zusammen,
> >
> > das Problem hat sich erledigt.
> > Wer lesen kann ist klar im Vorteil.
> > Das Modul benötigt eine Versorgungsspannung von 6-24V,
> > hatte es aber an 5V angeschlossen. :-(
> > Jetzt funktioniert es.
> >
> > mfg
> > Peter
> >
> >
> > > Hallo Zusammen,
> > >
> > > ich habe ein Problem mit einem i2c-Thermomodul von Hygrosens.
> > > Laut Datenblatt sollen an Adresse 0x78 4 byte gelesen werden können.
> > > Die ersten zwei byte MSB,LSB der Thermospannung, byte 3 und 4 die
> > > Temperatur der Vergleichsstelle.
> > > So weit komme ich jedoch nicht, da ein i2c.cstart(0x78) eine 0 meldet.
> > > Ein am Bus angeschlossenes Rel.Board (MAX7311) funktioniert bestens,
> > > also sollte der Bus eigentlich in Ordnung sein.
> > >
> > > Habe leider keine groÃ?e Erfahrung im Programmieren, der Rest meiner
> > > Software funktioniert dank des Forums und der Hardware von Herrn Helbig
> > > bestens.
> > >
> > > Also hat jemand so einen Fühler schon am laufen?
> > > Wenn Ja , wie???
> > >
> > > besten Dank
> > > Peter


    Antwort schreiben


Antworten:

Re: I2C Thermoelement (von nitraM - 6.01.2011 10:39)
    Re: I2C Thermoelement (von Peter.O - 6.01.2011 11:19)
        Re: I2C Thermoelement (von nitraM - 6.01.2011 12:07)
            Re: I2C Thermoelement (von Peter.O - 6.01.2011 13:25)
                Re: I2C Thermoelement (von nitraM - 6.01.2011 14:21)
                    Re: I2C Thermoelement (von Peter.O - 6.01.2011 15:34)
                       Re: I2C Thermoelement (von nitraM - 6.01.2011 16:31)
                          Re: I2C Thermoelement (von Peter.O - 6.01.2011 17:13)
                             Re: I2C Thermoelement (von nitraM - 6.01.2011 19:51)
                                Re: I2C Thermoelement (von PeterO - 7.01.2011 9:27)
                          Re: I2C Thermoelement (von nitraM - 6.01.2011 16:33)