Orodha ya maudhui:

Usanidi wa Baiti ya Fuse ya AVR Microcontroller. Kuunda na Kupakia katika Kumbukumbu ya Flash ya Microcontroller Programu ya Kuangaza ya LED. 5 Hatua
Usanidi wa Baiti ya Fuse ya AVR Microcontroller. Kuunda na Kupakia katika Kumbukumbu ya Flash ya Microcontroller Programu ya Kuangaza ya LED. 5 Hatua

Video: Usanidi wa Baiti ya Fuse ya AVR Microcontroller. Kuunda na Kupakia katika Kumbukumbu ya Flash ya Microcontroller Programu ya Kuangaza ya LED. 5 Hatua

Video: Usanidi wa Baiti ya Fuse ya AVR Microcontroller. Kuunda na Kupakia katika Kumbukumbu ya Flash ya Microcontroller Programu ya Kuangaza ya LED. 5 Hatua
Video: SKR PRO V1.1 TFT35 V2 2024, Juni
Anonim
Image
Image

Katika kesi hii tutaunda programu rahisi katika msimbo wa C na kuichoma kwenye kumbukumbu ya mdhibiti mdogo. Tutaandika programu yetu na kukusanya faili ya hex, tukitumia Studio ya Atmel kama jukwaa la maendeleo jumuishi. Tutasanidi bits za fuse na kupakia faili ya hex kwenye kumbukumbu ya microcontroller ya AVR ATMega328P, kwa kutumia programu yetu na programu ya AVRDUDE.

AVRDUDE - ni programu ya kupakua na kupakia kumbukumbu za kwenye-chip za watawala wadhibiti wa Atmel's AVR. Inaweza kupanga Flash na EEPROM, na ambapo inasaidiwa na itifaki ya programu ya serial, inaweza kupanga fuse na kufunga vifungo.

Hatua ya 1: Kuandika Programu na Kusanya Faili ya Hex, Ukitumia Studio ya Atmel

Kuandika Programu na Kusanya Faili ya Hex, Ukitumia Studio ya Atmel
Kuandika Programu na Kusanya Faili ya Hex, Ukitumia Studio ya Atmel
Kuandika Programu na Kusanya Faili ya Hex, Ukitumia Studio ya Atmel
Kuandika Programu na Kusanya Faili ya Hex, Ukitumia Studio ya Atmel

Ikiwa huna Studio ya Atmel, unapaswa kuipakua na kuisakinisha:

Mradi huu utatumia C, kwa hivyo chagua chaguo la Mradi wa Kutekelezwa wa GCC C kutoka kwenye orodha ya templeti ili kutoa mradi unaoweza kutekelezwa wa mifupa.

Ifuatayo, inahitajika kutaja mradi utatengenezwa kwa kifaa kipi. Mradi huu utatengenezwa kwa mdhibiti mdogo wa AVR ATMega328P.

Andika msimbo wa programu katika eneo kuu la Mhariri wa Chanzo cha Studio ya Atmel. Mhariri Mkuu wa Chanzo - Dirisha hili ndio mhariri mkuu wa faili za chanzo katika mradi wa sasa. Mhariri ana ukaguzi wa tahajia na huduma kamili za kiotomatiki.

1. Lazima tuambie mkusanyaji kwa kasi gani chip yetu inaendesha kwa kuwa inaweza kuhesabu ucheleweshaji vizuri.

#fndef F_CPU

#fafanua F_CPU 16000000UL // kuwaambia mtiririko wa kioo cha mtawala (16 MHz AVR ATMega328P) #endif

2. Tunajumuisha utangulizi, ambayo ndio mahali tunapoweka habari zetu kutoka kwa faili zingine, ambazo hufafanua anuwai na kazi za ulimwengu.

# pamoja na kichwa // kuwezesha udhibiti wa mtiririko wa data juu ya pini. Inafafanua pini, bandari, nk.

# pamoja na kichwa cha kichwa ili kuwezesha kazi ya kuchelewesha katika programu

3. Baada ya utangulizi kuja kazi kuu ().

kuu (batili) {

Kazi kuu () ni ya kipekee na imetengwa mbali na kazi zingine zote. Kila mpango wa C lazima uwe na kazi moja kuu (). Kuu () ni mahali ambapo AVR itaanza kutekeleza nambari yako wakati nguvu inaendelea, kwa hivyo ni hatua ya kuingia ya programu.

4. Weka pini 0 ya PORTB kama pato.

DDRB = 0b00000001; // Weka PORTB1 kama pato

Tunafanya hivyo kwa kuandika nambari ya binary kwenye Rejista ya Uelekezaji wa Takwimu B. Rejista ya Uelekezaji wa Takwimu B inatuwezesha kufanya biti za rejista B pembejeo au pato. Kuandika 1 kunawafanya watoe pato, wakati 0 ingewafanya waingize. Kwa kuwa tunashikilia LED kutenda kama pato, tunaandika nambari ya binary, na kufanya pini 0 ya PORT B kuwa pato.

5. Kitanzi.

wakati (1) {

Kauli hii ni kitanzi, mara nyingi hujulikana kama kitanzi kuu au kitanzi cha hafla. Nambari hii ni kweli kila wakati; kwa hivyo, hufanya mara kwa mara tena kwa kitanzi kisicho na mwisho. Haachi kamwe. Kwa hivyo, LED itakuwa iking'aa bila mwisho, isipokuwa nguvu imefungwa kutoka kwa mdhibiti mdogo au nambari imefutwa kutoka kwa kumbukumbu ya programu.

6. Washa LED iliyowekwa kwenye bandari PB0

PORTB = 0b00000001; // inawasha LED iliyounganishwa na bandari PB0

Laini hii, inatoa 1 kwa PB0 ya PortB. PORTB ni rejista ya vifaa kwenye chip ya AVR ambayo ina pini 8, PB7-PB0, ikienda kutoka kushoto kwenda kulia. Kuweka 1 mwishoni kunatoa 1 kwa PB0; hii inaweka PB0 juu ambayo inawasha. Kwa hivyo, LED iliyoambatishwa na pini PB0 itawasha na kuwasha.

7. Kuchelewa

kuchelewa_ms (1000); // huunda kuchelewa kwa sekunde 1

Taarifa hii inaunda kuchelewa kwa sekunde 1, ili LED igeuke na kubaki kwa sekunde 1 kabisa.

8. Zima pini zote B, pamoja na PB0

PORTB = 0b00000000; // Inazima pini zote za B, pamoja na PB0

Mstari huu unazima pini zote 8 za Port B, ili hata PB0 imezimwa, kwa hivyo LED huzima.

9. Ucheleweshaji mwingine

kuchelewa_ms (1000); // huunda kucheleweshwa kwa sekunde 1

Inazima haswa kwa sekunde 1, kabla ya kuanza kitanzi tena na kukutana na laini, ambayo inaiwasha tena, ikirudia mchakato kote. Hii hufanyika sana ili taa ya LED iangaze na kuzima kila wakati.

10. Rudisha taarifa

}

kurudi (0); // mstari huu haujafikiwa kabisa}

Mstari wa mwisho wa nambari yetu ni taarifa ya kurudi (0). Ingawa nambari hii haijawahi kutekelezwa, kwa sababu kuna kitanzi kisicho na mwisho ambacho hakiishi, kwa programu zetu ambazo zinaendesha kwenye kompyuta za mezani, ni muhimu kwa mfumo wa uendeshaji kujua ikiwa zilikimbia kwa usahihi au la. Kwa sababu hiyo, GCC, mkusanyaji wetu, anataka kila kuu () kuishia na nambari ya kurudi. Nambari za kurudisha hazihitajiki nambari ya AVR, ambayo inaendesha uhuru wa mfumo wowote wa msaada; Walakini, mkusanyaji atatoa onyo ikiwa hautaishia kuu na kurudi ().

Hatua ya mwisho ni kujenga mradi huo. Inamaanisha kukusanya na mwishowe kuunganisha faili zote za kitu kutengeneza faili inayoweza kutekelezwa (.hex). Faili hii ya hex imezalishwa ndani ya folda ya Utatuzi ambayo iko ndani ya folda ya Mradi. Faili hii ya hex iko tayari kupakiwa kwenye chip ya microcontroller.

Hatua ya 2: Kubadilisha Usanidi chaguomsingi wa Vipindi vya Fuse Mdhibiti Mdogo

Kubadilisha Usanidi Default wa Vipindi vya Fuse ya Mdhibiti mdogo
Kubadilisha Usanidi Default wa Vipindi vya Fuse ya Mdhibiti mdogo
Kubadilisha Usanidi Default wa Vipindi vya Fuse ya Mdhibiti mdogo
Kubadilisha Usanidi Default wa Vipindi vya Fuse ya Mdhibiti mdogo
Kubadilisha Usanidi Default wa Vipindi vya Fuse ya Mdhibiti mdogo
Kubadilisha Usanidi Default wa Vipindi vya Fuse ya Mdhibiti mdogo

Ni muhimu kukumbuka kuwa baadhi ya vipande vya fuse vinaweza kutumiwa kufunga mambo kadhaa ya chip na inaweza kuiweka matofali (kuifanya isifanye kazi)

Kuna jumla ya bits 19 za fuse ambazo hutumiwa katika ATmega328P, na zimetengwa katika kaiti tatu za fuse. Vipande vitatu vya fuse viko katika "Fuse Byte Fuse", nane ziko kwenye "Fuse High Byte," na zingine nane ziko kwenye "Fuse Low Byte". Kuna pia byte ya nje ambayo hutumiwa kupanga biti za kufuli.

Kila baiti ni bits 8 na kila kidogo ni mpangilio tofauti au bendera. Tunapozungumza juu ya kuweka, sio kuweka, iliyowekwa, sio fyuzi zilizopangwa kwa kweli tunatumia binary. 1 inamaanisha haijawekwa, haijasanidiwa na sifuri inamaanisha kuweka, iliyowekwa. Wakati wa kupanga fuses unaweza kutumia nukuu ya binary au nukuu zaidi ya hexadecimal.

Chips za ATmega 328P zimejengwa katika oscillator ya RC ambayo ina masafa ya 8 MHz. Chips mpya zinasafirishwa na seti hii kama chanzo cha saa na fyuzi ya CKDIV8 inayofanya kazi, na kusababisha saa ya mfumo wa 1 MHz. Wakati wa kuanza umewekwa kwa kiwango cha juu na cha kumaliza muda kuwezeshwa.

Chips mpya za ATMega 328P kwa ujumla zina mipangilio ya fuse ifuatayo:

Fuse ya chini = 0x62 (0b01100010)

Fuse ya juu = 0xD9 (0b11011001)

Fuse iliyopanuliwa = 0xFF (0b11111111)

Tutatumia chip ya ATmega 328 na glasi ya nje ya 16MHz. Kwa hivyo, tunahitaji kupanga bits ya "Fuse Low Byte" ipasavyo.

1. Bits 3-0 inadhibiti chaguo la oscillator, na mpangilio wa default wa 0010 ni kutumia oscillator ya ndani ya RC, ambayo hatutaki. Tunataka operesheni ya oscillator ya nguvu ya chini kutoka 8.0 hadi 16.0 MHz, kwa hivyo bits 3-1 (CKSEL [3: 1]) inapaswa kuwekwa kwa 111.

2. Bits 5 na 4 hudhibiti wakati wa kuanza, na mipangilio ya msingi ya 10 ni kuchelewesha kuanza kwa mizunguko sita ya saa kutoka kwa nguvu-chini na kuokoa nguvu, pamoja na ucheleweshaji wa ziada wa kuanza kwa mizunguko ya saa 14 pamoja na millisecond 65 kutoka upya.

Kuwa upande salama kwa oscillator ya nguvu ndogo, tunataka kucheleweshwa kwa kiwango cha juu cha 16, 000 za saa kutoka kwa nguvu-chini na kuokoa nguvu, kwa hivyo SUT [1] inapaswa kuwekwa 1, pamoja na ucheleweshaji wa ziada wa kuanza ya mizunguko 14 ya saa pamoja na millisekunde 65 kutoka kwa kuweka upya, kwa hivyo SUT [0] inapaswa kuwekwa kuwa 1. Kwa kuongezea, CKSEL [0] inapaswa kuwekwa kuwa 1.

3. Kidogo 6 hudhibiti pato la saa kwa PORTB0, ambayo hatujali. Kwa hivyo, kidogo 6 inaweza kushoto kuweka 1.

4. Kidogo cha 7 kinadhibiti operesheni ya kugawanya-na-8 na mipangilio chaguomsingi ya 0 ina huduma imewezeshwa, ambayo hatutaki. Kwa hivyo, kidogo 7 inahitaji kubadilishwa kutoka 0 hadi 1.

Kwa hivyo, Fuse Low Byte mpya inapaswa kuwa 11111111 ambayo, katika nukuu ya hexadecimal, ni 0xFF

Kupanga bits ya "Fuse Low Byte" tunaweza kutumia programu yetu (https://www.instructables.com/id/ISP-Programmer-fo…) na programu ya AVRDUDE. AVRDUDE ni huduma ya laini ya amri ambayo hutumiwa kupakua kutoka na kupakia kwa watawala wadhibiti wa Atmel.

Pakua AVRDUDE:

Kwanza, lazima tuongeze kuelezea programu yetu kwenye faili ya usanidi ya AVRDUDE. Kwenye Windows faili ya usanidi iko katika eneo sawa na faili inayoweza kutekelezwa ya AVRDUDE.

Tuma maandishi katika faili ya usanidi avrdude.conf:

# ISPProgv1

programu id = "ISPProgv1"; desc = "serial banding banging, reset = dtr sck = rts mosi = txd miso = cts"; aina = "serbb"; uhusiano_type = mfululizo; kuweka upya = 4; sck = 7; mosi = 3; miso = 8;;

Kabla ya kuanza AVRDUDE, lazima tuunganishe mdhibiti mdogo kwa programu, kulingana na mpango huo

Fungua dirisha la haraka la DOS.

1. Kuangalia orodha ya programu ambayo avrdude inasaidiwa amri ya aina avrdude -c c. Ikiwa yote ni sawa, orodha inapaswa kuwa na id ya programu "ISPProgv1"

2. Kuangalia orodha ya vifaa vya Atmel ambavyo avrdude inasaidiwa amri ya aina avrdude -c ISPProgv1. Orodha inapaswa kuwa na kifaa m328p kwa Atmel ATMega 328P.

Ifuatayo, andika avrdude -c ISPProgv1 -p m328p, amri yaambie avrdude ni programu gani inayotumiwa na kile Mdhibiti mdogo wa Atmel ameambatanishwa. Inatoa saini ya ATmega328P katika nukuu ya hexadecimal: 0x1e950f. Inatoa programu fuse kidogo kwenye ATmega328P pia katika nukuu ya hexadecimal; katika kesi hii, kaa za fuse zimepangwa kwa chaguo-msingi cha kiwanda.

Ifuatayo, andika avrdude -c ISPProgv1 -p m328p -U lfuse: w: 0xFF: m, Ni amri ya kuwaambia avrdude ni programu gani inayotumiwa na kile Mdhibiti mdogo wa Atmel ameambatanishwa na kubadilisha Fuse Low Byte kuwa 0xFF.

Sasa ishara ya saa inapaswa kutoka kwa oscillator ya nguvu ya chini.

Hatua ya 3: Kuungua Programu kwa Kumbukumbu ya ATMega328P Microcontroller

Kuungua Programu Kwa Kumbukumbu ya ATMega328P Microcontroller
Kuungua Programu Kwa Kumbukumbu ya ATMega328P Microcontroller
Kuungua Programu Kwa Kumbukumbu ya ATMega328P Microcontroller
Kuungua Programu Kwa Kumbukumbu ya ATMega328P Microcontroller

Kwanza, nakili faili ya hex ya programu tuliyoifanya mwanzoni mwa mafundisho kwenye saraka ya AVRDUDE.

Kisha, andika kwenye kidirisha cha haraka cha DOS amri avrdude -c ISPProgv1 -p m328p -u -U flash: w: [jina la faili yako ya hex]

Amri inaandika faili ya hex kwenye kumbukumbu ya microcontroller. Sasa, mdhibiti mdogo hufanya kazi kulingana na maagizo ya programu yetu. Wacha tuiangalie!

Hatua ya 4: Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu

Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu
Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu
Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu
Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu
Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu
Angalia Microcontroller Inafanya kazi kulingana na Maagizo ya Programu yetu

Unganisha vifaa kulingana na mchoro wa skimu ya Mzunguko wa LED wa AVR Blinking

Kwanza, tunahitaji nguvu, kama kila nyaya za AVR zinavyofanya. Karibu volts 5 za nguvu zinatosha kwa operesheni ya chip ya AVR. Unaweza kupata hii ama kutoka kwa betri au usambazaji wa umeme wa DC. Tunaunganisha + 5V ya nguvu kubandika 7 na unganisha pini 8 chini kwenye ubao wa mkate. Katikati kati ya pini zote mbili, tunaweka capacitor ya kauri ya 0.1μF kulainisha nguvu ya usambazaji wa umeme ili Chip ya AVR ipate laini laini ya umeme.

Kinzani ya 10KΩ hutumiwa kutoa Power On Reset (POR) kwenye kifaa. Wakati umeme umewashwa, voltage kwenye capacitor itakuwa sifuri kwa hivyo kifaa kitaweka upya (kwa kuwa kuweka upya ni chini), basi malipo ya capacitor kwa VCC na kuweka upya kutazimwa.

Tunaunganisha anode ya LED yetu kwa pini ya AVR PB0. Hii ni pini 14 ya ATMega328P. Kwa kuwa ni LED, tunataka kuzuia sasa inapita kwa LED ili isiishe. Hii ndio sababu tunaweka kontena 330Ω mfululizo na LED. Cathode ya LED inaunganishwa na ardhi.

Kioo cha 16 MHz hutumiwa kutoa saa kwa Atomga328 microcontroller na 22pF capacitors hutumiwa kutuliza utendaji wa kioo.

Hizi ni viunganisho vyote muhimu ili kuwasha LED. Ugavi wa umeme.

Sawa. LED inaangaza na kuchelewa kwa sekunde moja. Kazi ya microcontroller inafanana na majukumu yetu

Hatua ya 5: Hitimisho

Kwa kweli, huo ulikuwa mchakato mrefu wa kuangaza tu LED, lakini ukweli ni kwamba umefanikiwa kuondoa vizuizi vikubwa: kuunda jukwaa la vifaa vya kupanga microcontroller ya AVR, Kutumia Studio ya Atmel kama jukwaa la maendeleo lililounganishwa, ukitumia AVRDUDE kama programu ya kusanidi na kupanga programu ndogo ya AVR

Ikiwa unataka kuendelea kupata habari juu ya miradi yangu ya watawala ndogo, jiandikishe kwenye YouTube yangu! Kuangalia na kushiriki video zangu ni njia ya kuunga mkono kile ninachofanya

Jisajili kwenye kituo cha YouTube cha ukungu

Ilipendekeza: