AVR Assembler qo'llanmasi 6: 3 qadam
AVR Assembler qo'llanmasi 6: 3 qadam

Video: AVR Assembler qo'llanmasi 6: 3 qadam

Video: AVR Assembler qo'llanmasi 6: 3 qadam
Video: AVR Ассемблер. Урок 1. Вводный. AVR Assembler. Lesson 1. Promo. 2025, Yanvar
Anonim
AVR Assembler qo'llanmasi 6
AVR Assembler qo'llanmasi 6

6 -darsga xush kelibsiz!

Bugungi o'quv qo'llanma qisqa bo'ladi, unda biz bitta atmega328p va boshqasi o'rtasida ma'lumotlarni ulash uchun ikkita usul yordamida oddiy usulni ishlab chiqamiz. Keyin biz 4 -darslikdan zarlar rolikini va 5 -o'rgatuvchidan Ro'yxatdan o'tish analizatorini olamiz, ularni bir -biriga bog'lab qo'yamiz va rulondan olingan zar natijalarini analizatorga etkazish uchun o'z usuldan foydalanamiz. Biz 5 -darsda analizator uchun ishlab chiqarilgan LEDlar yordamida rulonni ikkilik qilib chop etamiz. Bu ish tugagandan so'ng, biz keyingi darsimizda umumiy loyihamizning keyingi qismini qura olamiz.

Ushbu qo'llanmada sizga kerak bo'ladi:

  1. Sizning prototip taxtangiz
  2. Tutorial 4 -dan zar zarralaringiz
  3. 5 -darslikdan sizning ro'yxatga olish tahlilchingiz
  4. Ikkita ulash simlari
  5. To'liq ma'lumotlar varag'ining nusxasi (2014 yilgi versiya):

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

  6. Ko'rsatmalar to'plamining nusxasi (2014 yilgi tahrir):

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

Bu erda AVR assambleyasi bo'yicha darsliklarimning to'liq to'plamiga havola:

1 -qadam: Qanday qilib ikkita mikrokontrollerni bir -biri bilan gaplashishga unday olamiz?

Qanday qilib ikkita mikrokontroller bir -biri bilan gaplashishi mumkin?
Qanday qilib ikkita mikrokontroller bir -biri bilan gaplashishi mumkin?

Biz loyihamizni kengaytira boshlaganimiz uchun, bizning yagona mahsulotimiz kichik qismlar to'plamidan iborat bo'lishi uchun bizga bitta Atmega328P ta'minlay olgandan ko'ra ko'proq pin kerak bo'ladi. Shunday qilib, biz umumiy loyihaning har bir qismini alohida mikrokontrolderda bajaramiz va keyin ular o'rtasida ma'lumot almashishlarini ta'minlaymiz. Shunday qilib, biz hal qilishimiz kerak bo'lgan muammo shundaki, qanday qilib nazoratchilar bir -biri bilan gaplashishi va ular o'rtasida ma'lumotlarni uzatishning oddiy usulini o'ylab topa olamiz? Xo'sh, bu nazoratchilarning bir jihati shundaki, ularning har biri sekundiga 16 million buyruqni bajaradi. Bu juda aniq belgilangan va shuning uchun biz ushbu vaqtni ma'lumotlarni uzatish uchun ishlatishimiz mumkin. Agar biz ma'lumotlarni yaratish uchun millisekundlik kechikishlardan foydalansak, unda biz aniq bo'lishi shart emas, chunki CPU bir millisekundda 16000 buyruqni bajaradi. Boshqacha qilib aytganda, millisekund CPU uchun abadiydir. Keling, zar zarralari bilan sinab ko'raylik. Men zar zarrasi natijasini zar rolik chipidan analizator chipiga uzatmoqchiman. Aytaylik, siz ko'chaning narigi tomonida turdingiz va men sizga bir juft zar zarbasi natijasi haqida signal bermoqchi edim. Men qila oladigan bitta narsa, agar ikkalamizda soat bo'lsa, men chiroqni yoqishim mumkin edi, keyin siz mening ma'lumotimni olishga tayyor bo'lgach, siz chiroqni yoqasiz va biz ikkalamiz ham soatimizni boshlaymiz. Keyin men chiroqni milisekundlarning aniq sonini zarlar aylanayotganda yoqaman va keyin o'chirib qo'yaman. Agar men 12 -ni aylantirgan bo'lsam, chirog'imni 12 millisekundda ushlab turardim, endi yuqoridagi muammo shundaki, siz va men uchun 5 millisekunddan 12 -gacha bo'lgan vaqtni aniq ajratish uchun hech qanday imkoniyat yo'q. millisekundlar. Ammo bu haqda nima deyish mumkin: biz zarning har bir raqami uchun bir yil davomida chirog'imni yoqaman deb qaror qildikmi? Agar men 12 -ni aylantirsam, men sizga 12 yil davomida nur sochar edim va menimcha, siz raqamni to'g'ri aniqlashda xato qilmasligingiz mumkin degan fikrga qo'shilasizmi? Siz tanaffus qilib, beysbol o'ynashingiz mumkin, hatto 6 oy davomida Vegasda bema'ni o'yinlar o'tkazishingiz mumkin, agar yil davomida bir vaqtlar ko'cha bo'ylab qarasangiz, chiroq yonib turganini ko'rmaysiz. Xo'sh, biz mikrokontrollerlar uchun aynan shunday qilyapmiz! CPU uchun bitta millisekund bir yilga o'xshaydi. Agar men signalni 12 millisekundga yoqsam, boshqa mikrokontroller nima bo'lishidan qat'i nazar, uni 10 yoki 11 chalkashtirib yuborish ehtimoli deyarli yo'q. Millisekund - bu abadiylik, shuning uchun biz nima qilamiz. Birinchidan, biz aloqa portimiz bo'ladigan kontrollerdagi ikkita portni tanlaymiz. Men PD6 -ni ma'lumotlarni qabul qilish uchun ishlataman (agar xohlasak, uni Rx deb atashimiz mumkin) va ma'lumotlarni uzatish uchun PD7 ni tanlayman (agar xohlasak, uni Tx deb atashimiz mumkin). Analizator chipi vaqti -vaqti bilan uning Rx pinini tekshiradi va agar u signalni ko'rsa, u "aloqa dasturiga" tushadi va keyin qabul qilish uchun tayyor ekanligini bildiruvchi zar rolikiga qaytish signalini uzatadi. Ular ikkalasi ham vaqtni belgilashni boshlaydilar va zarlar roligi zarning har bir soniga millisekund uchun signal (ya'ni 5V) uzatadi. Shunday qilib, agar rulon er -xotin oltita yoki 12 bo'lsa, zar zarrachasi PD7 ni 5 millisekundga 5 V ga o'rnatadi va keyin uni 0 V ga qaytaradi. Analizator har bir millisekundda PD6 pinini tekshiradi, har safar hisoblab chiqadi va 0V ga qaytganda, natijada raqamni analizator displeyiga chiqaradi, bu esa LEDda ikkilikli o'n ikkita ko'rsatiladi. Keling, buni amalga oshirishimiz mumkinligini ko'rib chiqaylik.

2 -qadam: Aloqa dasturlari

Biz qilishimiz kerak bo'lgan birinchi narsa - ikkita tekshirgichni ulash. Shunday qilib, bir tomondan PD6 dan simni oling, ikkinchisidan PD7 ga ulang va aksincha. Keyin ularni PD7 -ni ikkalasida ham OUTPUT -ga, ikkalasida ham PD6 -ni INPUT -ga o'rnatish orqali ularni ishga tushiring. Nihoyat, ularning barchasini 0V ga o'rnating. Xususan, har bir mikrokontroldagi kodning Init yoki Reset bo'limiga quyidagilarni qo'shing:

sbi DDRD, 7; PD7 chiqishga o'rnatildi

cB PortD, 7; PD7 dastlab 0V cbi DDRD, 6; PD6 PortD, 6 cbi kiritish uchun o'rnatildi; PD6 dastlab 0V clr jami; zarlarning umumiy soni dastlab 0

Keling, zar-rolik chipidagi aloqa dasturini o'rnataylik. Birinchidan, "umumiy" deb nomlangan yangi o'zgaruvchini aniqlang, u zarlarning umumiy sonini saqlaydi va uni nolga o'rnatadi.

Keyin analizator bilan bog'lanish uchun kichik dastur yozing:

muloqot qilish:

cB PortD, 7 sB PortD, 7; Tayyor signalni yuborishni kuting: sbic PinD, 6; PinD ni o'qing va agar 0V rjmp kutish kechikishi 8 bo'lsa, o'tkazib yuboring; sinxronlashtirish uchun kechikish (buni eksperimental ravishda topilgan) yuborish: dec jami kechikish 2; har bir o'lim uchun kechikish soni cpi jami, 0; 0 bu erda "jami" raqam kechikishlar yuborilganligini bildiradi PC+2 rjmp yuborish cbi PortD, 7; Jami PD7 dan 0V gacha; aforizmlar jami 0 ret

Analizatorda biz aloqa dasturiga asosiy dasturdan qo'ng'iroqni qo'shamiz:

clr analizatori; yangi raqamga tayyorlaning

sbic PinD, 6; PD6 -ni 5V signalini tekshiring va qo'ng'iroq qiling; agar 5V mov analizatori bilan bog'lansa, jami; analizatorga chiqish rcall analizatori

va keyin aloqa dasturini quyidagicha yozing:

muloqot qilish:

clr total; jami 0 kechiktirish 10 ga qaytarish; sakrashlardan qutulish uchun kechikish sbi PortD, 7; tayyor qabul qilish signalini berish uchun PB7 ni 5V ga o'rnating: kechikish 2; keyingi raqamni kuting, jami; jami sBic PinD ortishi, 6; agar PD6 0V ga qaytsa, biz rjmp qabul qilishni tugatganmiz; aks holda ko'proq ma'lumot olish uchun zaxira nusxasini ko'chiring cbi PortD, 7; tugagandan so'ng PD7 -ni qayta o'rnating

Mana! Endi har bir mikrokontroller zar zarrasi natijasini xabar qilish va keyin uni analizatorda ko'rsatish uchun o'rnatiladi.

Keyinchalik, biz faqat zar to'plami o'rniga registrlar tarkibini nazoratchilar o'rtasida uzatishimiz kerak bo'lganda, muloqotning ancha samarali usulini qo'llaymiz. Bunday holda, biz hali ham ularni ulash uchun faqat ikkita simni ishlatamiz, lekin "uzatishni boshlash" ma'nosida 1, 1 dan foydalanamiz; 0, 1 "1" degan ma'noni anglatadi; 1, 0 "0" degan ma'noni anglatadi; va nihoyat 0, 0 "uzatishning oxiri" degan ma'noni anglatadi.

1-mashq: Siz yaxshiroq usulni qo'llay olasizmi va undan zar zarrasini 8-bitli ikkilik raqam sifatida o'tkazish uchun ishlatishingiz mumkinmi, ko'ring.

Men o'z ishimni ko'rsatadigan videoni qo'shaman.

3 -qadam: Xulosa

Xulosa
Xulosa

Men sizning ma'lumotingiz uchun to'liq kodni biriktirdim. Bu men xohlagandek toza va tartibli emas, lekin men uni keyingi darslarda kengaytirganimizda tozalayman.

Bundan buyon men bu erda yozishni emas, balki kodli fayllarni biriktiraman. Biz muhokama qilmoqchi bo'lgan bo'limlarni yozamiz.

Bu qisqa o'quv qo'llanma bo'lib, biz analizator mikrokontrollerimizga zarni silindrli mikrokontrolderimiz natijasi faqat ikkita portdan foydalanganda aytib berishning oddiy usulini ishlab chiqdik.

2 -mashq: Zargarlar uzatishga qachon tayyor ekanligini ko'rsatish uchun tayyor signalni ishlatishning o'rniga, analizator qabul qilishga tayyor bo'lganda boshqasini, "Pin uzilishining uzilishi" deb nomlangan "tashqi uzilish" dan foydalaning. Atmega328p -dagi pimlarni shu tarzda ishlatish mumkin, shuning uchun ular pinout diagrammasida PCINT0 yonida PCINT23 bor. Siz buni taymerni to'lg'azish bilan bo'lgani kabi, uzilish sifatida ham amalga oshirishingiz mumkin. Bunday holda, uzilish "ishlovchisi" zar rolik bilan aloqa qiladigan kichik dastur bo'ladi. Shunday qilib, asosiy dasturdan aloqa dasturini chaqirishga hojat yo'q: bu pinning holatini o'zgartirish natijasida uzilishlar sodir bo'lganda, u erga boradi.

3-mashq: Bitta mikrokontroller orasidagi ma'lumotlarni boshqasiga yig'ish va uzatishning eng yaxshi usuli-bu mikrokontrolderning o'zida o'rnatilgan 2 simli ketma-ket interfeys. Ma'lumotlar varag'ining 22 -bo'limini o'qishga harakat qiling va uni qanday amalga oshirishni bilib olasizmi.

Kelgusida biz qo'shimcha nazoratchilarni qo'shganimizda, biz yanada murakkab texnikalardan foydalanamiz.

Analizatorimiz bilan qilgan ishimiz zar zarralarini yig'ib olish va LEDlar yordamida ikkilik qilib chop etish edi. Gap shundaki, endi bizning analizatorimiz zar to'plami nima ekanligini "biladi" va shunga mos ravishda ishlatishi mumkin.

Keyingi darsda biz "analizatorimiz" ning maqsadini o'zgartiramiz, yana bir nechta elektron elementlarni kiritamiz va zar to'plamini yanada qiziqarli usulda ishlatamiz.

Keyingi safargacha…