Turinys:
- 1 veiksmas: rašymo programa ir kompiliuokite šešioliktainį failą naudodami „Atmel Studio“
- 2 veiksmas: pakeiskite mikrovaldiklio saugiklių bitų numatytąją konfigūraciją
- 3 žingsnis: Įrašykite programą į „ATMega328P“mikrovaldiklio atmintį
- 4 veiksmas: patikrinkite, ar mikrokontroleris veikia pagal mūsų programos instrukcijas
- 5 žingsnis: Išvada
Video: AVR mikrovaldiklio saugiklių bitų konfigūracija. Mikrovaldiklio „Flash“atminties sukūrimas ir įkėlimas LED mirksėjimo programa: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Tokiu atveju sukursime paprastą programą C kodu ir įrašysime ją į mikrovaldiklio atmintį. Mes parašysime savo programą ir sudarysime šešioliktainį failą, naudodami integruotą kūrimo platformą „Atmel Studio“. Mes sukonfigūruosime saugiklių bitus ir įkelsime šešioliktainį failą į AVR ATMega328P mikrovaldiklio atmintį, naudodami savo programuotoją ir programinę įrangą AVRDUDE.
AVRDUDE - programa, skirta atsisiųsti ir įkelti „Atmel“AVR mikrovaldiklių mikroschemų atmintines. Jis gali užprogramuoti „Flash“ir EEPROM, o kai palaikomas serijinio programavimo protokolas, jis gali užprogramuoti saugiklius ir užrakinti bitus.
1 veiksmas: rašymo programa ir kompiliuokite šešioliktainį failą naudodami „Atmel Studio“
Jei neturite „Atmel Studio“, turėtumėte ją atsisiųsti ir įdiegti:
Šiame projekte bus naudojama C, todėl šablonų sąraše pasirinkite parinktį „GCC C Executable Project“, kad sukurtumėte vykdomąjį vykdomąjį projektą.
Toliau būtina nurodyti, kuriam įrenginiui projektas bus kuriamas. Šis projektas bus sukurtas AVR ATMega328P mikrovaldikliui.
Įveskite programos kodą „Atmel Studio“pagrindinio šaltinio redaktoriaus srityje. Pagrindinis šaltinio redaktorius - šis langas yra pagrindinis dabartinio projekto šaltinio failų redaktorius. Redaktorius turi rašybos tikrinimo ir automatinio užbaigimo funkcijas.
1. Turime kompiliatoriui pasakyti, kokiu greičiu veikia mūsų lustas, kad jis galėtų tinkamai apskaičiuoti vėlavimus.
#ifndef F_CPU
#define F_CPU 16000000UL // nurodo valdiklio kristalų dažnį (16 MHz AVR ATMega328P) #endif
2. Įtraukiame preambulę, į kurią įdedame įtraukimo informaciją iš kitų failų, kuri apibrėžia pasaulinius kintamuosius ir funkcijas.
#include // antraštė, kad būtų galima valdyti srautų duomenų srautus. Apibrėžia kaiščius, prievadus ir kt.
#include // antraštė, kad įjungtumėte programos uždelsimo funkciją
3. Po preambulės ateina pagrindinė () funkcija.
int main (void) {
Pagrindinė () funkcija yra unikali ir atskirta nuo visų kitų funkcijų. Kiekviena C programa turi turėti tiksliai vieną pagrindinę () funkciją. Pagrindinis () yra vieta, kur AVR pradeda vykdyti jūsų kodą, kai tik pirmą kartą įjungiamas maitinimas, taigi tai yra programos įėjimo taškas.
4. Nustatykite PORTB kaištį 0 kaip išvestį.
DDRB = 0b00000001; // Nustatykite PORTB1 kaip išvestį
Tai darome įrašydami dvejetainį skaičių į duomenų krypčių registrą B. Duomenų krypčių registras B leidžia mums įvesti ar išvesti B registro bitus. Parašius 1, jie bus išvesti, o 0 - įvesti. Kadangi mes prijungiame šviesos diodą, kad veiktų kaip išvestis, mes rašome dvejetainį skaičių, todėl PORT B kaištis 0 yra išvestis.
5. Kilpa.
nors (1) {
Šis teiginys yra kilpa, dažnai vadinama pagrindine kilpa arba įvykių kilpa. Šis kodas visada teisingas; todėl jis vėl ir vėl vykdomas begalinėje kilpoje. Tai niekada nesiliauja. Todėl šviesos diodas mirksės begalybėje, nebent maitinimas bus išjungtas iš mikrovaldiklio arba kodas nebus ištrintas iš programos atminties.
6. Įjunkite šviesos diodą, pritvirtintą prie PB0 prievado
PORTB = 0b00000001; // įjungia šviesos diodą, prijungtą prie prievado PB0
Ši eilutė suteikia 1 PortB PB0. PORTB yra aparatūros registras AVR luste, kuriame yra 8 kaiščiai, PB7-PB0, einantys iš kairės į dešinę. Pabaigoje uždėjus 1, PB0 gaunamas 1; tai nustato aukštą PB0, kuris jį įjungia. Todėl prie PB0 kaiščio pritvirtintas šviesos diodas įsijungs ir užsidegs.
7. Vėlavimas
_delay_ms (1000); // sukuria 1 sekundės vėlavimą
Šis teiginys sukuria 1 sekundės vėlavimą, kad šviesos diodas įsijungtų ir liktų įjungtas tiksliai 1 sekundę.
8. Išjunkite visus B kaiščius, įskaitant PB0
PORTB = 0b00000000; // Išjungia visus B kaiščius, įskaitant PB0
Ši linija išjungia visus 8 B prievado kaiščius, kad net PB0 būtų išjungtas, taigi šviesos diodas išsijungtų.
9. Kitas vėlavimas
_delay_ms (1000); // sukuria dar 1 sekundės vėlavimą
Jis išsijungia tiksliai 1 sekundei, prieš pradedant ciklą iš naujo ir susidūrus su linija, kuri vėl ją įjungia, pakartodama procesą iš naujo. Tai vyksta be galo, todėl šviesos diodas nuolat mirksi ir išsijungia.
10. Grąžinimo pareiškimas
}
grįžti (0); // ši linija niekada nepasiekiama}
Paskutinė mūsų kodo eilutė yra grąžinimo (0) teiginys. Nors šis kodas niekada nevykdomas, nes yra begalinis ciklas, kuris niekada nesibaigia, mūsų programoms, kurios veikia staliniuose kompiuteriuose, svarbu, kad operacinė sistema žinotų, ar jos veikė teisingai, ar ne. Dėl šios priežasties GCC, mūsų kompiliatorius, nori, kad kiekvienas pagrindinis () baigtųsi grąžinimo kodu. Grąžinimo kodai nereikalingi AVR kodui, kuris veikia atskirai bet kurioje palaikančioje operacinėje sistemoje; nepaisant to, kompiliatorius iškels įspėjimą, jei neužbaigsite pagrindinio su return ().
Paskutinis žingsnis yra projekto sukūrimas. Tai reiškia, kad reikia surinkti ir galiausiai susieti visus objekto failus, kad būtų sukurtas vykdomojo failo (.hex) failas. Šis šešiakampis failas yra sukurtas aplanke „Debug“, kuris yra aplanke „Project“. Šis šešiakampis failas yra paruoštas įkelti į mikrovaldiklio mikroschemą.
2 veiksmas: pakeiskite mikrovaldiklio saugiklių bitų numatytąją konfigūraciją
Svarbu atsiminti, kad kai kurie saugiklių antgaliai gali būti naudojami tam tikriems mikroschemos aspektams užrakinti ir gali jį plyti (padaryti jį netinkamą naudoti)
Iš viso ATmega328P naudojami 19 saugiklių bitų, jie yra atskirti į tris skirtingus saugiklių baitus. Trys saugiklių bitai yra „Išplėstiniame saugiklių baite“, aštuoni - „Saugiklių aukštajame baite“, o dar aštuoni - saugiklių mažame baite. Taip pat yra ketvirtas baitas, naudojamas užrakto bitams užprogramuoti.
Kiekvienas baitas yra 8 bitai, o kiekvienas bitas yra atskiras nustatymas arba vėliava. Kai mes kalbame apie nustatymą, o ne nustatymą, užprogramuotus, neužprogramuotus saugiklius, mes iš tikrųjų naudojame dvejetainius. 1 reiškia nenustatytą, neužprogramuotą, o nulis - nustatytas, užprogramuotas. Programuodami saugiklius galite naudoti dvejetainį žymėjimą arba dažniau šešioliktainį žymėjimą.
„ATmega 328P“lustuose yra įmontuotas RC generatorius, kurio dažnis yra 8 MHz. Nauji lustai siunčiami su šiuo rinkiniu kaip laikrodžio šaltinis, o CKDIV8 saugiklis yra aktyvus, todėl gaunamas 1 MHz sistemos laikrodis. Paleidimo laikas nustatytas į maksimalų ir įjungtas laikas.
Nauji „ATMega 328P“lustai paprastai turi šiuos saugiklių nustatymus:
Mažas saugiklis = 0x62 (0b01100010)
Didelis saugiklis = 0xD9 (0b11011001)
Išplėstas saugiklis = 0xFF (0b11111111)
Mes naudosime „ATmega 328“lustą su išoriniu 16 MHz kristalu. Todėl turime atitinkamai užprogramuoti „Fuse Low Byte“bitus.
1. Bitai 3-0 kontroliuoja osciliatoriaus pasirinkimą, o numatytasis 0010 nustatymas yra naudoti kalibruotą vidinį RC generatorių, kurio mes nenorime. Mes norime, kad mažos galios kristalų osciliatoriaus veikimas būtų nuo 8,0 iki 16,0 MHz, todėl bitai 3-1 (CKSEL [3: 1]) turėtų būti nustatyti į 111.
2. 5 ir 4 bitai kontroliuoja paleidimo laiką, o numatytasis 10 nustatymas yra skirtas šešių laikrodžio ciklų paleidimo atidėjimui nuo maitinimo išjungimo ir energijos taupymo, taip pat papildomas paleidimo uždelsimas-14 laikrodžio ciklų ir 65 milisekundės nuo atstatymo.
Siekdami užtikrinti mažos galios kristalų osciliatoriaus saugumą, norime, kad maksimalus galimas 16 000 laikrodžio ciklų atidėjimas išjungus ir taupant energiją, todėl SUT [1] turėtų būti nustatytas į 1 ir papildomas paleidimo uždelsimas iš 14 laikrodžio ciklų plius 65 milisekundžių nuo atstatymo, todėl SUT [0] turėtų būti nustatytas į 1. Be to, CKSEL [0] turėtų būti nustatytas į 1.
3. 6 bitas valdo laikrodžio išėjimą į PORTB0, kuris mums nerūpi. Taigi, 6 bitą galima palikti 1.
4. 7 bitas valdo padalijimo iš 8 operaciją, o numatytasis 0 nustatymas turi funkciją, kurios mes nenorime. Taigi 7 bitą reikia pakeisti iš 0 į 1.
Todėl naujas „Fuse Low Byte“turėtų būti 11111111, kuris šešioliktainiu žymėjimu yra 0xFF
Norėdami užprogramuoti „Fuse Low Byte“bitus, galime naudoti savo programuotoją (https://www.instructables.com/id/ISP-Programmer-fo…) ir programinę įrangą AVRDUDE. AVRDUDE yra komandų eilutės įrankis, naudojamas atsisiųsti ir įkelti į „Atmel“mikrovaldiklius.
Atsisiųskite AVRDUDE:
Pirma, prie AVRDUDE konfigūracijos failo turime pridėti mūsų programuotojo aprašymą. „Windows“sistemoje konfigūracijos failas paprastai yra toje pačioje vietoje kaip ir vykdomasis AVRDUDE failas.
Įklijuokite tekstą į konfigūracijos failą avrdude.conf:
# ISPProgv1
programuotojas id = "ISPProgv1"; desc = "serijinio prievado trenksmas, atstatymas = dtr sck = rts mosi = txd miso = cts"; tipas = "serbb"; ryšio_ tipas = serijinis; atstatyti = 4; sck = 7; mosi = 3; miso = 8;;
Prieš paleisdami AVRDUDE, pagal schemą privalome prijungti mikrovaldiklį prie programuotojo
Atidarykite DOS raginimo langą.
1. Norėdami peržiūrėti programuotojų, kuriuos palaiko avrdude, sąrašą, įveskite komandą avrdude -c c. Jei viskas gerai, sąraše turėtų būti programuotojo ID „ISPProgv1“
2. Norėdami peržiūrėti „Atmel“įrenginių, kuriuos palaiko avrdude, sąrašą, įveskite komandą avrdude -c ISPProgv1. Sąraše turėtų būti įrenginys „m328p“, skirtas „Atmel ATMega 328P“.
Tada įveskite avrdude -c ISPProgv1 –p m328p, komanda pasakykite avrdude, koks programuotojas naudojamas ir koks „Atmel“mikrovaldiklis yra prijungtas. Jame pateikiamas ATmega328P parašas šešioliktainiu žymėjimu: 0x1e950f. Jis pateikia saugiklių bitų programavimą, šiuo metu esantį ATmega328P, taip pat šešioliktainiu žymėjimu; šiuo atveju saugiklių baitai yra užprogramuoti pagal gamyklinius nustatymus.
Tada įveskite avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, tai komanda, skirta pasakyti avrdude, koks programuotojas naudojamas ir koks „Atmel“mikrovaldiklis prijungtas, ir pakeisti saugiklių mažąjį baitą į 0xFF.
Dabar laikrodžio signalas turėtų ateiti iš mažos galios kristalų osciliatoriaus.
3 žingsnis: Įrašykite programą į „ATMega328P“mikrovaldiklio atmintį
Pirmiausia nukopijuokite šešiakampį programos failą, kurį sudarėme instrukcijos pradžioje, į katalogą AVRDUDE.
Tada DOS raginimo lange įveskite komandą avrdude –c ISPProgv1 –p m328p –u –U flash: w: [jūsų šešiakampio failo pavadinimas]
Komanda įrašo hex failą į mikrovaldiklio atmintį. Dabar mikrovaldiklis veikia pagal mūsų programos instrukcijas. Patikrinkime!
4 veiksmas: patikrinkite, ar mikrokontroleris veikia pagal mūsų programos instrukcijas
Prijunkite komponentus pagal AVR mirksinčios šviesos diodų grandinės schemą
Pirma, mums reikia energijos, kaip ir visoms AVR grandinėms. AVR lusto veikimui pakanka apie 5 voltų galios. Tai galite gauti iš baterijų arba nuolatinės srovės maitinimo šaltinio. Mes prijungiame +5 V maitinimo prie 7 kaiščio, o 8 kaištį - prie duonos lentos. Tarp abiejų kaiščių dedame 0,1μF keraminį kondensatorių, kad išlygintume maitinimo šaltinio galią, kad AVR lustas gautų lygią elektros liniją.
10KΩ rezistorius naudojamas įrenginiui įjungti maitinimą (POR). Įjungus maitinimą, įtampa kondensatoriuje bus lygi nuliui, todėl prietaisas atstatomas (nes atstatymas yra aktyvus žemas), tada kondensatorius įkraunamas į VCC ir atstatymas bus išjungtas.
Mes prijungiame savo LED anodą prie AVR kaiščio PB0. Tai yra „ATMega328P“14 kaištis. Kadangi tai yra šviesos diodas, norime apriboti srovę, tekančią į šviesos diodą, kad ji neišdegtų. Štai kodėl mes dedame 330Ω rezistorių nuosekliai su šviesos diodu. Šviesos diodo katodas prijungiamas prie žemės.
16 MHz kristalas naudojamas laikrodžiui „Atmega328“mikrovaldiklyje, o 22pF kondensatoriai - stabilizuoti kristalų veikimą.
Tai visos jungtys, būtinos šviesos diodui uždegti. Maitinimo šaltinis.
Gerai. Šviesos diodas mirksi su vienos sekundės vėlavimu. Mikrovaldiklio darbas atitinka mūsų užduotis
5 žingsnis: Išvada
Tiesa, tai buvo ilgas procesas, kai tiesiog mirgėjo šviesos diodas, tačiau tiesa ta, kad jūs sėkmingai pašalinote pagrindines kliūtis: sukūrėte aparatinės įrangos platformą, skirtą programuoti AVR mikrovaldiklį, naudodamiesi „Atmel Studio“kaip integruota kūrimo platforma, naudodami AVRDUDE kaip programinę įrangą konfigūruoti ir programuoti AVR mikrovaldiklį
Jei norite nuolat atnaujinti mano pagrindinius mikrovaldiklių projektus, užsiprenumeruokite mano „YouTube“! Vaizdo įrašų žiūrėjimas ir bendrinimas yra būdas paremti tai, ką darau
Prenumeruokite „YouTube“FOG kanalą
Rekomenduojamas:
„Arduino Nano“-MMA8452Q 3 ašių 12 bitų/8 bitų skaitmeninio akselerometro pamoka: 4 žingsniai
„Arduino Nano“-MMA8452Q 3 ašių 12 bitų/8 bitų skaitmeninio pagreičio matuoklio pamoka: „MMA8452Q“yra protingas, mažos galios, trijų ašių, talpinis, mikromašinis pagreičio matuoklis, turintis 12 bitų skiriamąją gebą. Lanksčios vartotojo programuojamos parinktys pateikiamos naudojant pagreičio matuoklio įterptas funkcijas, kurias galima sukonfigūruoti dviem pertraukomis
Raspberry Pi MMA8452Q 3 ašių 12 bitų/8 bitų skaitmeninio akselerometro „Python“vadovėlis: 4 žingsniai
„Raspberry Pi MMA8452Q“3 ašių 12 bitų/8 bitų skaitmeninio akselerometro „Python“vadovėlis: „MMA8452Q“yra protingas, mažos galios, trijų ašių, talpinis, mikromechaninis pagreičio matuoklis, turintis 12 bitų skiriamąją gebą. Lanksčios vartotojo programuojamos parinktys pateikiamos naudojant pagreičio matuoklio įterptas funkcijas, kurias galima sukonfigūruoti dviem pertraukomis
„Arduino Uno“pamoka 1 - pagrindinė mirksėjimo programa: 4 žingsniai
„Arduino Uno“pamoka 1 - pagrindinė mirksėjimo programa: Sveiki visi! Džiaugiuosi galėdamas paskelbti savo pirmąjį pamokomą dalyką! Ši mintis man kilo, kai man buvo sunku pradėti naudotis „Arduino Uno“, todėl, turėdamas tam tikrų sunkumų, paaiškinsiu čia esantiems niekam tikusiems, kad tokie kaip aš nežinau
„Pasidaryk pats“„MusiLED“, muzikos sinchronizuoti šviesos diodai su vienu paspaudimu „Windows“ir „Linux“programa (32 bitų ir 64 bitų). Lengva atkurti, paprasta naudoti, lengva perkelti: 3 žingsniai
Pasidaryk pats „MusiLED“, muzikos sinchronizuoti šviesos diodai su vienu paspaudimu „Windows“ir „Linux“programa (32 bitų ir 64 bitų). Lengva atkurti, paprasta naudoti, lengva perkelti. Šis projektas padės jums prijungti 18 šviesos diodų (6 raudonos + 6 mėlynos + 6 geltonos) prie „Arduino“plokštės ir išanalizuoti kompiuterio garso plokštės realaus laiko signalus ir perduoti juos šviesos diodai, kad jie užsidegtų pagal ritmo efektus (Snare, High Hat, Kick)
8 bitų „Mario“sukūrimas: 5 žingsniai
8 bitų „Mario“kūrimas: šioje trumpoje pamokoje parodysiu, kaip lengvai padaryti 8 bitų „mario“„Photoshop CS3“, bet galite naudoti „Ms paint“ar bet kurią kitą programą. Tai taip pat mano pirmasis Instructable !!!! Woohoo