Isi kandungan:

Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah
Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah

Video: Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah

Video: Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah
Video: SULTAN MEDAN INDRAKENZ NAIK JET PRIBADI KE PULAU PRIBADI!! 2024, Jun
Anonim
Image
Image

Dalam kes ini kita akan membuat program sederhana dalam kod C dan membakarnya ke dalam memori mikrokontroler. Kami akan menulis program kami sendiri dan menyusun fail hex, menggunakan Atmel Studio sebagai platform pembangunan bersepadu. Kami akan mengkonfigurasi bit fuse dan memuat naik fail hex ke dalam memori mikrokontroler AVR ATMega328P, menggunakan programmer dan perisian kami sendiri AVRDUDE.

AVRDUDE - adalah program untuk memuat turun dan memuat naik memori cip mikrokontroler AVR Atmel. Ia dapat memprogram Flash dan EEPROM, dan jika didukung oleh protokol pengaturcaraan bersiri, dapat memprogram sekering dan kunci bit.

Langkah 1: Menulis Program dan Menyusun Fail Hex, Menggunakan Atmel Studio

Menulis Program dan Menyusun Fail Hex, Menggunakan Atmel Studio
Menulis Program dan Menyusun Fail Hex, Menggunakan Atmel Studio
Menulis Program dan Menyusun Fail Hex, Menggunakan Atmel Studio
Menulis Program dan Menyusun Fail Hex, Menggunakan Atmel Studio

Sekiranya anda tidak mempunyai Atmel Studio, anda harus memuat turun dan memasangnya:

Projek ini akan menggunakan C, jadi pilih pilihan Projek Pelaksana GCC C dari senarai templat untuk menghasilkan projek yang dapat dilaksanakan.

Seterusnya, adalah perlu untuk menentukan peranti yang akan dibangunkan untuk projek ini. Projek ini akan dibangunkan untuk mikrokontroler AVR ATMega328P.

Taipkan kod program di kawasan Editor Sumber Utama Atmel Studio. Penyunting Sumber Utama - Tetingkap ini adalah penyunting utama untuk fail sumber dalam projek semasa. Editor mempunyai periksa ejaan dan ciri lengkap secara automatik.

1. Kita mesti memberitahu penyusun pada kecepatan apa cip kita berjalan sehingga dapat mengira kelewatan dengan betul.

#ifndef F_CPU

#define F_CPU 16000000UL // memberitahu frekuensi kristal pengawal (16 MHz AVR ATMega328P) #endif

2. Kami memasukkan mukadimah, di mana kami meletakkan maklumat penyertaan kami dari fail lain, yang menentukan pemboleh ubah dan fungsi global.

#include // header untuk membolehkan kawalan aliran data ke atas pin. Mentakrifkan pin, port, dll.

#include // header untuk mengaktifkan fungsi kelewatan dalam program

3. Selepas mukadimah muncul fungsi utama ().

int utama (tidak sah) {

Fungsi utama () unik dan terpisah dari semua fungsi lain. Setiap program C mesti mempunyai satu fungsi () utama. Utama () adalah di mana AVR mula menjalankan kod anda ketika kuasa mula-mula menyala, jadi ini adalah titik masuk program.

4. Tetapkan pin 0 PORTB sebagai output.

DDRB = 0b00000001; // Tetapkan PORTB1 sebagai output

Kami melakukan ini dengan menulis nombor perduaan ke Daftar Arah Data B. Daftar Arah Data B membolehkan kami membuat bit pendaftaran B input atau output. Menulis 1 menjadikan mereka output, sementara 0 akan menjadikannya input. Oleh kerana kita memasang LED untuk bertindak sebagai output, kita menulis nombor binari, menjadikan pin 0 PORT B sebagai output.

5. Gelung.

semasa (1) {

Pernyataan ini adalah gelung, yang sering disebut sebagai gelung utama atau gelung peristiwa. Kod ini selalu benar; oleh itu, ia dilaksanakan berulang kali dalam gelung tak terhingga. Ia tidak pernah berhenti. Oleh itu, LED akan berkelip tanpa batas, melainkan jika kuasa dimatikan dari mikrokontroler atau kodnya dipadamkan dari memori program.

6. Hidupkan LED yang dipasang pada port PB0

PORTB = 0b00000001; // hidupkan LED yang dilekatkan pada port PB0

Garis ini, memberikan 1 untuk PB0 PortB. PORTB adalah daftar perkakasan pada cip AVR yang mengandungi 8 pin, PB7-PB0, dari kiri ke kanan. Meletakkan 1 pada akhir memberikan 1 hingga PB0; ini menetapkan tinggi PB0 yang menghidupkannya. Oleh itu, LED yang dipasang pada pin PB0 akan menyala dan menyala.

7. Kelewatan

_delay_ms (1000); // mewujudkan kelewatan 1 saat

Pernyataan ini mewujudkan kelewatan 1 saat, sehingga LED menyala dan menyala tepat selama 1 saat.

8. Matikan semua pin B, termasuk PB0

PORTB = 0b00000000; // Mematikan semua pin B, termasuk PB0

Garis ini mematikan semua 8 pin Port B, sehingga PB0 padam, sehingga LED mati.

9. Kelewatan lain

_delay_ms (1000); // mewujudkan kelewatan 1 saat lagi

Ia mati tepat selama 1 saat, sebelum memulakan gelung berulang-ulang dan menemui garisan, yang menghidupkannya kembali, mengulangi proses semuanya. Ini berlaku tanpa had sehingga LED sentiasa berkedip dan mati.

10. Penyata kembali

}

pulangan (0); // talian ini tidak pernah dapat dicapai}

Baris terakhir kod kami adalah penyataan kembali (0). Walaupun kod ini tidak pernah dilaksanakan, kerana terdapat gelung tak terhingga yang tidak pernah berakhir, untuk program kami yang berjalan di komputer desktop, penting bagi sistem operasi untuk mengetahui sama ada ia berjalan dengan betul atau tidak. Atas sebab itu, GCC, penyusun kami, menginginkan setiap utama () diakhiri dengan kod pengembalian. Kod pengembalian tidak diperlukan untuk kod AVR, yang berjalan bebas dari mana-mana sistem operasi yang menyokong; namun demikian, penyusun akan memberikan amaran jika anda tidak mengakhiri utama dengan pengembalian ().

Langkah terakhir adalah membina projek. Ini bermaksud menyusun dan akhirnya menghubungkan semua fail objek untuk menghasilkan fail yang boleh dilaksanakan (.hex). Fail hex ini dihasilkan di dalam folder Debug yang berada di dalam folder Project. Fail hex ini siap dimuat ke dalam cip mikrokontroler.

Langkah 2: Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro

Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro
Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro
Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro
Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro
Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro
Mengubah Konfigurasi Lalai Bit Pengawal Mikro Mikro

Penting untuk diingat bahawa beberapa bit fius dapat digunakan untuk mengunci aspek tertentu dari cip dan berpotensi dapat membuatnya (membuatnya tidak dapat digunakan)

Terdapat sejumlah 19 bit fius yang digunakan dalam ATmega328P, dan mereka dipisahkan menjadi tiga bait fius yang berbeza. Tiga bit fius terkandung dalam "Extended Fuse Byte", lapan terkandung dalam "Fuse High Byte," dan lapan lagi terdapat di "Fuse Low Byte". Terdapat juga byte keempat yang digunakan untuk memprogram bit kunci.

Setiap bait adalah 8 bit dan setiap bit adalah tetapan atau bendera yang berasingan. Apabila kita bercakap mengenai pengaturan, bukan pengaturan, bukan diprogramkan, kita sebenarnya menggunakan binari. 1 bermaksud tidak ditetapkan, tidak diprogramkan dan satu sifar bermaksud ditetapkan, diprogramkan. Semasa memprogram sekering, anda boleh menggunakan notasi binari atau notasi heksadesimal yang lebih umum.

Cip ATmega 328P mempunyai pengayun RC terpasang yang mempunyai frekuensi 8 MHz. Cip baru dihantar dengan set ini sebagai sumber jam dan sekering CKDIV8 aktif, menghasilkan jam sistem 1 MHz. Waktu permulaan ditetapkan ke maksimum dan tempoh habis masa diaktifkan.

Cip ATMega 328P baru umumnya mempunyai tetapan sekering berikut:

Sekering rendah = 0x62 (0b01100010)

Fius tinggi = 0xD9 (0b11011001)

Fius lanjutan = 0xFF (0b11111111)

Kami akan menggunakan cip ATmega 328 dengan kristal 16MHz luaran. Oleh itu, kita perlu memprogram bit "Fuse Low Byte" dengan sewajarnya.

1. Bits 3-0 mengawal pilihan pengayun, dan tetapan lalai 0010 adalah menggunakan osilator RC dalaman yang dikalibrasi, yang tidak kita inginkan. Kami mahu operasi pengayun kristal kuasa rendah dari 8.0 hingga 16.0 MHz, jadi bit 3-1 (CKSEL [3: 1]) harus ditetapkan ke 111.

2. Bits 5 dan 4 mengawal masa permulaan, dan tetapan lalai 10 adalah untuk penundaan permulaan enam kitaran jam dari power-down dan power-save, ditambah penundaan permulaan tambahan 14 kitaran jam ditambah 65 milisaat dari reset.

Untuk berada di sisi yang selamat untuk pengayun kristal kuasa rendah, kami mahukan kelewatan maksimum sebanyak 16, 000 kitaran jam dari pemadaman dan penjimatan kuasa, jadi SUT [1] harus diatur ke 1, ditambah penundaan permulaan tambahan dari 14 kitaran jam ditambah 65 milisaat dari tetapan semula, jadi SUT [0] harus ditetapkan ke 1. Di samping itu, CKSEL [0] harus ditetapkan ke 1.

3. Bit 6 mengawal output jam ke PORTB0, yang tidak kita pedulikan. Jadi, bit 6 boleh dibiarkan menjadi 1.

4. Bit 7 mengawal operasi divide-by-8 dan tetapan lalai 0 mempunyai ciri yang diaktifkan, yang tidak kita mahukan. Jadi, bit 7 perlu diubah dari 0 hingga 1.

Oleh itu, Fuse Low Byte baru harus 11111111 yang, dalam notasi heksadesimal, adalah 0xFF

Untuk memprogram bit "Fuse Low Byte", kami dapat menggunakan programmer kami (https://www.instructables.com/id/ISP-Programmer-fo…) dan perisian AVRDUDE. AVRDUDE adalah utiliti baris perintah yang digunakan untuk memuat turun dari dan memuat naik ke mikrokontroler Atmel.

Muat turun AVRDUDE:

Pertama, kita mesti menambah menggambarkan programmer kita ke fail konfigurasi AVRDUDE. Pada Windows fail konfigurasi biasanya berada di lokasi yang sama dengan fail AVRDUDE yang dapat dilaksanakan.

Tampalkan teks dalam fail konfigurasi avrdude.conf:

# ISPProgv1

id pengaturcara = "ISPProgv1"; desc = "port serial banging, reset = dtr sck = rts mosi = txd miso = cts"; taip = "serbb"; sambungan_jenis = bersiri; tetapkan semula = 4; sck = 7; mosi = 3; miso = 8;;

Sebelum memulakan AVRDUDE, kita mesti menyambungkan mikrokontroler ke pengaturcara, mengikut skema

Buka tetingkap prompt DOS.

1. Untuk melihat senarai programmer yang avrdude disokong perintah jenis avrdude -c c. Sekiranya semuanya baik-baik saja, senarai itu mesti mempunyai id programmer "ISPProgv1"

2. Untuk melihat senarai peranti Atmel yang avrdude disokong perintah jenis avrdude -c ISPProgv1. Senarai itu mesti mempunyai peranti m328p untuk Atmel ATMega 328P.

Seterusnya, ketik avrdude -c ISPProgv1 –p m328p, perintah memberitahu avrdude apa programmer yang digunakan dan apa yang dilampirkan mikrokontroler Atmel. Ia memaparkan tanda tangan ATmega328P dalam notasi heksadesimal: 0x1e950f. Ia menyajikan pengaturcaraan bit fius yang ada pada ATmega328P dan juga dalam notasi heksadesimal; dalam kes ini, fius bait diprogramkan mengikut lalai kilang.

Seterusnya, ketik avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Ini adalah arahan untuk memberitahu avrdude programmer apa yang sedang digunakan dan mikrokontroler Atmel apa yang dilampirkan dan untuk menukar Fuse Low Byte menjadi 0xFF.

Kini isyarat jam harus datang dari pengayun kristal kuasa rendah.

Langkah 3: Membakar Program Ke Ingatan Mikrokontroler ATMega328P

Membakar Program Ke Ingatan Mikrokontroler ATMega328P
Membakar Program Ke Ingatan Mikrokontroler ATMega328P
Membakar Program Ke Ingatan Mikrokontroler ATMega328P
Membakar Program Ke Ingatan Mikrokontroler ATMega328P

Pertama, salin fail hex program yang kami buat pada awal arahan ke direktori AVRDUDE.

Kemudian, ketik tetingkap prompt DOS arahan avrdude –c ISPProgv1 –p m328p –u –U flash: w: [nama fail hex anda]

Perintah menulis fail hex ke memori mikrokontroler. Kini, mikrokontroler berfungsi mengikut arahan program kami. Mari kita periksa!

Langkah 4: Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami

Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami
Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami
Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami
Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami
Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami
Periksa Kerja Mikrokontroler Sesuai dengan Arahan Program Kami

Sambungkan komponen mengikut gambarajah skema Litar LED Berkedip AVR

Pertama, kita memerlukan kuasa, seperti yang dilakukan oleh semua rangkaian AVR. Kuasa kira-kira 5 volt mencukupi untuk operasi cip AVR. Anda boleh mendapatkannya sama ada dari bateri atau bekalan kuasa DC. Kami menyambungkan kuasa + 5V ke pin 7 dan menyambungkan pin 8 ke tanah di papan roti. Di antara kedua-dua pin, kami meletakkan kapasitor seramik 0.1μF untuk melancarkan kekuatan bekalan kuasa sehingga cip AVR mendapat saluran kuasa yang lancar.

Perintang 10KΩ digunakan untuk menyediakan Power On Reset (POR) ke peranti. Apabila kuasa dihidupkan, voltan merentas kapasitor akan menjadi sifar sehingga perangkat diset semula (kerana tetapan semula aktif rendah), maka kapasitor akan dikenakan ke VCC dan tetapan semula akan dilumpuhkan.

Kami menyambungkan anod LED kami ke AVR pin PB0. Ini adalah pin 14 dari ATMega328P. Oleh kerana ia adalah LED, kami ingin mengehadkan arus yang mengalir ke LED sehingga tidak habis. Inilah sebabnya mengapa kami meletakkan perintang 330Ω secara bersiri dengan LED. Katod LED disambungkan ke tanah.

Kristal 16 MHz digunakan untuk menyediakan jam untuk mikrokontroler Atmega328 dan kapasitor 22pF digunakan untuk menstabilkan operasi kristal.

Ini adalah semua sambungan yang diperlukan untuk menyalakan LED. Bekalan kuasa.

Okey. LED berkelip dengan kelewatan satu saat. Kerja mikrokontroler sesuai dengan tugas kita

Langkah 5: Kesimpulannya

Diakui, itu adalah proses yang panjang untuk hanya memancarkan LED, tetapi sebenarnya anda berjaya menyelesaikan rintangan utama: membuat platform perkakasan untuk memprogram mikrokontroler AVR, Menggunakan Atmel Studio sebagai platform pengembangan bersepadu, menggunakan AVRDUDE sebagai perisian untuk mengkonfigurasi dan memprogram mikrokontroler AVR

Sekiranya anda ingin mengikuti perkembangan projek mikrokontroler asas saya, langgani YouTube saya! Menonton dan berkongsi video saya adalah cara untuk menyokong apa yang saya lakukan

Langgan saluran YouTube FOG

Disyorkan: