Satura rādītājs:

AVR montētāja apmācība 1: 5 soļi
AVR montētāja apmācība 1: 5 soļi

Video: AVR montētāja apmācība 1: 5 soļi

Video: AVR montētāja apmācība 1: 5 soļi
Video: 30 Days Natural Body Transformation 🔥🔥🔥 #fitness #transformation #gym #75hardchallenge 2024, Jūlijs
Anonim
AVR montētāja apmācība 1
AVR montētāja apmācība 1

Esmu nolēmis uzrakstīt virkni apmācību par to, kā rakstīt montāžas valodas programmas Atmega328p, kas ir Arduino izmantotais mikrokontrolleris. Ja cilvēki joprojām būs ieinteresēti, es turpināšu to darīt reizi nedēļā, līdz man beigsies brīvais laiks, vai arī cilvēki pārstās tos lasīt.

Es izmantoju Arch linux un strādāju pie atmega328p-pu, kas uzstādīts uz maizes dēļa. To var izdarīt tāpat kā es, vai arī varat vienkārši pievienot datoram arduino un tādā veidā strādāt ar mikrokontrolleri.

Mēs rakstīsim programmas 328p, piemēram, to, kas ir lielākajā daļā arduino, taču ņemiet vērā, ka šīs pašas programmas un paņēmieni darbosies arī jebkuram Atmel mikrokontrolleram, un vēlāk (ja būs interese) mēs strādāsim ar dažiem arī pārējās. Sīkāka informācija par mikrokontrolleru ir atrodama Atmel datu lapās un lietošanas instrukcijā. Es tos pievienoju šim pamācībai.

Lūk, kas jums būs nepieciešams:

1. Maizes dēlis

2. Arduino vai tikai mikrokontrolleris

3. Dators, kurā darbojas Linux

4. Avra montētājs, izmantojot git: git clone https://github.com/Ro5bert/avra.git vai, ja izmantojat ubuntu vai uz debian balstītu sistēmu, vienkārši ierakstiet "sudo apt install avra", un jūs iegūsit gan avr montētāju un avrdude. Tomēr, ja iegūstat jaunāko versiju, izmantojot github, jūs iegūsit arī visus nepieciešamos iekļaušanas failus, citiem vārdiem sakot, tajā jau ir faili m328Pdef.inc un tn85def.inc.

5. avrdude

Pilnu manu AVR montāžas apmācību komplektu var atrast šeit:

1. darbība: izveidojiet testēšanas paneli

Izveidojiet testēšanas paneli
Izveidojiet testēšanas paneli

Ja vēlaties, varat vienkārši izmantot savu arduino un darīt visu šajā apmācībā. Tomēr, tā kā mēs runājam par kodēšanu montāžas valodā, mūsu filozofija pēc būtības ir noņemt visus periferalus un tieši mijiedarboties ar pašu mikrokontrolleri. Tātad, vai jūs nedomājat, ka būtu jautrāk to darīt šādi?

Tiem no jums, kas piekrīt, varat izvilkt mikrokontrolleru no sava arduino un pēc tam sākt, izveidojot "Breadboard Arduino", izpildot šeit sniegtos norādījumus:

Attēlā es parādīju savu iestatījumu, kas sastāv no diviem atsevišķiem Atmega328p uz liela maizes dēļa (es vēlos, lai, strādājot pie nākamā, varētu saglabāt iepriekšējo apmācību vadu un ielādētu vienā mikrokontrollerī). Man ir uzstādīts barošanas avots tā, lai augšējā sliede būtu 9V, bet pārējās - 5V no sprieguma regulatora. Es arī izmantoju FT232R sadalīšanas dēli, lai programmētu mikroshēmas. Es tos nopirku un pats uzliku sāknēšanas ielādētājus, bet, ja jūs tikko izvilkāt vienu no Arduino, tad jau ir labi.

Ņemiet vērā, ka, ja jūs to izmēģināt ar ATtiny85, varat vienkārši iegūt Sparkfun Tiny Programmer šeit: https://www.sparkfun.com/products/11801# un pēc tam vienkārši pievienojiet to datora USB portam. Vispirms Attiny85 jāinstalē sāknēšanas ielādētājs, un vienkāršākais veids ir izmantot Arduino IDE. Tomēr jums būs jānoklikšķina uz faila un preferencēm un pēc tam jāpievieno šis jauno dēļu URL: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json, kas ļauj instalēt sāknēšanas ielādētāju (ja jūsu ATtiny85 vēl nebija komplektā).

2. darbība: instalējiet Assembler un Avrdude

Tagad jūs varat lejupielādēt un instalēt montētāju un avrdude no saitēm, kas dotas šīs apmācības pirmajā solī. Iespējams, ja jūs jau esat strādājis ar Arduino, tad jums jau ir instalēta avrdude.

Kad esat instalējis avra, pamanīsit, ka tam ir pievienota apakšdirektorija, ko sauc par "avotiem", un šajā direktorijā ir iekļauti vairāki faili. Šie ir visi mikrokontrolleri, kurus varat programmēt ar avra. Jūs uzreiz pamanīsit, ka šeit izmantotajam 328p failam nav neviena faila. Es pievienoju vienu. Failu vajadzētu saukt par m328Pdef.inc, un tas jāievieto iekļautā direktorijā vai jebkurā citā vietā, kas jums patīk. Mēs to iekļausim savās montāžas valodu programmās. Viss, kas jādara, ir dot katram reģistram mikrokontrolleru nosaukumus no datu lapas, lai mums nebūtu jāizmanto viņu heksādcimālie nosaukumi. Iepriekš iekļautais fails satur "pragma direktīvas", jo tas bija paredzēts C un C ++ programmēšanai. Ja jums apnīk redzēt, ka montētājs izspļauj sūdzības "ignorējot pragmas direktīvu", vienkārši iedziļinieties failā un izdzēsiet vai komentējiet visas rindas, kas sākas ar #pragma

Labi, tagad, kad jums ir gatavs mikrokontrolleris, gatavs montētājs un gatavs programmētājs, mēs varam uzrakstīt savu pirmo programmu.

Piezīme. Ja ATmega328P vietā izmantojat ATtiny85, jums ir nepieciešams cits iekļaušanas fails ar nosaukumu tn85def.inc. Es to arī pievienošu (ņemiet vērā, ka man to vajadzēja saukt par tn85def.inc.txt, lai Instructables ļautu man to augšupielādēt.) Tomēr, ja avra montētāju esat ieguvis no github, tad abi šie faili jau ir pievienoti. Tāpēc es iesaku to iegūt un apkopot pats: git clone

3. solis: Sveika pasaule

Šīs pirmās apmācības mērķis ir izveidot standarta pirmo programmu, ko raksta, apgūstot jaunu valodu vai izpētot jaunu elektronikas platformu. "Sveika pasaule!." Mūsu gadījumā mēs vienkārši vēlamies uzrakstīt montāžas valodas programmu, salikt to un augšupielādēt savā mikrokontrollerī. Programma iedegs gaismas diodi. Gaismas diodes "mirgošana", kā tas notiek parastajā Arduino sveikas pasaules programmā, patiesībā ir daudz sarežģītāka programma montāžas valodā, un tāpēc mēs to vēl nedarīsim. Mēs rakstīsim vienkāršāko "kailu kaulu" kodu ar minimālu nevajadzīgu pūku.

Vispirms pievienojiet LED no PB5 (skatiet pinout diagrammu), ko arduino sauc arī par Digital Out 13, ar 220 omu rezistoru, pēc tam ar GND. T.i.

PB5 - LED - R (220 omi) - GND

Tagad rakstiet programmu. Atveriet savu iecienīto teksta redaktoru un izveidojiet failu ar nosaukumu "hello.asm"

; sveiki.asm

; ieslēdz gaismas diodi, kas ir savienota ar PB5 (digitālā izeja 13). ietver "./m328Pdef.inc" ldi r16, 0b00100000 izeja DDRB, r16 izeja PortB, r16 Sākums: rjmp sākums

Iepriekš ir kods. Mēs to izskatīsim rindā pēc rindas minūtes laikā, bet vispirms pārliecināsimies, vai varam to izmantot jūsu ierīcē.

Pēc faila izveides terminālī to saliekat šādi:

avra sveiki.asm

tas apkopos jūsu kodu un izveidos failu hello.hex, kuru mēs varam augšupielādēt šādi:

avrdude -p m328p -c stk500v1 -b 57600 -P /dev /ttyUSB0 -U zibspuldze: w: hello.hex

ja izmantojat maizes dēļa arduino, tieši pirms iepriekšminētās komandas izpildīšanas jums būs jānospiež maizes dēļa arduino atiestatīšanas poga. Ņemiet vērā, ka jums, iespējams, būs jāpievieno sudo priekšā vai jāizpilda kā root. Ņemiet vērā arī to, ka dažos arduino (piemēram, Arduino UNO) jums, iespējams, būs jāmaina bitu pārraides ātrums uz -b 115200 un ports -P /dev /ttyACM0 (ja avrdude saņemat kļūdu par nederīgu ierīces parakstu, vienkārši pievienojiet - F līdz komandai)

Ja viss ir strādājis tā, kā vajadzētu, tagad iedegsies gaismas diode….. “Sveika pasaule!”

Ja izmantojat ATtiny85, komanda avrdude būs šāda:

avrdude -p attiny85 -c usbtiny -U zibspuldze: w: sveiki.hex

4. solis: Hello.asm Rinda pa rindai

Lai pabeigtu šo ievada apmācību, mēs rindā pa rindai apskatīsim programmu hello.asm, lai redzētu, kā tā darbojas.

; sveiki.asm

; ieslēdz gaismas diodi, kas ir savienota ar PB5 (digitālā izeja 13)

Visu pēc semikolu montētājs ignorē, un tāpēc šīs divas pirmās rindas ir vienkārši "komentāri", kas izskaidro programmas darbību.

.include "./m328Pdef.inc"

Šī rindiņa liek montētājam iekļaut lejupielādēto failu m328Pdef.inc. Iespējams, vēlēsities to ievietot līdzīgu iekļaušanas failu direktorijā un pēc tam mainīt iepriekš minēto rindiņu, lai tur norādītu.

ldi r16, 0b00100000

ldi apzīmē "tūlītēju ielādi" un liek montētājam uzņemt darba reģistru, šajā gadījumā r16, un ielādēt tajā bināro skaitli, šajā gadījumā 0b00100000. Priekšā esošais 0b saka, ka mūsu numurs ir binārs. Ja mēs gribētu, mēs būtu varējuši izvēlēties citu bāzi, piemēram, heksidcimālu. Tādā gadījumā mūsu skaitlis būtu bijis 0x20, kas ir heksidcimāls skaitlim 0b00100000. Vai arī mēs būtu varējuši izmantot 32, kas ir vienāds ar 10 cipariem aiz komata.

1. uzdevums. Mēģiniet mainīt kodu iepriekšējā rindā uz heksidcimālu un pēc tam uz decimāldaļu savā kodā un pārbaudiet, vai tas joprojām darbojas katrā gadījumā.

Tomēr bināro izmantošana ir visvienkāršākā, jo darbojas porti un reģistri. Turpmākajās apmācībās mēs sīkāk apspriedīsim atmega328p portus un reģistrus, bet pagaidām es tikai paziņošu, ka mēs izmantojam r16 kā savu "darba reģistru", kas nozīmē, ka mēs to vienkārši izmantosim kā mainīgo, ko mēs glabājam "reģistrs" ir 8 bitu kopums. Nozīmē 8 plankumus, kas var būt 0 vai 1 (“izslēgts” vai “ieslēgts”). Ievietojot reģistrā bināro skaitli 0b00100000, izmantojot iepriekš minēto rindu, mēs vienkārši esam saglabājuši šo numuru reģistrā r16.

no DDRB, r16

Šī rinda liek kompilatoram kopēt reģistra r16 saturu DDRB reģistrā. DDRB apzīmē "Datu virziena reģistrs B", un tas izveido "tapas" PortB. 328p pinout kartē var redzēt, ka ir 8 tapas ar apzīmējumu PB0, PB1,…, PB7. Šīs tapas attēlo "PortB" "bitus", un, ielādējot bināro numuru 00100000 DDRB reģistrā, mēs sakām, ka mēs vēlamies, lai PB0, PB1, PB2, PB3, PB4, PB6 un PB7 tiktu iestatīti kā IEVADES tapas, jo tie ir Tajos ir 0, un PB5 ir iestatīts kā OUTPUT pin, jo šajā vietā ievietojām 1.

no PortB, r16

Tagad, kad esam nofiksējuši tapu virzienus, mēs tagad varam tiem iestatīt spriegumu. Iepriekšējā rindiņa kopē to pašu bināro numuru no mūsu krātuves reģistra r16 uz PortB. Tādējādi visas tapas tiek iestatītas uz 0 voltiem, izņemot tapu PB5 uz HIGH, kas ir 5 volti.

2. uzdevums: paņemiet digitālo multimetru, pievienojiet melno vadu zemē (GND) un pēc tam pārbaudiet katru no tapām PB0 līdz PB7 ar sarkano vadu. Vai katras tapas spriegums precīzi atbilst 0b00100000 ievietošanai PortB? Ja ir tādi, kas nav, kāpēc, jūsuprāt, tā ir? (skatiet tapas karti)

Sākt:

rjmp Sākt

Visbeidzot, pirmā rindiņa iepriekš ir "etiķete", kas iezīmē vietu kodā. Šajā gadījumā marķējiet šo vietu kā “Sākt”. Otrajā rindiņā teikts: "relatīvi pāriet uz etiķeti Sākt". Rezultāts ir tāds, ka dators ir ievietots bezgalīgā cilpā, kas tikai turpina braukt ar velosipēdu atpakaļ uz sākumu. Mums tas ir vajadzīgs, jo mēs nevaram pārtraukt programmas darbību vai nokrist no klints. Programmai ir jāturpina darboties, lai gaisma paliktu iedegta.

3. uzdevums: noņemiet no koda divas iepriekš minētās rindiņas, lai programma nokristu no klints. Kas notiek? Jums vajadzētu redzēt kaut ko līdzīgu tradicionālajai "mirgošanas" programmai, ko Arduino izmantoja kā "sveika pasaule!". Kāpēc, jūsuprāt, tā rīkojas šādi? (Padomājiet par to, kam jānotiek, kad programma nokrīt no klints …)

5. darbība. Secinājums

Ja esat tik tālu nonācis, apsveicu! Tagad jūs varat uzrakstīt montāžas kodu, salikt to un ielādēt to savā mikrokontrollerī.

Šajā apmācībā jūs esat iemācījušies izmantot šādas komandas:

ldi hregister, numurs augšējā reģistrā (16-31) ielādē skaitli (0-255)

no ioregister, register kopē numuru no darba reģistra uz I/O reģistru

rjmp etiķete pāriet uz programmas rindu, kas apzīmēta ar "label" (kas nevar būt tālāk par 204 norādēm - t.i., relatīvais lēciens)

Tagad, kad šie pamati ir traucēti, mēs varam turpināt rakstīt interesantāku kodu un interesantākas shēmas un ierīces, neapspriežot apkopošanas un augšupielādes mehāniku.

Es ceru, ka jums patika šī ievada apmācība. Nākamajā apmācībā mēs pievienosim vēl vienu ķēdes komponentu (pogu) un paplašināsim savu kodu, iekļaujot ievades portus un lēmumus.

Ieteicams: