V tomto projekte navrhneme obvod na meranie teploty. Tento obvod je vyvinutý pomocou lineárneho snímača napätia „ LM35 “. Teplota sa zvyčajne meria v stupňoch Celzia alebo Faraheite. Snímač „LM35“ poskytuje výstup na základe stupnice Celzia.
LM35 je trojpólové zariadenie podobné tranzistoru. Má VCC, GND a VÝSTUP. Tento snímač poskytuje premenlivé napätie na výstupe na základe teploty.
Ako je znázornené na obrázku vyššie, pri každom zvýšení teploty o +1 ° C bude vyšší výkon o +10 mV. Takže ak je teplota 0 ° C, výstup snímača bude 0 V, ak je teplota 10 ° C, výstup snímača bude + 100 mV, ak je teplota 25 ° C, výstup snímača bude + 250 mV.
Takže zatiaľ s LM35 dostaneme teplotu vo forme premenlivého napätia. Toto teplotne závislé napätie sa dáva ako vstup do ADC (analógovo-digitálny prevodník) ATMEGA32A. Digitálna hodnota po získanom prevode je zobrazená na 16x2 LCD ako teplota.
Súčasti sú povinné
Hardvér: mikrokontrolér ATMEGA32, napájanie (5 V), programátor AVR-ISP, JHD_162ALCD (16x2LCD), kondenzátor 100uF (dva kusy), kondenzátor 100nF, snímač teploty LM35.
Softvér: Atmel studio 6.1, progisp alebo flash magic.
Schéma zapojenia a vysvetlenie
V obvode je PORTB z ATMEGA32 pripojený k dátovému portu LCD. Tu si treba pamätať, že je potrebné deaktivovať komunikáciu JTAG v PORTC alebo ATMEGA zmenou bajtov poistky, ak chcete použiť PORTC ako normálny komunikačný port. Na 16x2 LCD displeji je 16 pinov, ak je podsvietenie, ak nie je podsvietenie, bude 14 pinov. Jeden môže napájať alebo nechať kolíky podsvietenia. Teraz v 14 kolíkoch je 8 dátových kolíkov (7-14 alebo D0-D7), 2 kolíky napájacieho zdroja (1 a 2 alebo VSS & VDD alebo gnd & + 5v), 3. kolík na kontrolu kontrastu (VEE - určuje, aké silné by mali byť znaky) zobrazené), 3 ovládacie kolíky (RS & RW & E).
V obvode môžete pozorovať, že som vzal iba dva ovládacie piny, pretože to dáva flexibilitu na lepšie pochopenie. Kontrastný bit a READ / WRITE sa často nepoužívajú, aby ich bolo možné skratovať na zem. Toto nastavuje LCD do najvyššieho kontrastu a režimu čítania. Potrebujeme iba ovládať piny ENABLE a RS, aby sme mohli zodpovedajúcim spôsobom odosielať znaky a údaje.
Pripojenia, ktoré sa vykonávajú pre LCD, sú uvedené nižšie:
PIN1 alebo VSS ------------------ zem
PIN2 alebo VDD alebo VCC ------------ + 5V napájanie
PIN3 alebo VEE --------------- zem (poskytuje maximálny kontrast najlepšie pre začiatočníkov)
PIN4 alebo RS (výber registra) --------------- PD6 uC
PIN5 alebo RW (čítanie / zápis) ----------------- zem (prepnutie LCD do režimu čítania uľahčuje komunikáciu pre používateľa)
PIN6 alebo E (povoliť) ------------------- PD5 uC
PIN7 alebo D0 ----------------------------- PB0 uC
PIN8 alebo D1 ----------------------------- PB1 uC
PIN9 alebo D2 ----------------------------- PB2 uC
PIN10 alebo D3 ----------------------------- PB3 uC
PIN11 alebo D4 ----------------------------- PB4 uC
PIN12 alebo D5 ----------------------------- PB5 uC
PIN13 alebo D6 ----------------------------- PB6 uC
PIN14 alebo D7 ----------------------------- PB7 uC
V obvode, ktorý vidíte, sme použili 8-bitovú komunikáciu (D0-D7), nie je to však povinné, môžeme použiť 4-bitovú komunikáciu (D4-D7), ale so 4-bitovým komunikačným programom je to trochu zložitejšie, preto som vybral 8-bitovú komunikáciu. komunikácia.
Takže iba z pozorovania z vyššie uvedenej tabuľky pripájame 10 pinov LCD k radiču, v ktorých 8 pinov sú dátové piny a 2 piny pre riadenie. Napäťový výstup poskytovaný snímačom nie je úplne lineárny; bude to hlučný. Na odfiltrovanie šumu je potrebné umiestniť kondenzátor na výstup zo snímača, ako je to znázornené na obrázku.
Predtým, ako sa posunieme vpred, musíme hovoriť o ADC ATMEGA32A. V ATMEGA32A môžeme dať analógový vstup na ktorýkoľvek z ôsmich kanálov PORTA, nezáleží na tom, ktorý kanál si vyberieme, pretože všetky sú rovnaké. Vyberieme kanál 0 alebo PIN0 PORTA. V ATMEGA32A má ADC 10 bitové rozlíšenie, takže radič dokáže detekovať zmysel pri minimálnej zmene Vref / 2 ^ 10, takže ak je referenčné napätie 5 V, dostaneme digitálny výstupný prírastok za každých 5/2 ^ 10 = 5mV. Takže pre každý prírastok 5mV na vstupe budeme mať prírastok jedného na digitálnom výstupe.
Teraz musíme nastaviť register ADC na základe nasledujúcich podmienok:
1. Najprv musíme povoliť funkciu ADC v ADC.
2. Pretože meráme teplotu v miestnosti, nepotrebujeme skutočne hodnoty nad 100 stupňov (výstup LM35 1000 mV). Môžeme teda nastaviť maximálnu hodnotu alebo referenciu ADC na 2,5V.
3. Kontrolér má funkciu prevodu spúšťača, čo znamená, že prevod ADC sa uskutoční až po externom spúšťači, pretože nechceme, aby sme museli nastavovať registre, aby ADC bežal v režime nepretržitého voľného chodu.
4. Pre akýkoľvek ADC je frekvencia prevodu (analógová hodnota na digitálnu hodnotu) a presnosť digitálneho výstupu nepriamo úmerná. Pre lepšiu presnosť digitálneho výstupu teda musíme zvoliť menšiu frekvenciu. Pre menšie hodiny ADC nastavujeme predpredaj ADC na maximálnu hodnotu (128). Pretože používame interné hodiny 1MHZ, hodiny ADC budú (1000000/128).
To sú jediné štyri veci, ktoré musíme vedieť, aby sme mohli začať s ADC. Všetky vyššie uvedené štyri funkcie sú nastavené dvoma registrami.
ČERVENÁ (ADEN): Tento bit musí byť nastavený pre povolenie funkcie ADC v ATMEGA.
MODRÁ (REFS1, REFS0): Tieto dva bity sa používajú na nastavenie referenčného napätia (alebo maximálneho vstupného napätia, ktoré dáme). Pretože chceme mať referenčné napätie 2,56 V, mali by sme nastaviť REFS0 aj REFS1 podľa tabuľky.
LIGHT GREEN (ADATE): Tento bit musí byť nastavený, aby mohol ADC bežať nepretržite (režim voľného chodu).
PINK (MUX0-MUX4): Týchto päť bitov slúži na rozpoznanie vstupného kanálu. Pretože budeme používať ADC0 alebo PIN0, nemusíme nastavovať žiadne bity ako v tabuľke.
BROWN (ADPS0-ADPS2): tieto tri bity slúžia na nastavenie predskaláru pre ADC. Pretože používame prescalar 128, musíme nastaviť všetky tri bity.
DARK GREEN (ADSC): tento bit nastavený pre ADC na začatie konverzie. Tento bit je možné v programe deaktivovať, keď potrebujeme zastaviť prevod.
Ak chcete vytvoriť tento projekt pomocou Arduina, prečítajte si tento návod: Digitálny teplomer pomocou Arduina
Vysvetlenie programovania
Fungovanie TEMPARATURE MEASUREMENT je najlepšie vysvetliť krok za krokom v kóde C uvedenom nižšie:
#include // header to allow data flow control over pins
#define F_CPU 1000000 // pripojená kryštálová frekvencia radiča
#include
#define E 5 // dávať meno "povoliť" na 5 th pin PORTD, pretože je spojený s LCD umožniť pin
#define RS 6 // pomenovanie „registerselection“ šiestemu pinu PORTD, pretože je pripojený k pinu LCD RS
void send_a_command (nepodpísaný príkaz char);
void send_a_character (znak bez znaku);
void send_a_string (char * retazec_charakterov);
int main (void)
{
DDRB = 0xFF; // uvedenie portB a portD ako výstupných pinov
DDRD = 0xFF;
_delay_ms (50); // oneskorenie 50ms
DDRA = 0; // Ako vstup sa použije portA.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_character ++);
}
}