Tässä projektissa aiomme suunnitella piirin lämpötilan mittaamiseksi. Tämä piiri on kehitetty käyttäen lineaarista jänniteanturia “ LM35 ”. Lämpötila mitataan yleensä asteina tai Faraheite-asteina. “LM35” -anturi tuottaa tuotoksen asteikkoasteella.
LM35 on kolmitapainen transistorin kaltainen laite. Siinä on VCC, GND ja OUTPUT. Tämä anturi tarjoaa vaihtelevan jännitteen ulostulossa lämpötilan perusteella.
Kuten yllä olevassa kuvassa on esitetty, jokaista +1 celsiusasteen lämpötilan nousua kohti on + 10 mV suurempi teho. Joten jos lämpötila on 0 ºC, anturin teho on 0 V, jos lämpötila on 10 ºC, anturin teho on + 100 mV, jos lämpötila on 25 ºC, anturin teho on + 250 mV.
Joten toistaiseksi LM35: llä saamme lämpötilan muuttuvana jännitteenä. Tämä lämpötilasta riippuva jännite annetaan ATMEGA32A: n ADC: n (analoginen digitaalimuunnin) tulona. Saatu muuntamisen jälkeinen digitaalinen arvo näytetään 16x2 LCD: ssä lämpötilana.
Tarvittavat komponentit
Laitteisto: ATMEGA32-mikrokontrolleri, virtalähde (5v), AVR-ISP-OHJELMOINTI, JHD_162ALCD (16x2LCD), 100uF-kondensaattori (kaksi kappaletta), 100nF-kondensaattori, LM35-lämpötila-anturi.
Ohjelmisto: Atmel studio 6.1, progisp tai flash magic.
Piirikaavio ja selitys
Piirissä ATMEGA32: n PORTB on kytketty nestekidenäytön dataporttiin. Tässä on syytä muistaa poistaa JTAG-tiedonsiirto PORTC tai ATMEGA -laitteesta vaihtamalla sulaketavu, jos haluat käyttää PORTC-laitetta normaalina tiedonsiirtoporttina. 16x2 LCD -näytössä on kaikkiaan 16 nastaa, jos taustavaloa on, jos taustavaloa ei ole, on 14 nastaa. Voidaan kytkeä päälle tai jättää taustavalon nastat. Nyt 14 nastat on 8 data nastat (7-14 tai D0-D7), 2 virtalähde nastat (1 & 2 tai VSS ja VDD tai GND ja + 5V), 3 rd pin kontrastin säätö (VEE-ohjaimet kuinka paksu merkkien pitäisi olla kuvassa), 3 ohjaintappia (RS & RW & E).
Piirissä voit havaita, että olen ottanut vain kaksi ohjaustappia, koska tämä antaa joustavuuden ymmärtää paremmin. Kontrastibittiä ja LUKU / KIRJOITA ei käytetä usein, joten ne voidaan oikosulkea maahan. Tämä asettaa LCD-näytön suurimmalle kontrastille ja lukutilaan. Meidän on vain hallittava ENABLE- ja RS-nastoja merkkien ja tietojen lähettämiseksi vastaavasti.
LCD-liitännät ovat alla:
PIN1 tai VSS ------------------ maa
PIN2 tai VDD tai VCC ------------ + 5v teho
PIN3 tai VEE --------------- maa (antaa maksimaalisen kontrastin parhaiten aloittelijalle)
PIN4 tai RS (Rekisterivalinta) --------------- u6: n PD6
PIN5 tai RW (luku / kirjoitus) ----------------- maa (LCD-näytön asettaminen lukutilaan helpottaa viestintää käyttäjälle)
PIN6 tai E (käytössä) ------------------- PD5 uC: stä
PIN7 tai D0 ----------------------------- PB0 uC: stä
PIN8 tai D1 ----------------------------- PB1 uC: stä
PIN9 tai D2 ----------------------------- PB2 uC: stä
PIN10 tai D3 ----------------------------- u3: n PB3
PIN11 tai D4 ----------------------------- PB4 uC: stä
PIN12 tai D5 ----------------------------- PB5 uC: stä
PIN13 tai D6 ----------------------------- u6: n PB6
PIN14 tai D7 ----------------------------- PB7 uC: stä
Piirissä näet, että olemme käyttäneet 8-bittistä tiedonsiirtoa (D0-D7), mutta tämä ei ole pakollista, voimme käyttää 4-bittistä tiedonsiirtoa (D4-D7), mutta 4-bittisellä viestintäohjelmalla tulee vähän monimutkainen, joten olen valinnut 8-bittisen viestintä.
Joten pelkästä havainnosta taulukon yläpuolelta yhdistämme 10 LCD-nastaa ohjaimeen, jossa 8 nastaa ovat datanastoja ja 2 nastaa ohjausta varten. Anturin antama jännitelähtö ei ole täysin lineaarinen; se on meluisa. Kohinan suodattamiseksi kondensaattori on sijoitettava anturin ulostuloon kuvan osoittamalla tavalla.
Ennen eteenpäin siirtymistä meidän on puhuttava ATMEGA32A: n ADC: stä. ATMEGA32A: ssa voimme antaa analogisen tulon mille tahansa kahdeksasta PORTA-kanavasta, ei ole väliä minkä kanavan valitsemme, koska kaikki ovat samat. Valitsemme PORTA-kanavan 0 tai PIN0. ATMEGA32A: ssa ADC: n resoluutio on 10 bittiä, joten ohjain pystyy havaitsemaan merkityksen Vref / 2 ^ 10: n minimimuutoksesta, joten jos referenssijännite on 5 V, saamme digitaalisen lähdön lisäyksen jokaista 5/2 ^ 10 = 5mV. Joten jokaista 5mV: n lisäystä kohti tuloa meillä on yhden lisäys digitaalisessa lähdössä.
Nyt meidän on määritettävä ADC-rekisteri seuraavien ehtojen perusteella:
1.Ensinnäkin meidän on otettava ADC-ominaisuus käyttöön ADC: ssä.
2. Koska mittaamme huoneen lämpötilaa, emme todellakaan tarvitse arvoja, jotka ylittävät sata astetta (LM35: n 1000 mV: n lähtö). Joten voimme asettaa ADC: n maksimiarvon tai viitteen arvoon 2,5 V.
3. Ohjaimessa on liipaisimen muunnosominaisuus, mikä tarkoittaa, että ADC-muunnos tapahtuu vasta ulkoisen liipaisun jälkeen, koska emme halua, että meidän on asetettava rekisterit ADC: lle toimimaan jatkuvassa vapaassa käynnissä.
4. Minkä tahansa ADC: n muuntotiheys (analoginen arvo digitaaliarvoon) ja digitaalisen lähdön tarkkuus ovat kääntäen verrannollisia. Joten digitaalisen lähdön tarkkuuden parantamiseksi meidän on valittava pienempi taajuus. Pienemmälle ADC-kellolle asetamme ADC: n esiasetuksen maksimiarvoon (128). Koska käytämme 1 MHz: n sisäistä kelloa, ADC: n kello on (1000000/128).
Nämä ovat ainoat neljä asiaa, jotka meidän on tiedettävä aloittaa ADC. Kaikki edellä mainitut neljä ominaisuutta asetetaan kahdella rekisterillä.
PUNAINEN (ADEN): Tämä bitti on asetettava, jotta ATMEGA: n ADC-ominaisuus voidaan ottaa käyttöön.
SININEN (REFS1, REFS0): Näitä kahta bittiä käytetään asettamaan referenssijännite (tai maksimi tulojännite, jonka annamme). Koska haluamme, että referenssijännite on 2,56 V, REFS0 ja REFS1 tulisi asettaa taulukon mukaan.
LIGHT GREEN (ADATE): Tämä bitti on asetettava, jotta ADC toimii jatkuvasti (vapaa ajo-tila).
PINK (MUX0-MUX4): Nämä viisi bittiä ovat tulokanavan kertomiseen. Koska aiomme käyttää ADC0: ta tai PIN0: ta, meidän ei tarvitse asettaa yhtään bittiä kuten taulukossa.
RUSKEA (ADPS0-ADPS2): nämä kolme bittiä määrittävät ADC: n esiasteen. Sice käytämme esiarvoa 128, meidän on asetettava kaikki kolme bittiä.
TUMMA VIHREÄ (ADSC): tämä bitti asetettiin ADC: lle muuntamisen aloittamiseksi. Tämä bitti voidaan poistaa käytöstä ohjelmassa, kun muunnos on lopetettava.
Voit tehdä tämän projektin Arduinolla tutustumalla tähän opetusohjelmaan: Arduinoa käyttävä digitaalinen lämpömittari
Ohjelmoinnin selitys
LÄMPÖTILAMITTAUKSEN työskentely selitetään parhaiten alla annettujen C-koodien vaiheittain:
#include // header, jotta tiedonsiirron hallinta nastojen kautta
#define F_CPU 1000000 // kertovan ohjaimen kristallitaajuus liitetty
#sisältää
#define E 5 // antaa nimi ”enable” 5 th pin PORTD, koska se on liitetty LCD mahdollistaa pin
#define RS 6 // antaa nimi ”registerselection” 6 : nnen pin PORTD, sillä kytketään LCD RS pin
void send_a_command (allekirjoittamaton char-komento);
void send_a_character (allekirjoittamaton merkki);
void send_a_string (char * merkkijono_merkit);
int main (mitätön)
{
DDRB = 0xFF; // porttienB ja portD asettaminen lähtöneuloiksi
DDRD = 0xFF;
_delay_ms (50); // 50 ms viive
DDRA = 0; // Otetaan portti A tuloksi.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* merkkijonon_merkit ++);
}
}