Untuk masuk
Semua rahasia komputer untuk pemula dan profesional
  • Black Caiman: penampilan dan gaya hidup Great Black Caiman
  • Promosi World of Tanks: apa itu dan bagaimana menggunakannya dengan benar
  • Jove (Jov, Konstantin Ladanin) - Pembuat video World of Tanks, pemandu dan pembuat air, streamer Item baru dari Jove
  • Keunikan bekerja dengan bidang View dan fungsi View() dari bahasa kueri tombol “Query” di perancang kueri
  • Bagaimana cara agar folder di flashdisk tidak tersembunyi (terlihat) setelah terkena virus?
  • Cara membuat flashdisk volume asli dari china
  • Program dalam bahasa Majelis di lingkungan perangkat lunak Pembuat Algoritma. Kemudian kinerja perangkat yang dirancang diuji di lingkungan perangkat lunak proteus. Pembuat Algoritma untuk avr, Memulai Pemrograman assembler grafis pengatur waktu avr n

    Program dalam bahasa Majelis di lingkungan perangkat lunak Pembuat Algoritma.  Kemudian kinerja perangkat yang dirancang diuji di lingkungan perangkat lunak proteus.  Pembuat Algoritma untuk avr, Memulai Pemrograman assembler grafis pengatur waktu avr n

    Saya rasa di zaman kita tidak ada amatir radio yang belum pernah menemukan mikrokontroler. Cepat atau lambat, tapi ini terjadi. Saat pertama kali melihat rangkaian dengan mikrokontroler, saya langsung menutup halaman browser, dengan berpikir: “Oh, saya masih belum bisa merakitnya.” Namun seiring berjalannya waktu, semakin banyak rangkaian yang menggunakan mikrokontroler, dan akhirnya saya memutuskan untuk memulainya. Faktanya, semuanya ternyata tidak sesulit yang saya kira.

    Pertama, mari kita cari tahu: apa itu mikrokontroler (MK)? Pada dasarnya, ini adalah komputer mini yang dirancang untuk melakukan tugas-tugas sederhana. Segala sesuatu yang diperlukan untuk pengoperasian mikrokontroler terdapat dalam satu wadah. Mikrokontroler memiliki berbagai periferal - port input/output, pengatur waktu, antarmuka komunikasi, dll. Mikrokontroler memiliki tiga jenis memori: RAM (memori akses acak), FlashROM (memori program), EEPROM (memori non-volatile).

    Perbedaan utama antara mikrokontroler dan sirkuit mikro konvensional adalah bahwa mikrokontroler tidak beroperasi sesuai dengan logika kaku yang dipasang di pabrik, tetapi diprogram. Program ini secara klasik ditulis dalam lingkungan khusus pada komputer dalam salah satu bahasa pemrograman, setelah itu diterjemahkan ke dalam bahasa mesin (dikompilasi) dan ditulis ke dalam memori pengontrol. Dalam kursus ini, segalanya akan sedikit berbeda - program tidak akan ditulis, tetapi digambar secara harfiah dalam bentuk diagram alur. Berkat pendekatan ini, program terlihat lebih jelas, dan waktu pengembangan program berkurang 3-5 kali lipat dibandingkan teknik pemrograman klasik.

    Pembuat Algoritma - lingkungan pemrograman

    Algorithm Builder melakukan siklus pengembangan penuh, dimulai dari memasukkan algoritma, termasuk proses debugging dan diakhiri dengan penulisan program ke dalam memori.

    Mari kita mulai dengan gambaran singkat tentang antarmuka program

    Menu utama

    • Mengajukan. Berfungsi untuk membuka, menyimpan, menutup proyek dan algoritma individual, serta keluar dari program.
    • Sunting. Tindakan yang terkait dengan pengeditan algoritme: potong, salin, sorot, dll.
    • Menampilkan. Mengganti algoritma/tabel dengan variabel (lebih lanjut tentangnya di bawah) + templat operasi dan kondisi.
    • Mencari. Tidak perlu dijelaskan di sini.
    • Elemen. Algoritme diambil dari elemen khusus: Teks, Vertex, Bidang, Label, Kondisi, Vektor transisi yang digunakan (tanpa syarat), Penyesuai. Kita akan mengenal semuanya selama proses pembelajaran. Ada beberapa item penting lainnya di menu: Nonaktifkan, Makro, Interupsi. Menonaktifkan- komponen ini tidak dapat dikompilasi. Makro- untuk membuat makro. Interupsi- berisi daftar nama semua interupsi mikrokontroler. Anda akan mempelajari fungsi ini dalam pelajaran berikut, tetapi sekarang saya hanya akan mengatakan bahwa ini adalah hal yang sangat penting dan perlu untuk bekerja.
    • Program. Tindakan yang terkait dengan program - kompilasi (terjemahan ke dalam bahasa mesin), simulasi program, membaca memori pengontrol (Flash dan EEPROM), dll.
    • Pilihan. Pengaturan proyek dan lingkungan.
    • ?. Informasi dan bantuan Pembuat Algoritma.

    Bilah Alat

    Tidak diperlukan penjelasan. Saat Anda mengarahkan kursor ke elemen panel, keterangan alat akan muncul.

    Proyek terbuka

    Ada kekhasan di sini. Anda tidak dapat membuka dua proyek secara bersamaan. Untuk membuka/membuat proyek baru, Anda harus menutup proyek lama. Setelah membuka proyek, Anda hanya dapat membuka/membuat file algoritma terpisah. File proyek memiliki ekstensi .alp, dan file algoritma terpisah memiliki ekstensi .alg

    Bekerja dengan Variabel dan Konstanta

    Itu diatur dalam bentuk tabel khusus (Anda dapat menggantinya dengan tombol F12, baik melalui menu, atau dengan tombol pada toolbar). Dengan demikian, algoritma itu sendiri terbebas dari entri yang tidak perlu.

    Sejumlah besar label, yang memungkinkan transisi dari satu bagian program ke bagian lain, sangat mengacaukan kode, dan kejelasan program hilang. Di Algorithm Builder, transisi menjadi lebih mudah - dengan panah (vektor). Namun transisi sepanjang label bernama juga dimungkinkan.

    Simulasi pengoperasian program

    Simulator menunjukkan semua perubahan yang terjadi di dalam mikrokontroler virtual. Untuk memeriksa pengoperasian program, Anda bahkan tidak perlu membeli mikrokontroler! Simulasi dapat dilakukan selangkah demi selangkah (dengan atau tanpa memasukkan fungsi), ke titik henti sementara yang ditetapkan, atau ke area yang dipilih.

    Men-debug

    Algorithm Builder memiliki sistem debugging dalam chip (On Chip debug) yang memungkinkan Anda mengamati isi memori mikrokontroler nyata pada titik tertentu. Dalam hal ini, hanya satu kaki mikrokontroler yang digunakan untuk berkomunikasi dengan komputer, dan sesuai pilihan pengguna. Debug monitor dapat diterapkan ke hampir semua mikrokontroler. Ini adalah versi perangkat lunak dari protokol debugWIRE.

    Jadi mengapa Algorithm Builder kurang dikenal di kalangan amatir radio? Pertama, sampai tahun 2010 program ini berbayar. Saat ini perangkat lunak tersebut didistribusikan secara gratis. Kedua, kurangnya dukungan resmi terhadap program tersebut. Anda tidak akan menemukan satu pun apnot pabrikan yang menggunakan Builder. Sumber daya internet yang didedikasikan untuk program ini dapat dihitung dengan satu tangan.

    Ada baiknya membicarakan sedikit tentangnya bahan dan alat yang diperlukan

    Hal pertama yang Anda butuhkan adalah besi solder. Alat utama seorang amatir radio. Kekuatan besi solder harus berada pada kisaran 30-60 W. Mengapa tidak ada lagi? Besi solder yang kuat menjadi lebih panas dan merusak jalur papan dan bagian-bagian bekas. Dan itu tidak nyaman untuk menyolder - besi solder seperti itu jauh lebih besar dan lebih berat.

    Untuk memuat program ke dalam mikrokontroler yang Anda butuhkan programmer- dalam versi paling sederhana, hanya terdiri dari beberapa resistor dan dioda (per port LPT dan COM). Jika Anda tidak memiliki port COM atau LPT di komputer Anda, pemrogram USB dapat dipesan di, DealExtreame atau (Permintaan pencarian "pemrogram avr"; biaya sekitar 4-6$). Saya akan menulis tentang memilih dan merakit seorang programmer pada pelajaran berikutnya.

    Fitur khas:

    • Sistem operasi yang didukung: Windows 95/98/2000/NT/ME/XP
    • Lisensi: Perangkat Gratis
    • Bahasa antarmuka: Inggris, Rusia
    • Bahasa pemrograman: assembler grafis
    • Fungsi utama:
      • editor kode program grafis
      • penyusun
      • simulator untuk men-debug algoritma yang diperkenalkan
      • pemrograman melalui port COM menggunakan adaptor sederhana (7 resistor, 3 dioda; lihat dokumentasi untuk diagram)
      • men-debug algoritma pada sebuah chip menggunakan adaptor yang lebih sederhana (1 atau 2 dioda, 2 atau 4 resistor; lihat dokumentasi untuk diagram)
    • Alamat dukungan internet: http://algrom.net/russian.html

    Keterangan:

    Algorithm Builder adalah lingkungan gratis (istilah distribusi freeware) untuk AVR MK, yang menyediakan siklus penuh pengembangan firmware, termasuk. tahapan seperti input algoritma, debugging dan pemrograman dalam sirkuit. Pengembangan program dapat dilakukan baik di tingkat assembler maupun di tingkat makro, di mana dimungkinkan untuk bekerja dengan besaran bolak-balik dengan panjang yang berubah-ubah. Hal ini membawa kemampuan pemrograman lebih dekat ke bahasa tingkat tinggi.

    Ciri khas Algorithm Builder adalah kemampuannya untuk memasukkan suatu program secara grafis, berupa algoritma dengan struktur pohon. Hasilnya, seluruh struktur logis program menjadi jelas sepenuhnya. Metode pemrograman ini sedekat mungkin dengan sifat persepsi manusia dan oleh karena itu, lebih mudah dipelajari jika dibandingkan dengan assembler klasik. Pengurangan waktu pembuatan firmware yang diharapkan dibandingkan dengan assembler klasik adalah 3-5 kali lipat.

    Lingkungan ini dirancang untuk bekerja pada Windows 95/98/2000/NT/ME/XP. Untuk pengoperasian normal editor, font "Kurir" diperlukan.

    File untuk diunduh:

    • Seri AT90
      • AT90CAN128, AT90PWM3, AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90USB64, AT90USB82, AT90 USB128, AT90USB162
    • Seri ATmega
      • ATmega8, ATmega16, ATmega32, ATmega48, ATmega64, ATmega88, ATmega103, ATmega128, ATmega161, ATmega162, ATmega163, ATmega164P, ATmega165, ATmega168, ATmega323, ATmega324P, ATmega325, ATmega328P, mega603, ATmega640, ATmega644, ATmega 644P, ATmega645, ATmega1280, ATmega1281, ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega6450, ATmega8515, ATmega8535
    • kecil sekali
      • ATtiny10, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny24, ATtiny25, ATtiny26, ATtiny28, ATtiny44, ATtiny45, ATtiny84, ATtiny85, ATtiny261, ATtiny461, ATtiny861, ATtiny2313

    4. Persyaratan teknis.

    Relai mikroelektronik ini memiliki data teknis tertentu.

    Relai mikroelektronik ini memiliki satu kontak normal tertutup (belakang) dan satu kontak normal terbuka (depan) untuk mengalihkan dua beban arus berdenyut.

    Ketika tegangan bolak-balik eksternal diterapkan dengan frekuensi 25, 50 dan 75 Hz, pengoperasian dipastikan dalam kisaran dari 0,8V hingga 10V.

    Tegangan operasi pada arus bolak-balik dengan frekuensi 25, 50 dan 75 Hz adalah (2,9-3,2) V, dan tegangan drop-out adalah (2,1-2,3) V.

    Catatan: Pemicu - membuka kontak belakang dan menutup kontak depan. Dropout – membuka kontak depan dan menutup kontak belakang.

    Indikator dengan anoda umum digunakan untuk menampilkan informasi tentang tegangan input.

    Kontak mengalihkan tegangan hingga 30V.

    Kecepatan pembaruan informasi pada indikator terjadi setiap 12,8 ms.

    Penyearah titik tengah digunakan untuk menyearahkan tegangan masukan.

    5. Diagram fungsional relai elektronik.

    Relai mikroelektronik pulsa dapat dibagi menjadi beberapa unit fungsional. Diagram fungsional relai ini disajikan pada Gambar 5. Menurut tujuan fungsionalnya, pada diagram tersebut kita dapat membedakan:


    • Penyearah dibangun menurut rangkaian dengan titik yang sama.

    • Mikroprosesor (MP).

    • Indikator dirancang untuk menampilkan informasi.

    • Pasangan optokopling.
    Penyearah dirancang untuk menyearahkan sinyal analog yang tiba pada inputnya. Pada gilirannya, sinyal analog berasal dari blok filter pelindung atau elemen analog lainnya dan merupakan tegangan bolak-balik dengan frekuensi 25, 50 atau 75 Hz. Dari keluaran penyearah kita memperoleh tegangan penyearah yang disuplai ke mikroprosesor.

    Mikroprosesor menjalankan fungsi yang ditentukan dalam program. Mendapatkan input mikroprosesor dari output penyearah, tegangan yang diperbaiki mulai dianalisis menggunakan ADC yang terpasang di dalam mikroprosesor. Kemudian mikroprosesor menghitung nilai rata-rata tegangan yang diukur dan menampilkannya pada indikator. Pasangan optocoupler juga terhubung ke salah satu output. Mereka analog

    Gambar 5. Diagram fungsional relai penguncian otomatis mikroelektronik

    Relai kontak. Tergantung pada ambang respons, sinyal muncul di salah satu pasangan optocoupler.

    Indikator ini memungkinkan Anda memonitor tegangan yang masuk ke relai mikroelektronik. Hal ini memungkinkan personel pemeliharaan untuk mengukur dan mengamati pengoperasian relai mikroelektronik.

    Optokopler transistor, terdiri dari dioda pemancar berdasarkan senyawa arsenik-gallium-aluminium dan fototransistor silikon komposit. Dirancang untuk digunakan sebagai sakelar pada sirkuit listrik peralatan radio-elektronik yang diisolasi secara galvanis. Tersedia dalam wadah logam. Berat perangkat tidak lebih dari 1,5 g.

    6. Algoritma kerja.

    Untuk membuat relai mikroelektronik perlu ditentukan tugas pokoknya. Pertama, Anda perlu mengkonfigurasi mikroprosesor, mengkonfigurasi semua port input-output, mengatur timer dan ADC. Setelah itu, tugas utama mulai diselesaikan, yaitu mengumpulkan informasi menggunakan ADC, setelah itu kami menganalisis data yang diterima dan menampilkannya. Layar, pada gilirannya, harus menunjukkan nilai desimal dari tegangan input. Algoritma operasi yang lebih rinci disajikan pada Gambar 6.

    Algoritma program terdiri dari lima subrutin:


    • Pengaturan mikroprosesor

    • Subrutin ADC

    • Rutinitas pengatur waktu

    • Tampilkan subrutin

    • Rutinitas pembagian
    Mari kita lihat cara kerja pengaturan mikroprosesor. Pertama, kita menetapkan nilai awal tumpukan. Setelah ini, kami mengkonfigurasi ADC. Di sini kita menginstal prescaler SK/128 dan mengatur mode konversi berkelanjutan, ketika konversi diluncurkan secara terus menerus pada interval waktu tertentu. Lalu kami mengatur pengatur waktunya. Kami mengatur mode operasi STS (direset secara kebetulan). Dalam mode ini, setelah mencapai nilai yang tertulis di register perbandingan, penghitungan dilanjutkan dari nilai “$00”. Dalam siklus yang sama, ketika nilai direset, interupsi pengatur waktu terjadi. Kemudian kami menyiapkan interupsi yang dipicu oleh overflow. Setelah ini, port input/output dikonfigurasi. Selanjutnya kita atur semua nilai flag, lokasi indikasi, nilai penjumlahan, pembagi dan nilai hasil bagi nol. Dan kami mengaktifkan interupsi global, yang mana kami menyetel bendera i ke satu. Setelah menyiapkan mikroprosesor kami, program kami dimulai. Untuk melakukan ini, kami menetapkan kondisi t=1. Meskipun nilai t tidak sama dengan satu, sebuah siklus terjadi, segera setelah nilainya menjadi satu, program bergerak ke kanan menuju ke subrutin indikasi dan setelah eksekusinya menyetel flag t ke nol dan lagi menutup lagi dalam siklus. Semua subrutin berikutnya akan keluar pada interupsi dan kembali ke loop ini dengan memeriksa flag t.

    Sekarang mari kita lihat subrutin ADC. Karena kami mengkonfigurasi ADC di atas dan mengatakan bahwa transisi ke subrutin ADC dilakukan dengan interupsi melalui nilai pulsa clock tertentu. Karena setelah pengaturan mikroprosesor, program kami diputar dalam satu lingkaran di mana nilai bendera t diperiksa, dan pada saat yang sama, nilai siklus jam generator mikroprosesor dihitung. Setelah mencapai nilai pulsa clock tertentu, terjadi interupsi dan program berpindah ke subrutin ADC. Segera setelah kami beralih ke sana, kami mengukur nilai tegangan input. Untuk menyimpan nilai ini, kita menggunakan dua register Yl (rendah) untuk menyimpan byte rendah dan Yh (tinggi) untuk menyimpan byte tinggi. Setelah itu kita cek nilai flag t, jika sama dengan nol maka perlu ditampilkan nilainya, dan jika flag t satu berarti nilai ADC bisa diubah menjadi desimal. membentuk. Setelah itu kita bandingkan nilai ambang batas tegangan yang diukur; jika nilai ini di atas ambang batas 0,8V, maka kita tuliskan nilai ini ke dalam register dan tambahkan dengan pengukuran selanjutnya. Setiap kali kita menjumlahkan nilai ADC, kita menambah nilai pembaginya sebanyak satu. Kemudian kita cek nilai pembaginya dan jika nilainya 255 maka perlu dilakukan reset nilai jumlah pembaginya, namun jika pembagi belum mencapai nilai 255 maka subrutin ADC keluar.

    Namun jika setelah dibandingkan nilai ADC dibawah ambang batas 0,8V maka program berjalan ke kanan lalu kita matikan ADC. Hal ini diperlukan agar nilai tegangan dapat ditampilkan pada indikator. Kemudian kita analisa nilai pembaginya dan jika tidak sama dengan nol maka kita tambahkan nilai ADC dan tambah pembaginya satu. Kemudian kita beralih ke subrutin pembagian. Hal ini diperlukan untuk menghitung nilai tegangan rata-rata. Tetapi jika nilai pembaginya nol, maka program langsung melompat setelah subrutin pembagian. Setelah ini, kami membandingkan nilai ambang respons ADC dan jika lebih tinggi dari ambang batas, maka kami mengeluarkan nilai satu ke port input-output, yang sesuai dengan pengoperasian dan penutupan kontak depan, dan jika nilainya kurang dari ambang respons, maka nilai nol dikeluarkan ke port, yang sesuai dengan penutupan kontak belakang. Kemudian kita atur nilai pembagi dan bendera t menjadi nol. Kami juga mengatur ulang nilai ADC dan menyalakannya dan keluar dari subrutin ADC.

    Selanjutnya, pertimbangkan subrutin pembagian, transisinya terletak di subrutin ADC. Rutin pembagian diperlukan untuk menghitung nilai rata-rata tegangan yang diukur. Program pembagian adalah pengurangan nilai pembagi secara berurutan dari jumlah semua nilai ADC. Berapa kali pengurangan ini terjadi akan menjadi nilai rata-rata, yaitu hasil bagi. Mari kita pertimbangkan algoritma operasi ini sendiri. Setelah masuk ke subrutin, kita atur ulang nilai hasil bagi, lalu centang tanda C. Jika nilainya tidak sama dengan satu, maka kita tambah nilai hasil bagi satu dan kurangi nilai pembagi dari jumlah semua nilai-nilai ADC. Nilai 1 ditulis ke flag C hanya setelah nilai penjumlahan menjadi lebih kecil dari nilai pembagi. Segera setelah unit ditulis ke flag C, program keluar dari loop. Kami memasukkan nilai hasil bagi yang dihasilkan ke dalam register X dan mengatur ulang nilai jumlahnya. Ini mengakhiri program pembagian dan keluar darinya.

    Sama seperti subrutin ADC, transisi ke subrutin pengatur waktu terjadi melalui nilai pulsa clock tertentu. Secara alami, transisi ke subrutin pengatur waktu secara interupsi dilakukan pada waktu yang berbeda dengan interupsi ke subrutin ADC. Oleh karena itu, mereka tidak saling mengganggu. Dalam subrutin pengatur waktu, kami secara bertahap menampilkan informasi pada indikator. Karena kita memiliki empat digit, kita perlu menampilkan nilai digit tersebut secara berurutan satu demi satu. Untuk melakukan ini, ada n di mana kita menulis nilai dari 0 hingga 3, yang sesuai dengan setiap digit. Setelah transisi interupsi, program dimulai. Pertama, kita periksa nilai n dan jika nilainya nol, maka kita lanjutkan, di mana kita menerapkan nol untuk mematikan keakraban keempat. Kami mengeluarkan nomor ke port B. Setelah ini, kami menyediakan unit untuk menyalakan keakraban pertama. Hasilnya, angka pertama pada indikator menyala. Kemudian terjadi transisi sepanjang label. Selanjutnya, kita menambah nilai n sebanyak satu dan keluar dari subrutin. Setelah waktu tertentu, interupsi pengatur waktu lainnya terjadi dan program beralih ke subrutin pengatur waktu, di mana kita kembali membandingkan nilai n. Karena kita menambahnya satu, transisi terjadi ketika n sama dengan satu. Selanjutnya, keakraban pertama dimatikan, nilai angka kedua dikeluarkan ke port B, dan keakraban kedua dihidupkan. Kemudian terjadi lagi transisi sepanjang label dan nilai n bertambah satu. Nilai digit ketiga dan keempat ditampilkan dengan cara yang sama, namun pada saat mengeluarkan digit keempat, kita atur nilai n menjadi nol, agar kedepannya keluaran digit pertama dimulai lagi. Di sini juga kita menulis nilai satu pada bendera t. Setelah digit keempat ditampilkan pada indikator, program keluar dan memasuki siklus pemeriksaan nilai bendera t.

    Karena flag t disetel ke satu, transisi terjadi dari siklus pemeriksaan flag, setelah itu terjadi transisi ke subrutin indikasi. Pada subrutin ini kita menentukan nilai ribuan, ratusan, puluhan dan satuan, serta menentukan nilai digit yang dihasilkan untuk dikeluarkan ke port B. Setelah berpindah ke subrutin tampilan, kita menetapkan larangan interupsi global. Kemudian kita reset nilai register temp. Lalu kita bandingkan nilai rata-rata ADC yang terletak pada register Z. Jika lebih dari seribu, maka kita kurangi 1000 dari register Z. Setelah dikurangi, kita masukkan satu ke dalam register temp. Satuan ditambahkan setiap kali 1000 dikurangi dari Z. Isi register temp sesuai dengan nilai ribuan. Segera setelah register Z menjadi kurang dari 1000, program dilanjutkan. Setelah transisi, kita menulis ulang nilai register temp ke dalam register r0 dan meresetnya ke nol. Kemudian kita bandingkan lagi nilai register Z dan jika lebih besar dari 100, maka kita kurangi lagi 100 dengan setiap pengurangan, kita masukkan satu ke dalam register temp. Segera setelah nilai register Z menjadi kurang dari 100, program dilanjutkan. Setelah ini, kita menulis ulang nilai ratusan ke dalam register r1. Kemudian kita reset nilai register temp. Kemudian kita bandingkan nilai register Z dan jika lebih besar dari 10, maka kita kurangi 10 dari register Z. Dengan setiap pengurangan, kita masukkan satu ke dalam register temp. Segera setelah nilai register Z menjadi kurang dari 10, program dilanjutkan. Selanjutnya ingat nilai puluhan pada register r2. Nilai yang tersisa dalam register Z adalah nilai yang menentukan nilai satuan. Nilai ini ditulis ke register r3. Sekarang nilai ribuan, ratusan, puluhan dan satu masing-masing berada pada register r0, r1, r2, dan r3. Setelah itu kita masukkan alamat tabel kode pada register Z yang berisi arti angka yang akan ditampilkan. Jika nilai ribuan pada saat pengukuran adalah nol, maka perlu ditekan nilai nol pada angka paling signifikan. Setelah itu, kita masukkan nilai digit pertama ke dalam register r0, kemudian nilai digit kedua ke dalam r1, kemudian nilai digit ketiga ke dalam r2, dan nilai digit terakhir ke dalam register r3. Setelah ini, kami mengaktifkan interupsi global. Ini mengakhiri program dan keluar dari subrutin tampilan. Setelah ini, kami menyetel bendera t ke 0 dan semuanya mulai terulang. Di sinilah algoritma program untuk mikroprosesor berakhir.

    7.Perangkat Lunak.

    Sebelum menulis program, Anda perlu memilih mikroprosesor dan mempertimbangkan fungsi yang dijalankannya. Untuk tugas yang ada, disarankan untuk menggunakan mikroprosesor ATmega48. Ciri khasnya adalah:


    • Mikrokontroler AVR 8-bit berdaya rendah berkualitas tinggi

    • Arsitektur RISC tingkat lanjut
    - 130 instruksi, sebagian besar dieksekusi dalam satu siklus clock

    32 register kerja tujuan umum 8-bit

    Arsitektur yang sepenuhnya statis

    Performa hingga 16 MIPS pada 16 MHz

    Pengganda dua siklus bawaan


    • Program dan memori data yang non-volatil
    - Memori program Flash dalam sistem yang dapat diprogram sebesar 4KB yang mampu menahan 10.000 siklus tulis/hapus

    Bagian program boot tambahan dengan bit perlindungan independen


    • Pemrograman dalam sistem dengan program bootloader bawaan

    • fungsi membaca nyata saat pemrograman
    - EEPROM 256 byte yang mampu menahan 100.000 siklus tulis/hapus

    512 byte memori SRAM internal (RAM statis)

    Perlindungan baca yang dapat diprogram


    • Karakteristik periferal
    - Dua pengatur waktu/penghitung 8-bit dengan prescaler dan mode perbandingan terpisah

    Satu pengatur waktu/penghitung 16-bit dengan prescaler terpisah serta mode perbandingan dan pengambilan

    Penghitung waktu nyata dengan generator terpisah

    Lima saluran PWM

    6 saluran 10-bit

    2 saluran 8-bit

    ADC 6 saluran untuk perangkat dalam paket PDIP

    4 saluran 10-bit

    2 saluran 8-bit

    Serial USART yang dapat diprogram

    Antarmuka SPI master/slave

    Antarmuka serial 2-kabel berorientasi byte

    Pengatur waktu pengawas yang dapat diprogram dengan osilator internal

    Komparator analog bawaan

    Interupsi dan bangun ketika status pin berubah


    • Fitur Khusus Mikrokontroler
    - Reset daya dan detektor kehilangan daya sesaat

    Osilator terkalibrasi bawaan - Sumber interupsi eksternal dan internal

    Lima mode konsumsi rendah: Idle, ADC Noise Reduction, Power-Save, Power-down dan Standby


    • Port I/O dan desain housing
    - 23 jalur port I/O yang dapat diprogram

    Paket TQFP dan MFL 32 pin


    • Kisaran tegangan suplai
    - dari 1,8 hingga 5,5 V untuk ATMega48V

    Dari 2,7 hingga 5,5 V untuk ATMega48L

    Dari 4,5 hingga 5,5 V untuk ATMega48


    • Berbagai rentang kecepatan jam operasi
    - dari 0 hingga 1 MHz untuk ATMega48V

    Dari 0 hingga 8 MHz untuk ATMega48L

    Dari 0 hingga 16 MHz untuk ATMega48


    • Konsumsi sangat rendah
    - Modus aktif:

    300 µA pada tegangan suplai 1 MHz dan 1,8 V

    20 µA pada tegangan suplai 32 kHz dan 1,8 V

    Mode konsumsi rendah

    0,5 µA pada tegangan suplai 1,8 V

    ATMega48 merupakan mikrokontroler CMOS 8-bit berdaya rendah dengan arsitektur AVR RISC. Dengan mengeksekusi instruksi dalam satu siklus, ATMega48 mencapai kinerja 1 MIPS pada kecepatan clock 1 MHz, memungkinkan perancang untuk mengoptimalkan rasio daya terhadap kinerja.

    Inti AVR mengintegrasikan set instruksi yang kaya dan 32 register kerja tujuan umum. Ke-32 register terhubung langsung ke Arithmetic Logic Unit (ALU), memungkinkan akses ke dua register independen sambil menjalankan satu instruksi. Hasilnya, arsitektur ini memungkinkan kinerja sepuluh kali lebih besar dibandingkan arsitektur CISC standar.

    ATMega48 memiliki karakteristik sebagai berikut: 4 KB memori program Flash yang dapat diprogram dalam sistem, memori data EEPROM 256 byte, SRAM (RAM statis) 512 byte, 23 jalur I/O tujuan umum, 32 register kerja tujuan umum, tiga pengatur waktu fleksibel /penghitung dengan sirkuit perbandingan, sumber interupsi internal dan eksternal, USART serial yang dapat diprogram, antarmuka serial 2-kabel berorientasi byte, ADC 6 saluran, 4 saluran di antaranya memiliki resolusi 10-bit, dan resolusi 2 - 8-bit, pengatur waktu pengawas yang dapat diprogram dengan osilator bawaan, port SPI, dan lima perangkat lunak yang menginisialisasi mode konsumsi rendah. Dalam mode Idle, inti berhenti, sementara SRAM, timer/counter, port SPI dan sistem interupsi terus berfungsi. Dalam mode Power-down, isi register dipertahankan, tetapi osilator master dihentikan dan semua fungsi internal mikroprosesor dinonaktifkan hingga terjadi interupsi atau reset perangkat keras. Dalam mode Hemat daya, pengatur waktu asinkron terus berfungsi, memungkinkan interval waktu dihitung saat mikroprosesor berada dalam mode tidur. Mode Pengurangan Kebisingan ADC menghentikan inti komputasi dan semua modul I/O, kecuali pengatur waktu asinkron dan ADC itu sendiri, yang meminimalkan kebisingan selama konversi analog-ke-digital. Dalam mode Standby, osilator master berjalan sementara perangkat lainnya dalam keadaan idle. Hal ini memungkinkan Anda mempertahankan kemampuan menyalakan perangkat dengan cepat sekaligus mengurangi konsumsi.

    Perangkat ini diproduksi menggunakan teknologi memori non-volatil kepadatan tinggi dari Atmel. ISP Flash internal memungkinkan Anda memprogram ulang memori program dalam sistem melalui antarmuka serial SPI menggunakan program bootloader yang berjalan di inti AVR, atau pemrogram memori non-volatil konvensional. Program bootloader mampu memuat data melalui antarmuka apa pun yang tersedia di mikrokontroler. Program di sektor boot terus dijalankan bahkan ketika area memori aplikasi dimuat, memberikan perilaku read-on-write yang sebenarnya. Dengan menggabungkan inti RISK 8-bit dengan memori Flash yang dapat diprogram secara internal, Atmel telah menjadikan perangkat ATMega48 mikrokontroler kuat yang memberikan fleksibilitas lebih besar dan efisiensi biaya untuk berbagai perangkat kontrol.

    ATMega48 didukung oleh berbagai perangkat lunak dan alat pengembangan terintegrasi seperti kompiler C, perakit makro, debugger/simulator perangkat lunak, emulator dalam sirkuit, dan kit evaluasi.

    7.1. Tata letak pin ATMega48:

    Gambar.7.1. Lokasi kontrak mikroprosesor ATmega48

    Pada Gambar 7.1. Tujuan dari pin mikroprosesor telah diberikan, tetapi kami hanya akan menggunakan sebagian saja. Jadi kami mengkonfigurasi seluruh port B untuk keluaran dan menghubungkan indikasi ke port tersebut untuk menampilkan arti angka. Port D0-D3 juga dikonfigurasi untuk output dan kami menghubungkan indikator ke sana untuk menyalakan empat indikator yang dikenal. Pin port D4-D5 dikonfigurasikan sebagai output dan LED dihubungkan padanya untuk menampilkan penutupan kontak depan dan pembukaan belakang dan sebaliknya untuk membuka kontak depan dan menutup belakang. Output dari port C0 digunakan untuk ADC. Sumber tegangan referensi eksternal dihubungkan ke pin AREF, dan kapasitor filter dihubungkan ke pin AVCC untuk meningkatkan kekebalan kebisingan.

    Setelah Anda memutuskan pilihan mikroprosesor dan desain algoritme operasi, Anda perlu menulis program untuk mikroprosesor tersebut menggunakan algoritme ini.

    Untuk menulis programnya saya akan menggunakan software bernama Algorithm Builder. Namun sebelum menulis programnya, mari kita lihat software ini.

    7.2. Lingkungan pengembangan Pembuat Algoritma

    Perangkat lunak Algorithm Builder ditulis oleh programmer Rusia Gennady Gromov. Lingkungan ini menyediakan siklus pengembangan penuh, mulai dari input algoritma, termasuk debugging, dan diakhiri dengan pemrograman kristal dalam sirkuit. Anda akan memiliki kesempatan untuk mengembangkan program baik di tingkat assembler maupun di tingkat makro, di mana dimungkinkan untuk bekerja dengan jumlah bolak-balik dengan panjang yang berubah-ubah. Hal ini membawa kemampuan pemrograman lebih dekat ke bahasa tingkat tinggi. Anda dapat mengunduh Algorithm Builder, versi terbaru, dari situs web penulisnya http://algrom.net/russian.html.

    Berbeda dengan assembler klasik, program dimasukkan dalam bentuk algoritma dengan percabangan seperti pohon dan ditampilkan pada bidang datar, dalam dua dimensi. Jaringan transisi bersyarat dan tidak bersyarat ditampilkan secara grafis dalam bentuk vektor yang nyaman. Hal ini juga membebaskan program dari nama label yang tak terhitung jumlahnya, yang dalam assembler klasik merupakan pemberat yang tidak dapat dihindari. Seluruh struktur logis dari program ini menjadi jelas.

    Teknologi grafis untuk membuat program membuka peluang baru bagi programmer. Mereka memungkinkan Anda memasukkan program pada bidang dalam bentuk algoritma dengan struktur pohon. Hasilnya, seluruh struktur logis program menjadi jelas sepenuhnya. Tujuan utama dari teknologi tersebut adalah untuk membawa antarmuka pengembangan sedekat mungkin dengan sifat persepsi manusia. Menguasai lingkungan seperti itu jauh lebih mudah daripada menguasai assembler klasik. Antarmuka yang lebih ramah pengguna membuka peluang pengembangan baru. Menurut pengguna, waktu pembuatan perangkat lunak berkurang 3 hingga 5 kali lipat dibandingkan dengan versi klasik

    Beras. 7.2.1. Jendela perangkat lunak Pembuat Algoritma.

    Perakit.

    Lingkungan ini dirancang untuk bekerja pada Windows 95/98/2000/NT/ME/XP.

    Untuk pengoperasian normal editor, font “Kurir” diperlukan.

    Pada Gambar 7.2.1. menunjukkan seperti apa panel utama program "Pembangun Algoritma".

    Desain algoritma

    Perangkat lunak apa pun dapat dipecah menjadi bagian-bagian yang terpisah dan lengkap secara logis. Biasanya, pernyataan akhir dari fragmen ini adalah pernyataan seperti lompatan tanpa syarat atau kembali dari subrutin, mis. pernyataan yang setelahnya eksekusi linier program pasti berhenti. Pengembangan perangkat lunak di lingkungan Pembuat Algoritma direduksi menjadi pembentukan blok-blok tersebut, menempatkannya pada suatu bidang dan membangun hubungan vektor di antara mereka dari transisi bersyarat dan tidak bersyarat.

    Elemen algoritma

    Untuk membangun suatu algoritma, Algorithm Builder menyediakan tujuh elemen:

    BIDANG – Bidang;

    LABEL – Label;

    VERTEX – Bagian atas blok;

    KONDISI – Transisi bersyarat;

    JMP Vector – Lompatan relatif tanpa syarat;

    SETTER – Pengaturan perangkat periferal;

    TEKS – String editor teks lokal.

    Elemen "FIELD" - bidang

    Mewakili garis yang berpusat pada blok. Objek tersebut dimaksudkan untuk mencatat sebagian besar operator mikrokontroler. Untuk menambahkan field, pilih item menu “Elements\Field”, atau klik tombol pada toolbar, atau tombol “Alt+F”, atau tombol “Enter” (jika kursor berada di luar editor teks lokal) .

    Dalam contoh algoritma yang disajikan di bawah, elemen “Field” dilingkari dengan oval.

    Elemen "LABEL" - label

    Ini adalah guratan vertikal yang terletak di dalam blok pernyataan dan nama opsional yang terletak di kiri atau kanan guratan. Label dimaksudkan untuk menunjukkan tempat-tempat dalam algoritma di mana transisi bersyarat dan tidak bersyarat dimungkinkan. Untuk menambahkan label ke blok, pilih item menu “Elements\Label”, tekan tombol “Alt+L” atau tombol pada toolbar. Jika perlu, Anda dapat menetapkan alamat program tertentu. Untuk melakukan ini, sebelum nama (jika ada), Anda perlu menulis konstanta atau ekspresi aljabar yang mendefinisikan alamat ini.

    Untuk membalikkan lokasi nama label, tekan tombol “Tab”.

    Pada contoh di bawah, elemen “Label” digambarkan dalam bentuk oval.

    Biasanya, salah satu vektor transisi (dengan panah di ujungnya) harus berdekatan dengan label. Karena

    Tidak perlu memberi nama pada labelnya. Namun Pembuat Algoritma mengizinkan pengalamatan transisi klasik menggunakan nama label. Dalam hal ini, Anda perlu memberi nama pada label tersebut. Misalnya:

    Selain itu, dalam pernyataan algoritma, nama label dapat digunakan sebagai konstanta yang berisi alamat lokasi terkait di memori program.

    Elemen "VERTEX" - bagian atas blok

    Dalam tampilan dan tujuannya, label ini sepenuhnya identik dengan label, tetapi, tidak seperti label, label ini menentukan

    Lokasi blok pada bidang kerja selalu merupakan permulaannya. Untuk menambahkan simpul baru, pilih item menu “Elements\Vertex”, atau tekan tombol “Alt+V”, atau klik tombol pada toolbar, atau tombol kiri mouse dengan mengkliknya pada tempat yang diperlukan dalam bidang kerja yang dikombinasikan dengan tombol “ Alt+Ctl+Shift.”

    Pada contoh di bawah, elemen “Vertex” dilingkari dengan oval:

    Biasanya, sebuah simpul diberi nama hanya jika itu adalah awal dari subrutin atau makro.

    Elemen "KONDISI" - transisi bersyarat

    Elemen ini secara struktural adalah yang paling kompleks dan dirancang untuk mengimplementasikan transisi bersyarat. Ini adalah garis oval, di dalamnya ditulis kondisi transisi dan vektor yang mungkin dalam bentuk garis putus-putus dengan panah di ujungnya, di sebelahnya terdapat nama vektor opsional.

    Akhir dari suatu vektor harus berakhir pada suatu label atau titik, atau pada suatu segmen dari vektor lain, atau mempunyai nama label yang dialamatkan.

    Untuk memindahkan vektor ke lokasi yang diinginkan, tekan tombol kiri mouse sambil menahan tombol “Alt”. Untuk mengedit vektor, gunakan tombol arah yang dikombinasikan dengan tombol “Alt”. Untuk beralih dari mengedit kondisi ke mengedit nama vektor, tekan tombol “Tab”. Penekanan berikutnya pada tombol “Tab” akan membalikkan posisi nama vektor. Untuk memasukkan objek baru, pilih item menu “Elements\Condition”, atau tekan tombol “Alt+C”, atau tombol pada toolbar.

    Pada contoh di bawah, elemen “Kondisi” digambarkan dalam bentuk oval:

    Elemen "JMP Vector" - lompatan tanpa syarat

    Elemen ini dirancang untuk mengimplementasikan lompatan pendek tanpa syarat (dalam assembler dasar ini adalah operator “RJMP”). Ini adalah polyline yang berasal dari tengah blok dengan panah di ujungnya, mirip dengan vektor objek “Kondisi”. Untuk menambahkan lompatan tanpa syarat baru, pilih item menu “Elements\JMP Vector”, atau tekan tombol “Alt+J”, atau tombol pada toolbar.

    Pada contoh di bawah, elemen “JMP Vector” digariskan dengan garis.

    Elemen "SETTER" - penyesuai

    Objek ini berbentuk persegi panjang abu-abu, di dalamnya tertulis nama komponen periferal mikrokontroler yang dapat disesuaikan, seperti Timer, ADC, register masker interupsi, dll. Penyesuai dirancang untuk membentuk urutan operasi mikrokontroler yang memastikan pemuatan konstanta yang diperlukan ke dalam register kontrol I/O yang sesuai sesuai dengan properti yang dipilih.

    Sebelum menggunakan elemen ini, jenis mikrokontroler harus ditentukan (item menu “Opsi\Opsi proyek”, tab “Chip”)

    Untuk menambahkan penyesuai ke algoritme, pilih item menu “Elements\Setter”, atau tekan tombol “Alt+S”, atau tombol pada toolbar. Untuk mengedit penyesuai yang sudah dimasukkan, aktifkan editor dengan mengklik dua kali atau menggunakan tombol “Shift+Enter”.

    Objek “Setter” adalah operator makro. Setelah dikompilasi, ini diubah menjadi serangkaian perintah mikrokontroler yang akan memastikan bahwa konstanta yang diperlukan dimuat ke dalam register kontrol yang sesuai. Perlu diingat bahwa dalam operasi ini register perantara r16 akan digunakan.

    Untuk beberapa komponen, seperti ADC, penyesuai dapat bertindak pada beberapa register kontrol. Dalam hal ini, jika perlu, dampak pada setiap register tertentu dapat diblokir.

    Pada contoh di bawah, elemen “Setter” digambarkan dengan garis oval.

    Elemen “TEXT” adalah string editor teks lokal

    Elemen ini adalah string teks yang dimulai dari tepi kiri bidang algoritma. Kumpulan beberapa baris tersebut membentuk editor teks lokal, dibatasi oleh garis putus-putus. Aturan untuk bekerja di dalamnya mirip dengan editor teks lainnya.

    Baris dimaksudkan untuk merekam sejumlah arahan kompiler, serta untuk komentar. Untuk menambahkan editor teks lokal baru, pilih item menu “Elements\Text”, atau tekan tombol “Alt+T”, atau tombol pada toolbar.

    Komentar harus diawali dengan dua garis miring: “//”.

    Pada contoh di bawah, elemen “Teks” digariskan dengan garis oval.

    Setelah kita memahami elemen dasar perangkat lunak Pembuat Algoritma, kita akan mulai membuat programnya. Untuk membuat proyek baru, pilih item menu “File\New”. Dalam hal ini, tab pertama akan muncul dan pada bidang kerja elemen "TEXT", "VERTEX" dan satu elemen "FIELD" yang dilampirkan padanya dengan operator kosong (Gbr. 7.2.2.) "NOP":

    Beras. 7.2.2. Jendela proyek baru.

    Kemudian kita atur tipe mikroprosesornya, dalam kasus kita adalah ATmega48. Untuk mengatur jenis mikroprosesor, pilih item menu “Options\Project options...” (Gambar 7.2.3):

    Beras. 7.2.3. Jendela opsi proyek.

    Di sini kami memilih mikroprosesor kami dan klik tombol terapkan.

    Setelah ini, berdasarkan algoritma operasi, kami membuat sebuah program. Karena program di sini disajikan dalam bentuk suatu algoritma, maka tidak akan jauh berbeda dengan algoritma yang telah disusun dan dijelaskan di atas.

    Mari kita pertimbangkan pembangunan programnya. Pertama, Anda perlu mengatur penghitung alamat tumpukan ke sel SRAM terakhir. Ini mudah dilakukan; untuk melakukan ini, pilih elemen SETTER di mana kita memilih Stack Point setelahnya

    Apa yang muncul jendela Control Register Setting (Gbr. 7.2.4), tempat kita mengaturnya

    Beras. 7.2.4 Jendela pengaturan tumpukan.

    Centang kotak dan tekan tombol Ok. SP persegi panjang abu-abu muncul di bidang kerja. Kemudian kita mengkonfigurasi nilai ADC, yang mana kita memilih elemen SETTER di mana kita memilih Analog to Digits Converter (ADC), setelah itu jendela Control Register Setting muncul (Gbr. 7.2.4.) di mana ADC dikonfigurasi. Di sini kita mengatur prescaler CK/128. Kami memilih pin mikroprosesor yang akan kami berikan nilai ADC. Di sini kita memilih mode operasi mikroprosesor untuk apa

    Beras. 7.2.4. Jendela pengaturan ADC.

    Pasang AVCC dengan kapasitor eksternal pada pin AREF. Ini menyelesaikan pengaturan ADC.

    Sekarang kita atur timer/counternya. Untuk mengkonfigurasi, kembali ke elemen SETTER di mana kita memilih Timer/Counter 0, setelah itu jendela dengan pengaturan timer/counter muncul (Gbr. 7.2.5). Di sini kita menentukan nilai prescaler CK/1024 dan memilih salah satu mode operasinya. Dalam hal ini kita pilih mode CTC yaitu reset jika ada kecocokan. Dalam mode ini, register penghitungan juga berfungsi sebagai pencacah penjumlahan reguler, yang bertambah setiap pulsa sinyal clock clk T 0 . Namun, nilai maksimum yang mungkin dari register penghitung dan, oleh karena itu, resolusi penghitung ditentukan oleh register perbandingan OCRO. Setelah mencapai nilai yang tercatat di register perbandingan, penghitungan dilanjutkan dari nilai “$00”. Pada jam sinyal yang sama

    Beras. 7.2.5. Jendela dengan pengaturan timer/counter.

    Clk T 0, di mana register penghitungan direset, flag interupsi TOV0 dari register TIFR disetel. Kami menulis nilai 100 ke dalam register OCRO, setelah mencapai interupsi akan terjadi dan program akan berpindah ke label Timer_0_Compare_Match_A.

    .

    Gambar 7.2.6. Jendela pengaturan interupsi.

    Kemudian kita konfigurasikan interupsi dan pilih interupsi overflow. Untuk melakukan ini, pilih lagi elemen SETTING di mana kita memilih Timer/Counter Interrupt Mask (TIMSK). Pada jendela yang muncul, pada kolom Timer/Counter, centang kotak Output Compare A Match (Gambar 7.2.6). Ini menyelesaikan konfigurasi interupsi. Sekarang kita mengkonfigurasi port input-output, karena kita perlu mengkonfigurasi seluruh port B untuk output, tuliskan nilainya 255 dan atur menjadi satu. Kami juga mengkonfigurasi port D, tetapi di sini kami hanya menggunakan 6 pin pertama D0 - D5, untuk ini kami menulis nilai 127 ke dalamnya. Kemudian kami mengatur nilai logis 0 pada pin ini kita menulis 0 ke dalamnya. Di sinilah pengaturan port input-output berakhir. Sekarang kita atur tanda t ke 0. Kemudian kita atur tanda pertama dari indikatornya, tulis 0 di n. Kemudian kita atur ulang nilai penjumlahannya ke dalam jumlah dan tulis 0. Kita juga mengatur nilai pembaginya dengan menulis 0 di m. Kami mengatur ulang nilai chast pribadi dengan menulis 0 di dalamnya. Setelah Untuk melakukan ini, kami mengaktifkan interupsi global dengan menyetel flag i ke 1. Hal ini memungkinkan program diinterupsi setelah nilai pulsa clock tertentu dan buka subrutin ADC atau timer/counter.

    Kemudian, dengan menggunakan elemen LABEL, kita mengatur label dan memberinya nama awal. Kemudian, dengan mengklik elemen CONDITION (lompatan bersyarat) dan memasukkan kondisi transisi di dalamnya, kondisi ini akan menyetel flag t ke 1. Jika flag t tidak sama dengan 1, maka program akan turun dan kemudian melalui elemen JMP Vector (lompatan tanpa syarat) kita menuju ke label awal. Jadi, kita membuat siklus di mana program berputar hingga bendera t disetel ke 1. Segera setelah bendera t sama dengan 1, program keluar sesuai arah panah. Di bawah ini adalah pintu masuk ke subrutin untuk mengubah bilangan biner menjadi bilangan desimal, yang sesuai dengan tulisan Z_to_Digits. Setelah menjalankan subrutin untuk mengubah bilangan biner menjadi bilangan desimal, yang akan kita bahas di bawah, program kembali setelah tulisan Z_to_Digits, di mana lagi 0 dimasukkan ke dalam tanda t. Kemudian kita kembali memilih elemen JMP Vector dan pergi ke label awal.

    Sekarang mari kita lihat rutinitas interupsi ADC. Transisi ke subrutin ADC dilakukan setelah waktu tertentu. Segera setelah ADC melakukan pengukuran, ADC menulis datanya ke adcl dan adch. Data dari kedua register ini perlu ditulis ke register lain untuk konversi lebih lanjut. Register ini akan menjadi zl dan zh. Untuk sensus kita akan menggunakan baris adcl → zl, masing-masing baris berikutnya adalah adch→ zh. Kemudian kita menggunakan elemen CONDITION (transisi bersyarat) dengan kondisi t=1. Kondisi ini diperlukan untuk melarang pengubahan bilangan hingga bilangan tersebut diubah ke bentuk desimal. Jika t=0 maka program berjalan di bawah tempat penulisan garis x → z, artinya bilangan yang disimpan pada register z hanya akan berubah setelah bilangan tersebut ditampilkan. Kemudian menggunakan elemen CONDITION (transisi bersyarat) kita membuat kondisi y
    Selanjutnya perhatikan kondisi y adc_max lalu dan jika kondisi benar maka program mengikuti tanda panah. Kemudian kami mengeluarkan informasi ke port D.5 dan D.4. Ini ditulis sebagai 1 → D.5. Prasasti ini menunjukkan bahwa nilai logika satu ditampilkan pada pin port D.5. Di baris berikutnya 0 → D.4 kami menampilkan nilai logika nol ke port D.4. Kemudian program berjalan di sekitar panah. Memeriksa kondisi x adc_max. Kemudian dituliskan tiga baris 0 → m, 0 → t, 0 → y yang saling mengikuti. Di dalamnya kami mengatur ulang nilai dividen (m), bendera t dan isi register y tempat nilai ADC yang diukur disimpan. Kemudian kita luncurkan ADC lagi, setelah itu kita keluar dari subrutin ADC. Ini menyimpulkan subrutin pengukuran tegangan input.

    Masukan ke subrutin pembagian ada di subrutin ADC. Setelah program berpindah ke subrutin pembagian sebesar div32_8, nilai rata-rata dari semua nilai ADC yang diukur dihitung. Pertama-tama, kami menyetel ulang nilai konten pribadi. Untuk melakukan ini, tulis 0 → chast. Kemudian kita perkenalkan kondisi dimana flag C = 1. Suatu satuan akan dimasukkan ke dalam tanda C hanya setelah isi penjumlahannya lebih kecil dari pembaginya. Tapi karena flag C masih berisi 0, program berjalan ke bawah. Di bawah ini adalah baris chast++ di mana kita menambah nilai hasil bagi sebanyak satu. Kemudian kita kurangi nilai pembagi dari register yang berisi jumlah nilai ADC. Kemudian, dengan menggunakan elemen JMP Vector (unconditional jump), kita membuat loop yang muncul sebelum kondisi di mana flag C dicentang dan segera setelah nilai penjumlahannya lebih kecil dari pembagi pada flag C, maka akan dituliskan dan program akan mengikuti panah. Kemudian kita menulis ulang nilai hasil bagi ke dalam register x. Ini sesuai dengan baris chast → x. Di bawah ini adalah baris di mana kita mengatur ulang nilai jumlah 0 → jumlah. Di sinilah subrutin pembagian berakhir dan program keluar darinya, berakhir di subrutin ADC setelah baris div32_8.

    Mari kita pertimbangkan subrutin interupsi pengatur waktu di mana pencahayaan empat titik indikator ditentukan. Setelah terjadi gangguan dari pengatur waktu dan program berpindah ke label Timer_0_Compare_Match_A, program mulai memeriksa kondisi nilai keakraban indikator. Untuk melakukan ini, dengan menggunakan elemen CONDITION (lompatan bersyarat), kita memeriksa kondisi n=0 dan jika benar, maka program bergerak sepanjang panah. Setelah ini kita tuliskan nilai 0 pada port D.3 dengan perintah 0 → portd.3. Kemudian kita tampilkan nomor yang terdapat pada digit_0 di seluruh postingan. Untuk melakukannya, tulis digit_0→ portb. Dan kita menulis satu ke port D.0 untuk menyalakan tanda indikasi pertama; dalam program akan terlihat seperti 1 → portd.0. Kemudian, dengan menggunakan elemen JMP Vector (unconditional jump), kita melompat ke label m0. Label m0 muncul setelah semua kondisi konten n. Kemudian kita naikkan nilai n sehingga muncul angka berikutnya pada tanda kedua indikator. Setelah ini kita keluar dari subrutin pengatur waktu. Saat interupsi pengatur waktu terjadi lagi, program akan kembali ke sana tetapi akan berjalan sedikit berbeda, karena informasi perlu ditampilkan pada tanda kedua indikator. Ini akan terjadi setelah memeriksa kondisi dimana register n harus berisi unit yang ditulis setelah digit pertama dikeluarkan dan meningkatkan nilai n sebanyak satu. Karena n berisi satu, program berjalan sesuai dengan kondisi n=1. Setelah melewati kondisi ini, familiaritas pertama harus dimatikan dan untuk melakukan ini kita menulis nilai nol ke port D.0. Dalam program ini sesuai dengan baris 0 → portd.0. Kemudian kami juga menampilkan nomor yang terdapat dalam digit_1 ke seluruh port. Untuk melakukan ini, tulis digit_1→ portb. Dan kita menulis satu ke port D.1 untuk menyalakan simbol indikasi pertama; dalam program akan terlihat seperti 1 → portd.1. Lalu kita masuk ke label m0 dan menambah nilai n sebanyak satu seperti dijelaskan di atas. Keluaran digit ketiga dan keempat pada indikator sama dengan keluaran dua digit pertama, namun setelah keluar digit keempat, kita reset nilai isi register n. Untuk melakukan ini, tulis 0→n. Dan kami menetapkan nilai bendera t menjadi satu, yang menunjukkan akhir dari tampilan nomor tersebut. Untuk melakukan ini, tulis 1→t. Ini menyelesaikan siklus penuh menampilkan angka pada indikator.

    Tetap hanya mempertimbangkan subrutin indikasi, transisi yang dilakukan hanya setelah memeriksa kondisi flag t=1 di program utama. Karena bendera t berisi satu angka setelah digit terakhir yang ditampilkan pada indikator. Saat melakukan polling suatu kondisi, program bergerak sepanjang panah dan kemudian sampai ke Z_to_Digits, ini adalah kondisi untuk berpindah ke subrutin indikasi. Program mengikuti label dan berakhir di subrutin Z_to_Digits. Setelah transisi, hal pertama yang kita lakukan adalah menonaktifkan interupsi global; untuk melakukan ini, masukkan nilai 0 ke dalam flag i. Di bawah ini kita memasukkan nol ke dalam register kerja sementara. dalam program sepertinya 0→temp. Sekarang, dengan menggunakan elemen CONDITION, kita membuat kondisi di mana register Z dibandingkan dengan 1000 dan segera setelah nilai register Z kurang dari 1000, program akan mengikuti panah. Sementara itu, register Z tidak lagi memenuhi syarat dan program turun. Disini kita kurangi seribu dari register Z dan tuliskan sebagai Z – 1000. Kemudian kita tambah nilai register temp sebanyak satu. Dengan menggunakan elemen JMP Vector, kita membuat loop yang muncul sebelum kondisi untuk membandingkan register Z. Segera setelah kondisi terpenuhi dan register Z kurang dari seribu, program akan meninggalkan panah. Sekarang kita menulis ulang isi register temp ke dalam register r0 dan sekarang menyimpan nilai ribuan angka tersebut. Entrinya terlihat seperti temp→r0. Setelah ini kita reset nilai register temp dengan menuliskan 0 ke dalamnya. Sekarang program diulangi seperti menghitung ribuan, tetapi sekarang yang perlu dilakukan adalah menghitung nilai ratusan. Sekali lagi kita atur kondisi Z
    Setelah menulis sebuah program, Anda dapat mengujinya di simulator yang disediakan oleh lingkungan perangkat lunak Pembuat Algoritma. Untuk menjalankan algoritma di simulator, tekan tombol “F9” atau tombol pada toolbar.

    Dalam hal ini, kompilasi akan dilakukan di awal dan, jika tidak ada kesalahan, simulator akan dimulai. Membuka jendela komponen mikrokontroler yang diperlukan dilakukan melalui item menu “View…”. Untuk mengamati proses dalam algoritma yang diperkenalkan, cukup dengan membuka jendela “Processor”, “PortD”, “Working register”, “ADC”, “Timer/Counter 0” dan “Process time #0” (Gbr. 7.2 .7).

    Gambar 7.2.7.Vio dari simulator Algorithm Builder.

    Tanda di sebelah operator menunjukkan posisi penghitung program saat ini. Label ditempatkan sebelum pernyataan yang harus dieksekusi pada langkah berikutnya. Segera setelah diluncurkan, terletak pada pernyataan pertama program, terletak di alamat $0000. Ketika simulator dimulai, isi register kerja dan SRAM selalu diisi dengan nilai acak, karena dalam mikrokontroler sebenarnya isinya tidak dapat diprediksi setelah daya diterapkan. Eksekusi algoritma selangkah demi selangkah dengan masuk ke subrutin dilakukan menggunakan tombol "F7" atau tombol pada toolbar. Eksekusi langkah demi langkah tanpa memasukkan subrutin - menggunakan tombol atau tombol "F8".

    Gambar 7.2.8 Jendela pemrograman kristal.

    Perangkat lunak ini memiliki kemampuan untuk memprogram mikroprosesor. Pembuat Algoritma berisi pemrogram dalam sirkuit bawaan yang menyediakan pemrograman rangkaian mikro secara berurutan. Memilih item menu “Program\Run with Chip” atau menekan tombol “Ctrl+Shift+F9” atau mengklik tombol pada toolbar akan memulai kompilasi algoritma, dan, jika tidak ada kesalahan, akan membuka jendela pemrograman (Gambar 7.2 .8).

    Mikroprosesor diprogram melalui port COM.

    Lingkungan pemrograman grafis untuk mengembangkan aplikasi mikrokontroler dengan arsitektur AVR.

    Pembuat Algoritma adalah alat canggih yang memungkinkan Anda melakukan siklus penuh pembuatan dan pemeriksaan kode program. Lingkungannya meliputi: editor grafis, simulator microchip untuk men-debug algoritma, kompiler dan pemrogram dalam sirkuit untuk memuat kode ke dalam chip. Program ini merupakan analog domestik dari Assembler dan cocok untuk pengembang berpengalaman dan mereka yang baru mulai menguasai firmware perangkat.

    Pembuatan algoritma dapat dilakukan di tingkat assembler atau di tingkat makro, berdasarkan pengoperasian dengan nilai multibyte, dengan mempertimbangkan tandanya. Selain itu, operator makro menyertakan kumpulan perintah yang paling umum.

    Seluruh program yang dikembangkan disajikan dalam bentuk diagram blok pohon percabangan, jaringan transisi ditampilkan secara grafis dalam bentuk vektor. Jika menurut syarat perlu pergi ke suatu tempat pada kode program, maka cukup menggambar vektor disana. Dengan cara ini, perangkat lunak terbebas dari beberapa nama label. Jika cabangnya terlalu panjang, selalu ada opsi untuk mengalamatkan cabang tersebut ke nama label. Kejelasan struktur logis seperti itu, menurut pengembang, secara signifikan mengurangi waktu penulisan kode dan mengurangi jumlah kesalahan.

    Jendela utama memungkinkan Anda menempatkan objek yang diperlukan dan mengubahnya, menyisipkannya, memindahkannya, dll., seperti pada editor grafis mana pun. Di bagian layar yang terpisah, sebuah jendela dengan daftar semua konstanta dan variabel dibentuk dalam bentuk tabel, sehingga membebaskan algoritma dari entri tambahan. Untuk mengkonfigurasi parameter perangkat periferal (UART, SPI, ADC, timer), disediakan elemen khusus dengan antarmuka jendela drop-down. Kompiler secara mandiri menghasilkan serangkaian instruksi yang menyediakan parameter operasi perangkat yang dipilih. Selain itu, konversi otomatis kode ANSI Windows menjadi kode LCD alfanumerik berbahasa Rusia juga didukung. Program ini mendukung berbagai keluarga mikrokontroler: ATtiny, ATmega, AT90.

    Simulator menunjukkan semua perubahan yang terjadi di berbagai register, sel memori, dan pengatur waktu. Simulasi dapat dilakukan selangkah demi selangkah (dengan atau tanpa memasukkan fungsi), ke titik henti sementara, atau ke area yang dipilih.
    Untuk mengoperasikan pemrogram dalam sirkuit, Anda perlu merakit sendiri adaptor sederhana yang melaluinya mikrokontroler terhubung ke port COM komputer. Selain itu, dimungkinkan untuk terhubung melalui konektor USB. Pemrogram menghitung jumlah program ulang inti dan menyimpan penghitung di dalam chip itu sendiri.

    Memantau mode debugging pada inti menggunakan adaptor lain (semua diagram tersedia dalam dokumentasi perangkat lunak) memungkinkan Anda memantau keadaan internal kristal nyata pada titik henti mana pun. Untuk komunikasi antara pengontrol dan komputer, hanya satu keluaran yang dialokasikan sesuai pilihan pengguna. Debug On Chip berlaku untuk semua jenis chip yang memiliki memori SRAM.

    Terlepas dari kelebihannya yang jelas, Algorithm Builder kurang dikenal di komunitas radio amatir. Hal ini sebagian disebabkan oleh fakta bahwa hingga tahun 2010 lingkungan pemrograman visual berbayar, versi demo gratis membatasi kode hingga dua kilobyte. Saat ini perangkat lunak tersebut didistribusikan secara gratis. Folder dengan program yang diinstal dapat disalin ke media lain dan berfungsi secara portabel. Perangkat lunak ini dilengkapi dengan panduan pengguna. Artikel ini membahas sejumlah karya sederhana dan menyediakan diagram pemrogram untuk port USB dan COM.

    Penulis program Algorithm Builder adalah sekelompok pemrogram dalam negeri yang dipimpin oleh pengrajin rakyat Gennady Leonidovich Gromov dari Nizhny Novgorod. Program ini terus berkembang hingga hari ini, fungsi-fungsi baru ditambahkan, dan sejumlah kecil perpustakaan telah muncul di situs web penulis.

    Antarmuka program Pembuat Algoritma dan panduan pengguna disajikan dalam bahasa Rusia dan Inggris.

    Perangkat lunak ini kompatibel dengan sistem operasi Microsoft Windows 95, 98, 2000, NT, ME, XP, Vista dan 7.

    Distribusi program: bebas

    Materi artikel disiapkan di Departemen Otomasi, Informatika dan Sistem Kontrol (AIiSU) Universitas Industri Negeri Moskow (GOU MGIU).
    (Sejak 2011, MGIU disebut Lembaga Pendidikan Anggaran Negara Federal untuk Pendidikan Profesi Tinggi "MGIU").
    Penulis: Kryukov A.I., Shubnikova I.S., Troikov S.M.

    Departemen AI&CS telah melatih para profesional di bidang pengembangan dan pengoperasian sistem elektronik, mikroprosesor, komputer, robot, mekatronik dan informasi untuk teknologi otomotif dan dirgantara, teknik mesin dan bisnis selama lebih dari 35 tahun. Pekerjaan penelitian karyawan departemen dilakukan di bidang yang terkait dengan pengembangan sistem pendukung keputusan berdasarkan teknologi kecerdasan buatan, analisis dan sintesis proses untuk mengelola sistem yang kompleks, pemantauan dan deteksi kegagalan peralatan secara cerdas. Bidang penting kegiatan ilmiah departemen ini adalah melakukan penelitian di bidang sistem kendaraan otomatis dan elektronik.
    Ada berbagai macam aplikasi untuk menulis program kontrol untuk Atmel MK - ini adalah lingkungan pengembangan dan debugging dalam bahasa tingkat rendah (misalnya, paket AVR Studio gratis untuk mengembangkan program dalam bahasa AVR Assembler), lingkungan pengembangan dalam bahasa tingkat tinggi (seperti lingkungan WinAVR untuk mengembangkan program dalam bahasa mirip C) dan bahkan ada lingkungan pengembangan perangkat lunak grafis dan debugging yang disebut "Pembangun Algoritma".

    Algorithm Builder berbeda dari semua lingkungan lainnya dan itulah yang akan kami fokuskan. Sorotan dari aplikasi ini bukanlah gratis, tetapi kode di dalamnya bahkan tidak ditulis, tetapi digambar dalam bentuk diagram alur algoritma, yang secara signifikan mengurangi waktu untuk mengembangkan aplikasi. Lingkungan ini menyediakan siklus pengembangan penuh, mulai dari input algoritma, termasuk debugging, dan diakhiri dengan pemrograman kristal dalam sirkuit. Hasilnya, seluruh struktur logis program menjadi jelas sepenuhnya.

    Pengembangan perangkat lunak di lingkungan Pembuat Algoritma direduksi menjadi pembentukan blok tugas tersebut, menempatkannya pada bidang dan membangun hubungan di antara mereka dari transisi bersyarat dan tidak bersyarat.

    Agar tidak menulis ulang seluruh manual untuk bekerja dengan lingkungan Algorithm Builder, saya menyarankan Anda untuk membacanya sendiri, terutama karena aplikasi tersebut diproduksi di dalam negeri dan berisi penjelasan rinci dalam bahasa Rusia berdasarkan contoh dalam bekerja dengannya. Berdasarkan pengalaman pribadi, kami dapat dengan yakin mengatakan bahwa manual ini (omong-omong, jauh dari banyak - hanya 20-30 menit belajar) cukup untuk memahami dan memahami produk perangkat lunak ini sepenuhnya.

    Anda dapat mengunduh Algorithm Builder di http://algrom.net/russian.html. Dan proses pengembangan program pengendalian dapat dilihat di tautan. Oleh karena itu, sekarang kami akan menyajikan program yang telah selesai dalam lingkungan pengembangan yang dijelaskan dengan komentar rinci mengenainya.

    Pertama, Anda perlu memilih jenis kristal (dalam kasus kami, Atmega8) di menu Opsi/Opsi Proyek dan mengatur frekuensi clock ke 8.000.000 Hz (8 MHz) di sana. Selanjutnya kita reset crystal pada saat startup (Elements/Interrupts/Reset). Kemudian kita menginisialisasi tumpukan dengan memilih Elements/Customer…/Stack Pointer (SP), sebuah jendela akan terbuka dan Anda hanya perlu menyetujuinya dengan mengklik “OK” (Gbr. 2).

    Beras. 2. Penyesuai Tumpukan

    Langkah selanjutnya adalah menginisialisasi transceiver USART (jangan kaget dengan munculnya huruf "S" dalam singkatannya - ini adalah versi UART yang lebih modern, yang berbeda dalam kemampuan mengirim/menerima data tidak hanya dalam mode asynchronous, tetapi juga dalam mode synchronous) dengan memilih menu Elements / Customizer... /USART. Di jendela yang terbuka (Gbr. 3), di bagian Penerima, centang kotak di sebelah Aktifkan (nyalakan penerima data) dan Selesaikan pengaktifan interupsi (aktifkan interupsi saat data diterima), lalu centang kotak di sebelah Kecepatan Ganda , atur ukuran karakter Ukuran Karakter: 8 – bit dan atur kecepatan transfer data ke Baud Rate = 9615 bps (saat Anda mengklik memilih kecepatan transfer data di menu, Anda harus memilih 9600 bps, diperoleh 9615 bps karena perhitungan ulang frekuensi clock menjadi 8 MHz).


    Beras. 3. Konfigurasi USART

    Bagian utama dari program ini akan terdiri dari serangkaian pemeriksaan kode kontrol (Daftar No. 1). Idenya adalah bahwa PC akan mengirimkan kode operasi melalui UART, dan MK akan menerimanya dan menghasilkan tindakan kontrol yang sesuai pada penggerak bilah kipas dan penggerak servo. Akan ada total tiga kode seperti itu (Anda dapat membuat kode apa pun):

  • $31 - nyalakan penggerak bilah kipas;
  • $20 - matikan penggerak bilah kipas;
  • $A1 - akses ke penggerak servo.

  • Jika semuanya jelas dengan dua kode pertama, maka dengan kode ketiga semuanya tidak sesederhana itu - $A1 hanyalah perintah untuk mengakses drive servo, maka Anda perlu mendapatkan kode sudut rotasi. Secara eksperimental ditemukan bahwa harganya berkisar dari $05AF hingga $154F. Selain itu, kami akan mengirim dari PC dan, karenanya, menerima dari MK mulai dari byte rendah. Kami juga akan menonaktifkan interupsi untuk menerima data melalui USART selama eksekusi perintah - jika tidak maka data akan menjadi "berantakan".

    Daftar #1

    Listing No. 2 menunjukkan kode untuk subrutin penundaan (Delay). Penundaan waktu diperlukan untuk pemrosesan perintah yang akurat dan lengkap dan dibentuk dengan mengulang program selama N siklus (dengan coba-coba, kami menghitung bahwa dalam kasus kami jumlah siklus yang paling berhasil adalah 84FF dalam sistem bilangan heksadesimal).

    Daftar No.2

    Berakhirnya penerimaan data melalui UART menyebabkan interupsi USART_Receive_Complete (jika saat ini tidak dinonaktifkan di bagian utama program), yang dapat diatur dalam kode melalui menu Elements/Interrupts/USART_Receive_Complete. Di badan pawang, semua register yang digunakan di dalamnya harus disimpan di tumpukan, dan di akhir penangan, pulihkan dari tumpukan. Juga di handler ini Anda bisa mendapatkan byte status (register UCSRA) untuk memeriksa kesalahan data dan, tentu saja, data itu sendiri dari register UDR (Daftar No. 3).

    Daftar #3

    Sudut rotasi penggerak servo bergantung pada lebar pulsa yang disuplai ke dalamnya dengan tetap menjaga periode tetap (periode adalah 20 ms, dan durasi pulsa kontrol adalah dari 0,8 hingga 2,2 ms, meskipun untuk servo yang berbeda nilai-nilai ini mungkin sedikit berbeda) untuk ini kita memerlukan subrutin. Waktu pulsa kontrol dan waktu jeda akan diatur serupa dengan subrutin penundaan. Seperti yang kami tulis di atas, secara eksperimental untuk frekuensi kristal 8 MHz kami menentukan bahwa waktu pulsa ditentukan oleh kode dalam kisaran dari $05AF hingga $154F. Jadi, dengan mengetahui waktu seluruh periode - $9E3C (juga ditentukan secara eksperimental), kita dapat menghitung waktu jeda sebagai perbedaan antara durasi periode dan durasi pulsa. Yang tersisa hanyalah menghitung waktu pulsa dan waktu jeda secara berurutan, mirip dengan subrutin penundaan, dan kemudian mengulangi sinyal tersebut beberapa kali (dalam kasus kami, kami mengulangi sinyal $10 kali, yaitu 16 kali dalam sistem notasi desimal )

    Daftar #4

    Setelah menulis kode (menggambar algoritma) dari program kontrol, perlu untuk mengkompilasinya dan mem-flash-nya ke mikrokontroler. Program dapat dikompilasi dengan menekan Ctrl+F9 atau melalui menu Program/Kompilasi. Jika kompilasi berhasil, jendela informasi akan muncul yang menunjukkan jumlah memori yang ditempati MK.

    Selanjutnya, Anda perlu mem-flash hasil kompilasi (file dengan ekstensi *.hex tanpa awalan “EE_” di awal, terletak di folder yang sama dengan sumber program) ke dalam controller. Hal ini dapat dilakukan dengan menggunakan utilitas AvrProg gratis, yang juga disertakan dalam paket AVR Studio gratis. Anda dapat mendownloadnya dari situs mymcu.ru atau dari atmel.com (situs berbahasa Inggris).

    Selain utilitas untuk mem-flash firmware MK, Anda juga memerlukan seorang programmer. Anda dapat membelinya (versi sederhana relatif murah) atau menyoldernya sendiri.

    Beras. 4. Rangkaian pemrogram LPT
    Yang paling sederhana yang saya tahu adalah pemrogram LPT, tetapi oleh karena itu memerlukan port LPT di komputer, yang saat ini jarang terjadi. Ide pemrogramnya sederhana dan terdiri dari menghubungkan port LPT ke antarmuka ISP dan jalur Reset pengontrol secara langsung (Gbr. 4).

    Pilihan lain bagi pemrogram untuk perakitan mandiri adalah pemrogram USB (diagramnya ditunjukkan pada Gambar 5), tentu saja lebih rumit, tetapi di masa depan bisa menjadi jauh lebih nyaman. Namun, ada satu "tetapi" - untuk merakitnya Anda masih memerlukan programmer LPT, meskipun hanya sekali. Anda perlu mem-flash pengontrol kontrol pemrogram itu sendiri untuk mem-flash bit FUSE. Bit SPIEN, CKOPT dan SUT0 perlu diprogram (disetel ke “0”). Biasanya MK berasal dari pabrik yaitu. yang baru sudah memiliki bit SPIEN yang diprogram. Juga diinginkan (tetapi tidak perlu) untuk memprogram (diatur ke “0”) bit BODEN. Bit yang tersisa harus tidak diprogram (diatur ke “1”). Ini mungkin memerlukan aplikasi Codevision AVR V2.03.4. Penjelasan rinci tentang perakitan pemrogram USB dapat dibaca di sini.