Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

DS1631 - Odczytanie temperatury

wiewiewiurka 23 Lip 2013 10:07 573 2
  • #1 23 Lip 2013 10:07
    wiewiewiurka
    Poziom 5  

    Cześć,
    Mój problem dotyczy tabeli przekształceń cyfrowego wyjścia na wartość temperatury, która jest dostępna w załączniku ( strona nr 4 ).


    A więc ( dla rozdzielczości 12 bitowej):

    (wymnażam przez 0.0625 zgodnie z notatką w nocie - strona nr 3, 3ci akapit od dołu strony)

    Cytat:
    The resolution of the DS1631 digital temperature data is user-configurable to 9, 10, 11, or 12 bits, corresponding to temperature increments of 0.5 C, 0.25C, 0.125C, and 0.0625C, respectively. The default resolution at power-up is 12 bits, and it can be changed through the R0 and R1 bits in theconfiguration register as explained in the CONFIGURATION REGISTER section of this data sheet. Note that the conversion time doubles for each additional bit of resolution.


    0111 1101 0000 0000 = +125, czyli ok bo:
    0111 1101 = 125
    0000 = 0, a 0*0.625=0

    0001 1001 0001 0000 = +25.0625, czyli ok bo:
    0001 1001 = 25
    0001 = 1, a 1*0.625=0.0625

    0000 1010 0010 0000 = +10.125, czyli okej bo:
    0000 1010 = 10
    0010 = 2, a 2*0.0625=0.125

    0000 0000 1000 0000 = +0.5, czyli ok bo:
    0000 0000 = 0
    1000 = 8, a 8*0.0625=0.5

    0000 0000 0000 0000 = 0, oki ;)

    1111 1111 1000 0000 = -0.5, czyli ok bo:
    1111 1111 = 255, a 255-255=0
    1000 = 8, a 8*0.0625=0.5, wiec 1-0.5=0.5

    1111 0101 1110 0000 = -10.125
    1111 0101 = 245, a 255-245=10
    1110 = 14, a 14*0.0625= 0,875, a więc 1-0.875=0.125

    1110 0110 1111 0000 = -25.0625, czyli ok bo:
    1110 0110 = 230, a 255-230=25
    1111 = 15, a 15*0.0625=0.9375, a więc 1-0.9375=0.0625


    dotychczas było ok, a teraz w ostatnim przykładzie jest problem, wg mnie powinno być tak, analogicznie do tego co wyżej zrobiłem:
    1100 1001 0000 0000
    1100 1001 = 201, a więc 255-201=54
    0000 = 0
    natomiast wynik w tabelce to -55, dlaczego?

    Bardzo proszę o pomoc ;)
    Dziękuje.

    0 2
  • Pomocny post
    #2 23 Lip 2013 10:31
    BlueDraco
    Specjalista - Mikrokontrolery

    Zupełnie źle. To jest 12-bitowa liczba stałopozycyjna w kodzie U2, a Ty traktujesz ją magicznie jako dwie oddzielne części różnie kodowane - całkowitą w U2 i ułamkową w NKB.
    Weź 12 najbardziej znaczących bitów, zamień na wartość całkowitą w U2 i podziel przez 16.

    1100 1001 0000 to -2048 + 1024 + 128 + 16 = -880
    -880 / 16 = -55

    0
  • #3 23 Lip 2013 12:40
    wiewiewiurka
    Poziom 5  

    BlueDraco napisał:
    Zupełnie źle. To jest 12-bitowa liczba stałopozycyjna w kodzie U2, a Ty traktujesz ją magicznie jako dwie oddzielne części różnie kodowane - całkowitą w U2 i ułamkową w NKB.
    Weź 12 najbardziej znaczących bitów, zamień na wartość całkowitą w U2 i podziel przez 16.

    1100 1001 0000 to -2048 + 1024 + 128 + 16 = -880
    -880 / 16 = -55


    Fakt ;) Dzięki!

    0