Sisukord:

AVR mikrokontrolleri kaitsmebittide konfiguratsioon. Mikrokontrolleri välkmällu LED -i vilkumisprogrammi loomine ja üleslaadimine: 5 sammu
AVR mikrokontrolleri kaitsmebittide konfiguratsioon. Mikrokontrolleri välkmällu LED -i vilkumisprogrammi loomine ja üleslaadimine: 5 sammu

Video: AVR mikrokontrolleri kaitsmebittide konfiguratsioon. Mikrokontrolleri välkmällu LED -i vilkumisprogrammi loomine ja üleslaadimine: 5 sammu

Video: AVR mikrokontrolleri kaitsmebittide konfiguratsioon. Mikrokontrolleri välkmällu LED -i vilkumisprogrammi loomine ja üleslaadimine: 5 sammu
Video: LDmicro 21: настройка режима C и Arduino Mega (программирование микроконтроллера с помощью LDmicro) 2024, Juuni
Anonim
Image
Image

Sel juhul loome lihtsa programmi C -koodis ja põletame selle mikrokontrolleri mällu. Kirjutame oma programmi ja koostame hex -faili, kasutades Atmel Studio integreeritud arendusplatvormina. Konfigureerime kaitsmebitte ja laadime hex -faili AVR ATMega328P mikrokontrolleri mällu, kasutades oma programmeerijat ja tarkvara AVRDUDE.

AVRDUDE - on programm Atmeli AVR -mikrokontrollerite kiibil olevate mälude allalaadimiseks ja üleslaadimiseks. See võib programmeerida välklampi ja EEPROM -i ning seal, kus seda toetab jadaprogrammeerimisprotokoll, saab programmeerida kaitsmeid ja lukustusbitte.

Samm: kirjutamisprogramm ja kompileerige Hex -fail Atmel Studio abil

Kirjutamisprogramm ja kompileerige Hex -fail Atmel Studio abil
Kirjutamisprogramm ja kompileerige Hex -fail Atmel Studio abil
Kirjutamisprogramm ja kompileerige Hex -fail Atmel Studio abil
Kirjutamisprogramm ja kompileerige Hex -fail Atmel Studio abil

Kui teil pole Atmel Studio'i, peaksite selle alla laadima ja installima:

See projekt kasutab C-d, seega valige mallide loendist suvand GCC C Executable Project, et genereerida palja luuga käivitatav projekt.

Järgmisena on vaja täpsustada, millise seadme jaoks projekti arendatakse. See projekt töötatakse välja AVR ATMega328P mikrokontrolleri jaoks.

Sisestage programmi kood Atmel Studio põhiallikatöötleja alale. Peamine allika redaktor - see aken on praeguse projekti lähtefailide peamine redaktor. Toimetajal on õigekirjakontroll ja automaatse täitmise funktsioonid.

1. Peame kompilaatorile ütlema, millise kiirusega meie kiip töötab, et ta saaks viivitusi õigesti arvutada.

#ifndef F_CPU

#define F_CPU 16000000UL // ütle kontrolleri kristallsagedust (16 MHz AVR ATMega328P) #endif

2. Kaasame preambuli, kuhu paneme oma kaasamise teabe teistest failidest, mis määratleb globaalsed muutujad ja funktsioonid.

#include // päis, et võimaldada andmevoo juhtimist nööpnõelte üle. Määrab tihvtid, pordid jne.

#include // päis, et lubada programmis viivitusfunktsioon

3. Pärast preambulat tuleb funktsioon ().

int main (tühine) {

Põhifunktsioon () on ainulaadne ja eraldatud kõigist teistest funktsioonidest. Igal C -programmil peab olema täpselt üks põhifunktsioon (). Main () on koht, kus AVR hakkab teie koodi käivitama, kui toide esimest korda sisse lülitatakse, seega on see programmi sisenemispunkt.

4. Seadke väljundiks PORTB -i tihvt 0.

DDRB = 0b00000001; // Määra väljundiks PORTB1

Me teeme seda, kirjutades andmesuundade registrisse B kahendarvu. Andmesuundade register B võimaldab meil registri B bitti sisestada või väljastada. 1 kirjutamine muudab need väljundiks, 0 aga sisendiks. Kuna kinnitame väljundina LED -i, kirjutame binaararvu, muutes väljundiks PORT B tihvti 0.

5. Silmus.

samas (1) {

See avaldus on tsükkel, mida sageli nimetatakse peamiseks silmuseks või sündmussilmuseks. See kood on alati tõsi; seetõttu täidab see ikka ja jälle lõpmatu ahela. See ei lõpe kunagi. Seetõttu vilgub LED lõpmatuseni, välja arvatud juhul, kui mikrokontrolleri toide on välja lülitatud või kood programmimälust kustutatud.

6. Lülitage sisse porti PB0 kinnitatud LED

PORTB = 0b00000001; // lülitab sisse pordi PB0 külge kinnitatud LED -i

See rida annab PortB PB0 -le 1. PORTB on riistvararegister AVR-kiibil, mis sisaldab 8 tihvti, PB7-PB0, mis liiguvad vasakult paremale. Lõpu 1 panemine annab PB0 -le 1; see seab PB0 kõrgeks, mis selle sisse lülitab. Seetõttu lülitub tihvti PB0 külge kinnitatud LED sisse ja süttib.

7. Viivitus

_ viivitus_ms (1000); // loob 1-sekundilise viivituse

See avaldus tekitab 1-sekundilise viivituse, nii et LED lülitub sisse ja jääb põlema täpselt 1 sekundiks.

8. Lülitage välja kõik B -tihvtid, sealhulgas PB0

PORTB = 0b00000000; // Lülitab välja kõik B -tihvtid, sealhulgas PB0

See joon lülitab välja kõik 8 pordi B tihvti, nii et isegi PB0 on välja lülitatud, nii et LED kustub.

9. Veel üks viivitus

_ viivitus_ms (1000); // loob veel 1-sekundilise viivituse

See lülitub täpselt 1 sekundiks välja, enne kui alustate tsüklit uuesti ja näete joont, mis lülitab selle uuesti sisse, korrates protsessi kogu aeg. See juhtub lõputult, nii et LED vilgub pidevalt sisse ja välja.

10. Tagastusavaldus

}

tagasitulek (0); // sellele reale ei jõuta kunagi}

Meie koodi viimane rida on tagastus (0) avaldus. Isegi kui seda koodi ei täideta kunagi, kuna meie arvutites töötavate programmide jaoks on lõputu tsükkel, mis ei lõpe kunagi, on operatsioonisüsteemi jaoks oluline teada, kas need toimisid õigesti või mitte. Sel põhjusel soovib meie kompilaator GCC, et iga peamine () lõpetaks tagasisaatekoodiga. Tagastamiskoodid ei ole vajalikud AVR -koodi jaoks, mis töötab mis tahes toetava operatsioonisüsteemi puhul eraldi; sellegipoolest annab kompilaator hoiatuse, kui te ei lõpeta maini tagasitulekuga ().

Viimane samm on projekti koostamine. See tähendab kõigi objektifailide koostamist ja lõpuks linkimist käivitatava faili (.hex) genereerimiseks. See kuueteistkümnendfail luuakse kaustas Projekt, mis asub projekti kaustas. See kuusnurkfail on mikrokontrolleri kiibile laadimiseks valmis.

2. samm: mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine

Mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine
Mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine
Mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine
Mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine
Mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine
Mikrokontrolleri kaitsmebittide vaikekonfiguratsiooni muutmine

Oluline on meeles pidada, et mõnda kaitsmeotsikut saab kasutada kiibi teatud aspektide lukustamiseks ja see võib selle potentsiaalselt tihendada (muuta kasutuskõlbmatuks)

ATmega328P -s kasutatakse kokku 19 kaitsmebitti ja need on eraldatud kolmeks erinevaks kaitsmebaidiks. Kolm kaitsmebitti sisalduvad "laiendatud kaitsmebaidis", kaheksa "kaitsme kõrge baidis" ja veel kaheksa "kaitsme madala baidi" sees. Samuti on olemas neljas bait, mida kasutatakse lukustusbittide programmeerimiseks.

Iga bait on 8 bitti ja iga bit on eraldi seade või lipp. Kui me räägime seadistamisest, mitte seadistamisest, programmeeritud, mitte programmeeritud kaitsmetest, siis me tegelikult kasutame binaarset. 1 tähendab, et pole seadistatud, pole programmeeritud ja null tähendab, et on programmeeritud. Kaitsmete programmeerimisel võite kasutada binaarset või sagedamini kuueteistkümnendmärgistust.

ATmega 328P kiipidel on sisseehitatud RC -ostsillaator, mille sagedus on 8 MHz. Selle komplektiga tarnitakse uued kiibid kellaallikana ja CKDIV8 kaitse on aktiivne, mille tulemuseks on 1 MHz süsteemikell. Käivitusaeg on seatud maksimaalsele ja aegumisperiood on lubatud.

Uutel ATMega 328P kiipidel on tavaliselt järgmised kaitseseaded:

Madal kaitse = 0x62 (0b01100010)

Kõrge kaitse = 0xD9 (0b11011001)

Laiendatud kaitse = 0xFF (0b11111111)

Kasutame ATmega 328 kiipi koos välise 16MHz kristalliga. Seetõttu peame vastavalt programmeerima "Fuse Low Byte" bitid.

1. Bittid 3-0 juhivad ostsillaatori valikut ja vaikeseade 0010 on kasutada kalibreeritud sisemist RC-ostsillaatorit, mida me ei soovi. Soovime väikese võimsusega kristallostsillaatori tööd vahemikus 8,0 kuni 16,0 MHz, seega tuleks bittide 3-1 (CKSEL [3: 1]) väärtuseks seada 111.

2. Bitid 5 ja 4 juhivad käivitamisaega ning vaikeseade 10 on käivitamise viivitus kuueks tsükliks toite väljalülitamisest ja energiasäästust, pluss täiendav käivitusviivitus 14 kellatsüklit pluss 65 millisekundit pärast lähtestamist.

Väikese võimsusega kristallostsillaatori turvalisuse huvides soovime maksimaalset võimalikku viivitust 16 000 taktsüklit pärast väljalülitamist ja energiasäästu, nii et SUT [1] tuleks seada väärtusele 1, millele lisandub täiendav käivitusviivitus 14 tsüklist pluss 65 millisekundit pärast lähtestamist, nii et SUT [0] peaks olema seatud väärtusele 1. Lisaks peaks CKSEL [0] olema 1.

3. Bit 6 juhib kella väljundit PORTB0 -le, millest me ei hooli. Niisiis, bitti 6 võib jätta väärtuseks 1.

4. Bitt 7 juhib 8-ga jagamist ja vaikeseadistuseks 0 on lubatud funktsioon, mida me ei soovi. Niisiis, bit 7 tuleb muuta 0 -lt 1 -le.

Seetõttu peaks uus kaitsme madalbait olema 11111111, mis kuueteistkümnendmärgis on 0xFF

"Fuse Low Byte" bittide programmeerimiseks saame kasutada oma programmeerijat (https://www.instructables.com/id/ISP-Programmer-fo…) ja tarkvara AVRDUDE. AVRDUDE on käsurea utiliit, mida kasutatakse Atmeli mikrokontrollerite allalaadimiseks ja üleslaadimiseks.

Laadige alla AVRDUDE:

Esiteks peame AVRDUDE konfiguratsioonifaili lisama meie programmeerija kirjelduse. Windowsis on konfiguratsioonifail tavaliselt AVRDUDE käivitatava failiga samas kohas.

Kleepige tekst konfiguratsioonifaili avrdude.conf:

# ISPProgv1

programmeerija id = "ISPProgv1"; desc = "jadaportide paugutamine, lähtestamine = dtr sck = rts mosi = txd miso = cts"; tüüp = "serbb"; ühenduse_tüüp = jada; lähtestamine = 4; sck = 7; mosi = 3; miso = 8;;

Enne AVRDUDE käivitamist peame skeemi kohaselt ühendama mikrokontrolleri programmeerijaga

Avage DOS -i aken.

1. Avrdude toetatud programmeerijate loendi vaatamiseks tippige käsk avrdude -c c. Kui kõik on korras, peaks loendis olema programmeerija ID "ISPProgv1"

2. Avrdude toetatud Atmeli seadmete loendi vaatamiseks tippige käsk avrdude -c ISPProgv1. Loendis peaks olema Atmel ATMega 328P jaoks mõeldud seade m328p.

Seejärel tippige avrdude -c ISPProgv1 –p m328p, käsk ütleb avrdude, millist programmeerijat kasutatakse ja milline Atmeli mikrokontroller on lisatud. See esitab ATmega328P allkirja kuueteistkümnendsüsteemis: 0x1e950f. See esitab kaitsmebittide programmeerimise praegu ATmega328P -s ka kuueteistkümnendsüsteemis; sel juhul on kaitsmebaidid programmeeritud tehase vaikeseade järgi.

Järgmisena tippige avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, See on käsk avrdude'ile öelda, millist programmeerijat kasutatakse ja milline Atmeli mikrokontroller on kinnitatud, ning muuta Fuse Low Byte väärtuseks 0xFF.

Nüüd peaks kella signaal tulema väikese võimsusega kristallostsillaatorist.

Samm: programmi põletamine ATMega328P mikrokontrolleri mällu

Programmi põletamine ATMega328P mikrokontrolleri mällu
Programmi põletamine ATMega328P mikrokontrolleri mällu
Programmi põletamine ATMega328P mikrokontrolleri mällu
Programmi põletamine ATMega328P mikrokontrolleri mällu

Esiteks kopeerige programmi kuueteistkümnendfail, mille koostasime juhendi alguses, kataloogi AVRDUDE.

Seejärel tippige DOS -i aknasse käsk avrdude –c ISPProgv1 –p m328p –u –U flash: w: [teie kuueteistkümnendfaili nimi]

Käsk kirjutab hex -faili mikrokontrolleri mällu. Nüüd töötab mikrokontroller vastavalt meie programmi juhistele. Vaatame üle!

Samm: kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele

Kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele
Kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele
Kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele
Kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele
Kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele
Kontrollige, kas mikrokontroller töötab vastavalt meie programmi juhistele

Ühendage komponendid vastavalt AVR vilkuva LED -ahela skemaatilisele skeemile

Esiteks vajame voolu, nagu kõik AVR -ahelad. AVR -kiibi töötamiseks piisab umbes 5 -voldisest võimsusest. Selle saate kas patareidest või alalisvoolu toiteallikast. Ühendame pingega +5 V toite 7 ja ühendame tihvti 8 leivaplaadil oleva maandusega. Mõlema tihvti vahele asetame 0,1 μF keraamilise kondensaatori, et ühtlustada toiteallika võimsust, nii et AVR -kiip saaks sujuva toiteliini.

10KΩ takisti kasutatakse seadme sisselülitamise lähtestamiseks (POR). Kui toide on sisse lülitatud, on kondensaatori pinge null, nii et seade lähtestab (kuna lähtestamine on aktiivne madal), siis laeb kondensaator VCC -le ja lähtestamine keelatakse.

Me ühendame oma LED -i anoodi AVR -pin PB0 -ga. See on ATMega328P tihvt 14. Kuna see on LED, tahame piirata LED -i voolavat voolu, et see ei põleks. Seetõttu asetame 330Ω takisti LED -iga järjestikku. LED -i katood ühendatakse maaga.

16 MHz kristalli kasutatakse Atmega328 mikrokontrolleri kella andmiseks ja 22pF kondensaatoreid kasutatakse kristalli töö stabiliseerimiseks.

Need on kõik LED -i süttimiseks vajalikud ühendused. Toiteallikas.

Okei. LED vilgub ühe sekundilise viivitusega. Mikrokontrolleri töö vastab meie ülesannetele

5. samm: järeldus

Tuleb tunnistada, et LED -i vilkumine oli pikk protsess, kuid tõde on see, et olete edukalt kõrvaldanud peamised takistused: riistvaraplatvormi loomine AVR -mikrokontrolleri programmeerimiseks, Atmel Studio kasutamine integreeritud arendusplatvormina, tarkvara AVRDUDE kasutamine AVR -mikrokontrolleri seadistamine ja programmeerimine

Kui soovite olla kursis minu mikrokontrollerite baasprojektidega, tellige minu YouTube! Minu videote vaatamine ja jagamine on üks viis minu tegemiste toetamiseks

Telli YouTube'i FOG -kanal

Soovitan: