V tomto projektu navrhneme obvod pro měření teploty. Tento obvod je vyvinut pomocí lineárního snímače napětí „ LM35 “. Teplota se obvykle měří v „Celsia“ nebo „Faraheite“. Senzor „LM35“ poskytuje výstup na základě stupnice Celsia.
LM35 je zařízení se třemi piny jako tranzistor. Má VCC, GND a VÝSTUP. Tento snímač poskytuje proměnlivé napětí na výstupu na základě teploty.
Jak je znázorněno na obrázku výše, při každém zvýšení teploty o +1 ° C bude o +10 mV vyšší výkon. Pokud je tedy teplota 0 ° C, výstup senzoru bude 0 V, pokud je teplota 10 ° C, výstup senzoru bude + 100 mV, pokud je teplota 25 ° C, výstup senzoru bude + 250 mV.
Takže prozatím s LM35 dostaneme teplotu ve formě proměnného napětí. Toto teplotně závislé napětí je dáno jako vstup do ADC (analogově-digitální převodník) ATMEGA32A. Získaná digitální hodnota po převedení je zobrazena na 16x2 LCD jako teplota.
Požadované komponenty
Hardware: Mikrokontrolér ATMEGA32, napájecí zdroj (5 V), AVR-ISP PROGRAMÁTOR, JHD_162ALCD (16x2LCD), kondenzátor 100uF (dva kusy), kondenzátor 100nF, teplotní senzor LM35.
Software: Atmel studio 6.1, progisp nebo flash magic.
Schéma zapojení a vysvětlení
V obvodu je PORTB z ATMEGA32 připojen k datovému portu LCD. Zde je třeba pamatovat na deaktivaci komunikace JTAG v PORTC nebo ATMEGA změnou bajtů pojistek, pokud chcete použít PORTC jako normální komunikační port. V 16x2 LCD je 16 kolíků, pokud je podsvícení, pokud není podsvícení, bude 14 kolíků. Jeden může napájet nebo nechat kolíky podsvícení. Nyní ve 14 kolíky jsou 8 datových kolíky (7-14 nebo D0-D7), 2 napájecí kolíky elektrárny (1 & 2 nebo VSS a VDD nebo GND a + 5 V), 3 rd kolík pro řízení kontrastu (VEE-určuje, jak silná znaky musí být na obrázku), 3 ovládací kolíky (RS & RW & E).
V obvodu můžete pozorovat, že jsem vzal pouze dva ovládací piny, protože to dává flexibilitu lepšího porozumění. Kontrastní bit a READ / WRITE se často nepoužívají, aby mohly být zkratovány na zem. LCD se tak dostane do režimu nejvyššího kontrastu a čtení. Abychom mohli odpovídajícím způsobem odesílat znaky a data, musíme pouze ovládat piny ENABLE a RS.
Připojení, která se provádí pro LCD, jsou uvedena níže:
PIN1 nebo VSS ------------------ země
PIN2 nebo VDD nebo VCC ------------ + 5V napájení
PIN3 nebo VEE --------------- zem (poskytuje maximální kontrast nejlepší pro začátečníka)
PIN4 nebo RS (výběr registru) --------------- PD6 uC
PIN5 nebo RW (čtení / zápis) ----------------- zem (přepnutí LCD do režimu čtení usnadňuje uživateli komunikaci)
PIN6 nebo E (povolit) ------------------- PD5 uC
PIN7 nebo D0 ----------------------------- PB0 uC
PIN8 nebo D1 ----------------------------- PB1 uC
PIN9 nebo D2 ----------------------------- PB2 uC
PIN10 nebo D3 ----------------------------- PB3 uC
PIN11 nebo D4 ----------------------------- PB4 uC
PIN12 nebo D5 ----------------------------- PB5 uC
PIN13 nebo D6 ----------------------------- PB6 uC
PIN14 nebo D7 ----------------------------- PB7 uC
V obvodu, který vidíte, jsme použili 8bitovou komunikaci (D0-D7), ale to není povinné, můžeme použít 4bitovou komunikaci (D4-D7), ale se 4bitovým komunikačním programem se stává trochu složitější, takže jsem si vybral 8bitovou sdělení.
Takže z pouhého pozorování z výše uvedené tabulky připojujeme 10 pinů LCD k řadiči, ve kterém 8 pinů jsou datové piny a 2 piny pro ovládání. Napěťový výstup poskytovaný snímačem není zcela lineární; bude to hlučný. K odfiltrování šumu je třeba umístit kondenzátor na výstup snímače, jak je znázorněno na obrázku.
Než budeme pokračovat, musíme si promluvit o ADC ATMEGA32A. V ATMEGA32A můžeme dát analogový vstup kterémukoli z osmi kanálů PORTA, nezáleží na tom, který kanál zvolíme, protože všechny jsou stejné. Vybereme kanál 0 nebo PIN0 PORTA. V ATMEGA32A má ADC 10bitové rozlišení, takže regulátor dokáže detekovat smysl minimální změny Vref / 2 ^ 10, takže pokud je referenční napětí 5V, dostaneme digitální výstupní přírůstek pro každých 5/2 ^ 10 = 5mV. Takže pro každý přírůstek 5mV na vstupu budeme mít přírůstek jednoho na digitálním výstupu.
Nyní musíme nastavit registr ADC na základě následujících podmínek:
1. Nejprve musíme povolit funkci ADC v ADC.
2. Jelikož měříme pokojovou teplotu, nepotřebujeme hodnoty nad 100 stupňů (výstup LM35 1000 mV). Můžeme tedy nastavit maximální hodnotu nebo referenci ADC na 2,5V.
3. Řadič má funkci převodu spouštěče, to znamená, že převod ADC proběhne až po externím spouštěči, protože nechceme, abychom potřebovali nastavit registry pro provoz ADC v režimu nepřetržitého volného chodu.
4. U jakéhokoli ADC jsou frekvence převodu (analogová hodnota na digitální hodnotu) a přesnost digitálního výstupu nepřímo úměrné. Pro lepší přesnost digitálního výstupu tedy musíme zvolit nižší frekvenci. U menších hodin ADC nastavujeme předprodej ADC na maximální hodnotu (128). Protože používáme interní hodiny 1MHZ, hodiny ADC budou (10 000 000/128).
To jsou jediné čtyři věci, které potřebujeme vědět, abychom mohli začít s ADC. Všechny výše uvedené čtyři funkce jsou nastaveny dvěma registry.
ČERVENÁ (ADEN): Tento bit musí být nastaven pro povolení funkce ADC ATMEGA.
MODRÁ (REFS1, REFS0): Tyto dva bity se používají k nastavení referenčního napětí (nebo maximálního vstupního napětí, které dáme). Protože chceme mít referenční napětí 2,56 V, měly by být podle tabulky nastaveny REFS0 i REFS1.
LIGHT GREEN (ADATE): Tento bit musí být nastaven, aby ADC běžel nepřetržitě (režim volného chodu).
PINK (MUX0-MUX4): Těchto pět bitů slouží ke sdělování vstupního kanálu. Protože budeme používat ADC0 nebo PIN0, nemusíme nastavovat žádné bity jako v tabulce.
BROWN (ADPS0-ADPS2): tyto tři bity slouží k nastavení prescalar pro ADC. Protože používáme prescalar 128, musíme nastavit všechny tři bity.
DARK GREEN (ADSC): tento bit nastaven pro ADC ke spuštění převodu. Tento bit lze v programu deaktivovat, když potřebujeme zastavit převod.
Chcete-li vytvořit tento projekt pomocí Arduina, podívejte se na tento tutoriál: Digitální teploměr pomocí Arduina
Vysvětlení programování
Fungování MĚŘENÍ TEPLOTY je nejlépe vysvětlit krok za krokem v C kódu uvedeném níže:
#include // header to enable data flow control over pins
#define F_CPU 1000000 // připojená krystalová frekvence řadiče
#zahrnout
#define E 5 // dávat jméno „povolit“ na 5 th pin PORTD, protože je spojen s LCD umožnit pin
#define RS 6 // dávat jméno „registerselection“ až 6. ročník čep PORTD, protože je spojen s LCD RS pin
void send_a_command (nepodepsaný příkaz char);
void send_a_character (znakový znak bez znaménka);
void send_a_string (char * string_of_character);
int main (neplatný)
{
DDRB = 0xFF; // uvedení portB a portD jako výstupních pinů
DDRD = 0xFF;
_delay_ms (50); // dává zpoždění 50ms
DDRA = 0; // Vezmeme portA jako vstup.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_character ++);
}
}