W tym projekcie zamierzamy zaprojektować obwód do pomiaru temperatury. Ten obwód jest rozwijany przy użyciu „ LM35 ”, liniowego czujnika napięcia. Temperatura jest zwykle mierzona w stopniach „Celsjusza” lub „Faraheite”. Czujnik „LM35” dostarcza dane wyjściowe oparte na skali Celsjusza.
LM35 to trzy-pinowe urządzenie podobne do tranzystora. Ma VCC, GND i WYJŚCIE. Ten czujnik zapewnia zmienne napięcie na wyjściu w zależności od temperatury.
Jak pokazano na powyższym rysunku, każdy wzrost temperatury o +1 ° C spowoduje wzrost mocy wyjściowej o + 10 mV. Więc jeśli temperatura wynosi 0◦ Celsjusza wyjście czujnika będzie wynosić 0V, jeśli temperatura wynosi 10◦ Celsjusza, wyjście czujnika będzie + 100mV, jeśli temperatura wynosi 25◦ Celsjusza, wyjście czujnika będzie miało + 250mV.
Więc na razie z LM35 otrzymujemy temperaturę w postaci zmiennego napięcia. To napięcie zależne od temperatury jest podawane jako wejście do przetwornika ADC (przetwornika analogowo-cyfrowego) ATMEGA32A. Wartość cyfrowa uzyskana po przeliczeniu jest pokazana na LCD 16x2 jako temperatura.
Wymagane składniki
Sprzęt: mikrokontroler ATMEGA32, zasilacz (5v), programator AVR-ISP, JHD_162ALCD (16x2LCD), kondensator 100uF (dwuczęściowy), kondensator 100nF, czujnik temperatury LM35.
Oprogramowanie: Atmel studio 6.1, progisp lub flash magic.
Schemat obwodu i wyjaśnienie
W układzie PORTB ATMEGA32 jest podłączony do portu danych wyświetlacza LCD. W tym miejscu należy pamiętać o wyłączeniu komunikacji JTAG w PORTC ot ATMEGA poprzez zmianę bajtów bezpiecznika, jeśli chcemy wykorzystać PORTC jako normalny port komunikacyjny. W LCD 16x2 jest 16 pinów, jeśli jest podświetlenie, jeśli nie ma podświetlenia, będzie 14 pinów. Można zasilać lub pozostawić piny podświetlenia. Teraz w 14 szpilki są kołki 8 danych (7-14 lub D0-D7), 2 szpilki zasilacza (1 i 2 lub VSS i VDD i GND i +5 V), 3 rd pin regulacji kontrastu (VEE umożliwia sprawdzenie grubości znaki powinny pokazano), 3 piny sterujące (RS i RW i E).
W obwodzie można zauważyć, że wziąłem tylko dwa piny sterujące, ponieważ daje to elastyczność lepszego zrozumienia. Bit kontrastu i odczyt / zapis nie są często używane, więc można je zwierać do masy. Dzięki temu wyświetlacz LCD ma najwyższy kontrast i tryb odczytu. Musimy tylko sterować pinami ENABLE i RS, aby odpowiednio wysyłać znaki i dane.
Poniżej przedstawiono połączenia wykonane dla LCD:
PIN1 lub VSS ------------------ masa
PIN2 lub VDD lub VCC ------------ + 5 V.
PIN3 lub VEE --------------- masa (daje maksymalny kontrast najlepszy dla początkującego)
PIN4 lub RS (wybór rejestru) --------------- PD6 z uC
PIN5 lub RW (odczyt / zapis) ----------------- masa (ustawia wyświetlacz LCD w trybie odczytu, ułatwiając komunikację użytkownikowi)
PIN6 lub E (Włącz) ------------------- PD5 z uC
PIN7 lub D0 ----------------------------- PB0 z uC
PIN8 lub D1 ----------------------------- PB1 z uC
PIN9 lub D2 ----------------------------- PB2 z uC
PIN10 lub D3 ----------------------------- PB3 z uC
PIN11 lub D4 ----------------------------- PB4 z uC
PIN12 lub D5 ----------------------------- PB5 z uC
PIN13 lub D6 ----------------------------- PB6 z uC
PIN14 lub D7 ----------------------------- PB7 z uC
W obwodzie widać, że użyliśmy komunikacji 8-bitowej (D0-D7), jednak nie jest to obowiązkowe, możemy użyć komunikacji 4-bitowej (D4-D7), ale przy 4-bitowej komunikacji program staje się nieco skomplikowany, więc wybrałem 8-bitową Komunikacja.
Czyli z samej obserwacji z powyższej tabeli podłączamy 10 pinów LCD do kontrolera, w którym 8 pinów to pinów danych i 2 pinów do sterowania. Napięcie wyjściowe dostarczane przez czujnik nie jest całkowicie liniowe; będzie głośno. Aby odfiltrować szum, na wyjściu czujnika należy umieścić kondensator, jak pokazano na rysunku.
Zanim przejdziemy dalej, musimy porozmawiać o ADC ATMEGA32A. W ATMEGA32A możemy podać wejście analogowe do dowolnego z ośmiu kanałów PORTA, nie ma znaczenia, który kanał wybierzemy, ponieważ wszystkie są takie same. Mamy zamiar wybrać kanał 0 lub PIN0 PORTA. W ATMEGA32A ADC ma rozdzielczość 10 bitów, więc kontroler może wykryć wyczucie minimalnej zmiany Vref / 2 ^ 10, więc jeśli napięcie odniesienia wynosi 5V, otrzymujemy przyrost wyjścia cyfrowego na każde 5/2 ^ 10 = 5mV. Tak więc dla każdego przyrostu 5mV na wejściu będziemy mieć przyrost o jeden na wyjściu cyfrowym.
Teraz musimy ustawić rejestr ADC na podstawie następujących warunków:
Przede wszystkim musimy włączyć funkcję ADC w ADC.
2. Ponieważ mierzymy temperaturę w pomieszczeniu, tak naprawdę nie potrzebujemy wartości powyżej stu stopni (wyjście 1000mV LM35). Możemy więc ustawić maksymalną wartość lub odniesienie ADC do 2,5V.
3. Kontroler posiada funkcję konwersji wyzwalacza, co oznacza, że konwersja ADC ma miejsce tylko po wyzwoleniu zewnętrznym, ponieważ nie chcemy, abyśmy musieli ustawiać rejestry, aby ADC działał w trybie ciągłej pracy swobodnej.
4. Dla dowolnego przetwornika ADC częstotliwość konwersji (wartość analogowa na wartość cyfrową) i dokładność wyjścia cyfrowego są odwrotnie proporcjonalne. Więc dla lepszej dokładności wyjścia cyfrowego musimy wybrać mniejszą częstotliwość. Dla mniejszego zegara ADC ustawiamy przedsprzedaż ADC na maksymalną wartość (128). Ponieważ używamy wewnętrznego zegara 1 MHZ, zegar ADC będzie (1000000/128).
To jedyne cztery rzeczy, które musimy wiedzieć, aby rozpocząć pracę z ADC. Wszystkie powyższe cztery cechy są ustawiane przez dwa rejestry.
CZERWONY (ADEN): Ten bit musi być ustawiony, aby włączyć funkcję ADC ATMEGA.
NIEBIESKI (REFS1, REFS0): Te dwa bity służą do ustawiania napięcia odniesienia (lub maksymalnego napięcia wejściowego, które zamierzamy podać). Ponieważ chcemy mieć napięcie odniesienia 2,56V, REFS0 i REFS1 powinny być ustawione w tabeli.
JASNOZIELONY (ADATE): Ten bit musi być ustawiony, aby ADC działał w sposób ciągły (tryb pracy swobodnej).
RÓŻOWY (MUX0-MUX4): Te pięć bitów informuje o kanale wejściowym. Ponieważ zamierzamy używać ADC0 lub PIN0, nie musimy ustawiać żadnych bitów zgodnie z tabelą.
BROWN (ADPS0-ADPS2): te trzy bity służą do ustawiania preskalara dla ADC. Ponieważ używamy preskalara równego 128, musimy ustawić wszystkie trzy bity.
DARK GREEN (ADSC): ten bit ustawiony dla ADC, aby rozpocząć konwersję. Ten bit można wyłączyć w programie, gdy musimy zatrzymać konwersję.
Aby wykonać ten projekt za pomocą Arduino, zobacz ten samouczek: Cyfrowy termometr z użyciem Arduino
Objaśnienie programowania
Działanie POMIARU TEMPARATURY najlepiej wyjaśnić krok po kroku w kodzie C podanym poniżej:
#include // nagłówek, aby włączyć kontrolę przepływu danych w pinach
#define F_CPU 1000000 // informowanie o częstotliwości kryształu kontrolera
#zawierać
#define E 5 // podając nazwę „enable” do 5 th pin PORTD, ponieważ jest podłączony do LCD umożliwiają pin
#define RS 6 // podając nazwę „registerselection” do 6 th pin PORTD, ponieważ jest podłączony do LCD RS pin
void send_a_command (polecenie unsigned char);
void send_a_character (znak bez znaku);
void send_a_string (char * string_of_characters);
int main (nieważne)
{
DDRB = 0xFF; // umieszczenie portB i portD jako pinów wyjściowych
DDRD = 0xFF;
_delay_ms (50); // dając opóźnienie 50ms
DDRA = 0; // Biorę portA jako dane wejściowe.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}