Elektroda.pl
Elektroda.pl
X
Testo
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Attiny13][Bascom] - Prosty termometr oparty o termistor NTC i kilka diod led.

26 Wrz 2012 23:52 7251 23
  • Poziom 28  
    Witam. Chciałbym nauczyć się obsługi ADC w Bascom. W tym celu chciałbym zrobić prosty termometr, a raczej wskaźnik temperatury. Wyświetlanie wyniku za pomocą linijki led stworzonej z diod: czerwonej, żółtej, i dwie zielone. Mam tylko ten termistor do użycia w projekcie. Czytałem o obsłudze ADC w Bascom ale nie mogę zrozumieć jak przetworzyć otrzymaną wartość z tego ADC. Rozumiem że termistor podłączyć mam z rezystorem w konfiguracji jako dzielnik napięcia? Chętnie przyjmę każdą pomoc w tym temacie.
  • Testo
  • Moderator Projektowanie
    Tak, termistor łączysz w jednej z gałęzi dzielnika rezystorowego, podpinasz do ADC i odczytując stan tego przetwornika uzyskujesz wartość 0-1023 (w zmiennej Word). Następnie mnożysz przez współczynnik wynikający z wartości użytych w dzielniku i masz temperaturę.
    Wartość współczynnika możesz dobrać też doświadczalnie znając np. temperaturę w pokoju tak manipulujesz współczynnikiem, żeby uzyskać właściwą wartość.
  • Testo
  • Poziom 28  
    Kuniarz napisał:
    Następnie mnożysz przez współczynnik wynikający z wartości użytych w dzielniku i masz temperaturę.


    Tzn. jeśli termistor mam 1k i drugi rezystor 1k to wynik który otrzymam mam pomnożyć przez dwa tak?

    Dołączam poglądowy schemat.

    [Attiny13][Bascom] - Prosty termometr oparty o termistor NTC i kilka diod led.

    Dodano po 3 [godziny] 36 [minuty]:

    Jak przeliczyć jaką wartość uzyskam na wyjściu ADC?

    Dodano po 1 [godziny] 13 [minuty]:

    Czytam, czytam i czytam o tym ADC, rozumiem już prawie wszystko. Nie mogę rozgryźć tematu odnośnie napięcia odniesienia. Po co to potrzebne jest i jaka jest zależność pomiędzy napięciem odniesienia a otrzymanym wynikiem?
  • Moderator Mikrokontrolery Projektowanie
    bbiidduull napisał:
    Czytam, czytam i czytam o tym ADC, rozumiem już prawie wszystko. Nie mogę rozgryźć tematu odnośnie napięcia odniesienia. Po co to potrzebne jest i jaka jest zależność pomiędzy napięciem odniesienia a otrzymanym wynikiem?

    Przyjmijmy, że 200cm, to 1024 marsiki (jednostka długości na Marsie).
    Marsjanin zmierzył się i podał Ci, że ma 789 marsików.
    Jaki wzrost w cm ma marsjanin?

    gdzie:
    200cm - napięcie odniesienia,
    1024 - rozdzielczość ADC
    Marsjanin - coś czego nie ma ... ale może było lub będzie :-)
  • Poziom 28  
    W przybliżeniu 154cm, malutki. :) W każdym razie nie rozumiem: Napięcie odniesienia powiedzmy wynosi 2,56V. W pokoju temperatura wynosi powiedzmy równo 25 stopni Celsjusza i rezystancja wynosi 1k. Układ pomiarowy (termistor + rezystor) podłączony pod zasilanie wynoszące +5V. Więc dzielą te 5V tak że na ADC jest 2,5V. Jaki związek ma te napięcie odniesienia 2,56, napięcie na ADC 2,5V a otrzymaną wartość z odczytu?

    Dodano po 5 [minuty]:

    Chyba powoli łapie o co chodzi. Napięcia odniesienia to napięcie które określa najwyższą wartość 1023?
  • Moderator Mikrokontrolery Projektowanie
    Policzyłeś to tak: 200/1024*789≈154

    Załóżmy, że za pomocą tego termistora możesz mierzyć temperatury od -50°C do 75°C.
    Przyjmujmy dla uproszczenia, że jest idealnie liniowy:
    -50°C to 1kΩ
    +75°C to 100Ω

    Jakie napięcie będzie na pinie PB5, gdy będzie:
    -50°C ?
    +75°C ?


    EDIT:
    bbiidduull napisał:
    Chyba powoli łapie o co chodzi. Napięcia odniesienia to napięcie które określa najwyższą wartość 1023?

    O! Już blisko :)
  • Poziom 28  
    Licząc ze wzoru: Uwy=Uwe*(Rt/(Rt+R1))

    Uwy=5V*(1000Ω/(1000Ω+1000Ω))
    Uwy=5V*(1000Ω/2000Ω)
    Uwy=5V*0.5Ω
    Uwy=2.5V dla -50°C

    Uwy=5V*(100Ω/(100Ω+1000Ω))
    Uwy=5V*(100Ω/1100Ω))
    Uwy=5V*~0.09Ω
    Uwy=0,45V dla +75°C
  • Moderator Mikrokontrolery Projektowanie
    Czyli przy tak ustawionym dzielniku napięcia oraz parametrach termistora i zakresu temperatur możesz spokojnie ustawić źródło wewnętrzne 2,56V :)
    Ale pod warunkiem, że zamienisz rezystor i termistor miejscami.

    Ale to były tylko założenia - teraz czas na zaglądnięcie do datasheet termistora i sprawdzenie realnych parametrów w określonym zakresie napięć.
  • Poziom 28  
    Termistor mam taki jak na zdjęciu:

    [Attiny13][Bascom] - Prosty termometr oparty o termistor NTC i kilka diod led.

    Tylko że 1K.
  • Poziom 28  
    No to teraz się zgubiłem co mam zrobić.
  • Moderator Mikrokontrolery Projektowanie
    Chodzi o to, że w obliczeniach przyjęliśmy:

    dondu napisał:
    Przyjmujmy dla uproszczenia, że jest idealnie liniowy:
    -50°C to 1kΩ
    +75°C to 100Ω

    a faktycznie tak nie jest. Jeżeli zależy Ci na dokładności, to powinieneś po dokonaniu pomiaru przeliczyć go z tabelką umieszczoną w datasheet.
    Jeżeli jej nie masz, to możesz tabelkę wyznaczyć mając jakiś termometr wzorcowy.

    -----

    Nie przegapiłeś wytłuszczonego tekstu tutaj: https://www.elektroda.pl/rtvforum/viewtopic.php?p=11354816#11354816
  • Poziom 28  
    Tak, to wiem że charakterystyka termistora nie jest liniowa. Może najpierw zrobię o skali temperatury pokojowej od ok. 20-30 °C. 10 stopni, 5 led. Pomiar nie musi być dokładny, to tylko linijka led i nauka programowania. :)
  • Moderator Mikrokontrolery Projektowanie
    bbiidduull napisał:
    Tak, to wiem że charakterystyka termistora nie jest liniowa. Może najpierw zrobię o skali temperatury pokojowej od ok. 20-30 °C. 10 stopni, 5 led. Pomiar nie musi być dokładny, to tylko linijka led i nauka programowania. :)

    Oczywiście!
    Pamiętaj o wytłuszczonym tekście .... bo mam wrażenie, że go przegapiłeś.
    No i powodzenia!
  • Poziom 28  
    Pamiętam o tym. Właśnie montuje układ na płytce stykowej i zabieram się za pisanie programu. Jeśli na wejściu ADC podam napięcie większe niż napięcie odniesienia to dostane wynik maksymalny czyli 1023, tak? Są jakieś inne konsekwencje?

    Dodano po 32 [minuty]:

    Zaczynam pisanie programu. I pierwsze schody. Wyczytałem że napięcie wewnętrzne Attiny13 wynosi 1.1V. Więc nie mogę go użyć. Chciałbym żeby napięciem odniesienia było napięcie zasilania. Cytat z helpa Bascoma w wersji polskiej:

    Cytat:

    CONFIG ADC = SINGLE | FREE , PRESCALER = dzielnik | AUTO , REFERENCE = OFF |
    AVCC | INTERNAL


    OFF to napięcie podane z zewnątrz, chyba nie dotyczy Attiny13
    AVCC to jest napięcie zasilania części analogowej, czyli?
    INTERNAL czyli wewnętrzne, te 1.1V

    Którą opcję wybrać?
  • Poziom 30  
    Jako napięcie odniesienia możesz ustawić napięcie zasilania. Z drugiej strony nie rozumiem - dlaczego nie pasuje Ci to 1,1V... ?
    Nie pamiętam teraz czy Reference ustawiało się na AVCC w tiny13, bo zawsze korzystam z Internal w jego przypadku. Sprawdź po prostu :)
  • Poziom 28  
    Mogę ustawić, ale jak? Próbowałem z dzielnikiem 1K termistor i 10K rezystor, napięcie wewnętrzne 1,1V. Nie działa. Ciągle podaje wartość 1023.
    W Attiny13 nie doszukałem się pinu AVCC. Datasheet tutaj Link. Sprawdzałem miernikiem. W temperaturze pokojowej na wyjściu dzielnika było 0,5V to wartość jaką powinienem otrzymać to ok. ~562.

    Dodano po 11 [minuty]:

    Wklejam kod testowego programu:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Programowałem z różnymi wartościami porównywania z ADC. Nic...
  • Pomocny post
    Poziom 30  
    Bo w Attiny13 nie ma tego pinu ale podanie w konfiguracji AVCC ustawia ref na napięcie zasilania. Nawet znalazłem program mojego termostatu , o którym już prawie zapomniałem i tam linia konfiguracyjna dla ATTINY13 wyglądała właśnie tak:

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Wszystko działało więc zakładam, że u Ciebie też powinno :)

    EDIT:
    Odnośnie braku reakcji dla 1,1V i dzielnika - może masę Ci gdzieś urwało... - musi działać.
  • Poziom 28  
    Już zabieram się do testów. Przesiedziałem wczoraj, dziś wiele godzin nad tym. Może w końcu się uda. :) A program, tzn konfiguracja i użycie ADC jest poprawne?
  • Moderator Mikrokontrolery Projektowanie
    BASCOM mnie nie lubi więc nie pomogę, ale SylwekK mnie godnie zastąpi :)


    bbiidduull napisał:
    W Attiny13 nie doszukałem się pinu AVCC. Datasheet tutaj

    Bo go nie ma. Jest w większych mikrokontrolerach jak np. ATmega8: http://mikrokontrolery.blogspot.com/2011/03/avr-adc-podlaczenie.html
    ale pamiętaj, że jeżeli występuje, to zawsze musi być podłączony.


    bbiidduull napisał:
    Wyczytałem że napięcie wewnętrzne Attiny13 wynosi 1.1V.

    Zgadza się, nie sprawdziłem. Ale już wiesz jak wszystko policzyć.


    bbiidduull napisał:
    Może w końcu się uda. :)

    Musi ... w końcu to my je stworzyliśmy, a nie one nas :D
  • Poziom 28  
    Zakładając że wszystkie porty są sprawne, nie działa. Wpisywałem wartości od 100 do 1000 dla porównania z ADC. Świeci się jedna dioda z dwóch dostępnych. Napięcie na wyjściu dzielnika 2.60V. Może coś w programie?

    Dodano po 10 [minuty]:

    Czy można uszkodzić pojedynczy ping w mikrokontrolerze? Chyba uszkodziłem ten z ADC0. Po podłączeniu do ADC1 widać ze coś działa tzn. reaguje na wartości.
  • Poziom 28  
    Po uszkodzeniu jednego koła w naszym samochodzie, zajechaliśmy na miejsce. Dziękuję bardzo za pomoc i przepraszam za męczarnie związaną z niewiedzą na ten temat. Pozdrawiam. :)
  • Poziom 28  
    Wybaczcie że powracam. Posiadam czujnik PT500, mam do niego tabelkę temperatura-rezystancja. Jak wykorzystać taką tabelkę do pomiaru?