Tartalomjegyzék:

AVR összeszerelő bemutató 1: 5 lépés
AVR összeszerelő bemutató 1: 5 lépés

Videó: AVR összeszerelő bemutató 1: 5 lépés

Videó: AVR összeszerelő bemutató 1: 5 lépés
Videó: SeeMTA v4 - Tutorial 7. - Az autószerelő 2024, November
Anonim
AVR összeszerelő oktatóanyag 1
AVR összeszerelő oktatóanyag 1

Úgy döntöttem, hogy írok egy sor oktatóanyagot arról, hogyan kell összeállítani a Nyelv programokat az Atmega328p -hez, amely az Arduino -ban használt mikrokontroller. Ha az emberek továbbra is érdeklődnek, folytatom a hetente egyet, amíg el nem fogy a szabad időm, különben az emberek abbahagyják az olvasást.

Arch linuxot futtatok, és egy atmega328p-pu-n dolgozom, amely egy kenyértáblán van beállítva. Ezt ugyanúgy megteheti, mint én, vagy egyszerűen csatlakoztathat egy arduino -t a számítógépéhez, és így dolgozhat a mikrokontrolleren.

A 328p -hez hasonló programokat fogunk írni, mint a legtöbb arduino -ban, de vegye figyelembe, hogy ugyanezek a programok és technikák bármely Atmel mikrokontroller esetében is működni fognak, és később (ha van érdeklődés) néhányukkal együtt dolgozunk a többi is. A mikrovezérlő részletei megtalálhatók az Atmel adatlapjain és a használati utasításban. Ehhez a tanulsághoz csatolom őket.

Íme, mire lesz szüksége:

1. Egy kenyértábla

2. Egy Arduino, vagy csak a mikrokontroller

3. Linuxot futtató számítógép

4. Az avra assembler a git: git clone segítségével https://github.com/Ro5bert/avra.git, vagy ha ubuntut vagy debian alapú rendszert használ, írja be a "sudo apt install avra" parancsot, és mindkettőt megkapja és avrdude. Ha azonban a github használatával szerezi be a legújabb verziót, akkor megkapja az összes szükséges fájlokat is, más szóval már rendelkezik az m328Pdef.inc és a tn85def.inc fájlokkal.

5. avrdude

Az AVR összeszerelő oktatóanyagaim teljes készlete itt található:

1. lépés: Készítsen egy tesztlapot

Készítsen egy tesztlapot
Készítsen egy tesztlapot

Egyszerűen használhatja az arduino -ját, és mindent megtesz ezekben az oktatóanyagokban, ha úgy tetszik. Mivel azonban az összeszerelési nyelven történő kódolásról beszélünk, filozófiánk eredendően az, hogy eltávolítja az összes perifériát, és közvetlenül kölcsönhatásba lép magával a mikrokontrollerrel. Szóval nem gondolod, hogy szórakoztatóbb lenne így csinálni?

Azok számára, akik egyetértenek, kihúzhatja a mikrokontrollert az arduino -ból, majd elkezdheti a "Breadboard Arduino" létrehozását az alábbi utasítások követésével:

A képen a beállításomat mutatom, amely két önálló Atmega328p -ből áll egy nagy kenyérsütő táblán (szeretném, ha az előző oktatóanyag vezetékes és egy mikrokontrollerre tölthető lenne, miközben a következőn dolgozom). A tápegység úgy van beállítva, hogy a legfelső sín 9V, a többi pedig 5V a feszültségszabályozótól. A chipek programozásához egy FT232R törőlapot is használok. Én megvettem őket, és magam töltöttem rájuk bootloadereket, de ha csak kihúztál egyet az Arduino -ból, akkor már jó.

Ne feledje, hogy ha ezt ATtiny85 készülékkel próbálja ki, akkor a Sparkfun Tiny Programmer programot itt szerezheti be: https://www.sparkfun.com/products/11801#, majd egyszerűen csatlakoztassa a számítógép USB -portjához. Először telepítenie kell egy rendszerbetöltőt az Attiny85 -re, és a legegyszerűbb módja az Arduino IDE használata. Ehhez azonban a fájlra és a beállításokra kell kattintania, majd hozzá kell adnia ezt az Új táblák URL-t: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json, amely lehetővé teszi a rendszerbetöltő telepítését (ha az ATtiny85 még nem kapott ilyet.)

2. lépés: Telepítse az Assembler -t és az Avrdude -ot

Most letöltheti és telepítheti az assemblert és az avrdude -t a bemutató első lépésében megadott linkekről. Valószínű, hogy ha már dolgozott az Arduino -val, akkor már telepítette az avrdude -t.

Az avra telepítése után észreveszi, hogy van egy alkönyvtár, amelyet "forrásoknak" neveznek, és a könyvtárban egy csomó tartalmazza a fájlokat. Ezek mind olyan mikrokontrollerek, amelyeket az avra programozhat. Rögtön észreveszi, hogy nincs fájl az itt használt 328p -hez. Csatoltam egyet. A fájlt m328Pdef.inc -nek kell hívni, és az include könyvtárba kell helyezni, vagy bárhová, ahol tetszik. Ezt beépítjük az összeszerelési nyelvi programjainkba. Mindez annyit tesz, hogy megadja az adatlapon található mikrokontroller nevek mindegyik regiszterét, hogy ne kelljen a hexadecimális neveket használni. A fenti include fájl "pragma direktívákat" tartalmaz, mivel C és C ++ programozásra készült. Ha belefárad abba, hogy az összeszerelő kiköpje a "pragma irányelv figyelmen kívül hagyása" panaszokat, akkor menjen be a fájlba, és törölje vagy kommentálja az összes #pragma kezdetű sort

Rendben, most, hogy készen áll a mikrovezérlő, az összeszerelő és a programozó, írhatjuk az első programunkat.

Megjegyzés: Ha az ATtiny85 -öt használja az ATmega328P helyett, akkor egy másik tartalmazza a tn85def.inc nevű include fájlt. Csatolom azt is (vegye figyelembe, hogy tn85def.inc.txt -nek kellett neveznem, hogy az Instructables lehetővé tegye a feltöltést.) HA mégis, ha az avra assemblert a githubból szerezte be, akkor már mindkét fájl megvan hozzá. Tehát azt javaslom, hogy szerezze be és állítsa össze maga: git clone

3. lépés: Hello World

Ennek az első oktatóanyagnak az a célja, hogy felépítse a szokásos első programot, amelyet az ember ír, amikor új nyelvet tanul vagy új elektronikai platformot fedez fel. "Helló Világ!." Esetünkben egyszerűen összeállítási nyelvi programot szeretnénk írni, összeállítani és feltölteni a mikrovezérlőnkre. A program bekapcsol egy LED -et. Ha egy LED -et "villogni" akar, mint a normál Arduino hello world programhoz, valójában sokkal bonyolultabb program az összeszerelési nyelven, ezért ezt még nem fogjuk megtenni. A legegyszerűbb "csupasz csontok" kódot fogjuk írni minimális felesleges szöszökkel.

Először csatlakoztasson egy LED -et a PB5 -ből (lásd a pinout diagramot), amelyet digitális kimenetnek 13 is neveznek egy arduino -n, egy 220 ohmos ellenálláshoz, majd a GND -hez. Azaz.

PB5 - LED - R (220 ohm) - GND

Most írjuk meg a programot. Nyissa meg kedvenc szövegszerkesztőjét, és hozzon létre egy "hello.asm" nevű fájlt

; hello.asm

; bekapcsol egy LED -et, amely a PB5 -hez van csatlakoztatva (digitális kimenet 13). tartalmazza "./m328Pdef.inc" ldi r16, 0b00100000 kimenet DDRB, r16 kimenet PortB, r16 Kezdés: rjmp Start

A fenti a kód. Egy percen belül soronként végigmegyünk rajta, de először győződjünk meg arról, hogy működni tudunk az eszközén.

Miután létrehozta a fájlt, a terminálban az alábbiak szerint állítja össze:

avra hello.asm

ez összeállítja a kódot, és létrehoz egy hello.hex nevű fájlt, amelyet az alábbiak szerint tölthetünk fel:

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

ha kenyérlapos arduino -t használ, akkor közvetlenül a fenti parancs végrehajtása előtt meg kell nyomnia a kenyértábla arduino reset gombját. Vegye figyelembe, hogy előfordulhat, hogy hozzá kell adnia egy sudo -t is, vagy rootként kell végrehajtania. Vegye figyelembe azt is, hogy egyes arduino -k (például az Arduino UNO) esetén valószínűleg át kell állítania a bitsebességet -b 115200 -ra, és a -P /dev /ttyACM0 portot (ha az avrdude hibát kap az érvénytelen eszköz -aláírással kapcsolatban, akkor adjon hozzá egy - F a parancshoz)

Ha minden úgy működik, ahogy kell, akkor most egy LED világít….. „Hello World!”

Ha az ATtiny85 -öt használja, akkor az avrdude parancs a következő lesz:

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

4. lépés: Hello.asm Soronként

Ennek a bevezető oktatóanyagnak a befejezéséhez soronként végigmegyünk a hello.asm programon, hogy lássuk, hogyan működik.

; hello.asm

; bekapcsol egy PB5 -hez csatlakoztatott LED -et (digitális kimenet 13)

Az összeszerelő figyelmen kívül hagy mindent a pontosvessző után, és ez az első két sor egyszerűen "megjegyzés", amely elmagyarázza, mit csinál a program.

.include "./m328Pdef.inc"

Ez a sor azt mondja az összeszerelőnek, hogy tartalmazza a letöltött m328Pdef.inc fájlt. Érdemes ezt egy hasonló fájlok könyvtárába helyezni, majd a fenti sort megváltoztatni, hogy ott mutasson rá.

ldi r16, 0b00100000

Az ldi a "betöltés azonnali" kifejezést jelenti, és azt mondja az összeszerelőnek, hogy vegyen egy működő regisztert, ebben az esetben r16, és töltsön be egy bináris számot, ebben az esetben 0b00100000. Az elöl lévő 0b azt mondja, hogy számunk bináris. Ha akartuk, választhattunk volna egy másik bázist, például hexidimális. Ebben az esetben számunk 0x20 lett volna, ami hexadecimális 0b00100000 esetén. Vagy használhattunk volna 32 -et, ami 10 tizedes tizedesjegy ugyanazon számhoz.

1. gyakorlat: Próbálja meg megváltoztatni a fenti sor számát hexadecimálisra, majd tizedesre a kódban, és ellenőrizze, hogy minden esetben működik -e.

A bináris használata a legegyszerűbb a portok és a nyilvántartások működése miatt. A későbbi oktatóanyagokban részletesebben megvitatjuk az atmega328p portjait és regisztereit, de egyelőre csak azt állítom, hogy az r16 -ot használjuk "munkaregiszterünkként", ami azt jelenti, hogy csak tárolóként fogjuk használni A "regiszter" 8 bites halmaz. 8 pontot jelent, amelyek 0 vagy 1 lehet ("ki" vagy "be"). Amikor a fenti sor segítségével betöltjük a 0b00100000 bináris számot a regiszterbe, egyszerűen eltároltuk ezt a számot az r16 regiszterben.

ki DDRB, r16

Ez a sor utasítja a fordítót, hogy másolja be az r16 regiszter tartalmát a DDRB regiszterbe. A DDRB jelentése "Data Direction Register B", és beállítja a "csapokat" a PortB -n. A 328p pinout térképén látható, hogy 8 db PB0, PB1,…, PB7 feliratú csap található. Ezek a csapok a "PortB" "bitjeit" jelentik, és amikor a 00100000 bináris számot betöltjük a DDRB regiszterbe, azt mondjuk, hogy a PB0, PB1, PB2, PB3, PB4, PB6 és PB7 beállítását Bemeneti csapként szeretnénk beállítani, mivel 0 -k vannak bennük, és a PB5 OUTPUT pin -ként van beállítva, mivel 1 -et tettünk erre a helyre.

ki PortB, r16

Most, hogy rögzítettük a csapok irányát, most beállíthatjuk rájuk a feszültséget. A fenti sor ugyanazt a bináris számot másolja az r16 tárolóregiszterünkből a PortB -be. Ezzel az összes csapot 0 voltra állítja, kivéve a PB5 csapot HIGH -ra, ami 5 volt.

2. gyakorlat: Vegyünk egy digitális multimétert, csatlakoztassuk a fekete vezetéket a földbe (GND), majd teszteljük a PB0 -PB7 csapok mindegyikét a piros vezetékkel. Az egyes tüskék feszültsége pontosan megegyezik a 0b00100000 PortB -be való behelyezésével? Ha vannak olyanok, amelyek nem, miért gondolod, hogy így van? (lásd a pin térképet)

Rajt:

rjmp Start

Végül a fenti első sor egy "címke", amely a kód egy pontját jelöli. Ebben az esetben ezt a helyet "Start" -nak kell címkézni. A második sor azt mondja: "relatív ugrás a Start címkére". A végeredmény az, hogy a számítógépet egy végtelen hurokba helyezzük, amely folyamatosan visszatér a Start -ra. Erre azért van szükségünk, mert a program nem érhet véget, vagy nem eshet le a szikláról, a programnak csak futnia kell, hogy a lámpa világíthasson.

3. gyakorlat: Távolítsa el a fenti két sort a kódjából, hogy a program leessen egy szikláról. Mi történik? Látnia kell valamit, ami úgy néz ki, mint a hagyományos "villogó" program, amelyet Arduino használ "helló világának!". Szerinted miért működik így? (Gondoljon arra, mi kell történnie, amikor a program leomlik egy szikláról…)

5. lépés: Következtetés

Ha idáig eljutott, akkor gratulálok! Most már írhatja az összeszerelési kódot, összeállíthatja és betöltheti a mikrokontrollerre.

Ebben az oktatóanyagban megtanulta a következő parancsok használatát:

ldi hregister, szám betölt egy számot (0-255) a felső félregiszterbe (16-31)

ioregister, register másol egy számot a működő regiszterből az I/O regiszterbe

Az rjmp címke a program "label" feliratú sorára ugrik (ami nem lehet 204 utasításnál távolabb - azaz relatív ugrás)

Most, hogy ezek az alapok kikerültek, folytathatjuk az érdekesebb kódok és érdekesebb áramkörök és eszközök írását anélkül, hogy meg kellene vitatnunk a fordítás és a feltöltés mechanikáját.

Remélem tetszett ez a bevezető oktatóanyag. A következő oktatóanyagban hozzáadunk egy másik áramköri komponenst (egy gombot), és kibővítjük a kódot, hogy a bemeneti portokra és döntésekre is kiterjedjen.

Ajánlott: