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

Re: 1-Wire 18B20 Kategorie: I²C-Bus (von BerndK - 25.09.2010 20:43)
Als Antwort auf 1-Wire 18B20 von ChristianS - 25.09.2010 16:55
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Christian,

ich nutze auch eine Bridge8 mit acht Sensoren. Allerdings sind sieben der acht Sensoren noch DS1820,
welche eine etwas andere Berechnung fordern. Das betrifft aber nur den Teil nach ds2482.readByte.

Was mit auffällt:
Das Beispiel im Kommentar ist für das DS2482-100. Beim DS2482-800 mu� auch noch der jeweilig
benutzte 1-Wire-Bus ausgewählt werden.
ds2482.setCH(0,busNummer);

Ob der ohne
ds2482.setCH(0,busNummer);
auf Bus 0 steht, weiÃ? ich jetzt nicht.

Ich rufe zu Beginn der function getTemp1 erstmal
ds2482.resetDevices(0);
auf.

Verwendest Du die V1.2 des Moduls ds2482?

Bekommst Du eigentlich einen plausiblen Wert für die Temperatur angezeigt oder scheitert das Ganze
schon bei der Adresse?

Viele Grü�e
Bernd




> Hallo,
> da habe ich das 1.Problem noch nicht gelöst, da kommt schon das Nächste. Ich habe einen
> 18B20an einer Bridge 8 angeschlossen und diese an den I2C-Bus der CC2-Station. Die Adresse des
> Busteins steht auf 0, also A0;A1;A2 gegen Masse. Der Sensor hängt am Port 1W0
> Folgendes Progrämmchen habe ich geladen:
>
>
> /******************************************************************/
> /* Beispiel zum Auslesen des DS1822 1Wire-Temperatursensors       */
> /* am DS2482-100                                                  */
> /******************************************************************/
>
> const DS1822ROM[]=34,135,56,17,0,0,0,247;
>
> const convertTEMP    = 0x44;
> const readSCRATCHPAD = 0xBE;
>
>
> /***********************************/
> /* Temperatur auslesen             */
> /***********************************/
> function getTempl(byte ds2482addr, byte ROM[]) returns long
> {long temp;
>  int x;
>
>  ds2482.matchROM(0,ROM);
>  ds2482.writeByte(ds2482addr,convertTEMP);
>
>  sleep 750;
>
>  ds2482.matchROM(0,ROM);
>  ds2482.writeByte(ds2482addr,readSCRATCHPAD);
>  x=ds2482.readByte(ds2482addr) or ds2482.readByte(ds2482addr) shl 8;
>
>  if x and 0xF000
>    temp= (x shr 4) or 0xF000;
>   else
>    temp= x shr 4;
>  return temp*10000 + (x and 0xF)*625;
> }
>
> function lcdzahl7n4(long zahl)
> {
>  lcdext.zahl3(zahl/10000);
>  lcdext.put(',');
>  zahl=zahl%10000;
>  lcdext.ziff(zahl/1000);
>  lcdext.ziff(zahl/100);
>  lcdext.ziff(zahl/10);
>  lcdext.ziff(zahl);
> }
>
> thread main
> {byte DS1822Addr[8],i;
>  long temp;
>  lcdext.init();
>  ds2482.init(0);
>
>  // ROM-Adresse des angeschlossenen DS1822 ermitteln.
>  // Es darf nur ein 1W-Bus-Device angeschlossen sein,
>  // wenn diese Funktion ausgeführt wird!
>  ds2482.getROM(0,DS1822Addr);
>  
>  // 64Bit Adresse ausgeben
>  for i=0...3 lcdext.zahl4(DS1822Addr[i]);
>  lcdext.line(2);
>  for i=4...7 lcdext.zahl4(DS1822Addr[i]);
>  sleep 2500;
>
>
>  lcdext.clear();
>  lcdext.print("Temperatur:");
>  lcdext.goto(2,8);
>  lcdext.put(223);
>  lcdext.put('C');
>  loop
>  {
>   lcdext.line(2);
>   lcdzahl7n4(getTempl(0,DS1822Addr));
>  }
> }

>
> Leider bekomme ich als Rom-Adresse nur Nullen angezeigt. Wo liegt das Problem?
>
> Danke und GruÃ?,
> ChristianS


    Antwort schreiben


Antworten:

Re: 1-Wire 18B20 (von ChristianS - 26.09.2010 12:06)
    Re: 1-Wire 18B20 (von ChristianS - 26.09.2010 12:26)
        Re: 1-Wire 18B20 (von André H. - 28.09.2010 8:19)
            Re: 1-Wire 18B20 (von ChristianS - 28.09.2010 12:48)