Mundarija:

3-qism: GPIO: ARM yig'ilishi: chiziq izdoshi: TI-RSLK: 6 qadam
3-qism: GPIO: ARM yig'ilishi: chiziq izdoshi: TI-RSLK: 6 qadam

Video: 3-qism: GPIO: ARM yig'ilishi: chiziq izdoshi: TI-RSLK: 6 qadam

Video: 3-qism: GPIO: ARM yig'ilishi: chiziq izdoshi: TI-RSLK: 6 qadam
Video: Raspberry Pi 3: обзор, первое включение, настройка – Часть 1 2024, Dekabr
Anonim
Image
Image
Uskuna
Uskuna

Salom. Bu keyingi qism, biz ARM montajini ishlatishni davom ettiramiz (yuqori darajali til o'rniga). Bu ko'rsatma uchun ilhom Texas Instruments Robotics System Learning Kit 6-laboratoriyasi yoki TI-RSLK.

Biz mikrokontrollerni MSP432 LaunchPad ishlab chiqish platasidan olamiz, lekin, ehtimol siz LaunchPad -dan foydalanmasangiz ham yoki TI -ga amal qilmasangiz ham, ushbu ko'rsatmalarni olish uchun foydali narsalarni topasiz. o'quv dasturi.

Biz ARM Assambleyasini, ishlab chiqish muhitini va loyihani qanday tuzishni ko'rsatma berishdan boshladik.

Keyingi ARM Assambleyasida yo'riqnoma kirish/chiqish (GPIO) bilan qanday ishlashni tanishtirdi.

Keyin biz o'z bilimimizni kengaytirdik va LEDlar va kalitlarni boshqaruvchi funktsiyalarni joriy qildik.

Endi bu ko'rsatma yordamida biz o'rganganlarimizni yanada qiziqarli va foydaliroq qilishimiz mumkin: chiziqni aniqlash.

Bu bizga keyinchalik robotni qurishda yordam berishi mumkin.

O'quv dasturida dasturlashning ko'p qismi C yoki C ++ da amalga oshiriladi, lekin biz yuqori darajadagi tillar va kutubxonalarga bog'liq holda ishni boshlashdan oldin montaj bilan tanishib chiqish foydali bo'ladi.

1 -qadam: Uskuna

Uskuna
Uskuna
Uskuna
Uskuna
Uskuna
Uskuna

Men uskunani batafsil qayta tiklashni xohlamayman, chunki manbalar allaqachon mavjud, lekin biz kerak bo'lganda tushuntirishlarni qo'shamiz.

Bu ko'rsatma uchun biz Pololu'dan aks ettirish sensori massividan foydalanamiz, chunki u TI-RSLK (robot to'plami) tarkibiga kiradi. Bu darsda va o'quv dasturining 6 -laboratoriyasida qo'llaniladi.

Agar sizda bunday bo'lmasa, siz mavjud yoki yo'qligi uchun yuqori yoki past raqamli signal chiqaradigan IQ detektoridan (yoki ularning seriyasidan) foydalanishingiz mumkin.

Qator sensori eng yaxshisidir, chunki u bizni chiziqning markazida yoki bir chetda ekanligimizni aniqlashga yordam beradi. Bundan tashqari, keyinroq ko'rib turganimizdek, bu robotning chiziqqa nisbatan burchagini aniqlashga yordam beradi.

Reflektor massivida detektorlar bir -biriga juda yaqin joylashgan. Bu shuni anglatadiki, biz chiziqning qalinligiga qarab, bir nechta aniqlash signallarini olishimiz kerak.

Agar shunday bo'lsa, demak, agar robot to'g'ridan -to'g'ri chiziqqa to'g'ri kelmagan bo'lsa, u chiziqdan ko'ra kengroq bo'lgan chiqishni qaytarishi kerak (chunki biz burchak ostida turibmiz).

Yuqoridagilarni yaxshiroq tushuntirish uchun Lab 6 hujjatini ko'rib chiqing.

Sensorni MSP432 LaunchPad ishlab chiqish kartasiga ulash / ulashda yordamchi ko'rsatmalar mavjud.

Men ham ushbu qadamga bir xil (o'xshashmi?) Pdf ko'rsatmalarni qo'shdim.

Agar siz Pololu hujjatlarini diqqat bilan o'qib chiqsangiz, ular "3.3V bypass" sababini tushuntirib berishadi, agar siz 5V o'rniga 3.3V ishlatsangiz, siz sakrashni xohlaysiz.

Biz robotni hali yaratmaganimiz uchun, biz uning o'rniga ARMni yig'ish, shuningdek, uning qismlari (quyi tizimlari) bilan qanday ishlashni o'rganyapmiz.

Hozircha, chiziq sensori majmuasini ulash quyidagicha qaynaydi/kamayadi:

  • 3.3V va GND ni MSP432 platasidan sensorlar qatoriga ulang.
  • port pinini (men P5.3 ni taklif qilaman) MSP432 dan chiziq sensori qatoridagi LEDni yoqish piniga ulang. Sensordagi pin 3.3V va GND orasida.
  • bitta portning sakkizta pimi/bitini (men P7.0 dan P7.7 gacha taklif qilaman) sensorlar qatorining "1" dan "8" gacha sakkizta piniga ulang. Bu chiziqlar, ular nimani his qilishlariga qarab, yuqori yoki past bo'ladi.

Bu qadam va videodagi rasmlarda ko'rib turganingizdek, men sensorni robot shassisiga biriktirmaganman, chunki men dasturlash, disk raskadrovka, test, o'rganish qulayligini xohlardim.

Shunday qilib, hamma narsa ulangan bo'lsa, biz dasturiy ta'minotga kirishga tayyormiz.

2 -qadam: Keyingi qator

Chiziq kuzatilmoqda
Chiziq kuzatilmoqda
Chiziq kuzatilmoqda
Chiziq kuzatilmoqda

Ko'zgu nurlari sensori juda zo'r, chunki u kamida ikkita usulda yordam berishi mumkin.

  • Robot markazda yoki bir tomonga burilib ketishini aniqlang.
  • Robot chiziq yo'nalishi bo'yicha tekislanganmi yoki u burchak ostida.

Massiv detektorlarining har biri, asosan, YO'Q yoki LOW ma'lumotlarning bir qismini beradi.

G'oya shundaki, bu bitlarni bitta raqamga yoki bitta bitli naqshga birlashtirish va qaror qabul qilish uchun (to'g'ri harakat qilish uchun) bu naqshdan foydalanish.

3 -qadam: Ishni boshlashdan oldin …

.. biz ARMni yig'ish dasturlash haqida yangi narsalarni o'rganishimiz kerak. Va men faqat boshqa ko'rsatma demoqchi emasman. Bular mayda bo'lishga moyil.

Hozirgacha biz dasturlarimizda "stack" dan foydalanmaganmiz.

Biz har xil subroutinesda butun dunyoda asosiy protsessor registrlaridan foydalanishga tayanardik.

Biz qilgan yagona narsa LR (havola registri) manzilini bitta funktsiyaga saqlash va qayta tiklash edi - bu boshqa bir nechta funktsiyalarni chaqirdi. (Men bu erda "funktsiya" va "subroutine" ni bir -birining o'rnida ishlataman).

Biz qilayotgan ishlar yaxshi emas. Agar biz boshqa funktsiyalarni joylashtirmoqchi bo'lsak nima bo'ladi? Agar bizda bir nechta uyalash darajasi bo'lsa -chi?

Oldingi misollarda, biz LR yoki qaytish manzili uchun R6 registrini ishlatishni tanladik. Ammo, agar biz chuqurroq/chuqurroq joylashtirishni xohlasak, R6 qiymatini o'zgartirishni davom ettira olmaymiz. Biz boshqa ro'yxatga olish kitobini tanlashimiz kerak edi. Va boshqasi. Va keyin qaysi yadroli protsessor registrining qaysi LRni qaysi funktsiyaga tiklashini kuzatib borish og'ir bo'ladi.

Shunday qilib, endi biz "to'plam" ni ko'rib chiqamiz.

4 -qadam: Stack

Bu erda to'plamni tushuntiradigan ba'zi o'qish materiallari.

Men bir nechta fikrlarning katta tarafdoriman:

  • qancha nazariya kerak bo'lsa, tezda amaliyotga o'ting
  • kerak bo'lganda o'rganing, faqat maqsadsiz mashqlar va misollarga emas, balki biror narsaga e'tibor qarating.

Internetda ko'p sonli ARM va MSP432 hujjatlari bor, shuning uchun bularning barchasini qayta ko'rib chiqmoqchi emasmiz. Bundan tashqari, men bu erda to'plamdan foydalanishni minimal darajada ushlab turaman - qaytish manzilini (Link Ro'yxatdan o'tish) saqlash.

Umuman olganda, biz faqat ko'rsatmalarga muhtojmiz:

PUSH {ro'yxatga olish ro'yxati}

POP {ro'yxatga olish ro'yxati}

Yoki bizning holatlarimizda, xususan:

{LR} SURISH

POP {LR}

Shunday qilib, yig'ish funktsiyasi/subroutine quyidagicha bo'ladi:

funcLabel:.asmfunc

PUSH {LR}; bu, ehtimol, kirish bo'yicha birinchi ko'rsatmalardan biri bo'lishi kerak.; bu erda ko'proq kod yozing..; bla … bla … bla …; OK, biz POP {LR} chaqiruv funktsiyasiga qaytishga tayyor bo'lgan funktsiyani tugatdik, bu to'g'ri qaytish manzilini qo'ng'iroqqa qaytaradi; funktsiya. BX LR; qaytish.endasmfunc

Video bir nechta ichki funktsiyalarning jonli misolidan o'tadi.

5 -qadam: Dasturiy ta'minot

"MSP432_Chapter …" deb nomlangan biriktirilgan faylda MSP432 portlari haqida juda ko'p yaxshi ma'lumotlar bor va bu hujjatdan biz quyidagi portlar, registrlar, manzillar va boshqalarni olamiz. Biroq, men Port 5 va undan yuqori versiyalarida ko'rsatilgan batafsil manzillarni ko'rmadim. (faqat "muqobil funktsiyalar"). Lekin bu hali ham foydalidir.

Biz ikkita portdan foydalanamiz. P5, P7, P1 va P2.

P5.3 (bitta bitli) chiqish sensordagi IQ LED-ni yoqish uchun mo'ljallangan bo'ladi. Biz P5.3 -dan foydalanmoqdamiz, chunki bu sensorli qatorga o'tadigan boshqa MSP432 ulanishlari bilan bir xil sarlavhadagi pin.

P7.0 dan P7.7 gacha sensordan ma'lumotlarni yig'adigan sakkizta kirish bo'ladi; nimani "ko'radi".

P1.0 - bu bitta qizil LED va biz ma'lumotlarning ba'zi ko'rsatkichlarini berish uchun undan foydalanishimiz mumkin.

P2.0, P2.1, P2.2 - bu RGB svetodiod va biz uni turli xil rang imkoniyatlari yordamida sensor ma'lumotlarini ko'rsatish uchun ishlatishimiz mumkin.

Agar siz bularning barchasi bilan bog'liq oldingi ko'rsatmalarni o'rgangan bo'lsangiz, unda siz dasturni qanday sozlashni bilasiz.

Faqat portlar va bitlar uchun deklaratsiya bo'limi mavjud.

Sizda "asosiy" bo'lim bo'ladi.

Biz P7 ma'lumotlarini uzluksiz o'qib chiqadigan, qaror qabul qiladigan va shunga mos ravishda ikkita LEDni yoqadigan pastadir bo'lishi kerak.

Bu erda yana Port Ro'yxatdan o'tish manzillari:

  • GPIO P1: 0x4000 4C00 + 0 (hatto manzillar)
  • GPIO P2: 0x4000 4C00 + 1 (toq manzillar)
  • GPIO P3: 0x4000 4C00 + 20 (hatto manzillar)
  • GPIO P4: 0x4000 4C00 + 21 (toq manzillar)
  • GPIO P5: 0x4000 4C00 + 40 (hatto manzillar)
  • GPIO P6: 0x4000 4C00 + 41 (toq manzillar)
  • GPIO P7: 0x4000 4C00 + 60 (hatto manzillar)
  • GPIO P8: 0x4000 4C00 + 61 (toq manzillar)
  • GPIO P9: 0x4000 4C00 + 80 (hatto manzillar)
  • GPIO P10: 0x4000 4C00 + 81 (toq manzillar)

Qalin harflar - bu ko'rsatma uchun biz nimani ishlatamiz.

IR detektorlarini o'qish uchun dastur bosqichlari

Quyida dasturni C tilida yozish uchun psuedo-kod berilgan, lekin u hali ham foydalidir va biz uni dasturning montaj versiyasida juda yaqindan kuzatib boramiz.

0) // portlarni ishga tushiring (1) {1) P5.3 balandligini o'rnating (IQ LEDni yoqing) 2) P7.0 ni chiqaring va uni baland qilib qo'ying (kondansatkichni zaryadlang) 3) 10 bizni kuting, Clock_Delay1us (10); 4) P7.0 -ni kirishga aylantiring 5) Bu tsiklni 10 000 marta ishlating a) P7.0 -ni o'qing (P7.0 -dagi kuchlanishni ikkilikka aylantiradi) b) Ikkilikni P1.0 -ga chiqarish (ikkilikni real vaqtda ko'rish imkonini beradi)) 6) P5.3 ni past darajaga qo'ying (IQ LEDni o'chiring, quvvatni tejang) 7) 10 ms kuting, Clock_Delay1ms (10); } // takrorlash (while () ga qaytish)

6 -qadam: Keling, kodni yaxshilaylik

Pololu IR LED massivining maqsadi yoki ishlatilishi - chiziqni aniqlash va robot (kelajak) to'g'ridan -to'g'ri chiziq ustida joylashganmi yoki bir tomonda ekanligini bilish. Bundan tashqari, chiziq ma'lum bir qalinlikka ega bo'lgani uchun, agar sensorlar qatori chiziqqa to'g'ridan -to'g'ri perpendikulyar bo'lsa, N sonli sensorlar boshqalarga qaraganda boshqacha o'qishga ega bo'ladi, agar IQ LED qatori bir burchak ostida bo'lsa (perpendikulyar emas), N+1 yoki N+2 IQ LED/detektor juftlari endi boshqacha o'qishi kerak.

Shunday qilib, qancha datchiklar chiziq mavjudligini ko'rsatishiga qarab, biz markazda ekanligimizni va burchakli yoki yo'qligini bilishimiz kerak.

Bu yakuniy tajriba uchun, biz sensorlar qatori bizga aytayotganlari haqida ko'proq ma'lumot berish uchun qizil LED va RGB LEDni olishimiz mumkinligini ko'rib chiqaylik.

Video barcha tafsilotlarni o'z ichiga oladi. Yakuniy kod ham ilova qilinadi.

Bu GPIO bilan bog'liq ARM Assambleyasi seriyasini yakunlaydi. Umid qilamizki, keyinroq yana ARM Assambleyasi bilan qaytamiz.

Rahmat.

Tavsiya: