Hallo zusammen,
Ich möchte eine Temperatur mit einem DS18B20 auslesen.
Dafür habe ich den einfachsten Fall, Aktiv-gepowert, nur ein DS18B20 am
Pin.
Controller ist ein Atmega8.
Ich kann ihn resetten und bekomme den Presence-Puls.
Jedoch bin ich mir nicht sicher in welcher Reihenfolge ich ihm welche
Kommandierung geben muss. Er scheint jedenfalls nicht zu antworten.
Einzig relevant scheinen da die Abbildungen 13 und 14 im Datenblatt.
Deren Ablauf ich für meinen Fall jedoch scheinbar realisiert habe.
Eventuell habt ihr mir eine Idee, was fehlt?
1 | if(reset_ds18B20() == 1)
|
2 | {
|
3 | line0[0] = 'T'; //Kommt, immter True
|
4 | }
|
5 | else
|
6 | {
|
7 | line0[0] = 'F';
|
8 | }
|
9 | write_ds18B20_byte(0x33);
|
10 | read_ds18B20_byte(); //byte1
|
11 | read_ds18B20_byte(); //Byte2
|
12 | read_ds18B20_byte(); //byte3
|
13 | read_ds18B20_byte(); //Byte4
|
14 | read_ds18B20_byte(); //byte5
|
15 | read_ds18B20_byte(); //Byte6
|
16 | read_ds18B20_byte(); //Byte7
|
17 | read_ds18B20_byte(); //Byte8
|
18 | _delay_ms(900); //750ms Conversion-Time@12Bit
|
19 | write_ds18B20_byte(0x44);
|
20 | read_ds18B20_byte(); //temp_byte1
|
21 | read_ds18B20_byte(); //temp-Byte2
|
Konkret kommen nur 1en zurück (wie ich mit dem Oszi sehen kann).
Dass Timing ist korrekt, wie ich meine.
Wass ist am Ablauf/den werten falsch?
Grüße und vielen Dank,
Matthias