Forum: Mikrocontroller und Digitale Elektronik DS18B20 Ablauf zum auslesen der Temperatur


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Matthias (Gast)


Lesenswert?

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

von Pepepe (Gast)


Lesenswert?

nach reset_ds18B20()

write(0xCC);         // Skip ROM
write(0x44);         // start conversion

delay(1000);

reset_ds18B20()
write(0xCC);         // Skip ROM
write(0xBE);         // Read Scratchpad
read_bytes(data,9);

von Matthias (Gast)


Lesenswert?

Hallo und vielen Dank,
Jetzt kommen sinvolle Temperaturen raus!

Mein Delay war an der falschen Stelle, (vor dem Start der Wandlung) 
sonst hätte ich die Temperatur wohl bekommen sollen.

-->Aber "CC" ist natürlich sehr sinvoll um das erste auslesen zu 
überspringen.

von Peter D. (peda)


Lesenswert?

Matthias schrieb:
> -->Aber "CC" ist natürlich sehr sinvoll um das erste auslesen zu
> überspringen.

Hä?

SKIP ROM [CCh] adressiert den Sensor, damit überhaupt eine Funktion 
ausgeführt werden kann.

Einen Blick ins Datenblatt sollte man schon wagen:
"The master device must issue an appropriate ROM command before issuing 
a DS18B20 function command. A flowchart for operation of the ROM 
commands is shown in Figure 11."

von Pepe (Gast)


Lesenswert?

Und ich hab gelernt dass es reicht die 2 ersten bytes zu lesen.

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.