Kontak

pemrograman attiny13 untuk pemula. Kami mem-flash AVR secara manual. Antarmuka MK dalam mode pemrograman

Jadi sudah waktunya untuk firmware pertama. Firmware ini adalah salah satu uji coba. Itu tidak menghasilkan tindakan yang berguna, kecuali menyentak kakinya menurut algoritme tertentu. Dengan firmware ini, Anda dapat memeriksa kinerja seluruh mikrokontroler dan port I/O khususnya.
Untuk memeriksa mikrokontroler, Anda perlu mengunduh firmware dan melihat apa yang terjadi di kaki. Anda dapat "menonton" baik dengan multimeter, atau dengan probe sederhana - LED seri dengan resistor 300 Ohm - 1 kOhm. Tidak ada gunanya memeriksa tanpa resistor - Anda dapat membakar port I / O. Level sinyal pada kaki berubah dari "1" melalui "Z" menjadi "0" dan sebaliknya. Status "Z" dimasukkan ke dalam urutan untuk memantau kesehatan port dalam mode input.

Uji firmware untuk mikrokontroler ATMega48/88/168.
Algoritme operasi firmware ATMega48/88/168 ditunjukkan pada gambar (mikrokontroler diinstal pada yang dijelaskan sebelumnya).

Mikrokontroler ditenagai oleh osilator internal, sehingga tidak diperlukan kristal eksternal. Kaki 9 dan 10 (menghubungkan kuarsa eksternal) tidak digunakan, jika ada kuarsa eksternal. Juga, pin 1 (reset) dan 21 (tegangan referensi untuk ADC) tidak digunakan. Anda dapat memeriksa kinerjanya dengan dua cara (lihat gambar) - perhatikan perubahan level sinyal relatif terhadap arde (GND) atau relatif terhadap pin daya (VCC).
- Uji firmware untuk ATMega48/88/168

Cara mem-flash mikrokontroler >


Uji firmware untuk mikrokontroler ATTiny2313.
Algoritme firmware ATTiny2313 ditunjukkan pada gambar (mikrokontroler diinstal pada yang dijelaskan sebelumnya).

Mikrokontroler ditenagai oleh osilator internal, jadi tidak perlu eksternal. Kaki 4 dan 5 (menghubungkan kuarsa eksternal) tidak digunakan jika ada kuarsa eksternal. Juga, pin 1 (reset) tidak digunakan. Anda dapat memeriksa kinerjanya dengan dua cara - perhatikan perubahan level sinyal relatif terhadap ground (GND) dan relatif terhadap pin daya (VCC).
- Uji firmware untuk ATTiny2313

Cara mem-flash mikrokontroler >


Uji firmware untuk mikrokontroler ATTiny13.
Algoritme firmware ATTiny13 ditunjukkan pada gambar (mikrokontroler diinstal pada yang dijelaskan sebelumnya).

Mikrokontroler ini ditenagai oleh generator internal (yang eksternal adalah kemewahan besar untuk mikrokontroler ini, jadi kami bahkan tidak mempertimbangkannya). Secara alami, leg 1 (reset) tidak terlibat. Kami memeriksa kinerjanya dengan cara yang sama seperti mikrokontroler sebelumnya.
- Firmware EUST untuk ATTiny13

Cara mem-flash mikrokontroler >


Memeriksa kesehatan status "Z" dari port input-output.


Kondisi "Z" adalah kondisi saat kaki dikonfigurasi untuk input dan tidak ada level di atasnya (tampaknya menggantung di udara dan tidak terhubung ke apa pun). Untuk mengontrol keberadaan keadaan seperti itu, Anda dapat menggunakan pembagi resistor. Pada level "1", pembagi akan memiliki tegangan suplai + 5v, pada level "0" - ground 0v, dan pada status "Z", port I / O akan berhenti mengganggu pembagi dan akan membagi tegangan suplai dan kita akan mendapatkan + 2.5v.

FILE:
- Uji sumber firmware

(Dikunjungi 18.359 kali, 4 kunjungan hari ini)

  • Pemrograman mikrokontroler
    • tutorial

    Gambar perhatian - xkcd

    Bayangkan Anda berada di pulau terpencil. Dan sangat penting bagi Anda untuk memprogram mikrokontroler. Mengapa kamu bertanya? Nah, katakanlah, untuk memperbaiki suar radio darurat, yang tanpanya peluang keselamatan menurun drastis.

    Bersukacita karena Anda tidak melupakan kursus bahasa rakitan, entah bagaimana Anda menulis program dengan sebatang tongkat di pasir. Di antara hal-hal yang masih hidup, dengan keajaiban, ada cetakan dokumentasi untuk pengontrol (ada baiknya Anda belum punya waktu untuk memulainya untuk menyalakan!), Dan programnya diterjemahkan ke dalam kode mesin. Yang paling tidak masuk akal adalah mem-flash-nya ke controller. Namun dalam radius 500 kilometer tidak ada satupun programmer, apalagi komputer. Anda hanya memiliki sumber listrik (baterai yang terbuat dari ubi kelapa) dan beberapa potong kawat.

    Bagaimana cara mem-flash MK dengan tangan kosong?

    ATtiny13 MK dari Atmel akan bertindak sebagai subjek tes. Teknik yang dijelaskan bekerja dengan hampir semua pengontrol keluarga AVR, kecuali bahwa kode perintah mungkin sedikit berbeda.

    Antarmuka

    Antarmuka yang paling umum dan nyaman untuk firmware AVR adalah SPI(Antarmuka Periferal Serial). Untuk terhubung melalui SPI, Anda hanya memerlukan empat kabel, tidak termasuk ground:
    • SCK- sinyal jam, menyinkronkan semua operasi pertukaran data;
    • MOSI(Master Out Slave In) - jalur data dari master ke slave;
    • SUP KEDELAI JEPANG(Master In Slave Out) - jalur data, sebaliknya, dari budak ke master;
    • MENGATUR ULANG- untuk mengaktifkan firmware melalui SPI, Anda perlu menerapkan logika "0" ke pin ini.
    Jadi, kita perlu membuat tiga sinyal dan (opsional) membaca satu. Seperti inilah skema paling sederhana untuk ini:


    Beras. 1. Skema koneksi SPI paling sederhana.

    Untuk kenyamanan Anda sendiri, Anda dapat menambahkan indikasi sinyal input. Skema menjadi lebih rumit, tetapi tidak berlebihan:


    Beras. 2. Skema dengan indikasi sinyal.

    Perlindungan obrolan

    Sayangnya, hanya dengan menggunakan tombol untuk menghasilkan sinyal SPI, kami tidak akan mendapatkan hasil yang baik. Alasan untuk ini adalah fenomena yang tidak menyenangkan yang disebut pantulan kontak. Saat menutup, kontak mekanis bertabrakan, memantul satu sama lain, dan alih-alih satu impuls, beberapa diperoleh. Untuk menekan obrolan, Anda harus merakit rangkaian sederhana dari sepasang elemen logika:


    Beras. 3. Pemicu RS untuk menekan obrolan.

    Ini adalah flip-flop RS yang beralih ke status "1" pada saat kontak bawah sakelar menutup dan mengabaikan pulsa pantulan lainnya. Penyetelan ulang pemicu kembali ke "0" terjadi saat kontak atas ditutup, yaitu saat tombol dilepas.

    "Lihat, lari!" - pembaca akan berkata, - “Saya sedang duduk di pulau terpencil. Di mana saya bisa mendapatkan pemicu di sini? Nah, Anda bisa menghilangkan pantulan tanpa sirkuit elektronik. Kontak "kering" hanya perlu diganti dengan kontak cair basah. Sakelar akan berupa dua elektroda yang dibenamkan dalam cairan konduktif.

    Sinyal MOSI dan RESET tidak memerlukan pantulan, tidak seperti SCK: hanya level sinyal pada saat pengambilan sampel yang penting di sini, bukan tepiannya.

    Bagaimana SPI bekerja



    Beras. 4. Diagram waktu pengoperasian SPI.

    SPI adalah antarmuka sinkron: semua operasi di-clock pada tepi sinyal clock (SCK) yang dihasilkan oleh master. Tingkat baud maksimum dibatasi hingga 1/4 jam pengontrol. Tidak ada batasan pada kecepatan minimum: tanpa sinyal jam, pertukaran data "dibekukan", dan antarmuka dapat tetap dalam keadaan statis untuk waktu yang lama.

    Transmisi SPI dilakukan dalam mode dupleks penuh, satu bit per jam di setiap arah. Di tepi naik dari sinyal SCK, perangkat slave membaca bit berikutnya dari jalur MOSI, dan di tepi turun, ia mengeluarkan bit berikutnya ke jalur MISO. Semua mata tertuju pada gambar 4.

    Protokol Firmware

    Semua komunikasi antara pemrogram dan MK terdiri dari pengiriman perintah 32-bit dan penerimaan respons pengontrol. Daftar lengkap perintah ada di lembar data "e, tapi di sini kami mencantumkan operasi apa yang perlu dilakukan untuk mem-flash MK:
    1. Mengalihkan pengontrol ke mode pemrograman;
    2. (opsional) Baca ID perangkat;
    3. Menghapus;
    4. Tulis ke flash;
    5. (opsional) Memeriksa rekaman;
    Mari pertimbangkan setiap langkah secara mendetail.

    Mengaktifkan mode pemrograman

    Mode pemrograman diaktifkan dengan menerapkan "0" ke kaki RESET. Tetapi ada beberapa kehalusan. Atmel merekomendasikan agar Anda terlebih dahulu mengatur pin RESET dan SCK rendah, dan baru kemudian menerapkan daya ke pengontrol. Jika ini tidak memungkinkan, setelah menyalakan catu daya "0" ke SCK, lalu pulsa positif ke RESET:


    Beras. 5. Transfer MK ke mode pemrograman.


    Beras. 6. Perintah "Aktifkan Program".

    Bit ditandai sebagai X, bisa apa saja. Selama transmisi byte ketiga, pengontrol harus mengirim kembali byte kedua ( 01010011 ). Jika ini terjadi, maka semuanya baik-baik saja, perintah diterima, pengontrol menunggu instruksi lebih lanjut. Jika jawabannya berbeda, Anda perlu memulai ulang MK dan mencoba semuanya lagi.

    verifikasi ID


    Beras. 7. Perintah "Baca Tanda Tangan Byte".

    Sebelum menulis apa pun ke memori MK, Anda perlu memastikan bahwa kami memiliki model yang kami butuhkan. Setiap model pengontrol memiliki pengidentifikasi tiga byte (Tanda Tangan) sendiri. Anda dapat membacanya dengan perintah seperti
    00110000 000xxxxx xxxxxxbb xxxxxxxx
    Alih-alih bb(byte ketiga dari perintah) harus diganti 00 untuk byte pertama dari pengidentifikasi, 01 - untuk yang kedua dan 10 - untuk yang ketiga. Byte pengidentifikasi yang sesuai akan dikirimkan oleh pengontrol saat mengirim byte ke-4 dari perintah.

    Untuk ATtiny13, nilai pengenalnya adalah 00011110 10010000 00000111 (0x1E 90 07).

    Membersihkan pengontrol

    Beras. 8. Perintah "Hapus Chip".

    Langkah selanjutnya adalah menghapus memori MK, yang dilakukan dengan mengirimkan perintah "Chip Erase".
    10101100 100xxxxx xxxxxxxxx xxxxxx
    Perintah ini menghapus konten Flash dan EEPROM (semua sel akan berisi FF), serta menghapus bit kunci, jika disetel.

    Menulis ke memori flash

    Memori program (Flash) di ATtiny13 terdiri dari 512 kata byte ganda (1K byte). Alamat kata memiliki lebar 9 bit. Memori flash dibagi menjadi beberapa halaman, setiap halaman terdiri dari 16 kata (total 32 halaman). Menulis ke flash dilakukan dalam dua tahap.

    Pertama, Anda perlu memuat data ke buffer halaman, untuk ini perintah "Muat Halaman Memori Program" digunakan.
    01000000 000xxxxx xxxxbbbb iiiiii- untuk memuat byte rendah dari kata, dan 01001000 000xxxxx xxxbbbbiiiiii- untuk mengunduh yang lebih lama.
    4 bit rendah dari byte perintah ke-3 bbbb- alamat kata di halaman, iiiiiiiii- byte yang dimuat. Byte rendah dari sebuah kata harus selalu dimuat terlebih dahulu, kemudian byte tinggi dari kata yang sama.

    Beras. 9. Muat perintah Halaman Memori Program.

    Setelah buffer halaman dimuat, Anda perlu menjalankan perintah "Tulis Halaman Memori Program" 01001100 0000000a bbbbxxxxxxxxxxxxx untuk menulis halaman langsung ke memori pengontrol.
    Bit rendah dari byte kedua dan 4 bit tinggi dari byte ketiga a: bbbb- nomor halaman lima bit untuk entri.

    Beras. 10. Perintah "Tulis Halaman Memori Program".

    Semua ini terlihat agak membingungkan, tetapi tidak rumit. Alamat setiap byte memori program terdiri dari 10 bit: pppp:bbbb:w, Di mana
    pppp- nomor halaman (digunakan dalam perintah "Tulis Halaman Memori Program");
    bbbb- alamat kata pada halaman (dalam perintah "Muat Halaman Memori Program");
    w- bit yang menentukan byte tinggi atau rendah dalam kata (dienkripsi dalam byte pertama dari perintah "Load Program Memory Page").

    membaca kilat


    Beras. 11. Perintah "Baca Memori Program".

    Setelah menulis firmware ke MK, alangkah baiknya untuk memeriksa apa yang tertulis, karena tidak ada pemeriksaan integritas data yang dilakukan. Satu-satunya cara untuk memeriksanya adalah membaca seluruh jumlah memori flash dan membandingkannya dengan aslinya.

    Membaca memori program lebih mudah daripada menulisnya. Lupakan paging, pembacaan dilakukan byte demi byte. Perintah "Baca Memori Program" terlihat seperti ini:
    00100000 0000000a bbbbbbbbxxxxxxxx- untuk membaca byte rendah dari kata, dan 00101000 0000000a bbbbbbbbxxxxxxxx- untuk senior.
    Bit terkecil dari byte kedua dan seluruh byte ketiga a:bbbbbbbb adalah alamat kata dalam memori. Byte baca dikembalikan selama transmisi byte ke-4 dari perintah.

    Penyelesaian pemrograman

    Mungkin operasi paling sederhana. Untuk menyelesaikan pemrograman dan mengalihkan MK ke mode operasi, cukup menerapkan level logika "1" ke RESET. Pengontrol akan mulai dan berjalan dengan program baru.

    Praktik

    Saatnya mempraktikkan apa yang telah Anda pelajari. Korban percobaan - ATtiny13 - dicolokkan ke papan tempat memotong roti, pengkondisi sinyal dipasang di sebelahnya, semuanya sudah siap:


    Beras. 12. Skema eksperimental.

    Kami akan menjahit program seperti "tempat yang lebih mudah":
    ldi R24, 0x02 keluar DDRB, R24 keluar PORTB,R24 L1: rjmp L1
    Yang dilakukannya hanyalah mengeluarkan satu per kaki PB1 dan masuk ke loop tak terbatas. Dalam kode mesin, hanya dibutuhkan empat kata:
    E082BB87BB88CFF
    Untuk mem-flash-nya ke pengontrol, Anda perlu mengetikkan perintah berikut:
    1010 1100 0101 0011 0000 0000 0000 0000 // aktifkan program 1010 1100 1000 0000 0000 0000 0000 0000 0010 // muat addr.0000 byte rendah 82 0100 1000 0000 000 0 0000 0000 1110 0000 // memuat addr.0000 byte tinggi E0 0100 0000 0000 / muat addr.0010 byte rendah 88 0100 1000 0000 0000 0000 0010 1011 1011 // muat addr.0010 byte tinggi BB 0100 0000 0000 0000 0000 0011 1111 1111 FF 0100 1000 0000 0000 0000 0011 1100 1111 // muat addr.0011 byte tinggi CF 0100 1100 0000 0000 0000 0000 0000 0000 // tulis halaman
    Kunci untuk memulai, ayo pergi!

    Desember 2015

    1. Keuntungan dari metode yang diusulkan

    Sirkuit perangkat berdasarkan mikrokontroler (MC) biasanya dibedakan dengan kombinasi dua kualitas yang sulit digabungkan: kesederhanaan maksimum dan fungsionalitas tinggi. Selain itu, fungsionalitasnya dapat diubah dan diperluas di masa mendatang tanpa membuat perubahan apa pun pada sirkuit - hanya dengan mengganti program (flashing). Fitur-fitur ini dijelaskan oleh fakta bahwa pencipta mikrokontroler modern telah mencoba menempatkan pada satu chip semua yang mungkin dibutuhkan oleh pengembang perangkat elektronik - setidaknya sebanyak mungkin. Akibatnya, terjadi pergeseran penekanan dari sirkuit dan perakitan ke perangkat lunak. Dengan penggunaan MK, sekarang kurang perlu untuk "memuat" sirkuit dengan detail, koneksi antar komponen lebih sedikit. Ini, tentu saja, membuat sirkuit lebih menarik bagi insinyur elektronik berpengalaman dan pemula untuk mengulanginya. Tapi, seperti biasa, Anda harus membayar semuanya. Di sini, juga, bukannya tanpa kesulitan. Jika Anda membeli MK baru, pasang di sirkuit yang dirakit dengan benar dari suku cadang yang dapat diservis dan berikan daya, maka tidak ada yang berfungsi - perangkat tidak akan berfungsi. Mikrokontroler membutuhkan program.

    Tampaknya semuanya juga sederhana dengan ini - di Internet Anda dapat menemukan banyak skema dengan firmware gratis. Tapi di sini ada satu halangan: firmware entah bagaimana harus "diisi" ke dalam mikrokontroler. Bagi seseorang yang belum pernah melakukan ini sebelumnya, tugas seperti itu seringkali menjadi masalah dan faktor utama yang menjijikkan, seringkali memaksa mereka untuk meninggalkan pesona menggunakan MK dan mencari skema berdasarkan logika yang "longgar" dan kaku. Tapi semuanya tidak sesulit kelihatannya pada pandangan pertama.

    Setelah menganalisis publikasi di Internet, Anda dapat melihat bahwa masalah ini paling sering diselesaikan dengan salah satu dari dua cara: membeli programmer yang sudah jadi atau membuat yang buatan sendiri. Pada saat yang sama, skema yang diterbitkan oleh pemrogram buatan sendiri seringkali sangat rumit - jauh lebih rumit daripada yang sebenarnya diperlukan. Tentu saja, jika harus mem-flash MK setiap hari, lebih baik memiliki programmer yang "keren". Tetapi jika kebutuhan akan prosedur seperti itu jarang muncul, dari waktu ke waktu, maka Anda biasanya dapat melakukannya tanpa programmer. Tidak, tentu saja, ini bukan tentang belajar melakukannya dengan kekuatan pikiran. Artinya memahami bagaimana programmer berinteraksi dengan mikrokontroler saat menulis dan membaca informasi dalam mode pemrogramannya, kita dapat bertahan dengan alat yang tersedia untuk tujuan yang lebih luas. Alat-alat ini harus menggantikan perangkat lunak dan perangkat keras pemrogram. Bagian perangkat keras harus menyediakan koneksi fisik ke chip MK, kemampuan untuk memasok level logika ke inputnya dan membaca data dari outputnya. Bagian perangkat lunak harus memastikan pengoperasian algoritme yang mengontrol semua proses yang diperlukan. Kami juga mencatat bahwa kualitas informasi perekaman di MK tidak bergantung pada seberapa "keren" programmer Anda. Tidak ada yang namanya "lebih baik" atau "lebih buruk". Hanya ada dua pilihan: "terdaftar" dan "tidak terdaftar". Ini karena MC sendiri yang mengontrol proses perekaman di dalam kristal. Anda hanya perlu menyediakannya dengan daya berkualitas tinggi (tanpa gangguan dan riak) dan mengatur antarmuka dengan benar. Jika, menurut hasil pembacaan kontrol, tidak ada kesalahan yang terdeteksi, maka semuanya beres - Anda dapat menggunakan pengontrol untuk tujuan yang dimaksudkan.

    Untuk menulis program ke MK tanpa programmer, kita memerlukan konverter port USB-RS232TTL dan juga. Konverter USB-RS232TTL memungkinkan Anda membuat port COM menggunakan port USB, yang berbeda dari yang "asli" hanya karena level logika TTL digunakan pada input dan outputnya, yaitu tegangan dalam kisaran dari 0 hingga 5 volt (untuk lebih jelasnya, lihat artikel " "). Bagaimanapun, ada gunanya memiliki konverter seperti itu di "rumah tangga", jadi jika Anda belum memilikinya, Anda harus membelinya. Sedangkan untuk level logika, dalam kasus kami TTL bahkan merupakan keunggulan dibandingkan port COM biasa, karena input dan output dari port semacam itu dapat langsung dihubungkan ke mikrokontroler apa pun yang ditenagai oleh 5 V, termasuk ATtiny dan ATmega. Tetapi jangan mencoba menggunakan port COM biasa - tegangan berkisar dari -12 hingga +12 V (atau -15 ... + 15V) digunakan di sana. Koneksi langsung ke mikrokontroler dalam hal ini tidak dapat diterima!!!

    Ide membuat skrip untuk program "Perpetuum M", yang mengimplementasikan fungsi programmer, muncul setelah membaca sejumlah publikasi di Internet yang menawarkan solusi tertentu untuk firmware MK. Dalam setiap kasus, ditemukan kekurangan yang serius atau kerumitan yang berlebihan. Kami sering menjumpai rangkaian programmer yang berisi mikrokontroler, dan pada saat yang sama, saran diberikan dengan cukup serius seperti: "... dan untuk memprogram mikrokontroler untuk programmer ini, kami membutuhkan ... benar - programmer lain!" . Selanjutnya, diusulkan untuk pergi ke teman, mencari layanan berbayar, dll. Kualitas perangkat lunak yang didistribusikan di internet untuk tujuan ini juga tidak mengesankan - banyak masalah terlihat baik dengan fungsionalitas maupun dengan "kekeruhan" antarmuka pengguna. Seringkali membutuhkan banyak waktu untuk memahami cara menggunakan program - ini harus dipelajari bahkan untuk melakukan tindakan yang paling sederhana. Program lain dapat melakukan sesuatu untuk waktu yang lama dan rajin, tetapi pengguna akan mengetahui bahwa tidak ada yang ditulis ke MK hanya setelah seluruh firmware selesai dan pembacaan kontrol selanjutnya selesai. Ada juga masalah seperti itu: pengguna mencoba memilih MK-nya dari daftar kristal yang didukung, tetapi tidak ada dalam daftar. Dalam hal ini, program tidak akan dapat digunakan - sebagai aturan, pencantuman dalam daftar MK yang hilang tidak disediakan. Selain itu, pemilihan pengontrol secara manual dari daftar terlihat aneh, mengingat programmer dalam banyak kasus dapat menentukan sendiri jenis MK. Semua ini dikatakan bukan untuk mengotori produk yang ada, tetapi untuk menjelaskan alasan munculnya naskah program "Perpetuum M" yang dijelaskan dalam artikel ini. Masalahnya benar-benar ada, dan ini terutama menyangkut pemula yang tidak selalu berhasil mengatasi "tembok" ini untuk mengambil langkah pertama mereka ke dunia mikrokontroler. Skrip yang diusulkan memperhitungkan kekurangan yang ditemukan di program lain. "Transparansi" maksimum dari algoritme telah diterapkan, antarmuka pengguna yang sangat sederhana yang tidak memerlukan studi dan tidak menyisakan kesempatan untuk bingung dan "mengklik di tempat yang salah". Dengan tidak adanya MK yang diperlukan di antara yang didukung, Anda dapat menambahkan sendiri deskripsinya, mengambil data yang diperlukan dari dokumentasi yang diunduh dari situs web pengembang MK. Dan yang terpenting, skrip terbuka untuk dipelajari dan dimodifikasi. Siapa pun dapat, setelah membukanya di editor teks, mempelajari dan mengeditnya sesuai kebijaksanaan mereka, mengubah fungsi yang ada sesuai selera dan menambahkan fungsi yang hilang.

    Versi pertama skrip dibuat pada Juni 2015. Versi ini hanya mendukung MCU ATtiny dan ATmega Atmel dengan fungsi menulis / membaca memori flash, mengatur bit konfigurasi, dan secara otomatis mendeteksi jenis pengontrol. Menulis dan membaca EEPROM tidak diterapkan. Ada rencana untuk menambah fungsionalitas skrip: tambahkan menulis dan membaca EEPROM, mengimplementasikan dukungan untuk pengontrol PIC, dll. Karena alasan ini, skrip belum dipublikasikan. Namun karena kurangnya waktu, implementasi rencana tersebut tertunda, dan agar yang terbaik tidak menjadi musuh baik, diputuskan untuk menerbitkan versi yang ada. fungsi yang diimplementasikan tidak akan cukup, tolong jangan kecewa. Dalam hal ini, Anda dapat mencoba menambahkan sendiri fungsi yang diinginkan. Saya tidak akan menyembunyikannya: ide tentang ​​​​membuat skrip ini pada awalnya juga membawa makna pendidikan.Setelah memahami algoritme dan menambahkan sesuatu milik Anda ke dalamnya, Anda akan dapat lebih memahami cara kerja MK dalam mode pemrograman, sehingga di masa mendatang Anda tidak akan menemukan diri Anda dalam posisi seorang gadis di depan mobil yang rusak, dengan serius melihat bagian dalamnya dan tidak mengerti mengapa mobil itu "tidak pergi".

    2. Antarmuka MK dalam mode pemrograman

    Ada beberapa cara berbeda untuk menempatkan pengontrol ke mode pemrograman dan bekerja dengannya dalam mode ini. Yang paling mudah diimplementasikan untuk pengontrol seri ATtiny dan ATmega mungkin adalah SPI. Kami akan menggunakannya.

    Namun, sebelum melanjutkan ke pertimbangan sinyal-sinyal yang diperlukan untuk pembentukan SPI, kami akan melakukan sejumlah reservasi. Mikrokontroler memiliki bit konfigurasi. Ini seperti sakelar sakelar, sakelar yang memungkinkan Anda untuk mengubah beberapa properti sirkuit mikro sesuai dengan kebutuhan proyek. Secara fisik, ini adalah sel-sel memori yang tidak mudah menguap, seperti yang digunakan untuk menulis program. Perbedaannya adalah jumlahnya sangat sedikit (hingga tiga byte untuk ATmega), dan tidak termasuk dalam ruang alamat memori apa pun. Menulis dan membaca data konfigurasi dilakukan dengan perintah terpisah dari mode pemrograman MK. Sekarang penting untuk dicatat bahwa beberapa bit konfigurasi sangat memengaruhi kemampuan untuk menggunakan SPI. Dengan beberapa nilainya, ternyata SPI tidak bisa digunakan. Jika Anda menemukan mikrokontroler seperti itu, metode yang diusulkan dalam artikel ini tidak akan membantu. Dalam hal ini, Anda harus mengubah pengaturan bit konfigurasi pada pemrogram, yang mendukung mode pemrograman lain, atau menggunakan mikrokontroler lain. Tapi masalah ini hanya menyangkut MK bekas, atau yang sudah tidak berhasil "dimainkan" oleh seseorang. Faktanya adalah MK baru hadir dengan pengaturan bit konfigurasi yang tidak menghalangi penggunaan SPI. Ini dikonfirmasi oleh hasil pengujian skrip programmer untuk program "Perpetuum M", di mana empat MK yang berbeda (ATmega8, ATmega128, ATtiny13, ATtiny44) berhasil di-flash. Semuanya baru. Pengaturan awal bit konfigurasi konsisten dengan dokumentasi dan tidak mengganggu penggunaan SPI.

    Mengingat hal di atas, Anda harus memperhatikan bit-bit berikut. Bit SPIEN secara eksplisit mengaktifkan atau menonaktifkan penggunaan SPI, oleh karena itu, dalam kasus kami, nilainya harus permisif. Bit RSTDISBL mampu mengubah salah satu output sirkuit mikro (ditentukan sebelumnya) menjadi input sinyal "reset", atau tidak mengubahnya (tergantung pada nilai yang ditulis ke bit ini). Dalam kasus kami, input "reset" diperlukan (jika tidak ada, tidak mungkin mentransfer MK ke mode pemrograman melalui SPI). Ada juga bit dari grup CKSEL yang menentukan sumber sinyal clock. Mereka tidak mencegah penggunaan SPI, tetapi mereka juga perlu diingat, karena jika tidak ada pulsa jam, atau jika frekuensinya lebih rendah dari yang diizinkan untuk kecepatan SPI tertentu, tidak ada hal baik yang akan terjadi. Biasanya, MCU baru yang memiliki osilator RC internal memiliki bit grup CKSEL yang disetel untuk menggunakannya. Kami cukup puas dengan ini - pencatatan jam kerja disediakan tanpa usaha tambahan dari pihak kami. Anda tidak perlu menyolder resonator kuarsa, juga tidak perlu menyambungkan generator eksternal. Jika bit yang ditentukan berisi pengaturan yang berbeda, Anda harus mengatur clocking sesuai dengan pengaturan. Dalam hal ini, mungkin perlu menghubungkan resonator kuarsa atau generator jam eksternal ke MK. Namun dalam kerangka artikel ini, kami tidak akan mempertimbangkan bagaimana hal ini dilakukan. Contoh menghubungkan MK untuk pemrograman yang terdapat dalam artikel ini dirancang untuk kasus yang paling sederhana.

    Beras. 1. Komunikasi SPI dalam mode pemrograman

    Sekarang mari kita beralih ke Gambar 1, diambil dari dokumentasi MK ATmega128A. Ini menunjukkan proses pengiriman satu byte ke MCU dan sekaligus menerima satu byte dari MCU. Kedua proses ini, seperti yang kita lihat, menggunakan pulsa clock yang sama yang berasal dari pemrogram ke mikrokontroler pada input SCK - salah satu pin sirkuit mikro, yang peran ini ditetapkan dalam mode pemrograman SPI. Dua saluran sinyal lagi menyediakan penerimaan dan transmisi data satu bit per jam. Melalui input MOSI, data masuk ke mikrokontroler, dan membaca data diambil dari output MISO. Perhatikan dua garis putus-putus yang ditarik dari SCK ke MISO dan MOSI. Mereka menunjukkan kapan mikrokontroler "menelan" bit data yang diatur pada input MOSI, dan pada saat apa mikrokontroler menyetel bit datanya sendiri pada output MISO. Semuanya cukup sederhana. Tetapi untuk memasukkan MK ke mode pemrograman, kita masih membutuhkan sinyal RESET. Jangan lupa juga tentang kabel GND umum dan catu daya VCC. Secara total, ternyata hanya 6 kabel yang perlu dihubungkan ke mikrokontroler untuk mem-flash-nya melalui SPI. Di bawah ini kami akan menganalisisnya secara lebih rinci, tetapi untuk saat ini kami akan menambahkan bahwa pertukaran data dengan MK dalam mode pemrograman melalui SPI dilakukan dalam paket 4 byte. Byte pertama dari setiap paket pada dasarnya sepenuhnya dicadangkan untuk pengkodean perintah. Byte kedua, bergantung pada yang pertama, dapat berupa kelanjutan dari kode perintah, atau bagian dari alamat, atau dapat memiliki nilai arbitrer. Byte ketiga digunakan terutama untuk mentransmisikan alamat, tetapi dalam banyak perintah dapat memiliki nilai arbitrer. Byte keempat biasanya membawa data, atau memiliki nilai arbitrer. Bersamaan dengan transfer byte keempat, beberapa perintah menerima data yang berasal dari MK. Detail tentang setiap instruksi dapat ditemukan dalam dokumentasi pengontrol dalam tabel yang disebut "Set Instruksi Pemrograman Serial SPI". Untuk saat ini, kami hanya mencatat bahwa seluruh pertukaran dengan pengontrol dibangun dari urutan paket 32-bit, yang masing-masing mengirimkan tidak lebih dari satu byte informasi berguna. Ini tidak terlalu optimal, tetapi secara umum berfungsi dengan baik.

    3. Menghubungkan MK untuk pemrograman

    Untuk memastikan bahwa semua sinyal yang diperlukan disuplai ke input mikrokontroler untuk mengatur antarmuka SPI dan membaca data dari output MISO-nya, tidak perlu membuat programmer. Ini mudah dilakukan dengan konverter USB-RS232TTL yang paling umum.

    Di Internet, Anda sering dapat menemukan informasi bahwa konverter semacam itu lebih rendah, sehingga tidak ada hal serius yang dapat dilakukan dengannya. Tetapi untuk sebagian besar model konverter, pendapat ini keliru. Ya, ada konverter yang dijual yang tidak memiliki semua input dan output yang tersedia dibandingkan dengan port COM standar (misalnya, hanya TXD dan RXD), sementara memiliki desain yang tidak dapat dipisahkan (sirkuit mikro diisi dengan plastik - ini adalah tidak mungkin untuk mendapatkan kesimpulannya). Tapi ini tidak layak dibeli. Dalam beberapa kasus, Anda bisa mendapatkan input dan output port yang hilang dengan menyolder kabel langsung ke sirkuit mikro. Contoh dari konverter yang "ditingkatkan" ditunjukkan pada Gambar 2 (sirkuit mikro PL-2303 - lebih lanjut tentang tujuan pinnya di artikel ""). Ini adalah salah satu model termurah, namun memiliki kelebihan tersendiri saat digunakan dalam desain buatan sendiri. Kabel adaptor berfitur lengkap dengan konektor sembilan pin standar di ujungnya, seperti port COM, juga tersebar luas. Mereka berbeda dari port COM biasa hanya di tingkat TTL dan ketidakcocokan dengan perangkat lunak usang dan beberapa perangkat keras lama. Dapat juga dicatat bahwa kabel berdasarkan chip CH34x dalam berbagai pengujian ekstrim menunjukkan diri mereka jauh lebih andal dan stabil dibandingkan dengan konverter berdasarkan PL-2303. Namun, dalam penggunaan normal, perbedaannya tidak terlihat.

    Saat memilih konverter USB-RS232TTL, Anda juga harus memperhatikan kompatibilitas drivernya dengan versi sistem operasi yang digunakan.

    Mari kita pertimbangkan lebih detail prinsip menghubungkan mikrokontroler dan konverter USB-RS232TTL menggunakan contoh empat model MK yang berbeda: ATtiny13, ATtiny44, ATmega8 dan ATmega128. Gambar 3 menunjukkan skema umum dari koneksi semacam itu. Mungkin mengejutkan Anda bahwa sinyal RS232 (RTS, TXD, DTR dan CTS) disalahgunakan. Tapi jangan khawatir: program Perpetuum M dapat bekerja dengan mereka secara langsung - atur nilai keluaran dan baca status masukan. Bagaimanapun, konverter USB-RS232TTL yang banyak digunakan berdasarkan chip CH34x dan PL-2303 memberikan kesempatan seperti itu - ini telah diverifikasi. Konverter populer lainnya juga tidak boleh menjadi masalah, karena fungsi Windows standar digunakan untuk mengakses porta.

    Resistor yang ditunjukkan pada diagram umum, pada prinsipnya, tidak dapat dipasang, tetapi tetap lebih baik dipasang. Apa tujuan mereka? Dengan menggunakan input dan output TTL "dari konverter dan catu daya mikrokontroler lima volt, dengan demikian kami menghilangkan kebutuhan untuk mencocokkan level logis - semuanya sudah benar. Ini berarti koneksi bisa langsung. Tapi apa pun bisa terjadi selama percobaan. Misalnya, menurut hukum kekejian, obeng dapat jatuh tepat di tempat yang tidak dapat jatuh dengan cara apa pun, dan menutup sesuatu yang tidak boleh ditutup. Dalam peran sebagai " obeng", tentu saja, apa pun bisa terjadi. Resistor dalam hal ini kadang-kadang mengurangi konsekuensinya. Salah satu tujuannya adalah untuk menghilangkan kemungkinan konflik keluaran. Faktanya adalah bahwa pada akhir pemrograman mikrokontroler masuk ke operasi normal, dan mungkin saja outputnya yang terhubung ke output konverter (RTS, TXD atau DTR) juga menjadi output, menurut program yang baru saja direkam di MK. Dalam hal ini, akan sangat buruk jika dua output yang terhubung langsung "bertarung" - coba atur level logika yang berbeda. Dalam "pertarungan" seperti itu seseorang bisa "kalah", tetapi kami tidak membutuhkan ini.

    Nilai ketiga resistor dipilih pada level 4,3 kOhm. Ini berlaku untuk koneksi antara output konverter dan input mikrokontroler. Keakuratan resistor tidak berperan: Anda dapat mengurangi resistansinya menjadi 1 KΩ atau meningkatkannya menjadi 10 KΩ (tetapi dalam kasus kedua, risiko interferensi meningkat saat menggunakan kabel panjang dalam perjalanan ke MK). Adapun koneksi antara input konverter (CTS) dan output mikrokontroler (MISO), resistor 100 Ohm digunakan di sini. Ini karena kekhasan input konverter yang digunakan. Selama pengujian, konverter digunakan pada chip PL-2303, yang inputnya tampaknya ditarik ke daya plus dengan resistansi yang relatif rendah (berdasarkan urutan beberapa ratus ohm). Untuk "membunuh pull-up" saya harus memasang resistor dengan resistansi sekecil itu. Namun, Anda tidak bisa meletakkannya sama sekali. Pada konverter, ini selalu menjadi input. Itu tidak bisa menjadi jalan keluar, artinya tidak akan ada konflik jalan keluar dalam setiap perkembangan peristiwa.

    Jika IC memiliki pin AVCC terpisah untuk menyalakan konverter A/D (seperti ATmega8 atau ATmega128), itu harus dihubungkan ke pin daya bersama VCC. Beberapa IC memiliki lebih dari satu pin daya VCC atau lebih dari satu GND. Sebagai contoh ATmega128 memiliki 3 pin GND dan 2 pin VCC. Dalam desain permanen, lebih baik menghubungkan kesimpulan dengan nama yang sama satu sama lain. Dalam kasus kami, pada saat pemrograman, Anda dapat menggunakan satu keluaran VCC dan GND.

    Dan inilah tampilan koneksi ATtiny13. Gambar menunjukkan penetapan pin yang digunakan saat memprogram melalui SPI. Di sebelah foto - bagaimana koneksi sementara terlihat dalam kenyataan.


    Seseorang mungkin mengatakan bahwa ini tidak serius - koneksi kabel. Tapi kami adalah orang-orang yang berakal. Tujuan kami adalah memprogram mikrokontroler dengan waktu minimum dan sumber daya lainnya, dan tidak pamer di depan seseorang. Kualitas tidak menderita. Metode "pada posting" dalam hal ini cukup efektif dan dapat dibenarkan. Firmware pengontrol adalah prosedur satu kali, jadi tidak masuk akal untuk menggantungnya dengan "rhinestones". Jika seharusnya mengubah firmware di masa mendatang tanpa melepas pengontrol dari sirkuit (dalam produk jadi), maka ini diperhitungkan dalam pemasangan selama pembuatan perangkat. Biasanya, konektor dipasang untuk tujuan ini (RESET, SCK, MOSI, MISO, GND), dan MK dapat di-flash bahkan setelah dipasang di papan. Tapi ini sudah merupakan kesenangan kreatif. Kami menganggap kasus paling sederhana.

    Sekarang mari beralih ke ATtiny44 MK. Semuanya hampir sama di sini. Menurut gambar dan foto, bahkan seorang pemula pun tidak akan kesulitan untuk mengetahui hubungannya. Seperti ATtiny44, Anda dapat menghubungkan MK ATtiny24 dan ATtiny84 - penetapan pin untuk trinitas ini sama.


    Contoh lain dari koneksi sementara pengontrol untuk pemrogramannya adalah ATmega8. Ada lebih banyak kesimpulan di sini, tetapi prinsipnya sama - beberapa kabel, dan sekarang pengontrol siap untuk "mengisi" informasi ke dalamnya. Kabel hitam ekstra di foto, yang berasal dari pin 13, tidak ikut serta dalam pemrograman. Ini dirancang untuk menghilangkan sinyal suara darinya setelah MK keluar dari mode pemrograman. Ini karena fakta bahwa selama debugging skrip untuk "Perpetuum M", program kotak musik diunduh ke MK.


    Seringkali satu pengontrol tersedia dalam kasus yang berbeda. Dalam hal ini, penugasan kesimpulan untuk setiap kasus didistribusikan dengan caranya sendiri. Jika kasing pengontrol Anda tidak seperti yang ditunjukkan pada gambar, tentukan tujuan pin sesuai dengan dokumentasi teknis, yang dapat diunduh dari situs web pengembang MK.

    Untuk melengkapi gambarannya, mari kita lihat koneksi chip MK dengan "kaki" yang banyak. Tujuan dari kabel hitam ekstra pada foto yang berasal dari pin 15 persis sama dengan kasus ATmega8.


    Anda mungkin telah melihat bahwa semuanya cukup sederhana. Siapa yang tahu bagaimana menghitung kesimpulan sirkuit mikro (dari tanda dalam lingkaran berlawanan arah jarum jam), dia akan mengetahuinya. Dan jangan lupa untuk berhati-hati. Microcircuits suka rapi dan tidak memaafkan sikap ceroboh terhadap diri mereka sendiri.

    Sebelum melanjutkan ke bagian perangkat lunak, pastikan driver konverter USB-RS232TTL diinstal dengan benar (periksa Windows Device Manager). Ingat atau catat nomor port COM virtual yang muncul saat Anda menyambungkan konverter. Nomor ini harus dimasukkan dalam teks skrip, yang dapat Anda baca di bawah.

    4. Script - pemrogram untuk "Perpetuum M"

    Kami menemukan bagian perangkat keras dari "programmer". Ini sudah setengah pertempuran. Sekarang tinggal berurusan dengan bagian perangkat lunak. Perannya akan dilakukan oleh program "Perpetuum M" di bawah kendali skrip, di mana semua fungsi yang diperlukan untuk berinteraksi dengan mikrokontroler diimplementasikan.

    Arsip dengan skrip harus dibongkar ke folder yang sama tempat program perpetuum.exe berada. Dalam hal ini, saat Anda menjalankan file perpetuum.exe, menu dengan daftar skrip yang diinstal akan ditampilkan di layar, di antaranya akan ada baris "MK AVR programmer" (mungkin satu-satunya). Ini adalah garis yang kita butuhkan.

    Skrip terletak di folder PMS di file "MK Programmer AVR.pms". File ini dapat dilihat, dipelajari, dan diedit sesuai kebutuhan di editor teks umum seperti Windows Notepad. Sebelum menggunakan skrip, kemungkinan besar Anda perlu melakukan perubahan pada teks yang terkait dengan pengaturan port. Untuk melakukannya, periksa nama port yang digunakan di Windows Device Manager dan, jika perlu, buat perubahan yang sesuai pada baris "PortName="COM4";" - bukannya angka 4, bisa ada angka lain. Selain itu, saat menggunakan model konverter USB-RS232TTL yang berbeda, mungkin perlu mengubah pengaturan pembalikan sinyal (baris skrip dimulai dengan kata "Tinggi"). Anda dapat memeriksa inversi sinyal oleh konverter USB-RS232TTL menggunakan salah satu contoh yang terdapat dalam instruksi untuk program Perpetuum M (bagian fungsi untuk bekerja dengan port).

    Subfolder MK_AVR berisi file dengan deskripsi pengontrol yang didukung. Jika pengontrol yang diinginkan tidak ada di antara mereka, Anda dapat menambahkan sendiri yang diperlukan, bertindak dengan analogi. Ambil salah satu file sebagai sampel, dan gunakan editor teks, masukkan data yang diperlukan, ambil dari dokumentasi untuk mikrokontroler Anda. Hal utama adalah berhati-hati, masukkan data tanpa kesalahan, jika tidak MK tidak akan diprogram, atau diprogram secara tidak benar. Versi asli mendukung 6 mikrokontroler: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 dan ATmega128. Skrip mengimplementasikan pengenalan otomatis dari pengontrol yang terhubung - Anda tidak perlu menentukannya secara manual. Jika tidak ada pengidentifikasi yang dibaca dari MK di antara deskripsi yang tersedia, sebuah pesan ditampilkan bahwa pengontrol tidak dapat dikenali.

    Arsip dengan skrip juga berisi informasi tambahan. Folder "AVR controllers inc files" berisi kumpulan file deskripsi pengontrol yang sangat berguna dan ekstensif. File-file ini digunakan saat menulis program Anda sendiri untuk MK. Empat folder lagi "MusicBox_..." berisi file dengan program assembler dan firmware yang siap diunduh ke MK secara terpisah untuk ATtiny13, ATtiny44, ATmega8 dan ATmega128. Jika Anda telah menghubungkan salah satu MK ini untuk pemrograman, seperti yang disarankan dalam artikel ini, Anda dapat mem-flash-nya sekarang - Anda akan mendapatkan kotak musik. Lebih lanjut tentang itu di bawah ini.

    Saat Anda memilih baris "Programmer MK AVR" di menu skrip, skrip mulai dijalankan. Pada saat yang sama, ia membuka port, mengirimkan perintah untuk beralih ke mode pemrograman ke MC, menerima konfirmasi dari MC tentang transisi yang berhasil, meminta pengenal MC dan mencari deskripsi MC ini dengan pengenalnya di antara file yang tersedia dengan deskripsi. Jika tidak menemukan deskripsi yang diperlukan, itu mengeluarkan pesan yang sesuai. Jika deskripsi ditemukan, menu utama programmer terbuka. Anda dapat melihat tangkapan layarnya pada Gambar 8. Tidak sulit untuk mengetahuinya lebih jauh - menunya sangat sederhana.

    Dalam versi pertama skrip, beberapa fungsi pemrogram lengkap tidak diterapkan. Misalnya, tidak ada cara untuk membaca dan menulis ke EEPROM. Tetapi jika Anda membuka skrip di editor teks, Anda akan melihat bahwa ukurannya sangat kecil, meskipun faktanya hal utama sudah diterapkan di dalamnya. Ini menunjukkan bahwa menambahkan fitur yang hilang tidak terlalu sulit - bahasanya sangat fleksibel, memungkinkan Anda untuk mengimplementasikan fungsionalitas yang kaya dalam program kecil. Tetapi untuk sebagian besar kasus, bahkan fungsi yang ada sudah cukup.

    Beberapa batasan fungsionalitas dijelaskan langsung dalam teks skrip:
    // catatan yang diimplementasikan hanya dari alamat nol (Rekaman Alamat Segmen Diperpanjang diabaikan, LOAD OFFSET juga)
    //urutan dan kontinuitas record dalam file HEX tidak dicentang
    //checksum tidak dicentang
    Ini berlaku untuk bekerja dengan file HEX, dari mana kode firmware untuk MK diambil. Jika file ini tidak rusak, pemeriksaan checksum tidak akan memengaruhi apa pun. Jika terdistorsi, tidak mungkin untuk mendeteksinya melalui skrip. Pembatasan yang tersisa dalam banyak kasus tidak ada salahnya, tetapi Anda tetap harus mengingatnya.

    5. Kotak musik - kerajinan mudah untuk pemula

    Jika Anda memiliki salah satu dari mikrokontroler ini: ATtiny13, ATtiny44, ATmega8 atau ATmega128, Anda dapat dengan mudah mengubahnya menjadi kotak musik atau kartu musik. Untuk melakukan ini, cukup menulis firmware yang sesuai ke dalam MK - salah satu dari empat yang terletak di folder "MusicBox_..." dalam satu arsip dengan skrip. Kode firmware disimpan dalam file dengan ekstensi ".hex". Menggunakan ATmega128 untuk kerajinan seperti itu, tentu saja, "gemuk", seperti ATmega8. Tapi itu bisa berguna untuk pengujian atau eksperimen, dengan kata lain - untuk tujuan pendidikan. Teks program assembler juga dilampirkan. Program tidak dibuat dari awal - program kotak musik dari buku A.V. Belov "mikrokontroler AVR dalam praktik radio amatir" diambil sebagai dasar. Program asli telah mengalami sejumlah perubahan signifikan:
    1. diadaptasi untuk masing-masing dari empat MK: ATtiny13, ATtiny44, ATmega8 dan ATmega128
    2. tombol dihilangkan - tidak ada yang perlu dihubungkan ke pengontrol, kecuali daya dan pemancar suara (melodi dimainkan satu demi satu dalam putaran tanpa akhir)
    3. durasi tiap not dikurangi dengan durasi jeda antar not untuk menghilangkan gangguan irama musik
    4. melodi kedelapan terhubung, tidak digunakan dalam versi buku
    5. subyektif: beberapa "perbaikan" untuk pengoptimalan dan persepsi algoritma yang lebih mudah

    Dalam beberapa melodi orang dapat mendengar kepalsuan dan bahkan kesalahan, terutama di "Senyum" - di tengah. Kode melodi diambil dari buku (lebih tepatnya, diunduh dari situs web penulis bersama dengan file asm asli) dan tidak diubah. Ternyata, ada kesalahan dalam pengkodean melodi. Tapi ini bukan masalah - mereka yang "berteman" dengan musik akan dengan mudah mengetahuinya dan memperbaiki semuanya.

    Di ATtiny13, karena kurangnya penghitung 16-bit untuk memainkan not, perlu menggunakan penghitung 8-bit, yang menyebabkan beberapa penurunan akurasi bunyi not. Tapi di telinga hampir tidak terlihat.

    Tentang bit konfigurasi. Pengaturannya harus sesuai dengan keadaan mikrokontroler baru. Jika MCU Anda telah digunakan di suatu tempat sebelumnya, Anda perlu memeriksa status bit konfigurasinya, dan, jika perlu, menyesuaikannya dengan pengaturan mikrokontroler baru. Anda dapat mengetahui status bit konfigurasi mikrokontroler baru dari dokumentasi untuk MK ini (bagian "Fuse Bits"). Pengecualian adalah ATmega128. MCU ini memiliki bit M103C yang memungkinkan mode kompatibilitas dengan ATmega103 yang lebih lama. Mengaktifkan bit M103C sangat mengurangi kemampuan ATmega128, dan bit ini aktif di MK baru. Anda perlu mengatur ulang M103C ke keadaan tidak aktif. Untuk memanipulasi bit konfigurasi, gunakan bagian yang sesuai dari menu skrip pemrogram.

    Tidak masuk akal untuk memberikan diagram kotak musik: hanya ada mikrokontroler, catu daya, dan pemancar suara piezo. Daya disuplai dengan cara yang persis sama seperti yang kita lakukan saat memprogram MK. Pemancar suara dihubungkan antara kabel biasa (keluaran GND dari pengontrol) dan salah satu keluaran MK, yang jumlahnya dapat ditemukan di file dengan kode assembler program (*.asm). Di awal teks program untuk setiap MK di komentar ada baris: "sinyal suara dihasilkan pada keluaran XX". Ketika pemrogram skrip berakhir, mikrokontroler keluar dari mode pemrograman dan beralih ke mode operasi normal. Pemutaran lagu segera dimulai. Dengan menghubungkan pemancar suara, Anda dapat memeriksanya. Biarkan sounder terhubung saat memprogram chip hanya jika suara diambil dari pin yang tidak digunakan di SPI, jika tidak, kapasitansi tambahan pada pin dapat mengganggu pemrograman.

    • Memori untuk program (FLASH) - 1Kb
    • RAM - 64 Byte
    • Jumlah input / output - 6
    • Keluaran PWM - 2
    • Input analog (ADC 10bit) - 4
    • Timer 8 bit - 1
    • Tegangan suplai 1,8 - 5,5V
    • Frekuensi pengoperasian - hingga 20 MHz
    • Konsumsi dalam mode aktif 1.8V / 1MHz - 190uA
    • Konsumsi dalam mode tidur 1.8V / 1MHz - 24uA

    Pemrograman ATtiny13

    Untuk pemrograman, saya menyiapkan Arduino IDE. Seperti yang Anda ketahui, lingkungan pengembangan ini dapat mendukung pengontrol tambahan. Misalnya, pada artikel ini saya berbicara tentang cara memprogram ESP8266 "WiFi Rakyat" di Arduino IDE. Situs web arduino.cc memiliki utas yang dikunjungi oleh pemrograman ATTiny13 di lingkungan Arduino. Saya telah menginstal versi 1.6.5. Saya mengunduh inti ATTiny untuk arsip Arduino. Saya membongkarnya ke folder c:\Program Files (x86)\Arduino\hardware\ dan papan tambahan muncul di Arduino IDE

    Sekarang unduh program. Jumlah memori mikroprosesor hanya 1Kb dan tidak ada bootloader yang muat di sana. Oleh karena itu, pengunduhan sketsa dilakukan oleh programmer melalui ISP. USBAsp, yang saya gunakan untuk memprogram Atmega328, tidak mau bekerja dengan tinka. Saya memerlukan firmware pemrogram khusus, yang tidak ingin saya main-mainkan. Anda dapat memprogram mikrokontroler menggunakan Arduino apa pun. Untuk melakukan ini, saya mengumpulkan skema berikut:

    Di Arduino IDE, pilih "File->Samples->ArduinoISP" dan unggah sketsa pemrogram ke Arduino. Lalu saya pilih "Tools->Programmer->Arduino as ISP". Sekarang Anda dapat mengunggah sketsa ke tinka. Perlu dicatat bahwa inti ATTiny13 untuk Arduino berisi serangkaian fungsi Arduino yang terbatas.

    Di tempat kerja, saya memiliki meja pohon Natal dengan pemandu cahaya.

    Di pohon Natal ada bohlam halogen 12V dan motor yang memutar filter warna lingkaran berwarna yang mengubah warna panduan cahaya. Selama 3 tahun, bola lampu dan motor mati.

    Jadi saya memutuskan untuk memulihkan pohon Natal ini dengan selotip RGB yang dikendalikan oleh ATtiny13. Melepaskan tape control ternyata seperti ini:

    tiga transistor dan resistor, pengatur tegangan linier dan tinka itu sendiri.

    Sketsanya adalah perangkat lunak PWM tiga saluran dengan perubahan kecerahan pada saluran yang berbeda, sehingga rekaman itu berkilau dalam berbagai warna

    Setelah itu, tinggal memperbaiki papan dan selotip di kotak pohon Natal

    Pita putih ditempelkan untuk meningkatkan pantulan cahaya di dalam casing.



    Suka artikelnya? Bagikan ini