logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR GCC - Konwersja odczytu DS18B20 do jednej zmiennej

xujemuje 12 Maj 2016 00:35 969 9
REKLAMA
  • #1 15667117
    xujemuje
    Poziom 9  
    Witajcie,
    jak przekonwertować poprawnie wartość z czujnika temperatury ds18b20 w postaci dwóch liczb typu uint8_t, które odpowiadają części całkowitej i ułamkowej, do postaci jednej zmiennej typu int16_t?

    zakres liczby ułamkowej to 0-9, zakres liczby całkowitej jest 8-bitowy. Wartości ujemnych nie ma.
  • REKLAMA
  • #2 15667135
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 15667196
    Walery K
    Poziom 23  
    Ja robię to w ten sposób, że część całkowitą mnożę razy 10 a następnie dodaję do niej część ułamkową. Stosuję to do przesyłania danych przez RS , łatwiej przesyła mi się w formacie hex liczby integer.
    Można też np. część całkowitą przesunąć o 8 bitów w lewo i dodać do niej część ułamkową i wtedy w starszym bajcie masz część całkowitą a w młodszym ułamkową.
    Wszystko zależy od tego co dalej z tym chcesz robić.
  • REKLAMA
  • #4 15667511
    BlueDraco
    Specjalista - Mikrokontrolery
    Odpowiedź na zadane pytanie pada na tym forum średnio 2 razy w miesiącu. Magiczne linijki kodu d asię też znaleźć w tysiącu miejsc w Internecie. Sam ten kod tutaj ze 3 razy podawałem - wystarczy poszukać.
  • #5 15667603
    xujemuje
    Poziom 9  
    Walery K napisał:

    Wszystko zależy od tego co dalej z tym chcesz robić.


    przerzucić wartość temperatury do jednej zmiennej do pomiaru i zadawania wartości w regulatorze PID avr221. Tam na wejściu wartości zadanej i odczytanej są typy int16_t.
  • REKLAMA
  • #6 15667641
    Konto nie istnieje
    Konto nie istnieje  
  • #7 15668206
    Sparrowhawk
    Poziom 22  
    A czemu dwie liczby bez znaku, chcesz konwertować do liczby ze znakiem?

    W każdym razie możesz zrobić tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    lub tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Możesz też zrobić tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ale w drugim przypadku trzeba uważać na to jaka jest kolejność przechowywania bajtów w systemie [Little lub Big Endian], a C++ będzie krzyczał, że używamy anonimowej struktury;
  • #9 15670721
    xujemuje
    Poziom 9  
    Przemnożenie części dziesiętnej i dodanie części ułamkowej dało oczekiwany efekt.
  • #10 15670728
    BlueDraco
    Specjalista - Mikrokontrolery
    Milek79 napisał:
    Pewnie chodzi o to:


    Niezupełnie, raczej o to: :)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA