Овде ћемо успоставити комуникацију између АТмега8 микроконтролера и Ардуино Уно-а. Овде успостављена комуникација је типа УАРТ (Универсал Асинцхроноус Рецеивер Трансмиттер). То је серијска комуникација. Овом серијском комуникацијом подаци се могу делити између два контролера, што је потребно у разним уграђеним системским апликацијама.
У уграђеним системима морамо имати основно знање о системским комуникацијама, па зато радимо овај пројекат. У овом пројекту разговараћемо о основном комуникационом систему и серијски ћемо послати неке податке са предајника на пријемник.
У овом пројекту АТМЕГА8 делује као ПРЕДАЈАЧ, а АРДУИНО УНО као ПРИМАЧ. У серијској комуникацији податке ћемо слати БИТ ПО БИТ док се бајт података не пренесе у потпуности. Подаци могу бити величине 10 бита, али за сада ћемо се држати 8 БИТА.
Компоненте потребне
Хардвер: АТМЕГА8, АРДУИНО УНО, напајање (5в), АВР-ИСП ПРОГРАМЕР, кондензатор 100уФ (повезан преко напајања), отпорник 1КΩ (два комада), ЛЕД, дугме.
Софтвер: Атмел студио 6.1, прогисп или фласх магиц, АРДУИНО НОЋУ.
Шема и објашњење
Пре него што разговарамо о дијаграму кола и програмирању за предајник и пријемник, морамо да разумемо серијску комуникацију. АТМЕГА овде шаље податке УНО-у серијски, као што је претходно речено.
Има и друге начине комуникације попут МАСТЕР СЛАВЕ комуникације, ЈТАГ комуникације, али за једноставну комуникацију бирамо РС232. Овде ћемо повезати ТКСД (предајник) ПИН АТМЕГА8 са РКСД (пријемником) ПИН АРДУИНО УНО
Успостављена комуникација података програмирана је да има:
- Осам битова података
- Два зауставна бита
- Нема бита за проверу паритета
- Брзина преноса од 9600 БПС (бита у секунди)
- Асинхрона комуникација (Нема дељења сата између АТМЕГА8 и УНО (обе имају различите сатне јединице))
Да бисмо успоставили УАРТ између Ардуино Уно и АТМЕГА8, морамо тачно да програмирамо подешавање. Да бисмо то урадили, горе наведени параметри морају бити исти на оба краја. У овом се понаша као ПРИЈЕМНИК, а други као ПРИЈЕМНИК. У наставку ћемо размотрити подешавања сваке стране.
Сада за РС232 интерфејс, за ТРАНСМИТТЕР страну (АТМЕГА8) морају бити задовољене следеће карактеристике:
1. ТКСД пин (функција пријема података) првог контролера мора бити омогућен за ТРАНСМИТТЕР.
2. Будући да је комуникација серијска, морамо знати сваки пут када се прими дата бие, како бисмо могли зауставити програм док се не прими комплетан бајт. То се постиже омогућавањем да подаци примају потпуни прекид.
3. ПОДАЦИ се преносе и примају у контролер у 8-битном режиму. Дакле, два знака ће се истовремено слати контролору.
4. Нема битова паритета, један зауставни бит у подацима које шаље модул.
Горе наведене карактеристике постављене су у регистре контролера; разговараћемо о њима укратко:
ТАМНО СИВО (УДРЕ): Овај бит није подешен током покретања, али се користи током рада за проверу да ли је предајник спреман за пренос или не. За више детаља погледајте програм на ТРАСМИТТЕР СИДЕ.
ВОИЛЕТ (ТКСЕН): Овај бит је подешен за омогућавање пина предајника на ТРАСМИТТЕР СИДЕ.
ЖУТА (УЦСЗ0, УЦСЗ1 и УЦСЗ2): Ова три бита се користе за одабир броја битова података које примамо или шаљемо у једном потезу.
Комуникација између две СТРАНЕ успоставља се као осмобитна комуникација. Повезивањем комуникације са табелом коју имамо, УЦСЗ0, УЦСЗ1 на један и УЦСЗ2 на нулу.
НАРАНЧАСТА (УМСЕЛ): Овај бит се поставља на основу тога да ли систем комуницира асинхроно (оба користе другачији сат) или синхроно (оба користе исти сат).
Оба СИСТЕМА немају заједнички сат. Пошто се обојица користе сопственим унутрашњим сатом. Дакле, морамо поставити УМСЕЛ на 0 у оба контролера.
ЗЕЛЕНО (УПМ1, УПМ0): Ова два бита су прилагођена на основу паритета битова који користимо у комуникацији.
Подаци АТМЕГА овде су програмирани за слање података без паритета, јер је дужина преноса података мала, можемо очигледно очекивати губитак података или грешку. Дакле, ми овде не постављамо никакав паритет. Дакле, постављамо и УПМ1, УПМ0 на нулу или су они остављени, јер су сви битови подразумевано 0.
ПЛАВО (УСБС): Овај бит се користи за одабир броја зауставних битова које користимо током комуникације.
Утврђено је да је комуникација асинхроног типа, тако да за прецизнији пренос и пријем података морамо да користимо два зауставна бита, па смо зато поставили УСБС на '1' на страни ПРЕНОСНИКА.
Брзина преноса података подешава се у контролеру избором одговарајућег УБРРХ:
Вредност УБРРХ се бира на основу брзине преноса референци и фреквенције кристала ЦПУ:
Дакле, унакрсном референцом вредност УБРР се види као '6', и тако је постављена брзина преноса.
Овим смо успоставили поставке на СТРАНИ ПРЕНОСНИКА; сада ћемо разговарати о ПРИМАЊУ СТРАНЕ.
Омогућавање серијске комуникације у УНО-у може се извршити помоћу једне команде.
|
Комуникација за коју смо претпостављали да је успостављена врши се брзином БАУД-а од 9600 бита у секунди. Дакле, да би УНО успоставио такву брзину преноса и започео серијску комуникацију, користимо наредбу „Сериал.бегин (9600);“. Овде је 9600 брзина преноса података и променљива.
Сада је преостало ако УНО прими податке, један од њих ће бити доступан за узимање. Ови подаци се прикупљају наредбом „полученни подаци = Сериал.реад ();“. Овом наредбом серијски подаци се преносе у 'рецеиведдата' под називом интегер.
Као што је приказано у колу дугме повезано на страни предајника, када ово дугме притиснуто осмобитни податак шаље ПРЕНОСНИК (АТМЕГА8), а ове податке прима ПРИЈЕМНИК (АРДУИНО УНО). Након успешног пријема ових података, укључује и искључује ЛЕД повезану на њега да би се показао успешан пренос података између два контролера.
Овим УАРТ-ом успешно се успоставља комуникација између контролера АТМЕГА8 и АРДУИНО УНО.