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

Re: DS1822 auslesen Kategorie: Sensoren (von Jörg Hansen - 2.03.2009 9:14)
Als Antwort auf Re: DS1822 auslesen von Hartwig - 24.02.2009 6:39
Ich nutze:
C-Control II Unit, eigenes Board, OSOPT V3.1
Hallo Hartwig,

du musst die ROM-Codes aller DS1822 einmalig einlesen und als
Konstanten (oder Variablen) in deinen Routinen verwenden.

Ich lege die ROM-Codes meiner Sensoren (DS18B20) in einem EEPROM ab.
Anbei die Quellcodes meiner Routinen (Interaktiv  Ã¼ber hwcom ):

Einlesen der Sensorcodes (immer nur 1 Sensor angeschlossen):

// Konstanten
const maxSensor = 15; //Anzahl der Tempartursensoren
const Sensorname[] ="Aussentemp. hinten", "Erdwaermetauscher", "Frischluft vor WRG", "Fortluft hinter WGR",
"Zuluft hinter WRG", "Abluft vor WRG", "Raumtemperatur EG", "Raumtemperatur OG", "Raumtemperatur DG", "Heizung Vorlauf",
 "Heizung Ruecklauf", "Heizung Kesselwasser", "Aussentemp. vorne","Brauchwasserspeicher","Zirkulationsleitung";
//----------------------------------------------------------------------------------------------
  function newDS18B20 () // Romcode einlesen, Sensor zuordnen und entsprechend im EEProm ablegen
//----------------------------------------------------------------------------------------------
{
    byte getrom[16];
    string s;
    byte i,x,y;
    for i = 0...15  getrom[i] = 0xff; // Werte initialiseren

        i=ds2482.getROM(0,getrom);
        s= "Romcode gelesen: ";
        hwcom.send(s,17);
        wait hwcom.ready();
        s= "";
        for i= 0...6
        {
        str.putint(s,getrom[i]);
        str.putchar(s,44);
        };
        str.putint(s,getrom[7]);
        hwcom.send(s,30);
        hwcom.ret();
        wait hwcom.ready();
        for i = 0...(maxSensor-1) // Ausgabe der Sensorenliste
        {
        s=" ";
        str.putint(s,i);
        s=s+" ";
        s=s+Sensorname[i];
        hwcom.send(s,str.length(s));
        hwcom.ret();
        }
        hwcom.ret();
        s= "Welchem Sensor zuordnen?00-32:";
        hwcom.send(s,30);
        y=hwcom.input (1);
        hwcom.ret();
      s="(S)peichern, (A)bbruch ";
      hwcom.send(s,str.length(s));
      wait hwcom.rxd();
      x=hwcom.get();
      if x=='S' or x=='s'
      {
        if eeprom.writebytearray(0,(16*y),getrom,16)
        {
        s= "Ins EEProm geschrieben";
        hwcom.send(s,22);
        hwcom.ret();
        }
        else
        {
        s= "Fehler beim EEProm schreiben";
        hwcom.send(s,29);
        hwcom.ret();
        return;
        };
        };
       if x=='A' or x=='a'
       {
       s= "Nicht gespeichert";
        hwcom.send(s,17);
        hwcom.ret();
        return;
        };
};


Auslesen der Sensoren:

//--------------------------------------------------
 function tempmessung() // Temperaturmessung manuell
//--------------------------------------------------
{
  string s; //für Textausgaben
  int i; // für Schleifen
  byte getrom[16]; // Speicherstellen für ROM-Codes
  int scratchpad; // Zwischenspeicher für gelesenen Temperaturwert
  float temp [16]; // Zwischenspeicher für Temperaturwerte (wie maxSensor)

  for i = 0...(maxSensor-1)
    {
    eeprom.readbytearray(0,(i*16),getrom,16); // ROMcode aus EEprom lesen
    if debug
    {
    s=Sensorname[i];
    hwcom.send(s,str.length(s));
    hwcom.ret();
    wait hwcom.ready();
    };
    if getrom[1]== 0xff continue; // wenn erste Speicherstelle FF weiter mit nächstem Sensor
    ds2482.resetDevices(0);
    ds2482.matchROM(0,getrom);
    ds2482.writeByte(0,0x44); //Convert Temperatur
    sleep 800; // diese Zeit braucht ein DS18B20 bis der Wert ausgelesen werden kann
    ds2482.matchROM(0,getrom);
    ds2482.writeByte(0,0xbe); //read scratchpad
    scratchpad=ds2482.readByte(0) or ds2482.readByte(0) shl 8;
    if scratchpad and 0xF000
    temp[i]= (scratchpad) or 0xf000;
    else
    temp[i]= (scratchpad) ;
    s="";
    str.putint(s,i);
    if i<10 s=s+"  ";
    else s=s+" ";
    s=s+Sensorname[i];
    s=s+" ";
    str.putfloatf(s,(temp[i]*0.0625),1);
    log(s);
    };
};


GruÃ?
Jörg


    Antwort schreiben


Antworten: