Termometr 2xLM35


Witam,
od niedawna zacząłem bawic się z programowaniem. Podpatrując inne programy postanowiłem napisac prosty program do odczytu temperatury z dwóch czujników LM35.

$regfile = "m8def.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Dim Wart_ac1 As Word
Dim Wart_ac2 As Word
Dim V1 As Single
Dim V2 As Single
Dim T1 As Single
Dim T2 As Single
Dim Wart_nap1 As String * 3
Dim Wart_nap2 As String * 3
Config Portc.1 = Output
Config Portc.2 = Output
 
Start Adc
 
Do
 
Portc.1 = 1
 
Wart_ac1 = Getadc(0)
 
V1 = Wart_ac1 * 0.0026
 
T1 = V1 * 100
 
Wart_nap1 = Fusing(t1 , "#.&")
 
 
Portc.2 = 1
 
Wart_ac2 = Getadc(1)
 
V2 = Wart_ac2 * 0.0026
 
T2 = V2 * 100
 
Wart_nap2 = Fusing(t2 , "#.&")
 
Cls
Lcd "t1:" ; Wart_nap1 ; "st.C"
Lowerline
Lcd "t2:" ; Wart_nap2 ; "st.C" 
 
Waitms 100
Loop
End

W szystko jest ok aż do momentu wpisania Wart_nap2 = Fusing(t2 , "#.&") po tej komendzie na wyswietlaczu zaraz po T1 wyswietla mi T2 (zdjęcie), a chciałem mieć T1 na górze a T2 na dole. Co z tym mozna zrobić? Jestem początkującym jeśli chodzi o programowanie.

Jakośc kiepska bo robione komórką. T2 jest bardzo duże gdyz mam na razie tylko jeden czujnik podłączony. Beż czujników jest to samo.




Portret użytkownika mirley

Re: termometr

po pierwsze w poleceniu Fusing daj sobie zamiast & znak # bo wtedy wartość będzie zaokrąglana a nie tylko obcinana

Poza tym musisz się zadumać jak długi jest napis w zmiennej string bo wydaje mi się że jak masz np wyświetlić 100.0 to potrzebujesz string'a co najmniej na 6 znaków, 5 dla treści i szósty to koniec linii, więc dodaj sobie w deklaracji:

Dim Wart_nap1 As String * 6

i tak samo dla drugiej wartości, to może być tego wina ale nie wiem czy tylko tego. Pamiętaj że polecenie fusing zajmuje dużo miejsca w programie i sensowniej jest poprostu wyświetlić wartość single i potem puste pole które maskuje niepotrzebne miejsca po przecinku :)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika drowning_man

Dzięki.

Witam,
dziś wprowadziłem Twoje poprawki i programik działa świetnie:-). Wielkie dzięki za pomoc.
Pozdrawiam,
drowning_man

Portret użytkownika drowning_man

temperatury ujemne

Witam,
jak trzeba zmiemnić kod programu aby były wyświetlane temp ujemne? LM35 zasiliłem napięciem symetrycznym +-5V wg noty katologowej z rezystorem 100k wg schematu z noty.

Portret użytkownika mirley

Re: LM35

Wydaje mi się że będzie problem bo dla ujemnych temperatur LM35 wygeneruje Ci ujemne napięcie i przetwornik ADC raczej tego nie zmierzy. Musisz podłaczyć czujnik na innych potencjałach aby dało się to zrealizować. Spróbuj podłaczyć sam czujnik do zasilania +Vs = 7V , -Vs = -3V, a na GND podaj 2V. Chodzi o to aby przesunąć wszystkie potencjały na czujniku np o 2 lub 3V itp. Nie podłaczaj tego do uC ale sprawdź miernikiem jakie teraz napięcia daje czujnik na wyjściu. Powinno być 2V dla 0 stopni a 1,5V dla -50 stopni. Jeśli tak będzie to podłaczysz to do ADC w mikrokontrolerze i odejmiesz w programie ten offset 2V. Dodatkowo przetwornik pracujący blisko napięcia połowy zasilania da dokładniejszy wynik temperatury

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika drowning_man

A może zrobić coś

A może zrobić coś takiego:

http://www.elektroda.pl/rtvforum/topic202222.html

Jest to prawie to co napisałeś z tym, że nie trzeba stosować napięcia symetrycznego... Moge zastosować diody 1N4007? Jak wtedy przeskalować temperatutrę?

Portret użytkownika mirley

Re: LM35

To dobry pomysł, nie wpadłem na to bo czujników LM35 nigdy nie używałem.... Musisz użyć dwóch przetworników ADC, jeden będzie mierzył napięcie na Vout- (oznaczenie ze schematu wyżej) a drugi na Vout+. Mając dwa wyniki w postaci liczby 0-1024 odejmiesz je od siebie(Vout+ - Vout-) i wynik potraktujesz dalej jakbyś miał wynik z jednego ADC, program się nie powinien zmienić. Pamiętaj tylko że zmienna która jest różnicą może być też ujemna co świadczy o ujemnej temperaturze

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika drowning_man

Jeszce takie pytanie, jakie

Jeszce takie pytanie, jakie zadanie pełni ten opornik 18k? Zmontowałem na szybko układ z jedną diodą i opornikiem 9k, czy ten może tak zostać czy montować dwie diody i 18k?.

Portret użytkownika mirley

Re: LM35

Zamontuj tak jak poleca producent układu(dwie diody i 18k), w końcu to on najlepiej wiej jak ma działać jego urządzenie. Dwie diody są lepsze bo przesuwają napięcie w stronę środka napięcia zasilania i przez to przetwornik w procesorze lepiej mierzy. Przy napięciach na wejściu bliskich 0 i bliskich 5V jest problem z liniowością przetwarzania i to co mierzysz jest wątpliwej dokładności

Tak jak mówiłem obowiązkowo musisz wykorzystać drugi przetwornik do pomiaru napięcia na diodach bo strasznie się ono będzie zmieniać z temperaturą i położy cały pomiar na łopatki

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika drowning_man

Wiem wiem zmieniłem program

Wiem wiem zmieniłem program tak jak pisałeś i układ działa poprawnie. A co do tych diód to na razie zostawie jedną i 9k i zobaczę jak będzie działać, bo w sumie nie będzie mierzył jakichś skrajnych temperatur ze swojego zakresu więc powinno wystarczyć. Dzięki za pomoc.