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.

Pomiar temperatury ATmega8 DS18B20

yogas007 06 Wrz 2014 23:05 1101 0
  • #1 06 Wrz 2014 23:05
    yogas007
    Poziom 8  

    Witam,

    3 tygodnie temu postanowiłem poznać zasady programowania mikroprocesorów, aby przygotować inkubator (coś na wzór projektu, który znalazłem na niniejszym forum Link).
    Projekt postanowiłem zrealizować na bazie mikroprocesora ATmega8A ustawiony na 2MHz i czujnika DS18B20. Do tego wyświetlacz LED 3-cyfrowy, 7-segmentowy.

    Program napisałem w C. Nie da się ukryć, że więcej było w tym "wklejania: niż "pisania", ponieważ z C też nie miałem wcześniej do czynienia. Oczywiście po drodze przechodziłem przez: miganie diodą, multipleksowanie i odczyt temperatury.
    DO programowania używam Eclipse i mkAVRCalculator.

    W tej chwili udało mi się ukończyć pewną część projektu. Mianowicie, program odczytuje temperaturę i wyświetla ją na wyświetlaczu LED. Jeśli temperatura jest zbyt niska, to dodatkowo włącza się czerwona dioda, jeśli zbyt wysoka, to dioda żółta, gdy temperatura utrzymuje się na prawidłowym poziomie, to pali się dioda zielona. Jeśli poziom temperatury jest wyższy niż poziom krytyczny, to palą się wszystkie trzy diody. Oczywiście poszczególne progi temperatur są zdefiniowane w programie i można je dowolnie zmieniać.
    Na pierwszy rzut oka wydaje się, że wszystko działa. Mój "termometr" pokazuje temperaturę taką jak termometr pokojowy. Niestety co jakiś czas mój "termometr" ma skoki temperatury, po czym wraca do poprzedniego poziomu.
    Przykładowo, w mieszkaniu mam 23 °C i taką temperaturę odczytuję z wyświetlacza LED (ze skokami około ±0,5°C). Co kilkanaście-kilkadziesiąt sekund wskakuje mi jednak np:27°C lub 55°C i przy kolejnym odczycie znów wraca do 23°C.
    Niby nic wielkiego, ale w przyszłości obok świecących diod LED chcę też podłączyć wentylator i grzałkę. Nie chciałbym, aby przy każdym błędnym odczycie któreś z urządzeń się niepotrzebnie włączało.

    W czym może być problem?

    Poniżej zamieszczam kod C i schemat.

    Kod C:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Schemat wygląda następująco (jest to mój pierwszy schemat w Eagle, więc proszę o zrozumienie i oczywiście o uwagi):
    Pomiar temperatury ATmega8 DS18B20

    0 0