Daftar Isi:

Konfigurasi Bit Fuse Mikrokontroler AVR. Membuat dan Mengunggah di Memori Flash Mikrokontroler Program Berkedip LED.: 5 Langkah
Konfigurasi Bit Fuse Mikrokontroler AVR. Membuat dan Mengunggah di Memori Flash Mikrokontroler Program Berkedip LED.: 5 Langkah

Video: Konfigurasi Bit Fuse Mikrokontroler AVR. Membuat dan Mengunggah di Memori Flash Mikrokontroler Program Berkedip LED.: 5 Langkah

Video: Konfigurasi Bit Fuse Mikrokontroler AVR. Membuat dan Mengunggah di Memori Flash Mikrokontroler Program Berkedip LED.: 5 Langkah
Video: Cara Mengupload program ke mikrokontroller dengan USB ASP dan Prog. ISP || Programmer cilik 2024, November
Anonim
Image
Image

Dalam hal ini kita akan membuat program sederhana dalam kode C dan membakarnya ke dalam memori mikrokontroler. Kami akan menulis program kami sendiri dan mengkompilasi file hex, menggunakan Atmel Studio sebagai platform pengembangan terintegrasi. Kami akan mengkonfigurasi bit sekering dan mengunggah file hex ke dalam memori mikrokontroler AVR ATMega328P, menggunakan pemrogram dan perangkat lunak AVRDUDE kami sendiri.

AVRDUDE - adalah program untuk mengunduh dan mengunggah memori on-chip mikrokontroler AVR Atmel. Ini dapat memprogram Flash dan EEPROM, dan jika didukung oleh protokol pemrograman serial, ia dapat memprogram fuse dan mengunci bit.

Langkah 1: Menulis Program dan Mengkompilasi File Hex, Menggunakan Atmel Studio

Menulis Program dan Mengkompilasi File Hex, Menggunakan Atmel Studio
Menulis Program dan Mengkompilasi File Hex, Menggunakan Atmel Studio
Menulis Program dan Mengkompilasi File Hex, Menggunakan Atmel Studio
Menulis Program dan Mengkompilasi File Hex, Menggunakan Atmel Studio

Jika Anda tidak memiliki Atmel Studio, Anda harus mengunduh dan menginstalnya:

Proyek ini akan menggunakan C, jadi pilih opsi Proyek yang Dapat Dieksekusi GCC C dari daftar templat untuk menghasilkan proyek yang dapat dieksekusi tanpa tulang.

Selanjutnya, perlu untuk menentukan perangkat mana yang akan dikembangkan untuk proyek tersebut. Proyek ini akan dikembangkan untuk mikrokontroler AVR ATMega328P.

Ketik kode program di area Editor Sumber Utama Atmel Studio. Editor Sumber Utama – Jendela ini adalah editor utama untuk file sumber dalam proyek saat ini. Editor memiliki fitur pemeriksaan ejaan dan pelengkapan otomatis.

1. Kita harus memberi tahu kompiler pada kecepatan apa chip kita berjalan sehingga ia dapat menghitung penundaan dengan benar.

#ifndef F_CPU

#define F_CPU 16000000UL // memberitahukan frekuensi kristal pengontrol (16 MHz AVR ATMega328P) #endif

2. Kami menyertakan preamble, di mana kami meletakkan informasi include kami dari file lain, yang mendefinisikan variabel dan fungsi global.

#include //header untuk mengaktifkan kontrol aliran data melalui pin. Mendefinisikan pin, port, dll.

#include //header untuk mengaktifkan fungsi delay dalam program

3. Setelah pembukaan muncul fungsi main().

int utama(kosong) {

Fungsi main() adalah unik dan terpisah dari semua fungsi lainnya. Setiap program C harus memiliki tepat satu fungsi main(). Main() adalah tempat AVR mulai mengeksekusi kode Anda saat daya pertama kali menyala, jadi ini adalah titik masuk program.

4. Set pin 0 dari PORTB sebagai output.

DDRB=0b00000001; //Tetapkan PORTB1 sebagai output

Kita melakukan ini dengan menulis bilangan biner ke Data Direction Register B. Data Direction Register B memungkinkan kita untuk membuat bit-bit register B menjadi input atau output. Menulis 1 membuat mereka keluar, sedangkan 0 akan membuat mereka masuk. Karena kita memasang LED untuk bertindak sebagai output, kita menulis angka biner, menjadikan pin 0 dari PORT B sebagai output.

5. Putaran.

sementara (1) {

Pernyataan ini adalah sebuah loop, sering disebut sebagai loop utama atau loop acara. Kode ini selalu benar; oleh karena itu, ia dieksekusi berulang-ulang dalam loop tak terbatas. Itu tidak pernah berhenti. Oleh karena itu, LED akan berkedip tanpa batas, kecuali jika daya dimatikan dari mikrokontroler atau kode dihapus dari memori program.

6. Nyalakan LED yang terpasang pada port PB0

PORTB= 0b00000001; //menyalakan LED yang terpasang pada port PB0

Baris ini, memberikan 1 ke PB0 dari PortB. PORTB adalah register perangkat keras pada chip AVR yang berisi 8 pin, PB7-PB0, dari kiri ke kanan. Menempatkan 1 di akhir memberikan 1 untuk PB0; ini menetapkan PB0 tinggi yang menyalakannya. Oleh karena itu, LED yang terpasang pada pin PB0 akan menyala dan menyala.

7. Penundaan

_delay_ms(1000); //membuat penundaan 1 detik

Pernyataan ini membuat penundaan 1 detik, sehingga LED menyala dan tetap menyala tepat selama 1 detik.

8. Matikan semua pin B, termasuk PB0

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

Jalur ini mematikan semua 8 pin Port B, sehingga PB0 pun mati, sehingga LED mati.

9. Penundaan lagi

_delay_ms(1000); //membuat penundaan 1 detik lagi

Ini mati tepat selama 1 detik, sebelum memulai loop lagi dan menemukan garis, yang menyalakannya kembali, mengulangi proses di seluruh. Ini terjadi tanpa batas sehingga LED terus berkedip dan mati.

10. Pernyataan kembali

}

kembali (0); //baris ini tidak pernah benar-benar tercapai }

Baris terakhir dari kode kita adalah pernyataan return(0). Meskipun kode ini tidak pernah dieksekusi, karena ada infinite loop yang tidak pernah berakhir, untuk program kami yang berjalan di komputer desktop, penting bagi sistem operasi untuk mengetahui apakah mereka berjalan dengan benar atau tidak. Karena alasan itu, GCC, kompiler kami, ingin setiap main() diakhiri dengan kode pengembalian. Kode pengembalian tidak diperlukan untuk kode AVR, yang menjalankan sistem operasi pendukung apa pun; namun demikian, kompiler akan memunculkan peringatan jika Anda tidak mengakhiri main dengan return().

Langkah terakhir adalah membangun proyek. Itu berarti mengkompilasi dan akhirnya menautkan semua file objek untuk menghasilkan file file yang dapat dieksekusi (.hex). File hex ini dihasilkan di dalam folder Debug yang ada di dalam folder Proyek. File hex ini siap dimuat ke dalam chip mikrokontroler.

Langkah 2: Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro

Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro
Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro
Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro
Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro
Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro
Mengubah Konfigurasi Default Bit Sekering Pengontrol Mikro

Penting untuk diingat bahwa beberapa bit sekering dapat digunakan untuk mengunci aspek tertentu dari chip dan berpotensi merusaknya (membuatnya tidak dapat digunakan)

Ada total 19 bit sekering yang digunakan dalam ATmega328P, dan mereka dipisahkan menjadi tiga byte sekering yang berbeda. Tiga dari bit sekering terkandung dalam "Byte Sekering Diperpanjang", delapan terkandung dalam "Byte Tinggi Sekering", dan delapan lagi terkandung dalam "Byte Rendah Sekering". Ada juga byte keempat yang digunakan untuk memprogram bit kunci.

Setiap byte adalah 8 bit dan setiap bit adalah pengaturan atau flag yang terpisah. Ketika kita berbicara tentang pengaturan, bukan pengaturan, terprogram, bukan sekering yang diprogram, kita sebenarnya menggunakan biner. 1 berarti tidak diatur, tidak diprogram dan nol berarti diatur, diprogram. Saat memprogram sekering, Anda dapat menggunakan notasi biner atau notasi heksadesimal yang lebih umum.

Chip ATmega 328P memiliki osilator RC bawaan yang memiliki frekuensi 8 MHz. Chip baru dikirimkan dengan set ini sebagai sumber clock dan sekering CKDIV8 aktif, menghasilkan clock sistem 1 MHz. Waktu mulai diatur ke maksimum dan periode waktu habis diaktifkan.

Chip ATMega 328P baru umumnya memiliki pengaturan sekering berikut:

Sekering rendah = 0x62 (0b01100010)

Sekering tinggi = 0xD9 (0b11011001)

Sekering diperpanjang = 0xFF (0b11111111)

Kami akan menggunakan chip ATmega 328 dengan kristal 16MHz eksternal. Oleh karena itu, kita perlu memprogram bit "Fuse Low Byte" yang sesuai.

1. Bit 3-0 mengontrol pilihan osilator, dan pengaturan default 0010 adalah menggunakan osilator RC internal yang dikalibrasi, yang tidak kita inginkan. Kami ingin operasi osilator kristal daya rendah dari 8,0 hingga 16,0 MHz, jadi bit 3-1 (CKSEL[3:1]) harus disetel ke 111.

2. Bit 5 dan 4 mengontrol waktu startup, dan pengaturan default 10 adalah untuk penundaan startup enam siklus clock dari power-down dan hemat daya, ditambah penundaan startup tambahan 14 siklus clock ditambah 65 milidetik dari reset.

Agar aman untuk osilator kristal daya rendah, kami menginginkan penundaan maksimum yang mungkin 16.000 siklus clock dari matikan dan hemat daya, jadi SUT[1] harus disetel ke 1, ditambah penundaan startup tambahan dari 14 siklus clock ditambah 65 milidetik dari reset, jadi SUT[0] harus disetel ke 1. Selain itu, CKSEL[0] harus disetel ke 1.

3. Bit 6 mengontrol output clock ke PORTB0, yang tidak kita pedulikan. Jadi, bit 6 dapat dibiarkan disetel ke 1.

4. Bit 7 mengontrol operasi bagi-oleh-8 dan pengaturan default 0 memiliki fitur yang diaktifkan, yang tidak kita inginkan. Jadi, bit 7 perlu diubah dari 0 menjadi 1.

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

Untuk memprogram bit dari "Fuse Low Byte" kita dapat menggunakan programmer kita (https://www.instructables.com/id/ISP-Programmer-fo…) dan software AVRDUDE. AVRDUDE adalah utilitas baris perintah yang digunakan untuk mengunduh dan mengunggah ke mikrokontroler Atmel.

Unduh AVRDUDE:

Pertama, kita harus menambahkan deskripsi programmer kita ke file konfigurasi AVRDUDE. Pada Windows, file konfigurasi biasanya berada di lokasi yang sama dengan file eksekusi AVRDUDE.

Rekatkan teks dalam file konfigurasi avrdude.conf:

#ISPProgv1

id pemrogram = "ISPProgv1"; desc = "serial port membenturkan, reset=dtr sck=rts mosi=txd miso=cts"; ketik = "serb"; tipe_koneksi = serial; ulang = 4; sk = 7; mosi = 3; miso = 8;;

Sebelum memulai AVRDUDE, kita harus menghubungkan mikrokontroler ke programmer, sesuai dengan skema

Buka jendela prompt DOS.

1. Untuk melihat daftar programmer yang mendukung avrdude ketik perintah avrdude -c c. Jika semuanya baik-baik saja, daftar tersebut harus memiliki id programmer "ISPProgv1"

2. Untuk melihat daftar perangkat Atmel yang didukung avrdude ketik perintah avrdude -c ISPProgv1. Daftar harus memiliki perangkat m328p untuk Atmel ATMega 328P.

Selanjutnya ketik avrdude -c ISPProgv1 –p m328p, perintah tersebut memberitahu avrdude programmer apa yang digunakan dan mikrokontroler Atmel apa yang terpasang. Ini menyajikan tanda tangan ATmega328P dalam notasi heksadesimal: 0x1e950f. Ini menyajikan pemrograman bit sekering saat ini di ATmega328P juga dalam notasi heksadesimal; dalam hal ini, byte sekering diprogram per default pabrik.

Selanjutnya ketik avrdude -c ISPProgv1 –p m328p –U lfuse:w:0xFF:m, Ini adalah perintah untuk memberi tahu avrdude programmer apa yang digunakan dan mikrokontroler Atmel apa yang terpasang dan untuk mengubah Fuse Low Byte menjadi 0xFF.

Sekarang sinyal clock harus berasal dari osilator kristal daya rendah.

Langkah 3: Membakar Program Ke dalam Memori Mikrokontroler ATMega328P

Membakar Program Ke dalam Memori Mikrokontroler ATMega328P
Membakar Program Ke dalam Memori Mikrokontroler ATMega328P
Membakar Program Ke dalam Memori Mikrokontroler ATMega328P
Membakar Program Ke dalam Memori Mikrokontroler ATMega328P

Pertama, salin file hex program yang kita buat di awal instruksi ke direktori AVRDUDE.

Kemudian, ketik di jendela prompt DOS perintah avrdude –c ISPProgv1 –p m328p –u –U flash:w:[nama file hex Anda]

Perintah menulis file hex ke memori mikrokontroler. Sekarang, mikrokontroler bekerja sesuai dengan instruksi program kami. Mari kita periksa!

Langkah 4: Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami

Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami
Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami
Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami
Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami
Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami
Periksa Mikrokontroler Bekerja Sesuai Dengan Instruksi Program Kami

Hubungkan komponen sesuai dengan diagram skema Rangkaian LED Berkedip AVR

Pertama, kita membutuhkan daya, seperti semua sirkuit AVR. Sekitar 5 volt daya cukup untuk pengoperasian chip AVR. Anda bisa mendapatkan ini baik dari baterai atau catu daya DC. Kami menghubungkan +5V daya ke pin 7 dan menghubungkan pin 8 ke ground pada papan tempat memotong roti. Di antara kedua pin, kami menempatkan kapasitor keramik 0,1μF untuk memperlancar daya catu daya sehingga chip AVR mendapatkan saluran listrik yang lancar.

Resistor 10KΩ digunakan untuk memberikan Power On Reset (POR) ke perangkat. Ketika daya dinyalakan, tegangan melintasi kapasitor akan menjadi nol sehingga perangkat me-reset (karena reset aktif rendah), maka kapasitor mengisi ke VCC dan reset akan dinonaktifkan.

Kami menghubungkan anoda LED kami ke pin AVR PB0. Ini adalah pin 14 dari ATMega328P. Karena ini adalah LED, kami ingin membatasi arus yang mengalir ke LED agar tidak terbakar. Inilah sebabnya mengapa kami menempatkan resistor 330Ω secara seri dengan LED. Katoda LED terhubung ke ground.

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

Ini semua adalah koneksi yang diperlukan untuk menyalakan LED. Sumber Daya listrik.

Oke. LED berkedip dengan penundaan satu detik. Pekerjaan mikrokontroler sesuai dengan tugas kita

Langkah 5: Kesimpulan

Memang, itu adalah proses yang panjang untuk hanya mem-flash LED, tetapi sebenarnya Anda telah berhasil melewati rintangan utama: membuat platform perangkat keras untuk memprogram mikrokontroler AVR, Menggunakan Atmel Studio sebagai platform pengembangan terintegrasi, menggunakan AVRDUDE sebagai perangkat lunak untuk mengkonfigurasi dan memprogram mikrokontroler AVR

Jika Anda ingin tetap mengetahui proyek mikrokontroler dasar saya, berlanggananlah ke YouTube saya! Menonton dan membagikan video saya adalah cara untuk mendukung apa yang saya lakukan

Berlangganan saluran YouTube FOG

Direkomendasikan: