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

Re: ds1631z: ds1631.readi2(i): falscher Wert Kategorie: I²C-Bus (von chrisk - 21.02.2009 17:40)
Als Antwort auf Re: ds1631z: ds1631.readi2(i): falscher Wert von GeorgEichhorn - 17.02.2009 0:00

>  
> > hat vielleicht jemand ein beispiel, wie er die sensoren initialisiert und wo das auch funktioniert?
>
> Hallo Christian,
>
> ich kann aus Zeitgründen leider erst jetzt antworten. Angehängt habe ich ein Beispiel, das bei mir mit
> der Station ohne Probleme funktioniert. Ich habe es aus einem umfangreichen Programm
> zusammengestrichen und hoffe, dass es auch bei Dir klappt. Es werden die Temperaturen von 5
> Sensoren eingelesen und im Display angezeigt. Bitte entschuldige, dass ich es nicht
> kommentiert habe. Leider sehe ich in der Vorschau trotz entsprechender Eingabe meine Formatierung
> nicht. Ich hoffe, es geht auch so.
>
> Viel Erfolg,
> Georg
>
>
> float mittelwert, maximum, minimum;
>
> function temperatur_einlesen (int i)returns float
> {
>  float temperatur;
>  lcdext.line(1);
>  lcdext.print("Sensor: ");
>  lcdext.zahl2(i);
>  lcdext.line(2);
>  temperatur=ds1631.readi2(i);
>  lcdext.zahl5n2(temperatur);
>  mittelwert=mittelwert+temperatur;
>  lcdext.put(223);
>  lcdext.put('C');
>  ds1631.init(i);
>  return temperatur;
> }
>
> function init_all ()
> {
>  byte i;
>
>  lcdext.init();
>  i2c.init();
>  
>  mittelwert=0.0;
>  minimum=9999;
>  
>  for i = 0 ... 15
>  {
>    ds1631.Reset(i);
>    ds1631.init(i);
>  }
>  sleep 1000;
> }
>
> thread messen
> {
>  byte i;
>  float temperatur;
>
>  run 256;
>  mittelwert=0.0;
>
>  for i = 1 ... 5
>      {
>       lcdext.init();
>       temperatur=temperatur_einlesen(i);
>       if temperatur < minimum
>          {minimum = temperatur;}
>       if maximum < temperatur
>          {maximum = temperatur;}
>       sleep 1000;
>      }
>  mittelwert=mittelwert/5;
>  if maximum > 30*100
>          {stports.setLED(1,1);}
>
>  lcdext.clear();
>  lcdext.line(1);
>  lcdext.print("Mittelwert: ");
>  lcdext.line(2);
>  lcdext.zahl5n2(mittelwert);
>  lcdext.put(223);
>  lcdext.put('C');
>  sleep 1000;
>  lcdext.clear();
>  lcdext.line(1);
>  lcdext.print("Minimum: ");
>  lcdext.line(2);
>  lcdext.zahl5n2(minimum);
>  lcdext.put(223);
>  lcdext.put('C');
>  sleep 1000;
>  lcdext.clear();
>  lcdext.line(1);
>  lcdext.print("Maximum: ");
>  lcdext.line(2);
>  lcdext.zahl5n2(maximum);
>  lcdext.put(223);
>  lcdext.put('C');
>  sleep 1000;
>  sleep 1000;
> }
>
> thread main
> {
>  init_all();
>  loop
>  {
>      run messen;
>  }
> }
>
>


Hallo,

danke für das Beispiel.

Hat das einen Grund, dass der Baustein vor jeder Abfrage neu initialisiert wird?
Ich habe das auch bei mir eingebaut, allerdings hat es nichts gebracht.

lg

christian

ps.: mein i2c Bus ist relativ voll,( 9 MAX4711, die Temperatursensoren, Keyboards, Displays)
kann das die Temperatursensoren beeinträchtigen?


    Antwort schreiben


Antworten:

Re: ds1631z: ds1631.readi2(i): falscher Wert (von GeorgEichhorn - 26.02.2009 20:53)