Sa tutorial na ito pupunta kami sa interface ng FLEX sensor na may ATMEGA8 microcontroller. Sa ATMEGA8, gagamit kami ng tampok na 10bit ADC (Analog to Digital Conversion) upang gawin ang trabahong ito. Ngayon ang ADC sa ATMEGA ay hindi maaaring kumuha ng isang input na higit sa + 5V.
Ano ang isang Flex Sensor?
Ang isang FLEX sensor ay isang transducer na nagbabago ng paglaban nito kapag binago ang hugis nito. Ipinapakita ito sa figure sa ibaba.
Ginagamit ang sensor na ito upang maunawaan ang mga pagbabago sa linearity. Kaya't kapag ang sensor ng FLEX ay baluktot ang paglaban ay baluktot nang husto. Ipinapakita ito sa figure sa ibaba.
Ngayon para sa pag-convert ng pagbabago na ito sa paglaban sa pagbabago ng boltahe, gagamit kami ng isang circuit ng divider ng boltahe. Sa resistive network na ito mayroon kaming isang pare-pareho na paglaban at iba pang variable na paglaban. Tulad ng ipinakita sa figure sa ibaba, ang R1 dito ay isang pare-pareho ang paglaban at ang R2 ay FLEX sensor na kumikilos bilang isang paglaban. Ang midpoint ng sangay ay kinuha sa pagsukat. Kapag nagbago ang resistensya R2, ang Vout ay nagbabago kasama nito nang linear. Kaya sa ito mayroon kaming isang boltahe na magbabago sa linearity.
Ngayon ang mahalagang bagay na dapat tandaan dito ay, ang input na kinunan ng controller para sa conversion ng ADC ay kasing baba ng 50µAmp. Ang epekto ng paglo-load ng resistensyang batay sa boltahe na ito ay mahalaga dahil ang kasalukuyang iginuhit mula sa Vout ng boltahe na divider ay nagdaragdag ng porsyento ng error, sa ngayon hindi namin kailangang magalala tungkol sa pag-load ng epekto.
Kami ay kukuha ng dalawang resistors at bumuo ng isang divider circuit upang para sa isang 25Volts Vin, nakakakuha kami ng isang 5Volt Vout. Kaya't ang kailangan lamang nating gawin ay i-multiply ang halaga ng Vout na may "5" sa programa upang makuha ang tunay na boltahe ng pag-input.
Kinakailangan ang Mga Bahagi
HARDWARE: ATMEGA8, Power supply (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF capacitor, 100nF capacitor (5 piraso), 100KΩ resistor.
SOFTWARE: Atmel studio 6.1, progisp o flash magic.
Circuit Diagram at Paggawa ng Paliwanag
Sa circuit PORTD ng ATMEGA8 ay konektado sa data port LCD. Sa 16x2 LCD mayroong 16 na pin sa lahat kung mayroong back light, kung walang back light magkakaroon ng 14 na pin. Maaari ng isang tumakbo o iwanan ang mga light light pin. Ngayon sa 14 na pin mayroong 8 data pin (7-14 o D0-D7), 2 power supply pin (1 & 2 o VSS & VDD o gnd & + 5v), 3 rd pin para sa control ng kaibahan (kinokontrol ng VEE kung gaano dapat makapal ang mga character ipinakita) at 3 control pin (RS & RW & E).
Sa circuit, maaari mong obserbahan na kumuha lamang ako ng dalawang control pin. Ang kaibahan ng kaunti at BASAHIN / Sumulat ay hindi madalas na ginagamit upang maaari silang maiksi sa lupa. Inilalagay nito ang LCD sa pinakamataas na kaibahan at mode na basahin. Kailangan lang naming makontrol ang Mga PIN na INABAYAHAN at RS upang magpadala ng mga character at data nang naaayon.
Ang mga koneksyon sa LCD na may ATmega8 ay ang mga sumusunod:
PIN1 o VSS sa Ground
Ang PIN2 o VDD o VCC sa + 5v na lakas
PIN3 o VEE sa Ground (nagbibigay ng pinakamataas na maximum na kaibahan para sa isang nagsisimula)
PIN4 o RS (Pagpili ng Rehistro) sa PB0 ng uC
Ang PIN5 o RW (Basahin / Isulat) sa Ground (inilalagay ang LCD sa read mode na nagpapagaan sa komunikasyon para sa gumagamit)
PIN6 o E (Paganahin) sa PB1 ng uC
PIN7 o D0 hanggang PD0 ng uC
PIN8 o D1 sa PD1 ng uC
PIN9 o D2 sa PD2 ng uC
PIN10 o D3 hanggang PD3 ng uC
PIN11 o D4 hanggang D4 ng uC
PIN12 o D5 hanggang PD5 ng uC
PIN13 o D6 hanggang PD6 ng uC
PIN14 o D7 hanggang PD7 ng uC
Sa circuit maaari mong makita na ginamit namin ang 8bit na komunikasyon (D0-D7) subalit hindi ito isang sapilitan, maaari naming gamitin ang 4bit na komunikasyon (D4-D7) ngunit sa 4 bit na programa sa komunikasyon ay medyo kumplikado kaya't nagpunta kami sa 8 bit komunikasyon (Suriin din ang tutorial na ito: 16x2 LCD interfacing sa AVR microcontroller)
Kaya't mula sa pagmamasid lamang mula sa itaas na talahanayan kumokonekta kami ng 10 mga pin ng LCD sa controller kung saan ang 8 mga pin ay mga pin ng data at 2 mga pin para sa kontrol.
Ang boltahe sa kabuuan ng R2 ay hindi ganap na guhit; magiging maingay ito. Upang ma-filter ang mga capacitor ng ingay ay inilalagay sa bawat risistor sa divider circuit tulad ng ipinakita sa pigura.
Ang palayok na 1K dito ay upang ayusin ang kawastuhan ng ADC. Ngayon talakayin natin ang tungkol sa ADC ng ATMEGA8.
Sa ATMEGA8, maaari naming ibigay ang input ng Analog sa alinman sa APAT na mga channel ng PORTC, hindi alintana kung aling channel ang pipiliin namin bilang pareho, pipiliin namin ang channel 0 o PIN0 ng PORTC.
Sa ATMEGA8, ang ADC ay may 10 bit na resolusyon, kaya't ang controller ay maaaring makakita ng isang kaunting pagbabago ng Vref / 2 ^ 10, kaya kung ang boltahe ng sanggunian ay 5V nakakakuha kami ng isang digital output increment para sa bawat 5/2 ^ 10 = 5mV. Kaya't para sa bawat 5mV na pagtaas sa input magkakaroon kami ng isang pagtaas ng isa sa digital output.
Ngayon kailangan naming itakda ang rehistro ng ADC batay sa mga sumusunod na term, 1. Una sa lahat kailangan namin upang paganahin ang tampok na ADC sa ADC.
2. Narito ang makakakuha ng isang maximum na boltahe ng pag-input para sa pag-convert ng ADC ay + 5V. Kaya maaari naming i-set up ang maximum na halaga o sanggunian ng ADC sa 5V.
3. Ang Controller ay may tampok na pag-convert ng pag-trigger na nangangahulugang ang ADC conversion ay magaganap lamang pagkatapos ng isang panlabas na pag-trigger, dahil hindi namin nais na itakda namin ang mga rehistro para sa ADC na tumakbo sa tuluy-tuloy na libreng running mode.
4. Para sa anumang ADC, ang dalas ng conversion (Analog na halaga sa Digital na halaga) at kawastuhan ng digital output ay kabaligtaran proporsyonal. Kaya para sa mas mahusay na kawastuhan ng digital output kailangan nating pumili ng mas kaunting dalas. Para sa normal na orasan ng ADC itinatakda namin ang presale ng ADC sa maximum na halaga (2). Dahil ginagamit namin ang panloob na orasan ng 1MHZ, ang orasan ng ADC ay magiging (1000000/2).
Ito lamang ang apat na bagay na kailangan nating malaman upang makapagsimula sa ADC.
Ang lahat ng apat na tampok sa itaas ay itinakda ng dalawang rehistro:
PULA (ADEN): Ang bit na ito ay kailangang maitakda para sa pagpapagana ng tampok na ADC ng ATMEGA.
BLUE (REFS1, REFS0): Ang dalawang piraso na ito ay ginagamit upang maitakda ang sanggunian na boltahe (o ibibigay na max na boltahe ng pag-input na ibibigay namin). Dahil nais naming magkaroon ng sanggunian boltahe 5V, ang REFS0 ay dapat itakda, sa pamamagitan ng talahanayan.
YELLOW (ADFR): Ang bit na ito ay dapat itakda para sa ADC upang magpatakbo ng tuloy-tuloy (libreng running mode).
PINK (MUX0-MUX3): Ang apat na piraso na ito ay para sa pagsasabi sa input channel. Dahil gagamitin namin ang ADC0 o PIN0, hindi namin kailangang magtakda ng anumang mga piraso sa pamamagitan ng talahanayan.
BROWN (ADPS0-ADPS2): ang tatlong mga piraso na ito ay para sa pagtatakda ng prescalar para sa ADC. Dahil gumagamit kami ng isang prescalar na 2, kailangan naming magtakda ng kaunti.
DARK GREEN (ADSC): itinakda ito para sa ADC upang simulan ang conversion. Ang bit na ito ay maaaring hindi paganahin sa programa kung kailangan nating ihinto ang conversion.
Ang FLEX sensor na nakikipag-ugnay sa ATmega8 ay ipinaliwanag nang sunud-sunod sa C code na ibinigay sa ibaba.