Forum: Mikrocontroller und Digitale Elektronik 1Wire DS18B20 auslesen


von Markus P. (sebastianwurst)


Angehängte Dateien:

Lesenswert?

Hi,
ich habe zwei 1Wire DS18B20 an meinem Atmega644P.
Ich benutze die Libary von Peter Danneger für die 1-Wire, wenn ich die 
OW auslese werden beide erfolgreich erkannt.
1
Scanning Bus for DS18X20
2
0x28 0x33 0x4c 0x64 0x03 0x00 0x00 0x18  VCC extern
3
0x28 0xa3 0x6a 0xaa 0x03 0x00 0x00 0xe1  VCC extern
4
Terminal data gelesen
Temperatur bekomme ich jedoch nur von einem 1-Wire Sensor. (Getauscht 
habe ich schon, einzeln funktionieren beide)


Ich  benutze den Code für das AVR-Net IO mit nem Atmega644P von Ulrich 
Radig.
http://www.ulrichradig.de/home/uploads/File/ETH_M32_EX/ETH_M32_EX_SOFT.zip

Kann mir da jemand Tipps geben? Steh mal wieder auf dem Schlauch.

Ausgelesen werden die Sensoren in der Main so :
1
    #if USE_OW
2
    
3
    ow_auslesen = (var_array[10] & 0x01);  // Bit 1 von var_array[10] auslesen
4
    
5
    
6
    if ((ss%10 == 8) && (ow_auslesen != 0)) {
7
    
8
    
9
    
10
      #if OW_EXT_POWER
11
      start_OW();
12
      #endif
13
       
14
15
      lese_Temperatur();  // Temperatursensoren lesen
16
      bTempOK=true;
17
18
  
19
      #if OW_MINMAX
20
      for (i=0;i<OW_MAXSENSORS;i++) {
21
        if ((( hh == 00 )&&( mm == 00 )) || (minmax == 1)) {
22
          // Zurücksetzen der Min/Max_Werte 1x/Tag
23
          // auf die gerade aktuellen Temperaturen
24
          ow_array[i+OW_MAXSENSORS] = ow_array[i];
25
          ow_array[i+OW_MAXSENSORS*2] = ow_array[i];
26
        } else {
27
          // Abgleich der Temp. mit den gespeicherten Min/Max-Werten
28
          if (ow_array[i]  < ow_array[i+OW_MAXSENSORS])
29
            ow_array[i+OW_MAXSENSORS] = ow_array[i];
30
          if (ow_array[i]  > ow_array[i+OW_MAXSENSORS*2])
31
            ow_array[i+OW_MAXSENSORS*2] = ow_array[i];
32
        }
33
      }
34
      minmax = 0;
35
      #endif //OW_MINMAX
36
    }
37
    #endif  //USE_OW

In der config ist es so eingestellt:
1
  //-----------------------------------------------------------------------
2
  // 1-Wire Bus für Temperatur-Sensoren
3
  //-----------------------------------------------------------------------
4
  
5
  #define USE_OW        1  // 1-Wire bus einbinden
6
  
7
  #if USE_OW
8
    #define OW_MAXSENSORS  8  // max. Anzahl der 1-wire sensoren (DS18x20)
9
    #define OW_EXT_POWER  1  // falls der 1-Wire Bus eine externe Versorgungsspannung hat
10
11
    #define OW_START    111  // Sensorstartwert 18,0 Grad in ow_array
12
    #define OW_MINMAX_START  0  // Min- / Maxwerte Startwert 0,0 Grad
13
    #define  OW_MINMAX    1  // Min- / Maxwerte speichern
14
15
    #define OW_PORTA    1  // 1-Wire Bus an PORTA7 *
16
    #define OW_PORTD    0  // 1-Wire Bus an PORTD3 und serielles LCD *
17
                  
18
    // *) entweder OW_PORTA 1 oder OW_PORTD 1
19
    
20
    #undef  USE_EEPVAR
21
    #define USE_EEPVAR    1  // muß 1 sein da ROM-IDs im EEPROM gespeichert werden
22
  #endif

von Markus (Gast)


Lesenswert?

Habs hin bekoomen

von Michael (Gast)


Lesenswert?

Markus schrieb:
> Habs hin bekoomen

Der nächste mit ähnlichem Problem würde sich sicher freuen, wenn du hier 
kurz schreibst, woran es lag.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.