Dito magtataguyod kami ng isang komunikasyon sa pagitan ng isang ATmega8 microcontroller at Arduino Uno. Ang komunikasyon na itinatag dito ay uri ng UART (Universal Asynchronous Receiver Transmitter). Serial komunikasyon ito. Sa pamamagitan ng serial data na ito ng komunikasyon ay maaaring maibahagi sa pagitan ng dalawang mga tagakontrol, na kung saan ay kinakailangan sa iba't ibang mga naka-embed na application ng system.
Sa mga naka-embed na system dapat kaming magkaroon ng pangunahing kaalaman tungkol sa mga komunikasyon sa system, kaya para dito ginagawa namin ang proyektong ito. Sa proyektong ito tatalakayin namin ang pangunahing sistema ng komunikasyon at magpapadala kami ng ilang data mula sa transmiter hanggang sa tatanggap sa serial.
Sa proyektong ito ang ATMEGA8 ay kumikilos bilang isang TRANSMITTER at ang ARDUINO UNO ay kumikilos bilang isang RECECIVER. Sa serial na komunikasyon magpapadala kami ng data BIT BY BIT, hanggang sa isang BYTE ng data ang ganap na mailipat. Ang data ay maaaring may sukat na 10bit ngunit mananatili kami sa 8BITS sa ngayon.
Kinakailangan ang Mga Bahagi
Hardware: ATMEGA8, ARDUINO UNO, power supply (5v), AVR-ISP PROGRAMMER, 100uF capacitor (konektado sa buong supply ng kuryente), 1KΩ resistor (dalawang piraso), LED, Button.
Software: Atmel studio 6.1, progisp o flash magic, ARDUINO NIGHTLY.
Circuit Diagram at Paliwanag
Bago namin talakayin ang diagram ng circuit at programa para sa transmitter at tatanggap, kailangan nating maunawaan ang tungkol sa serial na komunikasyon. Ang ATMEGA dito ay nagpapadala ng data sa UNO sa serye tulad ng tinalakay kanina.
Mayroon itong iba pang mga mode ng komunikasyon tulad ng MASTER SLAVE na komunikasyon, komunikasyon sa JTAG ngunit para sa madaling komunikasyon ay pipiliin namin ang RS232. Dito ikokonekta natin ang TXD (Transmitter) PIN ng ATMEGA8 sa RXD (Receiver) PIN ng ARDUINO UNO
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 9600 BPS (Bits Per Second)
- Hindi magkasabay na komunikasyon (Walang pagbabahagi ng orasan sa pagitan ng ATMEGA8 at UNO (parehong may iba't ibang mga yunit ng orasan))
Para sa pagtataguyod ng UART sa pagitan ng Arduino Uno at ATMEGA8 kailangan nating mai -program nang wasto ang setting. Para sa mga ito kailangan naming panatilihin ang mga nabanggit na parameter sa pareho sa parehong mga dulo. Sa isang ito ay gumaganap bilang TRANSMITTER at iba pang mga kilos bilang RECEIVER. Tatalakayin namin ang bawat setting ng panig sa ibaba.
Ngayon para sa interface ng RS232, ang mga sumusunod na tampok ay dapat na nasiyahan para sa panig ng TRANSMITTER (ATMEGA8):
1. Ang TXD pin (tampok na tumatanggap ng data) ng unang controller ay dapat na paganahin para sa TRANSMITTER.
2. Dahil ang komunikasyon ay serial kailangan nating malaman tuwing natanggap ang data bye, upang mapahinto 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 ang mga ito nang maikli:
DARK GRAY (UDRE): 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.
VOILET (TXEN): Ang bit na ito ay itinakda para sa pagpapagana ng transmitter pin sa TRASMITTER SIDE.
YELLOW (UCSZ0, UCSZ1, at UCSZ2): Ang tatlong mga piraso na ito ay ginagamit para sa pagpili ng bilang ng mga data bit na natatanggap namin o nagpapadala sa isang solong paglalakbay.
Ang komunikasyon sa pagitan ng dalawang SIDES 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.
ORANGE (UMSEL): 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 SYTEMS 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): Ang dalawang piraso na ito ay nababagay batay sa bit parity na ginagamit namin sa komunikasyon.
Ang data ATMEGA dito ay naka-program upang magpadala ng data na walang pagkakapantay-pantay, dahil ang haba ng paghahatid ng data ay maliit, maaari naming malinaw na asahan na 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): Ginagamit ang bit na ito para sa pagpili ng bilang ng mga stop bits na ginagamit namin habang nakikipag-usap.
Ang komunikasyon na itinatag sa kanya ay hindi magkasabay na uri, kaya para sa pagkuha ng mas tumpak na paghahatid ng data at pagtanggap, kailangan naming gumamit ng dalawang paghinto, Samakatuwid itinakda namin ang USBS sa '1' sa panig ng TRANSMITTER..
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 '6', at sa gayon ang rate ng baud ay itinakda.
Sa pamamagitan nito ay naitaguyod namin ang mga setting sa TRANSMITTER SIDE; pag-uusapan natin ang tungkol sa pagtanggap ng panig sa ngayon.
Ang serial na pagpapagana ng komunikasyon sa UNO ay maaaring gawin sa pamamagitan ng paggamit ng isang solong utos.
|
Ang komunikasyon na ipinalagay namin upang maitaguyod ay ginagawa ng isang rate ng BAUD na 9600 bits bawat segundo. Kaya para sa UNO upang maitaguyod ang naturang rate ng baud at upang simulan ang serial na komunikasyon ginagamit namin ang utos ”Serial.begin (9600);”. Narito ang 9600 ay baud rate at nababago.
Ngayon lahat ay natitira kung upang makatanggap ng data, ang isang isang data ay natanggap ng UNO, magagamit ito para sa pagkuha. Ang data na ito ay kinuha sa pamamagitan ng utos na "acceptdata = Serial.read ();". Sa pamamagitan ng utos na ito ang serial data ay kinuha sa 'ditampadata' na pinangalanang integer.
Tulad ng ipinapakita sa circuit ng isang pindutan sa konektado sa panig ng transmitter, kapag ang pindutan na ito na pinindot ang isang walong bit na data ay ipinadala ng TRANSMITTER (ATMEGA8) at ang data na ito ay natanggap ng RECEIVER (ARDUINO UNO). Sa matagumpay na pagtanggap ng data na ito, pinapalitan nito ang LED na konektado dito ON at OFF, upang maipakita ang matagumpay na paglilipat ng data sa pagitan ng dalawang tagakontrol.
Sa pamamagitan ng UART na komunikasyon sa pagitan ng ATMEGA8 controller at ARDUINO UNO ay matagumpay na naitatag.