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
|