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 1032 9
REKLAMA
  • #1 15667117
    xujemuje
    Poziom 9  
    Posty: 126
    Ocena: 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  
    Posty: 589
    Pomógł: 32
    Ocena: 100
    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ć.
  • #4 15667511
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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ć.
  • REKLAMA
  • #5 15667603
    xujemuje
    Poziom 9  
    Posty: 126
    Ocena: 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  
    Posty: 368
    Pomógł: 57
    Ocena: 19
    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  
    Posty: 126
    Ocena: 9
    Przemnożenie części dziesiętnej i dodanie części ułamkowej dało oczekiwany efekt.
  • #10 15670728
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Milek79 napisał:
    Pewnie chodzi o to:


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

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono temat konwersji wartości z czujnika temperatury DS18B20, który zwraca dwie liczby typu uint8_t (część całkowita i ułamkowa), do jednej zmiennej typu int16_t. Uczestnicy forum zaproponowali różne metody, w tym mnożenie części całkowitej przez 10 i dodawanie części ułamkowej, a także przesuwanie bitowe. Zwrócono uwagę na konieczność uwzględnienia kolejności bajtów (Little Endian lub Big Endian) przy użyciu unii do przechowywania wartości. Użytkownicy podzielili się również kodem, który umożliwia poprawne przetwarzanie danych oraz wskazali na potrzebę znajomości programowania i matematyki w kontekście takich operacji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA