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

Nie mogę odczytać wartości z ADC z Atmegi8A w języku C

antoniv10 16 Lis 2020 00:50 531 3
  • #1 19047177
    antoniv10
    Poziom 3  
    Cześć, próbuję zrobić termometr z wykorzystanie mikrokontrolera Atmega8A. Analogowy czujnik temperatury mam podpięty do pinu PC1 (ADC1). Jak układ odniesienia wybrałem AVCC. Na wyświetlaczu LCD cały czas wyświetla mi się wartość 0 albo, gdy wgram program od nowa to wartość 31 przez 2-3 sekundy, a potem cały czas znowu zero. Do pin AREF podłączyłem kondensator ceramiczny 100nF, który jest podpięty do masy.
    Jeżeli to ma jakieś znaczenie to używam programu MkAVRCalculator i w nim w zakładce fusy uproszczone wewnętrzny oscylator mam ustawiony na 8Mhz. Proszę o pomoc, bo już nie mam bladego pojęcia dlaczego to nie działa.

    Link do czujnika, którego używam

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 19047224
    Konto nie istnieje
    Poziom 1  
  • #3 19047905
    antoniv10
    Poziom 3  
    emarcus napisał:
    antoniv10 napisał:
    Cześć, próbuję zrobić termometr z wykorzystanie mikrokontrolera Atmega8A. Analogowy czujnik temperatury mam podpięty do pinu PC1 (ADC1). Jak układ odniesienia wybrałem AVCC. Na wyświetlaczu LCD cały czas wyświetla mi się wartość 0 albo, gdy wgram program od nowa to wartość 31 przez 2-3 sekundy, a potem cały czas znowu zero. Do pin AREF podłączyłem kondensator ceramiczny 100nF, który jest podpięty do masy.
    Jeżeli to ma jakieś znaczenie to używam programu MkAVRCalculator i w nim w zakładce fusy uproszczone wewnętrzny oscylator mam ustawiony na 8Mhz. Proszę o pomoc, bo już nie mam bladego pojęcia dlaczego to nie działa.

    Link do czujnika, którego używam


    Zacznij od przeczytania dastasheet, w którym znajdziesz że odczytana wartość analogowa z tego czujnika reprezentująca napięcie ma offset 0.5V. Inne czujniki z tej serii maja inny offset(!)
    Odczytaną ADC wartość z czujnika (w mega8 z 10-bitowym przetwornikiem) generalnie może mieścić się w zakresie: od 0 do 1023.
    Czujnik ten, zależnie od temperatury, zwróci ‘jakąś’ wartość, którą należy przekalkulować na napięcie w zależności od przyjętego V(ref) i od tego odjąć (-) te 500 mV. offsetu .
    Reszta to już jest zwyczajny liniowy rachunek wiedząc z datasheet że relacja/(współczynnik) napięcia do temperatury jest: 10 mV/°C.

    Powróć więc do zamieszczonego przez ciebie linku i odszukaj tam przykładowy program , chociaż jest on pisany 'pod' arduino, to proces jest na tyle prosty że każdy zainteresowany, przy odrobinie chęci zrozumie koncept tego pomiaru .

    e marcus


    Dzięki za odpowiedz, ale mi chodzi teraz głównie o to, że dlaczego skoro wszystko robię dobrze ( przynajmniej tak mi się wydaje ) na LCD wyświetla mi się wartość zero (wartość rejestru ADC)
  • #4 19048788
    Konto nie istnieje
    Poziom 1  
REKLAMA