Sa tutorial na ito magtataguyod kami ng isang serial na komunikasyon sa pagitan ng dalawang mga microcontroller ng ATMEGA8. Ang komunikasyon na itinatag dito ay uri ng UART (Universal Asynchronous Receiver Transmitter). Sa pamamagitan ng serial data na ito ng komunikasyon ay maaaring maibahagi sa pagitan ng dalawang mga microcontroller, na kinakailangan sa iba't ibang mga naka-embed na system.
Kinakailangan ang Mga Bahagi
Hardware: ATMEGA8 (2 piraso), power supply (5v), AVR-ISP PROGRAMMER, 100uF capacitor (konektado sa buong power supply), 1KΩ risistor (dalawang piraso), LED, Button.
Software: Atmel studio 6.1, progisp o flash magic.
Circuit Diagram at Paliwanag
Ipaunawa sa amin ang serial na komunikasyon sa mga AVR microcontroller. Dito nagpapadala ang ATMEGA ng data sa iba pang ATMEGA na serial. Mayroon itong iba pang mode ng komunikasyon ngunit para sa madaling komunikasyon pinili namin ang RS232. Ang pin na RS232 ng unang ATMEGA8 ay konektado sa RXD pin ng pangalawang ATMEGA8.
Ang itinatag na komunikasyon sa data ay na-program upang magkaroon ng:
- Walong data bits
- Dalawang stop bits
- Walang bit check ng parity
- Baud rate na 2400 BPS (Bits Per Second)
- Hindi magkasabay na komunikasyon (Walang pagbabahagi ng orasan sa pagitan ng dalawang ATMEGA8)
Kaya't mayroon kaming dalawang itinakdang mga rehistro para sa dalawang ATMEGA8 na magkakaiba, kung saan ang isa ay gumaganap bilang TRANSMITTER at iba pang mga pagkilos bilang RECEIVER.
Ngayon para sa pag- interfacing ng RS232 sa pagitan ng dalawang ATmega microcontroller, ang mga sumusunod na tampok ay dapat na nasiyahan para sa TRANSMITTER at RECEIVER:
1. Ang TXD pin (tampok sa pagtanggap ng data) ng unang controller ay dapat na paganahin para sa TRANSMITTER at ang RXD pin ng pangalawang controller ay dapat na paganahin para sa RECEIVER.
2. Dahil ang komunikasyon ay serial kailangan nating malaman tuwing natanggap ang data byte, upang ihinto namin ang programa hanggang sa matanggap ang kumpletong byte. Ginagawa ito sa pamamagitan ng pagpapagana ng isang data na makatanggap ng kumpletong pagkagambala.
3. Ang DATA ay ipinadala at natanggap sa controller sa 8bit mode. Kaya't dalawang character ang ipapadala sa controller nang paisa-isa.
4. Walang mga parity bits, isang stop bit sa data na ipinadala ng module.
Ang mga tampok sa itaas ay nakatakda sa mga rehistro ng controller; tatalakayin natin sila nang maikli,
DARK GRAY (UDRE): (TRASMITTER SIDE) Ang bit na ito ay hindi itinakda sa pagsisimula ngunit ginagamit ito sa panahon ng pagtatrabaho upang suriin kung handa nang magpadala o hindi ang transmitter. Tingnan ang programa sa TRASMITTER SIDE para sa higit pang mga detalye.
LIGHT GRAY (RXC): (Tumatanggap ng SIDE) Ang bit na ito ay hindi itinakda sa panahon ng pagsisimula ngunit ginagamit ito sa panahon ng pagtatrabaho upang suriin kung handa na ang tatanggap na makatanggap ng data o hindi. Tingnan ang programa sa pagtanggap ng panig para sa higit pang mga detalye.
VOILET (TXEN): (TRASMITTER SIDE) Ang bit na ito ay itinakda para sa pagpapagana ng transmitter pin sa TRASMITTER SIDE.
PULA (RXEN): (Tumatanggap ng panig) Ang bit na ito ay kumakatawan sa pagtanggap ng tampok na data, ang bit na ito ay dapat itakda para sa data mula sa module na matatanggap ng controller, nagbibigay-daan din ito sa RXD pin ng controller.
BROWN (RXCIE): Ang bit na ito ay dapat itakda para makagambala pagkatapos ng matagumpay na pagtanggap ng data. Sa pamamagitan ng pagpapagana ng kaunting ito ay nalalaman natin, pagkatapos ng pagtanggap ng 8 bit na data. Hindi namin gagamitin ang bahagyang ito dito kaya't naiwan itong nag-iisa.
PINK (URSEL): Ang bit na ito ay dapat itakda bago paganahin ang iba pang mga piraso sa UCSRC, pagkatapos magtakda ng iba pang mga kinakailangang piraso sa UCSRC; Ang URSEL ay dapat na hindi paganahin o ilagay sa zero. Hindi namin gagamitin ang bahagyang ito dito kaya't naiwan itong nag-iisa.
YELLOW (UCSZ0, UCSZ1, UCSZ2): (Tumatanggap ng panig at panig ng TRASMITTER) Ang tatlong mga piraso na ito ay ginagamit para sa pagpili ng bilang ng mga data bit na natatanggap o ipinapadala sa isang solong paglalakbay.
Ang komunikasyon sa pagitan ng dalawang ATMEGA ay itinatag bilang walong bit na komunikasyon. Sa pamamagitan ng pagtutugma sa komunikasyon sa talahanayan na mayroon kami, UCSZ0, UCSZ1 sa isa at UCSZ2 hanggang zero.
Kailangan nating itakda ang mga ito sa parehong bahagi ng pagtanggap at paglilipat.
ORANGE (UMSEL): (Tumatanggap ng SIDE & TRASMITTER SIDE) Ang bit na ito ay itinakda batay sa kung ang system ay nakikipag-usap nang asynchronous (parehong gumagamit ng iba't ibang orasan) o magkakasabay (parehong gumagamit ng parehong orasan).
Parehong ang mga tagakontrol ay hindi nagbabahagi ng anumang orasan. Dahil pareho silang gumagamit ng panloob na orasan ng kanilang sarili. Kaya kailangan naming itakda ang UMSEL sa 0 sa parehong mga Controller.
GREEN (UPM1, UPM0): (Tumatanggap ng panig at panig ng TRASMITTER) Ang dalawang piraso na ito ay nababagay batay sa bit parity na ginagamit namin sa komunikasyon.
Ang ATMEGA ay naka-program upang magpadala ng data na walang pagkakapantay-pantay, dahil ang haba ng paghahatid ng data ay maliit, malinaw na maaasahan naming walang pagkawala o error sa data. Kaya't hindi kami nagtatakda ng anumang pagkakapantay-pantay dito. Kaya itinakda namin ang parehong UPM1, UPM0 sa zero o naiwan sila, dahil ang lahat ng mga bit ay 0 sa pamamagitan ng default..
BLUE (USBS): (Tumatanggap ng SIDE & TRASMITTER SIDE) Ginagamit ang bit na ito para sa pagpili ng bilang ng mga stop bits na ginagamit namin habang nakikipag-usap.
Ang komunikasyon na itinatag dito ay isang hindi magkasabay na uri, kaya para sa pagkuha ng mas tumpak na paghahatid ng data at pagtanggap, kailangan naming gumamit ng dalawang hintuan, Samakatuwid itinakda namin ang USBS sa '1' sa parehong mga tagakontrol.
Ang rate ng baud ay nakatakda sa controller sa pamamagitan ng pagpili ng naaangkop na UBRRH.
Ang halaga ng UBRRH ay napili ng cross refer baud rate at CPU crystal frequency.
Kaya sa pamamagitan ng cross reference na halaga ng UBRR ay nakikita bilang '25', at sa gayon ang rate ng baud ay itinakda.
Tulad ng ipinakita sa circuit ang isang pindutan ay konektado sa panig ng transmitter. Kapag ang pindutan na ito sa pinindot ang isang walong bit data ay ipinadala ng TRANSMITTER at ang data na ito ay natanggap ng RECEIVER. Sa matagumpay na pagtanggap ng data na ito, pinapalitan nito ang LED na konektado dito ON at OFF, na nagpapakita ng matagumpay na paglilipat ng data sa pagitan ng dalawang tagakontrol.