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.

Atmega 328p, ds18b20, rozdzielczość, atmel studio

tomilos123 27 Gru 2017 11:10 288 7
  • #1 27 Gru 2017 11:10
    tomilos123
    Poziom 3  

    Witam, czy mógłby mi ktoś powiedzieć w jaki sposób programowo ustawić rozdzielczość czujnika temperatury z 12 bitowej na 10 bitową bądz 9 bitową?
    Mój kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 7
  • Pomocny post
    #2 27 Gru 2017 11:51
    drobok
    Poziom 28  

    ds -> write scratchpad

    0
  • #3 27 Gru 2017 12:28
    tomilos123
    Poziom 3  

    Mógłbyś rozwinąć swoją odpowiedź? Nie za bardzo wiem co mam przekazać do metody v1Wire_SendByte() oprócz tego, że jak chce mieć rozdzielczość 9 bitową to 5 i 6 bit ma być równy 0.

    0
  • #5 27 Gru 2017 15:25
    tomilos123
    Poziom 3  

    To czy dobrze zrozumiałem, że

    Kod: c
    Zaloguj się, aby zobaczyć kod




    mam zastąpić na:
    Kod: c
    Zaloguj się, aby zobaczyć kod



    a później przekonwertowaną temperaturę mnożyć razy 0.5? I po wykonaniu tej operacji mam wrócić do początkowej wersji?

    0
  • Pomocny post
    #6 27 Gru 2017 15:32
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zacznijmy od tego, po co chcesz zmniejszyć rozdzielczość pomiaru? Żeby skrócić czas konwersji? Jeśli tak, to ok, zmieniasz jak wspomniano wartość rejestru konfiguracyjnego - w tym celu musisz zapisać do scratch pad, potem robisz normalną konwersję. Tyle, że... twój kod nie czeka na koniec konwersji, tylko na sztywno przyjmuje, że trwa ona 750 ms, więc zmniejszenie rozdzielczości nic ci nie daje. To samo osiągniesz maskując trzy najmniej znaczące bity wyniku.

    1
  • #7 28 Gru 2017 13:42
    tomilos123
    Poziom 3  

    Nie potrzebowałem tak dokładnej temperatury-wolałem dokładniejsze pomiary. Za Twoją radą zmieniłem także czas, który miałem dokładnie ustalony z góry. Dzięki!

    0
  • #8 30 Gru 2017 09:45
    Mandeson
    Poziom 10  

    To powinno pomóc, nie trzeba mnożyć niczego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    1