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

Atmega8 - Jak uruchomić pomiar napięcia ADC dla czujnika temperatury?

Chivo 19 Lip 2015 16:51 2244 14
REKLAMA
  • #1 14859981
    Chivo
    Poziom 26  
    Witam,

    W swoim projekcie wykorzysuję Atmega8 i przetwornik ADC. Do kanału ADC0 podłączyłem czujnik temperatury, o charakterystyce przetwarzania Vout=10mV*T+500mV. Dla temperatury 25C napięcie wynosi około 0,75V. Proszę o pomoc z uruchomieniem pomiaru napięcia przez ADC. Oto fragmenty mojego kodu:

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


    Dla napięcia 0,75V a rejestrze ADC powinno być (0,75*1024)/5=153. Czy dobrze mam ustawiony przetwornik i jak sprawdzić, czy poprawnie liczy?

    Pozdrawiam, Rafał
  • REKLAMA
  • Pomocny post
    #2 14860081
    dondu
    Moderator na urlopie...
    Ustawiasz napięcie odniesienia na Vcc, ale ... w funkcji pomiaru z powrotem ustawiasz napięcie odniesienia z pinu AREF, czyli zewnętrzne, bo nadpisujesz wartość ADMUX.

    Wzór OK.

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

    zmień na

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


    Przykłady ADC: http://mikrokontrolery.blogspot.com/2011/03/drzaskowy-pamietnik-wstep.html
  • #3 14860092
    Chivo
    Poziom 26  
    Czy jeżeli mierze napięcie na kanale ADC0 to muszę ustawić ten pin jako wejście?
  • REKLAMA
  • #5 14860145
    Chivo
    Poziom 26  
    Jaki tryb pracy wybrać "Free running" czy "na zadanie"?
  • REKLAMA
  • #7 14860176
    Chivo
    Poziom 26  
    W programie mierzę napięcie na ADC0 (dane z czujnika temperatury) i w zależności od jego wartości (większe lub mniejsze od wartości granicznej) załączam diody.
  • REKLAMA
  • #9 14860666
    Chivo
    Poziom 26  
    Jaka jest roznica z rejestrami ADC i ADCW. Ten ostatni jest w ksiazce Pana Kardasia i na nim sie wzorowalem
  • #10 14860833
    dondu
    Moderator na urlopie...
    Żadna:

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

    ale warto trzymać się systemu:

    ADC - rejestr 16-bitowy
    ADCH - bardziej znaczący bajt rejestru ADC
    ADCL - mniej znaczący bajt rejestru ADC

    Wtedy nie pomylisz się literówkami jak to już miało często miejsce w przypadku ADCW.
  • #11 14861218
    Chivo
    Poziom 26  
    Dzięki za pomoc. mam jeszcze problem z przeliczaniem wyniku napięcia na temperaturę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dla ADC_NAPIECIE=0.7 TEMP=20. Jak rozdzielić zmienną TEMP na dziesiątki i jedności, żeby wyświetlić je na 2 LCD 7-SEG?
  • #13 14861420
    Chivo
    Poziom 26  
    Nie używam LCD tylko LED. Znalazłem coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czy tak można, czy jest jakiś lepszy sposób?
  • #14 14861434
    dondu
    Moderator na urlopie...
    Chivo napisał:
    Nie używam LCD tylko LED.

    a to?:

    Chivo napisał:
    LCD 7-SEG?

    LCD 7 segmentowe także istnieją więc wprowadzasz nas w błąd :)


    Chivo napisał:
    Nie używam LCD ...

    Funkcje rodziny printf nie służą do LCD tylko do formatowania danych do wyświetlenia. Czy tak sformatowane dane wykorzystasz do wyświetlenia na LCD, LED, OLED, czy ekranie monitora, nie ma to znaczenia. Przeanalizuj wskazane przykłady.

    Chivo napisał:
    ... czy jest jakiś lepszy sposób?

    Tak, pozbyć się arytmetyki zmiennoprzecinkowej, czyli wykonywać obliczenia na liczbach całkowitych.

    Funkcje konwersji liczb całkowitych (ltoa, utoa, itoa): http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
  • #15 14873554
    Chivo
    Poziom 26  
    Dziękuję za pomoc. Wszystkie informacje znalazłem w podanych wyżej linkach.
REKLAMA