Sisällysluettelo:

AVR -mikrokytkimen sulakebitit. Mikro -ohjaimen flash -muistiin luominen ja lataaminen LED -vilkkuva ohjelma: 5 vaihetta
AVR -mikrokytkimen sulakebitit. Mikro -ohjaimen flash -muistiin luominen ja lataaminen LED -vilkkuva ohjelma: 5 vaihetta

Video: AVR -mikrokytkimen sulakebitit. Mikro -ohjaimen flash -muistiin luominen ja lataaminen LED -vilkkuva ohjelma: 5 vaihetta

Video: AVR -mikrokytkimen sulakebitit. Mikro -ohjaimen flash -muistiin luominen ja lataaminen LED -vilkkuva ohjelma: 5 vaihetta
Video: Marlin Firmware - VScode PlatformIO Install - Build Basics 2024, Kesäkuu
Anonim
Image
Image

Tässä tapauksessa luomme yksinkertaisen ohjelman C -koodissa ja poltamme sen mikro -ohjaimen muistiin. Kirjoitamme oman ohjelman ja koomme heksatiedoston käyttämällä Atmel Studiota integroiduna kehitysalustana. Määritämme sulakebitit ja lataamme heksatiedoston AVR ATMega328P -mikro -ohjaimen muistiin käyttämällä omaa ohjelmoijaamme ja ohjelmistoa AVRDUDE.

AVRDUDE - on ohjelma Atmelin AVR -mikro -ohjaimien sirumuistien lataamiseen ja lataamiseen. Se voi ohjelmoida Flashin ja EEPROMin, ja jos sarjaohjelmointiprotokolla tukee sitä, se voi ohjelmoida sulake- ja lukitusbitit.

Vaihe 1: Kirjoita ohjelma ja käännä heksatiedosto Atmel Studion avulla

Kirjoita ohjelma ja käännä heksatiedosto Atmel Studion avulla
Kirjoita ohjelma ja käännä heksatiedosto Atmel Studion avulla
Kirjoita ohjelma ja käännä heksatiedosto Atmel Studion avulla
Kirjoita ohjelma ja käännä heksatiedosto Atmel Studion avulla

Jos sinulla ei ole Atmel Studiota, lataa ja asenna se:

Tämä projekti käyttää C: tä, joten valitse malliluettelosta GCC C Executable Project -vaihtoehto, jos haluat luoda paljain luoin suoritettavan projektin.

Seuraavaksi on määritettävä, mille laitteelle projekti kehitetään. Tämä projekti kehitetään AVR ATMega328P -mikro -ohjaimelle.

Kirjoita ohjelman koodi Atmel Studion Main Source Editor -alueelle. Päälähdeeditori - Tämä ikkuna on nykyisen projektin lähdetiedostojen pääeditori. Editorissa on oikeinkirjoituksen tarkistus ja automaattisen täydennyksen ominaisuudet.

1. Meidän on kerrottava kääntäjälle, millä nopeudella sirumme toimii, jotta se voi laskea viiveet oikein.

#ifndef F_CPU

#define F_CPU 16000000UL // kertoo ohjaimen kristallitaajuuden (16 MHz AVR ATMega328P) #endif

2. Sisällytämme johdanto -osan, johon laitamme sisällytystietomme muista tiedostoista, joka määrittelee globaalit muuttujat ja toiminnot.

#include // otsikko, joka mahdollistaa tiedonkulun hallinnan nastojen yli. Määrittää nastat, portit jne.

#include // otsikko, joka mahdollistaa ohjelman viiveen

3. Johdannon jälkeen tulee päätoiminto ().

int main (void) {

Päätoiminto () on ainutlaatuinen ja erotettu muista toiminnoista. Jokaisella C -ohjelmalla on oltava täsmälleen yksi päätoiminto (). Main () on paikka, jossa AVR alkaa suorittaa koodiasi, kun virta kytketään ensimmäisen kerran, joten se on ohjelman aloituspiste.

4. Aseta PORTB: n nasta 0 lähtöksi.

DDRB = 0b00000001; // Aseta PORTB1 lähtöksi

Teemme tämän kirjoittamalla binääriluvun datasuuntarekisteriin B. Tietojen suuntarekisteri B antaa meille mahdollisuuden syöttää tai tulostaa rekisterin B bitit. 1: n kirjoittaminen saa heidät tulostamaan, kun taas 0 syöttää ne. Koska kiinnitämme LED -valon toimimaan ulostulona, kirjoitamme binääriluvun, jolloin PORT B: n nasta 0 on lähtö.

5. Silmukka.

samalla (1) {

Tämä lausunto on silmukka, jota usein kutsutaan pääsilmuksi tai tapahtumasilmukoksi. Tämä koodi on aina totta; siksi se suorittaa yhä uudelleen ja uudelleen äärettömässä silmukassa. Se ei lopu koskaan. Siksi LED -valo vilkkuu äärettömästi, ellei mikro -ohjaimesta katkaista virtaa tai koodia poisteta ohjelmamuistista.

6. Kytke porttiin PB0 liitetty LED -valo päälle

PORTB = 0b00000001; // sytyttää porttiin PB0 kiinnitetyn LED -valon

Tämä viiva antaa portin PB0 PB0: lle 1. PORTB on AVR-sirun laitteistorekisteri, joka sisältää 8 nastaa, PB7-PB0, vasemmalta oikealle. 1: n asettaminen loppuun antaa 1 PB0: lle; tämä asettaa PB0: n korkealle, mikä käynnistää sen. Siksi nastaan PB0 liitetty LED -valo syttyy ja syttyy.

7. Viive

_viive_ms (1000); // luo 1 sekunnin viiveen

Tämä lauseke luo 1 sekunnin viiveen, jolloin LED-valo syttyy ja palaa täsmälleen yhden sekunnin ajan.

8. Sammuta kaikki B -nastat, mukaan lukien PB0

PORTB = 0b00000000; // Sammuttaa kaikki B -nastat, mukaan lukien PB0

Tämä linja sammuttaa kaikki 8 portin B nastaa, joten jopa PB0 on pois päältä, joten LED sammuu.

9. Toinen viive

_viive_ms (1000); // luo uuden 1 sekunnin viiveen

Se sammuu täsmälleen 1 sekunniksi, ennen kuin aloittaa silmukan alusta ja kohtaa linjan, joka käynnistää sen uudelleen ja toistaa prosessin koko ajan. Tämä tapahtuu loputtomasti, joten LED -valo vilkkuu jatkuvasti ja sammuu.

10. Palautuslausunto

}

paluu (0); // tätä linjaa ei koskaan saavuteta}

Koodimme viimeinen rivi on palautus (0). Vaikka tätä koodia ei koskaan suoriteta, koska on olemassa ääretön silmukka, joka ei koskaan pääty, pöytäkoneita käyttäville ohjelmillemme on tärkeää, että käyttöjärjestelmä tietää, toimivatko ne oikein vai eivät. Tästä syystä kääntäjämme GCC haluaa, että jokainen pää () päättyy palautuskoodiin. Palautuskoodit ovat tarpeettomia AVR -koodille, joka toimii vapaasti seisovana kaikista tukevista käyttöjärjestelmistä. siitä huolimatta kääntäjä antaa varoituksen, jos et lopeta main -näppäintä return (): lla.

Viimeinen vaihe on projektin rakentaminen. Se tarkoittaa kaikkien objektitiedostojen kokoamista ja lopulta linkittämistä suoritettavan tiedoston (.hex) luomiseksi. Tämä heksatiedosto luodaan Project -kansiossa olevan Debug -kansion sisälle. Tämä heksadesimaalitiedosto on valmis ladattavaksi mikro -ohjainsirulle.

Vaihe 2: Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen

Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen
Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen
Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen
Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen
Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen
Mikro -ohjaimen sulakebittien oletusasetusten muuttaminen

On tärkeää muistaa, että joitain sulakebittejä voidaan käyttää tiettyjen sirun osien lukitsemiseen ja ne voivat mahdollisesti lohkoa (tehdä siitä käyttökelvottoman)

ATmega328P -laitteessa on yhteensä 19 sulakebittiä, jotka on jaettu kolmeen eri sulaketavuun. Kolme sulakekärjestä on "laajennetun sulakkeen tavussa", kahdeksan "sulakkeen korkeassa tavussa" ja kahdeksan muuta "sulakkeen alhaisessa tavussa". On myös neljä tavua, jota käytetään lukitusbittien ohjelmointiin.

Jokainen tavu on 8 bittiä ja jokainen bitti on erillinen asetus tai lippu. Kun puhumme asetuksista, ei asetuksista, ohjelmoiduista, ei ohjelmoiduista sulakkeista, käytämme itse asiassa binääriä. 1 tarkoittaa ei asetettu, ei ohjelmoitu ja nolla tarkoittaa asetettua, ohjelmoitua. Kun ohjelmoit sulakkeita, voit käyttää binäärimerkintöjä tai yleisemmin heksadesimaalimerkintöjä.

ATmega 328P -siruissa on sisäänrakennettu RC -oskillaattori, jonka taajuus on 8 MHz. Uusien sirujen mukana toimitetaan tämä sarja kellolähteenä ja CKDIV8 -sulake on aktiivinen, jolloin järjestelmäkello on 1 MHz. Käynnistysaika on asetettu maksimiin ja aikakatkaisu on käytössä.

Uusissa ATMega 328P -piireissä on yleensä seuraavat sulakeasetukset:

Alhainen sulake = 0x62 (0b01100010)

Korkea sulake = 0xD9 (0b11011001)

Laajennettu sulake = 0xFF (0b11111111)

Käytämme ATmega 328 -sirua ulkoisen 16 MHz: n kiteen kanssa. Siksi meidän on ohjelmoitava "Fuse Low Byte" -bitit vastaavasti.

1. Bittit 3-0 ohjaavat oskillaattorivalintaa, ja oletusasetus 0010 on käyttää kalibroitua sisäistä RC-oskillaattoria, jota emme halua. Haluamme pienitehoisen kideoskillaattorin toiminnan välillä 8,0-16,0 MHz, joten bitit 3-1 (CKSEL [3: 1]) on asetettava arvoon 111.

2. Bitit 5 ja 4 ohjaavat käynnistymisaikaa, ja oletusasetus 10 on kuuden kellokierroksen käynnistysviive virrankatkaisusta ja virransäästöstä sekä 14 sekunnin lisäkäynnistysviive plus 65 millisekuntia nollaushetkestä.

Jotta pienitehoinen kideoskillaattori olisi turvallinen, haluamme, että suurin mahdollinen viive on 16 000 kellosykliä virrankatkaisusta ja virransäästöstä, joten SUT [1] -asetukseksi on asetettava 1 ja lisäksi käynnistysviive 14 kellojaksosta plus 65 millisekuntia nollaushetkestä, joten SUT [0] -asetukseksi tulee asettaa 1. Lisäksi CKSEL [0] -asetukseksi tulee asettaa 1.

3. Bitti 6 ohjaa kellon lähtöä porttiin 0, josta emme välitä. Joten bitti 6 voidaan jättää arvoon 1.

4. Bitti 7 ohjaa jakamista kahdeksalla -toimintoa ja oletusasetuksella 0 on ominaisuus käytössä, jota emme halua. Joten bitti 7 on vaihdettava arvosta 0 arvoon 1.

Siksi uuden Fuse Low -tavun pitäisi olla 11111111, joka heksadesimaalimerkinnällä on 0xFF

"Fuse Low Byte" -bittien ohjelmointiin voimme käyttää ohjelmoijaamme (https://www.instructables.com/id/ISP-Programmer-fo…) ja ohjelmistoa AVRDUDE. AVRDUDE on komentorivityökalu, jota käytetään Atmel-mikro-ohjaimista lataamiseen ja lataamiseen.

Lataa AVRDUDE:

Ensinnäkin meidän on lisättävä kuvaus ohjelmoijastamme AVRDUDE -asetustiedostoon. Windowsissa määritystiedosto on tavallisesti samassa paikassa kuin AVRDUDE: n suoritustiedosto.

Liitä teksti määritystiedostoon avrdude.conf:

# ISPProgv1

ohjelmoija id = "ISPProgv1"; desc = "sarjaportin paukutus, nollaus = dtr sck = rts mosi = txd miso = cts"; type = "serbb"; yhteyden_tyyppi = sarja; nollaus = 4; sck = 7; mosi = 3; miso = 8;;

Ennen AVRDUDEn käynnistämistä meidän on kytkettävä mikro -ohjain ohjelmoijaan kaavion mukaisesti

Avaa DOS -kehoteikkuna.

1. Jos haluat nähdä luettelon ohjelmoijista, joita avrdude tukee, kirjoita komento avrdude -c c. Jos kaikki on hyvin, luettelossa pitäisi olla ohjelmointitunnus "ISPProgv1"

2. Jos haluat nähdä luettelon Atmel -laitteista, joita avrdude tukee, kirjoita komento avrdude -c ISPProgv1. Luettelossa pitäisi olla laite m328p Atmel ATMega 328P: lle.

Kirjoita seuraavaksi avrdude -c ISPProgv1 –p m328p, komento kerro avrdude: lle mitä ohjelmoijaa käytetään ja mikä Atmel -mikrokontrolleri on liitetty. Se esittää ATmega328P -allekirjoituksen heksadesimaalimuodossa: 0x1e950f. Siinä esitetään ATmega328P: n sulakebittien ohjelmointi myös heksadesimaalimuodossa; tässä tapauksessa sulaketavu on ohjelmoitu tehdasasetusten mukaan.

Kirjoita seuraavaksi avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Se on komento kertoa avrdudelle, mitä ohjelmoijaa käytetään ja mikä Atmel -mikrokontrolleri on liitetty, ja vaihtaa sulake pienet tavu arvoon 0xFF.

Nyt kellosignaalin pitäisi tulla pienitehoisesta kideoskillaattorista.

Vaihe 3: Ohjelman polttaminen ATMega328P -mikrokontrollerin muistiin

Ohjelman polttaminen ATMega328P -mikrokontrollerin muistiin
Ohjelman polttaminen ATMega328P -mikrokontrollerin muistiin
Ohjelman polttaminen ATMega328P -mikrokontrollerin muistiin
Ohjelman polttaminen ATMega328P -mikrokontrollerin muistiin

Kopioi ensin ohjelman alussa tekemämme heksatiedosto AVRDUDE -hakemistoon.

Kirjoita sitten DOS -kehoteikkunaan komento avrdude –c ISPProgv1 –p m328p –u –U flash: w: [heksatiedoston nimi]

Komento kirjoittaa heksatiedoston mikro -ohjaimen muistiin. Nyt mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti. Tarkistetaan se!

Vaihe 4: Tarkista, että mikro -ohjain toimii ohjelmamme ohjeiden mukaisesti

Tarkista, että mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti
Tarkista, että mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti
Tarkista, että mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti
Tarkista, että mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti
Tarkista, että mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti
Tarkista, että mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti

Liitä komponentit vilkkuvan AVR -piirin AVR -piirikaavion mukaisesti

Ensinnäkin tarvitsemme virtaa, kuten kaikki AVR -piirit. Noin 5 voltin teho riittää AVR -sirun toimintaan. Voit saada tämän joko paristoista tai tasavirtalähteestä. Liitämme +5 V: n virran nastaan 7 ja nastan 8 maadoitukseen leipälevyllä. Molempien nastojen väliin asetamme 0,1μF keraamisen kondensaattorin tasoittaaksesi virtalähteen virran niin, että AVR -siru saa tasaisen virtajohdon.

10 KΩ: n vastusta käytetään laitteen käynnistämiseen (POR). Kun virta kytketään päälle, kondensaattorin jännite on nolla, joten laite nollautuu (koska nollaus on aktiivinen alhainen), kondensaattori latautuu VCC: hen ja nollaus poistetaan käytöstä.

Liitämme LED -valon anodin AVR -nastaan PB0. Tämä on ATMega328P: n nasta 14. Koska se on LED, haluamme rajoittaa LEDiin virtaavan virran, jotta se ei pala. Siksi asetamme 330Ω vastuksen sarjaan LED -valon kanssa. LED -katodi kytketään maahan.

16 MHz: n kristallia käytetään kellon tuottamiseen Atmega328 -mikrokontrollerille ja 22pF -kondensaattoreita käytetään vakauttamaan kiteen toimintaa.

Nämä ovat kaikki liitännät, joita tarvitaan LED -valon sytyttämiseen. Virtalähde.

Ok. LED vilkkuu yhden sekunnin viiveellä. Mikro -ohjaimen työ vastaa tehtäviimme

Vaihe 5: Johtopäätös

Kieltämättä se oli pitkä prosessi vain LED -valon vilkkumiselle, mutta totuus on, että olet onnistunut poistamaan suuret esteet: laitteistoalustan luominen AVR -mikrokontrollerin ohjelmointiin, Atmel Studion käyttäminen integroiduna kehitysalustana ja AVRDUDE -ohjelmiston käyttö AVR -mikrokontrollerin määrittäminen ja ohjelmointi

Jos haluat pysyä ajan tasalla perusmikro -ohjainprojekteistani, tilaa YouTube! Videoideni katsominen ja jakaminen on tapa tukea toimintaani

Tilaa YouTube FOG -kanava

Suositeltava: