Мазмұны:

AVR Assembler оқулығы 6: 3 қадам
AVR Assembler оқулығы 6: 3 қадам

Бейне: AVR Assembler оқулығы 6: 3 қадам

Бейне: AVR Assembler оқулығы 6: 3 қадам
Бейне: Лекция 4. Архитектура AVR. Ассемблер 2024, Қараша
Anonim
AVR Assembler оқулығы 6
AVR Assembler оқулығы 6

6 -оқулыққа қош келдіңіз!

Бүгінгі оқу құралы қысқа болады, онда біз бір атмега328п пен екіншісі арасында деректерді байланыстыратын екі портты қолдана отырып, ақпарат алмасудың қарапайым әдісін әзірлейміз. Содан кейін біз 4 -ші оқулықтағы сүйек ролигін және 5 -ші оқулықтағы Тіркеу анализаторын аламыз, оларды бір -бірімен байланыстырамыз және өз әдісімізбен роликтен анализаторға сүйектердің орамасының нәтижесін жеткіземіз. Содан кейін біз 5 -оқулықтағы анализаторға арналған светодиоды пайдаланып, орамды екілік түрде басып шығарамыз. Бұл жұмыс аяқталғаннан кейін біз келесі оқулықта жалпы жобаның келесі бөлігін құрастыра аламыз.

Бұл оқулықта сізге қажет:

  1. Сіздің прототиптер тақтасы
  2. 4 -оқулықтағы сіздің сүйек ролигіңіз
  3. 5 -оқулықтан сіздің тіркеу анализаторы
  4. Қосылатын екі сым
  5. Толық мәліметтер парағының көшірмесі (2014 жылғы редакция):

    www.atmel.com/images/Atmel-8271-8-bit-AVR-M…

  6. Нұсқаулықтар нұсқаулығының көшірмесі (2014 жылғы редакция):

    www.atmel.com/images/atmel-0856-avr-instruc…

Міне менің AVR құрастырушы оқулықтарының толық жинағына сілтеме:

1 -қадам: Екі микроконтроллерді бір -бірімен қалай сөйлесуге болады?

Екі микроконтроллерді бір -бірімен сөйлесуге қалай алуға болады?
Екі микроконтроллерді бір -бірімен сөйлесуге қалай алуға болады?

Біз өзіміздің соңғы өніміміз бөлшектердің жиынтығынан тұратын етіп жобамызды кеңейте бастағандықтан, бізге бір ғана Atmega328P қамтамасыз ете алатын түйреуіштер қажет болады. Сондықтан біз жалпы жобаның әрбір бөлігін бөлек микроконтроллерде жасаймыз, содан кейін олардың арасындағы деректерді бөлісуді ұсынамыз. Мәселен, біз шешуге тиіс мәселе - контроллерлердің бір -бірімен сөйлесіп, олардың арасында деректерді тасымалдаудың қарапайым әдісін қалай ойлап табуға болады? Бұл контроллерлердің бір ерекшелігі - олардың әрқайсысы секундына 16 миллион нұсқауларды орындайды. Бұл уақыт өте дәл, сондықтан біз деректерді беру үшін осы уақытты пайдалана аламыз. Егер біз деректерді құру үшін миллисекундтық кідірістерді қолданатын болсақ, онда біз дәл болуымыз қажет емес, өйткені процессор бір миллисекундта 16 000 нұсқауларды орындайды. Басқаша айтқанда, миллисекунд - процессор үшін мәңгілік. Ендеше, оны текшелермен сынап көрейік. Мен сүйек ролигінің нәтижесін сүйек ролигінің чипінен анализатор чипіне жібергім келеді. Сіз көше бойында тұрдыңыз делік, мен сізге жұп сүйектерді айналдыруымның нәтижесін көрсеткім келді. Мен жасай алатын бір нәрсе, егер екеумізде сағат болса, мен фонарьды қоса аламын, содан кейін сіз менің деректерімді қабылдауға дайын болсаңыз, сіз фонарьды қосасыз, екеуіміз де сағатты қосамыз. Содан кейін мен фонарьды миллисекундтардың нақты саны үшін қосылып тұрамын, содан кейін оны өшіремін. Егер мен 12 -ді айналдырсам, мен шамымды 12 миллисекундқа қосар едім, енді жоғарыда айтылған мәселе, сіз бен біз үшін 5 миллисекунд пен 12 -ні ажыратуға жеткілікті уақытты дәл бөлуге мүмкіндігіміз жоқ. миллисекундтар. Бірақ бұл туралы не деуге болады: біз сүйектердегі әр сан үшін бір жыл бойы өз шамымды қосамын деп шештік делік? Егер мен 12 -ді айналдырсам, мен сізге 12 жыл бойы нұр шашар едім және менің ойымша, сіз санды дұрыс анықтауда қателесу мүмкін емес екеніне келісесіз бе? Сіз үзіліс жасап, бейсбол ойнауға болады, тіпті сіз Вегасқа 6 ай бойы ойнауға баруға болады, егер жыл мезгілінде көше бойымен жалт қарасаңыз, сіз санауды жіберіп алмайсыз. Микроконтроллерлер үшін дәл осылай жасаймыз! CPU үшін бір миллисекунд бір жылға тең. Егер мен сигналды 12 миллисекундқа қоссам, басқа микроконтроллер не үзілсе де, не болмасын, оны 10 немесе 11 -ге шатастыратын мүмкін емес. Микроконтроллерлер үшін миллисекунд - мәңгілік, сондықтан біз осылай істейміз. Алдымен біз байланыс порты болу үшін контроллердегі екі портты таңдаймыз. Мен PD6 -ды деректерді алу үшін қолданамын (егер біз оны Rx деп атай аламыз) және мен деректерді беру үшін PD7 -ді таңдаймын (егер біз оны қаласақ Tx деп атай аламыз). Анализатордың чипі оның Rx түйреуішін мезгіл -мезгіл тексеріп отырады, егер ол сигналды көрсе, ол «байланыс қосалқы бағдарламасына» түседі, содан кейін оны қабылдауға дайын деп сүйек ролигіне қайтару сигналын жібереді. Олар екеуі де уақытты бастайды, ал сүйек ролигі сүйектің әр санына миллисекундқа сигнал береді (яғни 5В). Егер орама қос алты немесе 12 болса, онда сүйек ролигі PD7 -ді 5 миллисекундқа 5 В -ге орнатады, содан кейін оны 0 В -қа орнатады. Анализатор әр уақытты есептей отырып, әр миллисекундта PD6 түйреуішін тексереді, және ол 0В -ге қайта оралғанда, алынған санды анализатор дисплейіне шығарады, светодиоды бар ондық екілік көрсетеді. Демек, бұл жоспар. Оны іске асыра алатынымызды көрейік.

2 -қадам: Байланыс қосалқы бағдарламалары

Ең алдымен, екі контроллерді қосу керек. Сондықтан бір жағынан PD6 сымын алыңыз, екінші жағынан оны PD7-ге қосыңыз және керісінше. Содан кейін оларды PD7 -ді екеуінде де OUTPUT -қа, екеуінде де PD6 -ны INPUT -ке орнату арқылы инициализациялаңыз. Соңында олардың барлығын 0 В -қа орнатыңыз. Атап айтқанда, әрбір микроконтроллердегі кодтың Init немесе Reset бөліміне келесіні қосыңыз:

sbi DDRD, 7; PD7 шығуға орнатылды

cbi PortD, 7; PD7 бастапқыда 0V cbi DDRD, 6; PD6 cD PortD, 6 кірісіне орнатылды; PD6 бастапқыда 0V clr жалпы; сүйектердің жалпы саны бастапқыда 0

Енді сүйек ролигінің чипіне коммуникацияның кіші бағдарламасын орнатайық. Алдымен жоғарыда «жалпы» деп аталатын жаңа айнымалы мәнді анықтаңыз, ол жұп жұпқа оралған жалпы санды сақтайды және оны нөлге теңестіреді.

Содан кейін анализатормен байланысу үшін кіші бағдарламаны жазыңыз:

хабарлау:

cbi PortD, 7 sbi PortD, 7; Дайын сигналды күтуді жіберу: sbic PinD, 6; PinD оқыңыз және 0V rjmp күту кідірісі 8 болса өткізіп жіберіңіз; синхрондау үшін кешігу (бұл эксперименталды түрде табылған) жіберу: dec total delay 2; әрбір кідіріс санының кешігуі cpi жалпы, 0; 0 бұл жерде «жалпы» санның кешігуі жіберілгенін білдіреді PC+2 rjmp send cbi PortD, 7; PD7 - 0V clr жалпы; сүйектерді 0 ретке қайтарыңыз

Анализаторда байланыс бағдарламасына негізгі тәртіптен қоңырау қосамыз:

clr анализаторы; жаңа нөмірге дайындалу

sbic PinD, 6; байланыстың 5В сигналын PD6 тексеріңіз; егер 5V mov анализаторымен байланысқа шықса, барлығы; анализатор дисплейіне rcall анализаторына шығару

содан кейін байланыс бағдарламасын келесідей жазыңыз:

хабарлау:

clr total; жалпы қалпына келтіру 0 кідіріс 10; sbi PortD, 7 серпілісінен құтылуды кешіктіру; дайын қабылдау сигналын беру үшін PB7 -ді 5В -ке орнатыңыз: 2 -кідіріс; келесі нөмірді күтіңіз; жалпы sbic PinD, 6 өсуі; егер PD6 0V -ге оралса, біз rjmp қабылдауды аяқтадық; әйтпесе қосымша деректер үшін резервтік көшіруді cbi PortD, 7; ret7 аяқталғанда PD7 қалпына келтіріңіз

Міне! Енді әрбір микроконтроллер текшенің нәтижесін хабарлап, содан кейін оны анализаторда көрсетуге арналған.

Кейінірек регистрдің мазмұнын тек қана текшенің орнына контроллерлер арасында ауыстыру қажет болғанда, біз қарым -қатынастың әлдеқайда тиімді әдісін қолданатын боламыз. Бұл жағдайда біз оларды қосатын тек екі сымды қолданамыз, бірақ біз 1, 1 -ді «жіберуді бастау» дегенді қолданамыз; 0, 1 «1» дегенді білдіреді; 1, 0 «0» дегенді білдіреді; және ақырында 0, 0 «соңғы жіберуді» білдіреді.

1-жаттығу: Сіз неғұрлым жақсы әдісті қолдана алатындығыңызды біліңіз және оны сүйек орамын 8-биттік екілік сан ретінде беру үшін қолдана аласыз ба?

Мен өз жұмысымды көрсететін бейнені қосамын.

3 -қадам: Қорытынды

Қорытынды
Қорытынды

Мен сілтеме үшін толық кодты тіркедім. Бұл мен қалағандай таза және ұқыпты емес, бірақ мен оны болашақ оқулықтарда кеңейткен сайын тазалаймын.

Енді мен мұнда кодты енгізгеннен гөрі файлдарды тіркеймін. Біз тек талқылауға мүдделі бөлімдерді тереміз.

Бұл қысқа нұсқаулық, біз анализатордың микроконтроллеріне тек екі портты қолдана отырып, сүйек ролигінің микроконтроллерінен сүйектердің шығуы туралы айтудың қарапайым әдісін ойлап таптық.

2 -жаттығу: Сүйек ролигінің жіберуге дайын екендігін көрсету үшін дайын сигналды пайдаланудың орнына, ал анализатор қабылдауға дайын болғанда екіншісін көрсетудің орнына, «түйісті өзгерту үзілуі» деп аталатын «сыртқы үзілісті» қолданыңыз. Atmega328p түйреуіштерін осылайша пайдалануға болады, сондықтан олардың жанында диаграммада PCINT0 бар PCINT23 бар. Сіз мұны таймердің толып кетуі сияқты бізде де үзіліс ретінде жүзеге асыра аласыз. Бұл жағдайда үзгіш «өңдеуші» сүйек ролигімен байланысатын қосалқы бағдарлама болады. Осылайша, байланыс бағдарламасын негізгіден шақырудың қажеті жоқ: ол түйреуіштің күйінің өзгеруіне байланысты үзіліс болған кезде сол жерге барады.

3-жаттығу: Бір микроконтроллер арасындағы мәліметтерді басқа микрофондар жиынтығына беру мен берудің әлдеқайда жақсы әдісі-микроконтроллердің өзінде орнатылған 2 сымды сериялық интерфейсті пайдалану. Деректер парағының 22 бөлімін оқып көріңіз және оны қалай енгізу керектігін біле аласыз ба?

Болашақта біз қосымша контроллерлерді қосқанда, осы күрделі техниканы қолданамыз.

Біздің анализатормен тек қана текшелердің жалпы санын алып, светодиодты пайдаланып оны екілік түрде басып шығару маңызды болды. Шындығында, қазір біздің анализатор сүйек орамының не екенін «біледі» және оны сәйкес қолдана алады.

Келесі оқулықта біз «анализатордың» мақсатын өзгертеміз, тағы бірнеше схемалық элементтерді енгіземіз және сүйектер орамын неғұрлым қызықты түрде қолданамыз.

Келесіге дейін…

Ұсынылған: