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.

Bascom/atmega8 - odczyt LM35

Tomekddd 15 Sie 2012 21:12 3546 11
  • #1 15 Sie 2012 21:12
    Tomekddd
    Poziom 23  

    Witam, składam termometr na czujniku LM35 narazie w symulatorze bo nie mogę dojść do ładu z przeliczeniem odczytu i proszę o pomoc.

    Przekopałem google i z kilku różnych programów skleiłem kawałek mojego ale niestety nie działa jak powinien. Przy temperaturze 100*C lm35 powinien dawać 1000mV więc ADC atmegi8 odbierze wartość 401 i teraz to mnożę razy przelicznik 0.0025 dla napięcia odniesienia 2,56V a niestety temperatura wyświetla sie 0, zmienna odczyt wyświetla się poprawnie 401 to tylko pomocniczo.

    Proszę o pomoc bo już nie wiem co z tym zrobić, dokładność wystarczy mi do 1*C

    oto mój kod

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 11
  • #2 15 Sie 2012 21:44
    SŁAWEKWW
    Poziom 16  

    Wydaje mi się że zmienna word nie może być ułamkowa.
    Ja bym to pomnożył razy 1000 chyba a potem podzielił na 25.

    0
  • #3 15 Sie 2012 23:35
    LordBlick
    VIP Zasłużony dla elektroda

    Tomekddd napisał:
    Przy temperaturze 100*C lm35 powinien dawać 1000mV więc ADC atmegi8 odbierze wartość 401 i teraz to mnożę razy przelicznik 0.0025
    Przekombinowane. Podziel odczyt przez 4 i finito. A jak chcesz dokładniej, to pomnóż przez 100 i podziel przez 401.

    0
  • #4 16 Sie 2012 02:02
    Tomekddd
    Poziom 23  

    Chyba coś nie tak policzyłem bo pokazuje pierdoły...

    Znalazłem taki kod do przeliczenia i też kiepsko działa bo mam ustawione napięcie odniesienia na wewnetrzne, zrobione tak dlatego że na zasilaniu mogę mieć troche śmieci z przekaźników i wydawało mi się to bezpieczniejsze.

    w - zmienna word, volt - zmienna word, volt_d - zmienna byte

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    ten kod niby działa na napięci odniesienia AVCC ale na internal klapa

    Ma ktoś działający kawałek kodu który przeliczy odczyt przy wewnętrznym napięciu odniesienia? i nie pamięciożerny

    0
  • #5 16 Sie 2012 12:58
    SŁAWEKWW
    Poziom 16  

    Witam
    Przykład z działającego urządzenia odczyt dwóch adc i uśrednianie wyniku

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Dla wewnętrznego źródła odniesienia musisz podzielić odczytco i odczytbl na 39 lub 390 zależnie od tego jaki chcesz uzyskać wynik (rozdzielczość odczytu).
    Na LM nie uzyskasz dużej bo daje za niskie napięcie, ale da się co 0,3 stC

    0
  • #6 16 Sie 2012 14:18
    Tomekddd
    Poziom 23  

    Niestety tamto nie zadziałało pojęcia nie mam czemu, ale udało mi się zrobić takie coś jak niżej.

    Da sie prostym sposobem skrócić zmienną single do postaci xxx.x ??


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #7 16 Sie 2012 17:37
    SŁAWEKWW
    Poziom 16  

    Przy odczycie takiego czyjnika możesz uzyskać max 99,9 , więc po co zmienna single.
    Po prostu dla wyniku np 22,5 stC wyliczasz liczbę 225 a później robisz:

    Kod: basic4g
    Zaloguj się, aby zobaczyć kod

    0
  • #8 16 Sie 2012 17:50
    Tomekddd
    Poziom 23  

    Dzięki już działa ;)

    0
  • #9 30 Gru 2012 22:04
    drachabass
    Poziom 11  

    Podłączając się do tematu...
    Czy ktoś mógłby mi wyjaśnić jak powinienem napisać kod do LM50 z atmegą32?
    Nie za bardzo rozumiem zapisu wyżej "Po prostu dla wyniku np 22,5 stC wyliczasz liczbę 225 a później robisz: "
    Dziękuję za pomoc.

    0
  • #10 30 Gru 2012 22:20
    BlueDraco
    Specjalista - Mikrokontrolery

    To proste - zamiast trzymać temperaturę w stopniach, trzymasz ją w dziesiątych stopnia - w ten sposób unikasz zabijających procesor danych zmiennopozycyjnych.

    0
  • #11 30 Gru 2012 22:31
    drachabass
    Poziom 11  

    Niestety chyba dalej nie rozumiem...
    Odczytuje wartość getadc(0) z lm50 i mnożę ją przez 10, później znów dziele przez 10?
    Poza tym pobieram chyba napięcie a nie temperaturę?

    Przepraszam, jestem dopiero początkujący.

    0
  • #12 31 Gru 2012 02:32
    Rokita1993
    Poziom 19  

    Otóż kolego jest to czujnik, który w zależności od temperatury ma na wyjściu odpowiadające danej temperaturze napięcie. Korzystając z ADC w uC możemy z pewną dokładnością zamierzyc temperaturę (napięcie odpowiadające temperaturze).

    W zależności od wykorzystywanego uC mamy różne rozdzielczości tych przetworników. Odczytywane wartości musimy tak przetworzyć, aby wskazywały nam tą faktyczną temperaturę.

    np:
    Wykorzystując czujnik o przyroście napięcia wyjściowego o 20mV na każdy 1*C zaczynając od 0V przy 0*C.
    Czujnik w temperaturze 30*C daje nam na wyjściu 600mV.
    Wykorzystując przetwornik 8-bitowy, czyli 256 poziomów (od 0 do 255), oraz napięcie odniesienia 2,56V otrzymamy przy 0mV wartość 0 , przy 10mV otrzymamy 1 itd...
    A więc dla naszych 30*C (600mV) otrzymamy odczytaną wartość 60.
    Jak sam możesz zauważyć, nie jest to wartość, która bezpośrednio wskazuje nam temperaturę. Trzeba tą wartość odpowiednio przetworzyć. W naszym przypadkowym przypadku wystarczy ja podzielić przez 2, ale to tylko przykład.

    0