Talaan ng mga Nilalaman:

Pag-configure ng AVR Microcontroller Fuse Bits. Paglikha at Pag-upload sa Flash Memory ng Microcontroller ang LED Blinking Program .: 5 Mga Hakbang
Pag-configure ng AVR Microcontroller Fuse Bits. Paglikha at Pag-upload sa Flash Memory ng Microcontroller ang LED Blinking Program .: 5 Mga Hakbang

Video: Pag-configure ng AVR Microcontroller Fuse Bits. Paglikha at Pag-upload sa Flash Memory ng Microcontroller ang LED Blinking Program .: 5 Mga Hakbang

Video: Pag-configure ng AVR Microcontroller Fuse Bits. Paglikha at Pag-upload sa Flash Memory ng Microcontroller ang LED Blinking Program .: 5 Mga Hakbang
Video: how to “unBRICK” an avr microprocessor (the details) bricked fix 2024, Hunyo
Anonim
Image
Image

Sa kasong ito lilikha kami ng simpleng programa sa C code at susunugin ito sa memorya ng microcontroller. Susulat kami ng aming sariling programa at isulat ang hex file, gamit ang Atmel Studio bilang pinagsamang platform ng pag-unlad. Ise-configure namin ang mga fuse bit at i-upload ang hex file sa memorya ng AVR ATMega328P microcontroller, gamit ang aming sariling programmer at software AVRDUDE.

Ang AVRDUDE - ay isang programa para sa pag-download at pag-upload ng mga on-chip na alaala ng AVR microcontrollers. Maaari nitong iprograma ang Flash at EEPROM, at kung saan suportado ng serial programming protocol, maaari nitong i-program ang fuse at i-lock ang mga piraso.

Hakbang 1: Pagsulat ng Programa at Pagbuo ng Hex File, Gamit ang Atmel Studio

Pagsulat ng Programa at Pagbuo ng Hex File, Gamit ang Atmel Studio
Pagsulat ng Programa at Pagbuo ng Hex File, Gamit ang Atmel Studio
Pagsulat ng Programa at Pagbuo ng Hex File, Gamit ang Atmel Studio
Pagsulat ng Programa at Pagbuo ng Hex File, Gamit ang Atmel Studio

Kung wala kang Atmel Studio, dapat mong i-download at i-install ito:

Ang proyektong ito ay gagamit ng C, kaya piliin ang opsyong GCC C Executable Project mula sa listahan ng template upang makabuo ng isang walang-buto na maisasagawa na proyekto.

Susunod, kinakailangan upang tukuyin kung aling aparato ang proyekto ay bubuo. Ang proyektong ito ay bubuo para sa AVR ATMega328P microcontroller.

I-type ang code ng programa sa lugar ng Pangunahing Source Editor ng Atmel Studio. Ang Pangunahing Source Editor - Ang window na ito ang pangunahing editor para sa mga source file sa kasalukuyang proyekto. Ang editor ay may check spell at awtomatikong kumpletong mga tampok.

1. Dapat nating sabihin sa tagatala kung anong bilis ang tumatakbo ng aming maliit na tilad upang makalkula nito nang maayos ang mga pagkaantala.

#ifndef F_CPU

#define F_CPU 16000000UL // sinasabi sa dalas ng kristal ng controller (16 MHz AVR ATMega328P) #endif

2. Isinasama namin ang paunang salita, kung saan inilalagay namin ang aming isinasama na impormasyon mula sa iba pang mga file, na tumutukoy sa mga variable at pag-andar ng mundo.

#include // header upang paganahin ang kontrol ng daloy ng data sa mga pin. Tinutukoy ang mga pin, port, atbp.

#include // header upang paganahin ang pagka-antala sa pagpapaandar sa programa

3. Matapos ang paunang salita ay dumating ang pangunahing () pagpapaandar.

int main (walang bisa) {

Ang pangunahing () pagpapaandar ay natatangi at hiwalay mula sa lahat ng iba pang mga pagpapaandar. Ang bawat programa ng C ay dapat na mayroong eksaktong isang pangunahing () pagpapaandar. Ang Main () ay kung saan nagsisimulang ipatupad ng AVR ang iyong code kapag nagpatuloy ang kapangyarihan, kaya't ito ang entry point ng programa.

4. Itakda ang pin 0 ng PORTB bilang output.

DDRB = 0b00000001; // Itakda ang PORTB1 bilang output

Ginagawa namin ito sa pamamagitan ng pagsulat ng isang binary na numero sa Data Direksyon Registro B. Pinapayagan kaming magparehistro ng Direksyon ng Data B na gumawa ng mga piraso ng pagrehistro B input o output. Ang pagsulat ng isang 1 ay nagpapalabas sa kanila, habang ang isang 0 ay magpapasuri sa kanila. Ang pagiging nakakabit namin ng isang LED upang kumilos bilang output, nagsusulat kami ng isang binary na numero, ginagawa ang pin 0 ng PORT B bilang output.

5. Loop.

habang (1) {

Ang pahayag na ito ay isang loop, na madalas na tinukoy bilang pangunahing loop o loop ng kaganapan. Ang code na ito ay laging totoo; samakatuwid, ito ay executes ng paulit-ulit sa isang infinite loop. Hindi ito tumitigil. Samakatuwid, ang LED ay magiging blinking sa isang infinity, maliban kung ang kapangyarihan ay nakasara mula sa microcontroller o ang code ay nabura mula sa memorya ng programa.

6. I-on ang LED na nakakabit sa port PB0

PORTB = 0b00000001; // lumiliko ang LED na nakakabit sa port PB0

Ang linyang ito, ay nagbibigay ng 1 sa PB0 ng PortB. Ang PORTB ay isang rehistro ng hardware sa AVR chip na naglalaman ng 8 mga pin, PB7-PB0, pagpunta sa kaliwa patungo sa kanan. Ang paglalagay ng 1 sa dulo ay nagbibigay ng 1 hanggang PB0; nagtatakda ito ng mataas na PB0 kung saan ito binubuksan. Samakatuwid, ang LED na nakakabit sa pin PB0 ay magbubukas at magaan.

7. Pagkaantala

_delay_ms (1000); // Lumilikha ng 1 segundong pagkaantala

Ang pahayag na ito ay lumilikha ng isang 1 segundong pagkaantala, upang ang LED ay lumiko at manatili sa eksaktong 1 segundo.

8. Patayin ang lahat ng mga pin ng B, kabilang ang PB0

PORTB = 0b00000000; // Pinapatay ang lahat ng mga pin ng B, kabilang ang PB0

Ang linya na ito ay pinapatay ang lahat ng 8 mga Port B pin, kaya't kahit na ang PB0 ay naka-off, kaya't ang LED ay naka-off.

9. Isa pang pagkaantala

_delay_ms (1000); // Lumilikha ng isa pang 1-segundong pagkaantala

Ito ay patayin nang eksakto sa loob ng 1 segundo, bago muling simulang muli ang loop at makasalubong ang linya, na binabalik ito, na inuulit ang proseso. Nangyayari ito nang walang hanggan upang ang LED ay patuloy na kumukurap at naka-off.

10. pahayag sa pagbabalik

}

bumalik (0); // ang linya na ito ay hindi talaga naabot}

Ang huling linya ng aming code ay isang pagbabalik (0) na pahayag. Kahit na ang code na ito ay hindi kailanman naisakatuparan, sapagkat mayroong isang walang katapusang loop na hindi nagtatapos, para sa aming mga program na tumatakbo sa mga desktop computer, mahalagang malaman ng operating system kung tama ang kanilang pagtakbo o hindi. Para sa kadahilanang iyon, nais ng GCC, ang aming tagatala, ang bawat pangunahing () na magtapos sa isang return code. Ang mga return code ay hindi kinakailangan para sa AVR code, na nagpapatakbo ng freestanding ng anumang sumusuporta sa operating system; gayunpaman, ang tagatala ay magtataas ng isang babala kung hindi mo tapusin ang pangunahing may pagbabalik ().

Ang pangwakas na hakbang ay ang pagbuo ng proyekto. Nangangahulugan ito ng pag-iipon at sa wakas ay nagli-link sa lahat ng mga file ng object upang mabuo ang maipapatupad na file (.hex) na file. Ang hex file na ito ay nabuo sa loob ng folder ng Debug na nasa loob ng folder ng Project. Ang hex file na ito ay handa nang mai-load sa microcontroller chip.

Hakbang 2: Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits

Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits
Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits
Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits
Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits
Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits
Pagbabago ng Default na Pag-configure ng Micro Controller Fuse Bits

Mahalagang tandaan na ang ilan sa mga piyus na piraso ay maaaring magamit upang i-lock ang ilang mga aspeto ng maliit na tilad at maaaring potensyal itong ladrilyo (gawing hindi ito magamit)

Mayroong isang kabuuang 19 mga piyus na piyus na ginagamit sa ATmega328P, at pinaghiwalay sila sa tatlong magkakaibang byte ng fuse. Ang tatlo sa mga piyus ng piyus ay nakapaloob sa "Extended Fuse Byte", walong nilalaman sa "Fuse High Byte," at walong iba pa ang nakapaloob sa "Fuse Low Byte". Mayroon ding isang byte pabalik na ginagamit upang i-program ang mga lock bit.

Ang bawat byte ay 8 bits at bawat bit ay isang hiwalay na setting o flag. Kapag pinag-uusapan natin ang tungkol sa setting, hindi pagtatakda, naka-program, hindi naka-program na mga piyus aktwal na gumagamit kami ng binary. Ang ibig sabihin ng 1 ay hindi itinakda, hindi naka-program at isang zero ay nangangahulugang itinakda, na-program. Kapag pinaprograma ang mga piyus maaari mong gamitin ang notasyong binary o mas karaniwang hexadecimal notation.

Ang mga ATmega 328P chips ay may built in na oscillator ng RC na mayroong dalas ng 8 MHz. Ang mga bagong chips ay ipinadala sa set na ito bilang mapagkukunan ng orasan at aktibo ang fuse ng CKDIV8, na nagreresulta sa isang 1 MHz system na orasan. Ang oras ng pagsisimula ay nakatakda sa maximum at time-out na panahon na pinagana.

Ang mga bagong ATMega 328P chips sa pangkalahatan ay may mga sumusunod na setting ng piyus:

Mababang fuse = 0x62 (0b01100010)

Mataas na piyus = 0xD9 (0b11011001)

Pinalawak na piyus = 0xFF (0b11111111)

Gagamitin namin ang ATmega 328 chip na may panlabas na 16MHz na kristal. Samakatuwid, kailangan naming mag-program ng mga piraso ng "Fuse Low Byte" nang naaayon.

1. Kinokontrol ng bit 3-0 ang pagpipilian ng oscillator, at ang default na setting ng 0010 ay ang paggamit ng naka-calibrate na panloob na oscillator ng RC, na hindi namin nais. Nais namin ang mababang lakas na kristal na operasyon ng oscillator mula 8.0 hanggang 16.0 MHz, kaya't ang mga bit 3-1 (CKSEL [3: 1]) ay dapat itakda sa 111.

2. Kinokontrol ng Bit 5 at 4 ang oras ng pagsisimula, at ang default na setting ng 10 ay para sa isang pagkaantala ng pagsisimula ng anim na mga cycle ng orasan mula sa power-down at power-save, kasama ang isang karagdagang pagkaantala ng pagsisimula ng 14 na mga cycle ng orasan kasama ang 65 milliseconds mula sa pag-reset.

Upang ma-ligtas ang panig para sa isang mababang oscillator ng kristal na kuryente, nais namin ang maximum na posibilidad na pagkaantala ng 16, 000 na mga cycle ng orasan mula sa power-down at power-save, kaya't ang SUT [1] ay dapat itakda sa 1, kasama ang isang karagdagang pagkaantala sa pagsisimula ng 14 na cycle ng orasan kasama ang 65 milliseconds mula sa pag-reset, kaya ang SUT [0] ay dapat itakda sa 1. Bilang karagdagan, ang CKSEL [0] ay dapat itakda sa 1.

3. Kinokontrol ng Bit 6 ang output ng orasan sa PORTB0, na wala kaming pakialam. Kaya, ang bit 6 ay maaaring iwanang nakatakda sa 1.

4. Kinokontrol ng Bit 7 ang operasyon ng paghati-hatiin at ang default na setting ng 0 ay pinagana ang tampok, na hindi namin nais. Kaya, ang bit 7 ay kailangang baguhin mula 0 hanggang 1.

Samakatuwid, ang bagong Fuse Low Byte ay dapat na 11111111 na kung saan, sa hexadecimal notation, ay 0xFF

Upang mai-program ang mga piraso ng "Fuse Low Byte" maaari naming gamitin ang aming programmer (https://www.instructables.com/id/ISP-Programmer-fo…) at AVRDUDE ng software. Ang AVRDUDE ay isang command-line utility na ginagamit upang mag-download mula at mag-upload sa Atmel microcontrollers.

I-download ang AVRDUDE:

Una, dapat naming idagdag ang ilarawan ang aming programmer sa file ng pagsasaayos ng AVRDUDE. Sa Windows ang file ng pagsasaayos ay kadalasang nasa parehong lokasyon tulad ng maipapatupad na file ng AVRDUDE.

Ipasa ang teksto sa pagsasaayos ng file avrdude.conf:

# ISPProgv1

programmer id = "ISPProgv1"; desc = "serial port banging, reset = dtr sck = rts mosi = txd miso = cts"; type = "serbb"; connection_type = serial; i-reset = 4; sck = 7; mosi = 3; miso = 8;;

Bago simulan ang AVRDUDE, dapat naming ikonekta ang microcontroller sa programmer, ayon sa pamamaraan

Buksan ang window ng prompt ng DOS.

1. Upang matingnan ang listahan ng programmer na sinusuportahan ng avrdude ang uri ng utos avrdude -c c. Kung maayos ang lahat, ang listahan ay dapat mayroong programmer id na "ISPProgv1"

2. Upang matingnan ang listahan ng mga aparatong Atmel na sinusuportahan ng avrdude uri ng utos avrdude -c ISPProgv1. Ang listahan ay dapat magkaroon ng aparato m328p para sa Atmel ATMega 328P.

Susunod, i-type ang avrdude -c ISPProgv1 –p m328p, sinabi ng utos sa avrdude kung anong programmer ang ginagamit at kung ano ang naka-attach na Atmel microcontroller. Ipinapakita nito ang lagda ng ATmega328P sa hexadecimal notation: 0x1e950f. Ipinapakita nito ang kasalukuyang programa ng fuse bit sa ATmega328P din sa hexadecimal notation; sa kasong ito, ang mga byte ng fuse ay nai-program sa bawat default ng pabrika.

Susunod, i-type ang avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Ito ay isang utos na sabihin sa avrdude kung ano ang ginagamit ng programmer at kung ano ang nakalakip ng Atmel microcontroller at upang baguhin ang Fuse Low Byte sa 0xFF.

Ngayon ang signal ng orasan ay dapat magmula sa mababang power oscillator ng kristal.

Hakbang 3: Pag-burn ng Program sa Memorya ng ATMega328P Microcontroller

Pag-burn ng Program sa Memorya ng ATMega328P Microcontroller
Pag-burn ng Program sa Memorya ng ATMega328P Microcontroller
Pag-burn ng Program sa Memorya ng ATMega328P Microcontroller
Pag-burn ng Program sa Memorya ng ATMega328P Microcontroller

Una, kopyahin ang hex file ng program na ginawa namin sa simula ng tagubilin sa direktoryo ng AVRDUDE.

Pagkatapos, i-type sa DOS prompt window ang command avrdude –c ISPProgv1 –p m328p –u –U flash: w: [pangalan ng iyong hex file]

Nagsusulat ang utos ng hex file sa memorya ng microcontroller. Ngayon, gumagana ang microcontroller alinsunod sa mga tagubilin ng aming programa. Tignan natin!

Hakbang 4: Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program

Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program
Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program
Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program
Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program
Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program
Suriin ang Mga Gumagawa ng Microcontroller Alinsunod sa Mga Tagubilin ng Aming Program

Ikonekta ang mga sangkap alinsunod sa diagram ng eskematiko ng AVR Blinking LED Circuit

Una, kailangan namin ng lakas, tulad ng ginagawa ng lahat ng mga AVR circuit. Mga 5 volts ng lakas ang sapat para sa pagpapatakbo ng AVR chip. Maaari mo itong makuha alinman sa mga baterya o isang supply ng kuryente sa DC. Ikonekta namin ang + 5V ng lakas upang i-pin 7 at ikonekta ang pin 8 sa lupa sa breadboard. Sa pagitan ng parehong mga pin, naglalagay kami ng isang 0.1μF ceramic capacitor upang makinis ang lakas ng supply ng kuryente upang ang AVR chip ay makakakuha ng isang makinis na linya ng kuryente.

Ang risistor na 10KΩ ay ginagamit upang magbigay ng Power On Reset (POR) sa aparato. Kapag ang kapangyarihan ay nakabukas SA, ang boltahe sa buong capacitor ay magiging zero kaya ang pag-reset ng aparato (dahil ang reset ay aktibo mababa), pagkatapos ang singil ng capacitor sa VCC at ang pag-reset ay hindi paganahin.

Ikonekta namin ang anode ng aming LED sa AVR pin PB0. Ito ang pin 14 ng ATMega328P. Dahil ito ay isang LED, nais naming limitahan ang kasalukuyang dumadaloy sa LED upang hindi ito masunog. Ito ang dahilan kung bakit inilalagay namin ang isang 330Ω risistor sa serye kasama ang LED. Ang cathode ng LED ay nakakakonekta sa lupa.

Ang 16 MHz na kristal ay ginagamit upang magbigay ng orasan para sa Atmega328 microcontroller at 22pF capacitors ang ginagamit upang patatagin ang pagpapatakbo ng kristal.

Ito ang lahat ng mga koneksyon na kinakailangan upang magaan ang LED. Supply ng kuryente

Sige Ang LED ay kumikislap na may isang segundong pagkaantala. Ang gawain ng microcontroller ay tumutugma sa aming mga gawain

Hakbang 5: Konklusyon

Totoo, iyon ay isang mahabang proseso para sa pag-flash lamang ng isang LED, ngunit ang totoo ay matagumpay mong na-clear ang mga pangunahing hadlang: paglikha ng isang platform ng hardware para sa pag-program ng isang AVR microcontroller, Gamit ang Atmel Studio bilang pinagsamang platform ng pag-unlad, gamit ang AVRDUDE bilang software para sa pag-configure at pagprograma ng isang AVR microcontroller

Kung nais mong panatilihing napapanahon sa aking mga pangunahing proyekto ng microcontrollers, mag-subscribe sa aking YouTube! Ang panonood at pagbabahagi ng aking mga video ay isang paraan upang suportahan ang ginagawa ko

Mag-subscribe sa YouTube FOG channel

Inirerekumendang: