Šeit mēs izveidosim komunikāciju starp ATmega8 mikrokontrolleru un Arduino Uno. Šeit izveidotā komunikācija ir UART (Universal Asynchronous Receiver Transmitter) tipa. Tā ir sērijveida saziņa. Ar šo sērijas sakaru datus var koplietot starp diviem kontrolieriem, kas ir nepieciešams dažādās iegultās sistēmas lietojumprogrammās.
Iegultās sistēmās mums ir jābūt pamatzināšanām par sistēmas komunikāciju, tāpēc mēs to darām. Šajā projektā mēs apspriedīsim pamata sakaru sistēmu un sērijveidā nosūtīsim dažus datus no raidītāja uz uztvērēju.
Šajā projektā ATMEGA8 darbojas kā PĀRraidītājs, bet ARDUINO UNO - UZŅĒMĒJS. Sērijveida saziņā mēs nosūtīsim datus BIT BY BIT, līdz datu BYTE būs pilnībā pārsūtīts. Dati var būt 10 bitu lieluma, taču mēs pagaidām saglabāsim 8BITS.
Nepieciešamās sastāvdaļas
Aparatūra: ATMEGA8, ARDUINO UNO, barošanas avots (5v), AVR-ISP PROGRAMMER, 100uF kondensators (savienots pāri barošanas blokam), 1KΩ rezistors (divi gabali), LED, poga.
Programmatūra: Atmel studio 6.1, progisp vai flash magic, ARDUINO NIGHTLY.
Shēmas shēma un paskaidrojums
Pirms mēs apspriežam raidītāja un uztvērēja ķēdes shēmu un programmēšanu, mums ir jāsaprot sērijveida sakari. ATMEGA šeit nosūta datus ANO sērijveidā, kā tika apspriests iepriekš.
Tam ir citi saziņas veidi, piemēram, MASTER SLAVE komunikācija, JTAG komunikācija, bet ērtai saziņai mēs izvēlamies RS232. Šeit mēs savienosim ATMEGA8 TXD (raidītājs) PIN ar ARDUINO UNO RXD (uztvērējs) PIN
Izveidotajai datu komunikācijai ir ieprogrammēts:
- Astoņi datu biti
- Divi stop biti
- Nav paritātes pārbaudes bitu
- Buda ātrums 9600 BPS (biti sekundē)
- Asinhrona komunikācija (starp ATMEGA8 un UNO nav pulksteņa koplietošanas (abiem ir atšķirīgas pulksteņa vienības))
Lai izveidotu UART starp Arduino Uno un ATMEGA8, mums precīzi jāprogrammē iestatījums. Šim nolūkam iepriekš minētie parametri abos galos jāsaglabā vienādi. Tas darbojas kā SŪTĪTĀJS un citi darbojas kā UZŅĒMĒJS. Katru sānu iestatījumu mēs apspriedīsim tālāk.
Tagad attiecībā uz RS232 saskarni TRANSMITTER pusē (ATMEGA8) ir jāievēro šādas funkcijas:
1. Pārraidītājam ir jāiespējo pirmā kontrollera TXD tapa (datu saņemšanas funkcija).
2. Tā kā saziņa ir sērijveida, mums jāzina ikreiz, kad tiek saņemts datu atvadīšanās, lai mēs varētu pārtraukt programmu, līdz tiek saņemts pilnīgs baits. Tas tiek darīts, ļaujot datiem saņemt pilnīgu pārtraukumu.
3. DATI tiek pārsūtīti un saņemti kontrolierim 8 bitu režīmā. Tātad kontrolierim vienlaikus tiks nosūtītas divas rakstzīmes.
4. Moduļa sūtītajos datos nav paritātes bitu, viena pieturas bita.
Iepriekš minētās funkcijas ir iestatītas kontrolieru reģistros; mēs tos īsi apspriedīsim:
Tumšs pelēks (UDRE): Šis bits nav iestatīts startēšanas laikā, bet tas tiek izmantots darba laikā, lai pārbaudītu, vai raidītājs ir gatavs pārraidīšanai. Plašāku informāciju skatiet programmā TRASMITTER SIDE.
VOILET (TXEN): Šis bits ir iestatīts, lai iespējotu raidītāja tapu TRASMITTER SIDE.
DZELTENS (UCSZ0, UCSZ1 un UCSZ2): Šie trīs biti tiek izmantoti, lai atlasītu saņemamo vai nosūtīto datu bitu skaitu vienā piegājienā.
Komunikācija starp diviem SIDES ir izveidota kā astoņu bitu komunikācija. Saskaņojot saziņu ar mums pieejamo tabulu, UCSZ0, UCSZ1 uz vienu un UCSZ2 uz nulli.
ORANGE (UMSEL): Šis bits tiek iestatīts atkarībā no tā, vai sistēma sazinās asinhroni (abi izmanto atšķirīgu pulksteni) vai sinhroni (abi izmanto vienu un to pašu pulksteni).
Abās SYTEMS nav kopīga pulksteņa. Tā kā abi izmanto savu iekšējo pulksteni. Tāpēc mums abos kontrolleros ir jāiestata UMSEL uz 0.
ZAĻŠ (UPM1, UPM0): Šie divi biti tiek pielāgoti, pamatojoties uz bitu paritāti, kuru izmantojam saziņā.
Datu ATMEGA šeit ir ieprogrammēts, lai sūtītu datus bez paritātes, jo datu pārraides garums ir mazs, mēs skaidri varam sagaidīt, ka netiks zaudēti vai kļūdaini. Tātad mēs šeit nenosakām nekādu paritāti. Tātad, mēs iestatījām gan UPM1, gan UPM0 uz nulli, vai arī tie ir palikuši, jo visi biti pēc noklusējuma ir 0.
ZILA (USBS): Šis bits tiek izmantots, lai izvēlētos pieturas bitu skaitu, ko izmantojam saziņas laikā.
Viņai izveidotā komunikācija ir asinhrona tipa, tāpēc, lai iegūtu precīzāku datu pārraidi un saņemšanu, mums jāizmanto divi pieturas biti, tāpēc raidītāja pusē USBS iestatījām uz “1”.
Pārraides ātrums tiek iestatīts kontrolierī, izvēloties atbilstošo UBRRH:
UBRRH vērtību izvēlas, savstarpēji atsaucoties uz datu pārraides ātrumu un procesora kristāla frekvenci:
Tātad, izmantojot savstarpēju atsauci, UBRR vērtība tiek uzskatīta par “6”, un tāpēc tiek iestatīts datu pārraides ātrums.
Ar to mēs esam izveidojuši iestatījumus raidītāja sānos; mēs tagad runāsim par SAŅEMŠANAS PUSI.
Sērijveida saziņu, kas iespējo UNO, var veikt, izmantojot vienu komandu.
|
Komunikāciju, kuru mēs domājām izveidot, veic ar BAUD ātrumu 9600 biti sekundē. Tāpēc, lai UNO izveidotu šādu datu pārraides ātrumu un sāktu sērijveida sakarus, mēs izmantojam komandu “Serial.begin (9600);”. Šeit 9600 ir pārraides ātrums un ir maināms.
Tagad visi palikuši, ja, lai saņemtu datus, vienu datu saņem UNO, tos varēs ņemt. Šie dati tiek iegūti ar komandu “receivesdata = Serial.read ();”. Ar šo komandu sērijveida dati tiek aizvesti uz “receivesdata” ar nosaukumu vesels skaitlis.
Kā parādīts ķēdē, poga, kas pievienota raidītāja pusē, kad šī poga nospiež astoņus bitus, datus sūta raidītājs (ATMEGA8) un šos datus saņem uztvērējs (ARDUINO UNO). Veiksmīgi saņemot šos datus, tas ieslēdz un izslēdz tam pievienoto gaismas diode, lai parādītu veiksmīgu datu pārsūtīšanu starp diviem kontrolieriem.
Ar šo UART ir veiksmīgi izveidota komunikācija starp ATMEGA8 kontrolieri un ARDUINO UNO.