Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8][BASCOM] - Termometr brak minusa przy ujemnych temperaturach DS18(s)20

grupiak 14 Feb 2013 20:55 1608 6
IGE-XAO
  • #1
    grupiak
    Level 2  
    Witam

    Mam taki program który wyświetla temperaturę potocznie zwany termometrem.
    Problem w tym ze nie wyświetla mi znaku minus przy ujemnych temperaturach. Po wsadzeniu do zamrażarki mija temperaturę 0 st C i idzie dalej niby w dół, ale bez minusa. Przeglądałem sporo źródeł na elektrodzie i w innych miejscach i nie mogę sobie z tym poradzić.

    Oto kod:

    Code: basic4gl
    Log in, to see the code



    Próbowałem np coś takiego ale nie działa

    zaraz po obliczeniu temperatury
    Code: basic4gl
    Log in, to see the code


    Bardzo proszę o pomoc tym bardziej ze termometr przy tych obliczeniach działa dobrze sprawdzałem na wrzącej wodzie pokazuje równo 100 st c jedynie co ten minus mnie dobija.

    Pozdrawiam
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • IGE-XAO
  • #2
    BlueDraco
    MCUs specialist
    Temperatura jest podawana przez DS18xx w kodzie U2. Zacznij od określenia, jaki masz dokładnie typ układu - różne wersje mają nieco różne formaty temperatury. Potem przeczytaj temperaturę do zmiennej 16-bitowej ze znakiem. Jeśli jest ujemna, zaneguj ją, wyświetl minus, a potem wyświetl jej zanegowaną (czyli już dodatnią) wartość.

    Prawdopodobnie będzie to coś takiego

    temp = I(1) / 2;
    if temp < 0 then
    ' wyświetl minus
    temp = - temp
    end if
    ' wyswietl temp
  • IGE-XAO
  • #3
    grupiak
    Level 2  
    BlueDraco wrote:
    Prawdopodobnie będzie to coś takiego

    temp = I(1) / 2;
    if temp < 0 then
    ' wyświetl minus
    temp = - temp
    end if
    ' wyswietl temp



    To już sprawdzałem i wywala mi błąd przy kompilowaniu:
    invalid datatype [[0010]]

    mój czujnik to DS1820
  • #4
    BlueDraco
    MCUs specialist
    To zrób tak, żeby nie wywalało błędu i będzie dobrze. Zapewne chodzi o uzgodnienie typów danych.
  • #5
    Dawid WAT
    Level 14  
    Witam
    ja bym to zrobił po prostu tak:

    Code: basic4gl
    Log in, to see the code


    Pozdrawiam Dawid
  • #6
    emarcus
    Level 38  
    grupiak wrote:
    Witam

    Mam taki program który wyświetla temperaturę potocznie zwany termometrem.
    Problem w tym ze nie wyświetla mi znaku minus przy ujemnych temperaturach. Po wsadzeniu do zamrażarki mija temperaturę 0 st C i idzie dalej

    na wrzącej wodzie pokazuje równo 100 st c jedynie co ten minus mnie dobija.



    Nie potrzebujesz zamrażarki do testów (!) -Lód albo śnieg z solą (3 do 1) daje bardzo dobry efect, nawet do -33 st C.
    Tu musisz liczyc się że mieszanina lodu z solą tworzy w końcowej fazie solankę, która jest słabym elektrolitem i gołe przewody do DC w niej zanurzone mogą wywołac pewne błędy lub ich korozję.

    Spróbuj takie coś;
    Częśc kodu:
    Code: basic4gl
    Log in, to see the code


    Aby wyeliminowac mruganie LCD, zastosuj wolny/dostępny timer, którym odmierzysz jakieś interwały czasowe powiedzmy 2 lub 5 sec. (ile zechcesz, temperatura środowiska nie jest wartością zmieniającą sie bardzo szybko...), wtedy z procedury communikacji z DS wyeliminujesz 'waitms' i wtedy też odczytuj temperaturę z DS i wyświetlaj/ update tylko wartośc temperatury na LCD w subrutynie stosując 'Locate , x '.
    Schemat wyświetlenia LCD umieśc przed Do.. Loop.
    Zmień również kolejnośc commend podczas communikacji z DS tak aby w każdej "sesji", Comenda "Conver T" [44h] była ostatnią ( po odczycie temperatury z scratchpad [BEh]). Ta metoda daje troche błedny wynik pierwszego odczytu, który możemy zwyczajnie pominąc.

    e marcus
  • #7
    grupiak
    Level 2  
    Dawid WAT wrote:
    Witam
    ja bym to zrobił po prostu tak:

    Code: basic4gl
    Log in, to see the code


    Pozdrawiam Dawid


    Dziękuje wszystkim za odpowiedzi. W moim przypadku pomogła pomoc od Dawida (mojego imiennika zresztą).

    Pozdrawiam wszystkich