Sisällysluettelo:

AVR -kokoonpanon opetusohjelma 1: 5 vaihetta
AVR -kokoonpanon opetusohjelma 1: 5 vaihetta

Video: AVR -kokoonpanon opetusohjelma 1: 5 vaihetta

Video: AVR -kokoonpanon opetusohjelma 1: 5 vaihetta
Video: LDmicro 21: настройка режима C и Arduino Mega (программирование микроконтроллера с помощью LDmicro) 2024, Heinäkuu
Anonim
AVR -kokoonpanon opetusohjelma 1
AVR -kokoonpanon opetusohjelma 1

Olen päättänyt kirjoittaa sarjan opetusohjelmia kokoonpanokieliohjelmien kirjoittamisesta Atmega328p: lle, joka on Arduinossa käytetty mikrokontrolleri. Jos ihmiset ovat edelleen kiinnostuneita, jatkan yhtä viikossa tai niin kauan, kunnes vapaa -aika loppuu tai ihmiset lopettavat niiden lukemisen.

Käytän Arch linuxia ja työskentelen atmega328p-pu: n kanssa, joka on asennettu leipälevylle. Voit tehdä sen samalla tavalla kuin minä tai voit liittää arduinon tietokoneeseesi ja työskennellä mikrokontrollerilla tällä tavalla.

Kirjoitamme ohjelmia 328p: lle, kuten useimmissa arduino -ohjelmissa, mutta huomaa, että samat ohjelmat ja tekniikat toimivat myös millä tahansa Atmel -mikrokontrollerilla, ja myöhemmin (jos kiinnostusta on) teemme yhteistyötä joidenkin myös muut. Mikro -ohjaimen tiedot löytyvät Atmel -tietolomakkeista ja käyttöohjeesta. Liitän ne tähän ohjeeseen.

Tässä on mitä tarvitset:

1. Leipälauta

2. Arduino tai vain mikro -ohjain

3. Tietokone, jossa on Linux

4. Avra assembler git: git kloonilla https://github.com/Ro5bert/avra.git tai jos käytät ubuntua tai debian -pohjaista järjestelmää, kirjoita "sudo apt install avra" ja saat molemmat avr assembler ja avrdude. Kuitenkin, jos saat uusimman version githubin avulla, saat myös kaikki tarvittavat sisällytystiedostot, toisin sanoen siinä on jo m328Pdef.inc- ja tn85def.inc -tiedostot.

5. avrdude

Koko AVR-kokoonpanon opetusohjelmani löytyy täältä:

Vaihe 1: Rakenna testauslauta

Rakenna testauslauta
Rakenna testauslauta

Voit käyttää arduinoasi ja tehdä kaiken näissä opetusohjelmissa, jos haluat. Kuitenkin, koska puhumme koodauksesta kokoonpanokielellä, filosofiamme on luonnostaan poistaa kaikki periferaalit ja olla vuorovaikutuksessa suoraan mikrokontrollerin kanssa. Joten ettekö usko, että olisi hauskempaa tehdä se tällä tavalla?

Niille teistä, jotka ovat samaa mieltä, voit vetää mikro -ohjaimen ulos arduinostasi ja aloittaa rakentamalla "Breadboard Arduino" noudattamalla ohjeita täällä:

Kuvassa näytän kokoonpanoni, joka koostuu kahdesta erillisestä Atmega328p -laitteesta suurella leipälevyllä (haluan pystyä pitämään edellisen opetusohjelman langallisena ja ladattuna yhdelle mikro -ohjaimelle, kun työskentelen seuraavan kanssa). Minulla on virtalähde, joka on asetettu niin, että ylin kisko on 9 V ja kaikki muut ovat 5 V jännitesäätimestä. Käytän myös FT232R -murtokorttia sirujen ohjelmointiin. Ostin ne ja laitoin niihin käynnistyslataimet, mutta jos vedit vain yhden ulos Arduinosta, se on jo hyvä.

Huomaa, että jos yrität tätä ATtiny85: llä, voit hankkia Sparkfun Tiny Programmer -ohjelman täältä: https://www.sparkfun.com/products/11801# ja liittää sen sitten tietokoneen USB -porttiin. Sinun on ensin asennettava käynnistyslatain Attiny85 -laitteeseen, ja helpoin tapa on käyttää Arduino IDE: tä. Sinun on kuitenkin napsautettava tiedostoa ja asetuksia ja lisättävä sitten tämä uusien taulujen URL-osoite: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json, joka voit asentaa käynnistyslataimen (jos ATtiny85 ei vielä ollut mukana).

Vaihe 2: Asenna Assembler ja Avrdude

Voit nyt ladata ja asentaa assemblerin ja avrduden tämän opetusohjelman ensimmäisessä vaiheessa annetuista linkeistä. On todennäköistä, että jos olet jo työskennellyt Arduinon kanssa, sinulla on jo avrdude asennettuna.

Kun olet asentanut avran, huomaat, että sen mukana tulee alihakemisto nimeltä "lähteet", ja kyseisen hakemiston sisällä on joukko sisällytystiedostoja. Nämä ovat kaikki mikrokontrollerit, jotka voit ohjelmoida avran avulla. Huomaat heti, että täällä käyttämäämme 328p -tiedostoa ei ole. Olen liittänyt yhden. Tiedoston pitäisi olla nimeltään m328Pdef.inc, ja sinun tulee laittaa sisällyttää hakemistoon tai mihin tahansa muualle. Tulemme sisällyttämään sen kokoonpanokieliohjelmiin. Kaikki tämä on antaa jokaiselle rekisteristä mikro -ohjaimen nimet tietolomakkeesta, jotta meidän ei tarvitse käyttää niiden heksadesimaalisia nimiä. Yllä oleva include -tiedosto sisältää "pragma -direktiivejä", koska se on suunniteltu C- ja C ++ -ohjelmointiin. Jos kyllästyt näkemään, että kokoonpanija sylkee "pragma -direktiiviä huomiotta" -valitukset, mene tiedostoon ja poista tai kommentoi kaikki rivit, jotka alkavat #pragma

Okei, nyt kun sinulla on mikro -ohjain, kokoonpanija ja ohjelmoija valmiina, voimme kirjoittaa ensimmäisen ohjelman.

Huomautus: Jos käytät ATtiny85: tä ATmega328P: n sijasta, tarvitset toisen sisällytystiedoston nimeltä tn85def.inc. Liitän sen myös (huomaa, että minun oli kutsuttava sitä tn85def.inc.txt -tiedostoksi, jotta Instructables sallii minun ladata sen.) Kuitenkin, jos sait avra -kokoonpanon githubista, sinulla on jo molemmat tiedostot mukana. Joten suosittelen hankkimaan sen ja kääntämään sen itse: git clone

Vaihe 3: Hei maailma

Tämän ensimmäisen opetusohjelman tavoitteena on rakentaa tavallinen ensimmäinen ohjelma, jonka kirjoitat oppiessasi uutta kieltä tai tutustuessasi uuteen elektroniikka -alustaan. "Hei maailma!." Meidän tapauksessamme haluamme yksinkertaisesti kirjoittaa kokoonpanokielen ohjelman, koota sen ja ladata sen mikro -ohjaimeemme. Ohjelma sytyttää LED -valon. LED -valon "vilkkuminen", kuten normaalissa Arduino hello world -ohjelmassa, on itse asiassa paljon monimutkaisempi ohjelma kokoonpanokielellä, joten emme tee sitä vielä. Aiomme kirjoittaa yksinkertaisimman "paljaat luut" -koodin mahdollisimman vähän turhaa nukkaa.

Liitä ensin PB5: n LED (katso pinout -kaavio), jota kutsutaan myös Digital Out 13: ksi arduinossa, 220 ohmin vastukseen ja sitten GND: hen. Toisin sanoen

PB5 - LED - R (220 ohmia) - GND

Nyt kirjoitetaan ohjelma. Avaa suosikkitekstieditorisi ja luo tiedosto nimeltä "hello.asm"

; hei.asm

; syttyy LED, joka on kytketty PB5: een (digitaalinen lähtö 13). sisältää "./m328Pdef.inc" ldi r16, 0b00100000 out DDRB, r16 out PortB, r16 Start: rjmp Start

Yllä oleva on koodi. Käymme sen läpi rivi kerrallaan minuutissa, mutta varmistamme ensin, että saamme sen toimimaan laitteellasi.

Kun olet luonut tiedoston, kokoat sen päätelaitteeseen seuraavasti:

avra hello.asm

tämä kokoaa koodisi ja luo tiedoston nimeltä hello.hex, jonka voimme ladata seuraavasti:

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

jos käytät leipälauta arduinoa, sinun on painettava leipälevyn arduino -nollauspainiketta juuri ennen yllä olevan komennon suorittamista. Huomaa, että sinun on ehkä myös lisättävä sudo eteen tai suoritettava se pääkäyttäjänä. Huomaa myös, että joissakin arduinoissa (kuten Arduino UNO) sinun on todennäköisesti muutettava bittinopeudeksi -b 115200 ja portiksi -P /dev /ttyACM0 (jos saat virheen avrdudelta virheellisestä laitteen allekirjoituksesta, lisää - F komentoon)

Jos kaikki on toiminut niin kuin pitää, LED -merkkivalo syttyy nyt … "Hello World!"

Jos käytät ATtiny85: tä, avrdude -komento on:

avrdude -p attiny85 -c usbtiny -U flash: w: hello.hex

Vaihe 4: Hello.asm Rivi kerrallaan

Tämän johdanto-opetusohjelman loppuun saattamiseksi käymme läpi hello.asm-ohjelman rivi riviltä nähdäksemme, miten se toimii.

; hei.asm

; syttyy LED, joka on kytketty PB5: een (digitaalinen lähtö 13)

Asentaja jättää huomiotta kaikki puolipisteen jälkeiset asiat, ja siksi nämä kaksi ensimmäistä riviä ovat yksinkertaisesti "kommentteja", jotka selittävät, mitä ohjelma tekee.

.include "./m328Pdef.inc"

Tämä rivi käsittää kokoonpanijan sisällyttämään lataamasi m328Pdef.inc -tiedoston. Voit halutessasi sijoittaa tämän samankaltaisten sisällytystiedostojen hakemistoon ja muuttaa sitten yllä olevaa riviä osoittamaan siihen siellä.

ldi r16, 0b00100000

ldi tarkoittaa "lataa välittömästi" ja käskee kokoonpanijan ottamaan työrekisterin, r16 tässä tapauksessa, ja lataamaan siihen binääriluvun, tässä tapauksessa 0b00100000. Edessä oleva 0b sanoo, että numeromme on binäärinen. Jos olisimme halunneet, olisimme voineet valita toisen emäksen, kuten heksadesimaalin. Siinä tapauksessa numeromme olisi ollut 0x20, joka on heksadesimaali 0b00100000. Tai olisimme voineet käyttää 32, joka on perus 10 desimaalia samalle numerolle.

Harjoitus 1: Yritä muuttaa yllä olevan rivin numero heksadesimaaliksi ja sitten desimaaliksi koodissa ja tarkista, että se toimii edelleen kaikissa tapauksissa.

Binaarien käyttö on kuitenkin yksinkertaisinta porttien ja rekisterien toiminnan vuoksi. Keskustelemme atmega328p: n porteista ja rekistereistä tarkemmin tulevissa opetusohjelmissa, mutta toistaiseksi totean vain, että käytämme r16: ta "työrekisterinämme", mikä tarkoittaa, että aiomme käyttää sitä vain muuttujana, jonka tallennamme "rekisteri" on 8 -bittinen joukko. Tarkoittaa 8 kohtaa, jotka voivat olla joko 0 tai 1 (`` pois '' tai `` päällä ''). Kun lataamme binääriluvun 0b00100000 rekisteriin yllä olevan rivin avulla, olemme yksinkertaisesti tallentaneet numeron rekisteriin r16.

ulos DDRB, r16

Tämä rivi käskee kääntäjää kopioimaan rekisterin r16 sisällön DDRB -rekisteriin. DDRB tarkoittaa "Data Direction Register B" ja se asettaa "nastat" PortB: hen. 328p: n pinout -kartalla näet, että on 8 nastaa merkitty PB0, PB1,…, PB7. Nämä nastat edustavat "PortB": n "bittejä", ja kun lataamme binääriluvun 00100000 DDRB -rekisteriin, sanomme, että haluamme asettaa PB0-, PB1-, PB2-, PB3-, PB4-, PB6- ja PB7 -tulot, koska ne on Niissä on 0, ja PB5 on asetettu OUTPUT -nastaksi, koska laitoimme 1 tähän kohtaan.

ulos PortB, r16

Nyt kun olemme vahvistaneet nastojen suunnat, voimme nyt asettaa niihin jännitteet. Yllä oleva rivi kopioi saman binääriluvun tallennusrekisteristämme r16 PortB: hen. Tämä asettaa kaikki nastat 0 volttiin paitsi nasta PB5 korkealle, joka on 5 volttia.

Harjoitus 2: Ota digitaalinen yleismittari, kytke musta johto maahan (GND) ja testaa sitten kaikki nastat PB0 - PB7 punaisella johdolla. Vastaavatko kunkin nastan jännitteet täsmälleen niitä jännitteitä, jotka vastaavat 0b00100000: n asettamista PortB: hen? Jos on niitä, jotka eivät ole, miksi luulet sen olevan? (katso pin -kartta)

Alkaa:

rjmp Aloita

Lopuksi ensimmäinen rivi yllä on "etiketti", joka merkitsee koodin kohdan. Tässä tapauksessa merkitse kyseinen kohta "Käynnistä". Toisella rivillä lukee "suhteellinen hyppy tarraan Start". Tuloksena on, että tietokone on sijoitettu äärettömään silmukkaan, joka jatkaa pyöräilyä takaisin alkuun. Tarvitsemme tätä, koska emme voi saada ohjelmaa juuri loppumaan tai pudota kalliolta, vaan ohjelman on vain jatkettava toimintaansa, jotta valo pysyy päällä.

Harjoitus 3: Poista yllä olevat kaksi riviä koodistasi, jotta ohjelma putoaa kalliolta. Mitä tapahtuu? Sinun pitäisi nähdä jotain, joka näyttää perinteiseltä "vilkkua" -ohjelmalta, jota Arduino käyttää "hei maailma!". Miksi luulet sen toimivan tällä tavalla? (Mieti, mitä pitää tapahtua, kun ohjelma putoaa kalliolta …)

Vaihe 5: Johtopäätös

Jos olet päässyt näin pitkälle, onnittelut! Voit nyt kirjoittaa kokoonpanokoodin, koota sen ja ladata sen mikro -ohjaimeesi.

Tässä opetusohjelmassa olet oppinut käyttämään seuraavia komentoja:

ldi hregister, numero lataa numeron (0-255) ylempään puoliskorekisteriin (16-31)

ulos ioregister, register kopioi numeron työrekisteristä I/O -rekisteriin

rjmp -tarra hyppää ohjelman riville, joka on merkitty "label" -merkille (joka ei voi olla kauempana kuin 204 käskyä - eli suhteellinen hyppy)

Nyt kun nämä perusasiat ovat poissa tieltä, voimme jatkaa mielenkiintoisemman koodin ja mielenkiintoisempien piirien ja laitteiden kirjoittamista ilman, että joudumme keskustelemaan kokoamisen ja lataamisen mekaniikasta.

Toivottavasti pidit tästä johdanto -oppaasta. Seuraavassa opetusohjelmassa lisäämme toisen piirikomponentin (painike) ja laajennamme koodiamme sisältämään tuloportit ja päätökset.

Suositeltava: