Talaan ng mga Nilalaman:

Bahagi 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Hakbang
Bahagi 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Hakbang

Video: Bahagi 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Hakbang

Video: Bahagi 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Hakbang
Video: Using buttons with your microcontroller in Assembly - Part 9 Microcontroller Basics (PIC10F200) 2024, Hulyo
Anonim
Image
Image
Ang Hardware
Ang Hardware

Kamusta. Ito ang susunod na installment kung saan patuloy kaming gumagamit ng pagpupulong ng ARM (sa halip na isang mas mataas na antas na wika). Ang inspirasyon para sa Instructable na ito ay Lab 6 ng Texas Instruments Robotics System Learning Kit, o TI-RSLK.

Gagamitin namin ang microcontroller mula sa kit, ang MSP432 LaunchPad development board, ngunit marahil ay makakahanap ka ng isang bagay na kapaki-pakinabang upang makuha mula sa Instructable na ito kahit na hindi mo ginagamit ang LaunchPad, o pagsunod sa T. I. kurikulum.

Nagsimula kami sa isang Instructable na nagpapakilala sa ARM Assembly, ang kapaligiran sa pag-unlad, at kung paano gumawa ng isang proyekto.

Ang susunod na Instructable sa ARM Assembly ay ipinakilala kung paano makipag-ugnay sa input / output (GPIO).

Pagkatapos ay pinalawak namin ang aming kaalaman, at ipinakilala ang mga pagpapaandar, pagkontrol sa mga LED at switch.

Ngayon sa Instructable na ito, maaari naming gamitin ang natutunan naming gumawa ng isang bagay na mas masaya, mas kapaki-pakinabang: tuklasin ang isang linya.

Makatutulong ito sa amin sa paglaon kapag bumuo kami ng isang tagasunod na robot.

Sa kurikulum, ang karamihan sa mga programa ay ginagawa sa C o C ++, ngunit kapaki-pakinabang na maging pamilyar sa pagpupulong, bago kami magsimula depende sa mas mataas na antas ng mga wika, at mga aklatan.

Hakbang 1: Ang Hardware

Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware

Ayokong i-rehash nang detalyado ang hardware, dahil mayroon nang mga mapagkukunan, ngunit magdagdag kami ng mga paliwanag kung saan kinakailangan.

Para sa Instructable na ito, gagamitin namin ang Reflectance Sensor Arrray mula sa Pololu, dahil dumating ito bilang bahagi ng TI-RSLK (ang robot kit). Ito ang ginamit sa kurso, at sa Lab 6 ng kurikulum.

Kung wala ka iyan, maaari kang gumamit ng anumang IR detector (o serye ng mga ito) na naglalabas ng isang digital signal, MATAAS o mababa, para sa pagkakaroon at kawalan.

Ang sensor ng array ay pinakamahusay dahil makakatulong ito na makita kung tama kami sa gitna ng linya, o sa isang gilid. Dagdag pa, tulad ng makikita natin sa paglaon, makakatulong ito sa amin na makita ang anggulo ng robot na may paggalang sa linya.

Ang array ng pagsasalamin ay may mga detektor na malapit sa tabi ng bawat isa. Nangangahulugan iyon na dapat kaming makakuha ng maraming mga signal ng pagtuklas, nakasalalay siyempre sa kapal ng linya.

Kung gayon, kung gayon kung ang robot ay hindi direktang nakahanay sa linya, dapat itong ibalik ang isang output na ang linya ay mas malawak kaysa sa dapat (dahil nasa isang anggulo tayo).

Para sa isang mas mahusay na paliwanag sa itaas, tingnan ang dokumento ng Lab 6.

Para sa tulong sa mga kable / pagkonekta sa sensor sa MSP432 LaunchPad development board, narito ang ilang mga kapaki-pakinabang na tagubilin.

Nagdagdag din ako ng parehong (katulad?) Mga tagubilin sa pdf sa Hakbang na ito.

Kung maingat mong binasa ang mga dokumento ng Pololu, ipinapaliwanag nila ang dahilan para sa "3.3V bypass", na gugustuhin mong lumukso kung gumagamit ka ng 3.3V sa halip na 5V.

Dahil hindi pa namin nabubuo ang robot ngunit sa halip ay natututo lamang kami tungkol sa pagpupulong ng ARM at kung paano din makipag-ugnay sa mga piraso (subsystem) ng robot, hindi namin kailangang sundin ang mga tagubilin sa itaas sa liham.

Sa ngayon, ang pagkonekta sa linya ng sensor sensor ay kumukulo lamang / binabawasan hanggang sa mga sumusunod:

  • ikonekta ang 3.3V at GND mula sa board ng MSP432 sa array ng sensor.
  • kumonekta sa isang port pin (iminumungkahi ko P5.3) mula sa MSP432 sa LED paganahin ang pin sa linya ng sensor sensor. Ang pin na iyon sa sensor ay nasa pagitan ng 3.3V at GND.
  • ikonekta ang lahat ng walong mga pin / piraso ng isang solong port (iminumungkahi ko ang P7.0 sa pamamagitan ng P7.7) sa walong mga pin ng sensor array na may label na "1" hanggang "8". Ito ang mga linya na pupunta sa TAAS o Mababa depende sa kung ano ang kanilang nadarama.

Tulad ng nakikita mo sa mga imahe ng hakbang na ito, at sa video, hindi ko naidugtong ang sensor sa chassis ng robot, dahil nais ko ang kadalian ng pag-program, pag-debug, pagsubok, pag-aaral.

Kaya sa lahat ng nakakonekta, handa kaming pumasok sa software.

Hakbang 2: Sumusunod sa Linya

Pagsunod sa Linya
Pagsunod sa Linya
Pagsunod sa Linya
Pagsunod sa Linya

Ang sensor ng pagsasalamin ng array ay medyo nakakatuwa sapagkat makakatulong ito sa hindi bababa sa dalawang paraan.

  • Tukuyin ang robot na nakasentro sa linya o naaanod sa isang gilid.
  • Ang robot ba ay nakahanay sa direksyon ng linya, o nasa isang anggulo ba ito.

Ang bawat isa sa mga detektor ng array ay mahalagang nagbibigay ng kaunting impormasyon, alinman sa TAAS o Mababa.

Ang ideya ay upang pagsamahin ang lahat ng mga piraso sa isang solong numero o solong bit-pattern, at gamitin ang pattern na iyon upang gumawa ng mga desisyon (upang makagalaw nang tama).

Hakbang 3: Bago Pa Kami Makakapagsimula…

.. kailangan nating malaman ang bago tungkol sa pagprogram ng pagpupulong ng ARM. At hindi lang iba ang itinuturo kong kahulugan. Ang mga may posibilidad na maging menor de edad.

Hanggang ngayon hindi namin nagamit ang "stack" sa aming mga programa.

Umasa kami sa paggamit ng karamihan sa mga pangunahing pagrehistro ng CPU sa buong mundo sa iba't ibang mga subroutine.

Ang isang bagay na ginawa namin ay i-save at ibalik ang address ng LR (rehistro ng link) para sa isang pagpapaandar - ang isa na tumawag sa maraming iba pang mga pagpapaandar. (Gumagamit ako rito ng "pagpapaandar" at "subroutine").

Hindi maganda ang ginagawa namin. Paano kung nais nating pugad ang iba pang mga pagpapaandar? Paano kung mayroon kaming higit sa isang antas ng pamumugad?

Sa mga nakaraang halimbawa, pinili naming gamitin ang rehistro R6 bilang imbakan para sa LR o bumalik na address. Ngunit kung nais naming gumawa ng karagdagang / mas malalim na pugad, hindi namin maaaring magpatuloy na baguhin ang halaga ng R6. Kailangan pa naming pumili ng isa pang rehistro. At isa pa. At pagkatapos ito ay magiging mabigat upang subaybayan kung aling core cpu register ang humahawak kung aling LR ang ibabalik sa kung aling pagpapaandar.

Kaya't tinitingnan namin ang "stack".

Hakbang 4: Ang Stack

Narito ang ilang materyal sa pagbabasa na nagpapaliwanag ng stack.

Ako ay isang mas malaking tagataguyod ng isang pares ng mga ideya:

  • lamang ng maraming teorya tulad ng kinakailangan, pumunta para sa praktikal na mabilis
  • alamin kung kinakailangan, pagtuunan ng pansin ang paggawa ng isang bagay at hindi lamang ang walang pakay na ehersisyo o halimbawa.

Mayroong maraming ARM at MSP432 dokumentasyon sa online na pinag-uusapan ang tungkol sa stack, kaya't hindi ibabalik ang lahat ng iyon. Panatilihin ko rin ang paggamit ng stack dito sa isang maliit na minimum - pag-save ng return address (ang Link ng Rehistro).

Mahalaga, kailangan lamang namin ang mga tagubilin:

PUSH {listahan ng rehistro}

POP {listahan ng rehistro}

O, sa aming kaso, partikular:

PUSH {LR}

POP {LR}

Kaya, ang isang function ng pagpupulong / subroutine ay magiging ganito:

funcLabel:.asmfunc

PUSH {LR}; marahil ito ay maaaring maging isa sa mga unang tagubilin sa pagpasok.; gumawa pa ng code dito..; blah.. blah… blah…; ok, tapos na tayo sa pagpapaandar, handa nang bumalik sa pag-andar sa pagtawag na POP {LR}; ibabalik nito ang tamang address sa pagbabalik sa pagtawag; pagpapaandar BX LR; bumalik.endasmfunc

Dumaan ang video sa isang live na halimbawa ng maraming mga naka-salad na pag-andar.

Hakbang 5: Ang Software

Ang nakalakip na file na may label na "MSP432_Chapter…" ay may maraming magagandang impormasyon tungkol sa mga port ng MSP432, at mula sa dokumentong iyon nakukuha namin ang mga sumusunod na port, rehistro, address, atbp. Medyo napetsahan ito, subalit. Gayunpaman, hindi ko nakita ang detalyadong mga address na nakalista para sa Port 5 at mas mataas. (tanging "mga kahaliling pagpapaandar"). Ngunit kapaki-pakinabang pa rin.

Gagamitin namin ang dalawang Port. P5, P7, P1, at P2.

Ang P5.3 (isang solong) output ay upang makontrol ang IR LED-paganahin ang sensor. Gumagamit kami ng P5.3 dahil ito ay isang nakalantad na pin sa parehong header tulad ng iba pang mga koneksyon sa MSP432 na papunta sa sensor array.

Ang P7.0 hanggang P7.7 ay ang walong mga input na nangongolekta ng data mula sa sensor; kung ano ang "nakikita" nito.

Ang P1.0 ay ang solong pulang LED at maaari naming gamitin iyon upang mabigyan kami ng ilang mga pahiwatig ng data.

Ang P2.0, P2.1, P2.2 ay ang RGB LED at magagamit din natin iyon, na may iba't ibang mga posibilidad ng kulay, upang bigyan kami ng indikasyon ng data ng sensor.

Kung nadaanan mo na ang dating Mga Instruction na nauugnay sa lahat ng ito, alam mo na kung paano i-set up ang programa.

Mayroon lamang seksyon ng deklarasyon para sa mga port at bits, atbp.

Magkakaroon ka ng seksyong "pangunahing".

Dapat mayroong isang loop, kung saan patuloy naming binabasa ang data mula sa P7, gumawa ng desisyon ng data na iyon, at sinindihan ang dalawang LED nang naaayon.

Narito muli ang mga address sa Port Rehistro:

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

Ang naka-bold ay kung ano ang gagamitin namin para sa Instructable na ito.

Mga Hakbang sa Programa Upang Basahin ang Mga Detector ng IR

Ang sumusunod ay psuedo-code para sa pagsusulat ng programa sa C, ngunit kapaki-pakinabang pa rin ito, at susundan namin ito ng malapit sa bersyon ng pagpupulong ng programa.

pangunahing programa0) Inisyal ang // port habang (1) {1) Itakda ang mataas na P5.3 (i-on ang IR LED) 2) Gumawa ng P7.0 isang output, at itakda itong mataas (singilin ang capacitor) 3) Maghintay ng 10 sa amin, Clock_Delay1us (10); 4) Gumawa ng P7.0 isang input 5) Patakbuhin ang loop na ito 10, 000 beses a) Basahin ang P7.0 (binabago ang boltahe sa P7.0 sa binary) b) Ang output ng binary sa P1.0 (pinapayagan kang makita ang binary sa real time) 6) Itakda ang P5.3 mababa (patayin ang IR LED, nagse-save ng lakas) 7) Maghintay ng 10 ms, Clock_Delay1ms (10); } // ulitin (bumalik sa habang ())

Hakbang 6: Pagbutihin Natin ang Code

Ang layunin o paggamit ng Pololu IR LED array ay upang makita ang isang linya, at upang malaman kung ang robot (hinaharap) ay direktang nakasentro sa linya, o sa isang gilid. Gayundin, dahil ang linya ay may isang tiyak na kapal, kung ang sensor array ay direktang patayo sa linya, ang bilang ng mga sensor ay magkakaroon ng ibang pagbabasa kaysa sa natitira, samantalang kung ang IR LED array ay nasa ilang anggulo (hindi patayo), kung gayon Ang mga pares ng N + 1 o N + 2 IR LED / detector ay dapat na magbigay ng ibang pagbabasa.

Kaya, depende sa kung gaano karaming mga sensor ang nagpapahiwatig ng pagkakaroon ng linya, dapat nating malaman kung nakasentro tayo, at kung tayo ay anggulo o hindi.

Para sa pangwakas na eksperimentong ito, tingnan lamang natin kung makakakuha tayo ng pulang LED at ng RGB LED upang bigyan kami ng karagdagang impormasyon tungkol sa kung ano ang sinasabi sa amin ng sensor array.

Ang video ay napupunta sa lahat ng mga detalye. Nakalakip din ang pangwakas na code.

Nakumpleto nito ang serye ng ARM Assembly na nauugnay sa GPIO. Inaasahan naming bumalik na may mas maraming ARM Assembly sa ibang pagkakataon.

Salamat.

Inirerekumendang: