Kami memiliki bagian Diskusi Github sekarang. Jika suatu masalah jelas merupakan cacat pada inti, Anda akan mengurangi waktu yang dibutuhkan untuk memperbaikinya jika Anda membuat masalah, karena saya memprioritaskan masalah daripada melanjutkan diskusi.
Ini memperbaiki banyak bug yang ada di 2.6.x
2.6.x memperkenalkan peningkatan jejak flash serial secara signifikan sambil menambahkan fitur, kabel dapat membangunkan budak dari tidur tanpa merusak data, dan masih banyak lagi, lihat Changelog.
Hanya versi Arduino IDE yang diunduh dari arduino.cc yang boleh digunakan, JANGAN PERNAH dari manajer paket linux. Manajer paket sering kali memiliki Arduino IDE - tetapi telah memodifikasinya . Hal ini terjadi meskipun mereka tidak tahu apa-apa tentang Arduino atau pengembangan tertanam secara umum, apalagi apa yang perlu mereka ketahui agar berhasil memodifikasinya. Versi tersebut terkenal karena masalah yang tidak kentara namun serius yang disebabkan oleh modifikasi yang tidak bijaksana ini. Inti ini tidak diharapkan berfungsi pada versi tersebut, dan tidak ada modifikasi yang akan dilakukan demi memperbaiki versi IDE yang berasal dari manajer paket karena alasan ini.
Ini adalah bug di klien Arduino.
Versi IDE antara 1.8.13 dan 2.x mengalami cacat baru yang signifikan. Namun, IDE versi 1.8.2 dan sebelumnya memiliki cacat yang belum diperbaiki dan melumpuhkan. Saya yakin mereka akhirnya mengeluarkan versi IDE yang berfungsi, dan saya yakin versi terbaru dapat menginstal inti saya dengan benar.
Sebelum megaTinyCore 2.6.0, instalasi manual megaTinyCore akan menyebabkan IDE V1.8.14 mogok karena bug ini ketika Anda menginstal inti secara manual di folder Arduino Anda. Pengguna versi 1.8.14 dan yang lebih baru harus menggunakan megaTinyCore versi 2.6.0.
Saya membeli banyak barang elektronik di AliExpress. Ini adalah pasar yang bagus untuk barang-barang yang dibuat oleh perusahaan-perusahaan Tiongkok dan sebagian besar bersifat generik, termasuk banyak komponen yang tidak tersedia bagi individu di negara-negara Barat dengan cara lain (misalnya, pesanan minimum adalah gulungan atau semacamnya - jika Anda dapat menemukan vendor komponen yang bekerja dengan pembuat chip Cina tanpa nama). Ini bukan tempat yang bagus untuk lini produk semikonduktor terbaru dari pabrikan besar Barat, terutama di tengah kelangkaan chip tersebut dalam sejarah. Perangkat AVR modern, ketika tersedia melalui saluran tersebut, sering kali dilaporkan palsu atau rusak (seperti ATtiny412 yang menganggapnya 416 dan mungkin tidak menjalankan daya dengan benar saat reset). Dalam hal ini, Anda mungkin tidak ingin membeli mikrokontroler AVR apa pun di AliExpress ... Papan rakitan, seperti klon Arduino Nano, umumnya berfungsi jika Anda menghindari papan dengan chip LGT8 pihak ketiga dan hati-hati dengan papan dengan ATmega168p alih-alih '328p - tetapi ada banyak laporan tentang mikrokontroler palsu ketika dijual sebagai chip kosong (Saya pernah mendengar ATtiny85 palsu yang sebenarnya disebutkan ATtiny13s; bukan hanya AVR modern yang dipalsukan). Ada banyak teori menarik tentang asal usul chip palsu itu, dan Microchip tetap diam mengenai masalah ini.
Dokumen ini paling baik dilihat secara online (dibandingkan dengan membuka file penurunan harga di editor teks favorit Anda), sehingga tautan dapat diklik dan gambar sebaris ditampilkan, dan mungkin yang paling penting, terkadang membuat tabel ditampilkan dengan benar. Sekali lagi, [dokumen ini dapat ditemukan di github](https://github.com/SpenceKonde/megaTinyCore](https://github.com/SpenceKonde/megaTinyCore)
Versi yang lebih lama tidak menangani pemrogram dengan benar di menu alat -> pemrogram, yang menurunkan UX dengan cepat seiring dengan bertambahnya jumlah inti yang terpasang. Mereka tidak cocok. Versi terbaru yang dimulai dengan 1.8.14 (termasuk 1.8.17, 1.8.18, dan 1.8.19) mungkin menghasilkan kesalahan "panik: tidak ditemukan versi utama" karena gagal menguraikan platform.txt dengan benar. Sejak 2.6.0 kami telah memodifikasi platform.txt secara manual langsung sebelum rilis, jadi masalah ini tidak terlalu menjadi masalah
Ketika megaTinyCore diinstal melalui board manager, versi rantai alat yang diperlukan diinstal secara otomatis. Semua bagian Seri 0/1/2 didukung tanpa langkah tambahan. Hingga 2.2.7, kami menggunakan avr-gcc versi Arduino7 (gcc 7.3.0 dan avrlibc 3.6.1) dengan ATpack terbaru pada Juni 2020. Dimulai dengan 2.2.7, kami mulai menggunakan toolchain build Azduino saya, yang telah memperbarui ATpacks untuk semua bagian yang baru didukung. 2.2.7 menggunakan Azduino3, 2.3.0+ menggunakan Azduino4, dan mulai dari 2.6.0, kami menggunakan Azduino5 (walaupun tidak memberikan manfaat apa pun bagi kami, selain menghemat seperempat GB ruang HDD dan 40mb bandwidth unduhan jika Anda menginstal keduanya megaTinyCore dan DxCore melalui manajer dewan.
Instalasi manual lebih rumit - terutama jika Anda menginginkan dukungan untuk Seri 2; lihat panduan Instalasi untuk informasi lebih lanjut.
Inti Arduino untuk tinyAVR 0-Series, 1-Series, dan sekarang 2-Series. Bagian-bagian ini memiliki arsitektur yang lebih baik dibandingkan dengan bagian-bagian tinyAVR "klasik" (yang didukung oleh ATTinyCore), dengan periferal yang lebih baik dan waktu eksekusi yang lebih baik untuk instruksi tertentu (ini serupa baik dalam hal AVR Dx-Series tingkat lanjut, serta chip megaAVR 0-Series seperti ATmega4809 seperti yang digunakan pada Nano Every resmi dan Uno Wifi Rev. 2 - meskipun tim Arduino telah melakukan yang terbaik untuk menghentikannya) dalam paket kecil yang murah dan khas dari garis ATtiny. Semua bagian ini memiliki setidaknya satu UART perangkat keras, dan antarmuka SPI dan TWI (tidak ada sampah USI seperti, misalnya, yang dimiliki ATtiny85), sistem peristiwa yang kuat, logika khusus yang dapat dikonfigurasi, setidaknya satu komparator analog on-chip , osilator internal yang sangat akurat, dan dalam kasus Seri 1, saluran keluaran DAC aktual, dan dalam kasus Seri 2, ADC diferensial yang bagus.
Selain itu, suku cadang tinyAVR 0/1/2-Series harganya murah - suku cadang tertinggi, 3226 dan 3227, dengan flash 32k dan SRAM 3k (vs SRAM 2k seperti ATmega328p yang digunakan di Uno/Nano/ProMini) dijalankan kuantitasnya lebih dari $1 USD - kurang dari banyak suku cadang AVR ATtiny klasik 8k ("set instruksi AVR, dengan harga PIC"). Semua bagian ini dinilai berjalan pada 16 MHz atau 20 MHz (pada 4,5-5,5v) tanpa kristal eksternal, dan osilator internal cukup akurat untuk komunikasi UART.
Ini menggunakan pemrograman UPDI, bukan ISP tradisional seperti bagian ATtiny klasik. Lihat di bawah untuk informasi lebih lanjut. Mendapatkan programmer UPDI itu sederhana - Anda dapat menggunakan Arduino klasik berbasis 328p sebagai programmer menggunakan jtag2updi - atau untuk hasil yang lebih baik dengan perangkat keras yang lebih murah, Anda dapat menggunakan adaptor serial USB dan resistor (dan lebih disukai dioda) menggunakan SerialUPDI yang disertakan alat, atau Anda dapat menggunakan AVRdude dengan salah satu pemrogram Microchip (pemrogram berbasis mEDBG/nEDBG/EDBG di papan pengembangannya, Atmel-ICE atau SNAP) atau alat pemrograman UPDI apa pun yang mengemulasi salah satunya (yang, sepengetahuan saya, semuanya mendukungnya - jika ada yang didukung avrdude dan inti saya tidak, silakan buka terbitan untuk memberi tahu saya!).
Bootloader serial, Optiboot_x (berdasarkan basis kode yang sama dengan bootloader Arduino Uno klasik, meskipun telah banyak diubah) didukung pada bagian ini (dukungan Seri 0/1 saat ini aktif, Seri 2 diharapkan tersedia pada minggu pertama bulan Mei ; penyesuaian untuk komponen baru sangatlah mudah), memungkinkannya diprogram melalui port serial tradisional. Lihat bagian Optiboot di bawah untuk informasi lebih lanjut mengenai hal ini, dan opsi yang relevan. Menginstal bootloader memang memerlukan programmer UPDI. Papan breakout rakitan yang saya jual di Tindie tersedia dalam keadaan pra-boot (bootload sesuai permintaan). Meskipun demikian, pengalaman pengguna dengan Optiboot sedikit mengecewakan pada bagian Seri 0/1 serta bagian Seri 2 14-pin, karena kurangnya pin pengaturan ulang perangkat keras yang dapat digunakan dengan rangkaian pengaturan ulang otomatis biasa. untuk mereset secara otomatis ke bootloader ketika port serial dibuka. Anda harus menonaktifkan pemrograman UPDI sepenuhnya (memerlukan pemrogram HV jika pengaturan sekering atau bootloader perlu diubah setelah bootloading awal) atau membiarkan UPDI diaktifkan, tetapi memulai unggahan apa pun dalam waktu 8 detik setelah menerapkan daya. Bagian Seri 2 20-pin dan 24-pin mendukung "pin reset alternatif" yang memungkinkannya bertindak lebih seperti Arduino tradisional.
Antarmuka pemrograman UPDI adalah antarmuka kabel tunggal untuk pemrograman (dan debugging - pemrograman U universal dan antarmuka I ebugging ), yang digunakan pada seri tinyAVR 0/1/2, serta semua mikrokontroler AVR modern lainnya . Meskipun seseorang selalu dapat membeli pemrogram UPDI yang dibuat khusus dari Microchip, hal ini tidak disarankan bila Anda akan menggunakan IDE Arduino daripada IDE Microchip (yang sangat rumit). Ada banyak laporan tentang masalah di Linux untuk pemrogram resmi Microchip. Ada dua pendekatan alternatif berbiaya rendah untuk membuat pemrogram UPDI, yang keduanya lebih berpengalaman dalam komunitas Arduino daripada pemrogram resmi tersebut.
Sebelum megaTinyCore ada, ada alat yang disebut pyupdi - program Python sederhana untuk mengunggah ke mikrokontroler yang dilengkapi UPDI menggunakan adaptor serial yang dimodifikasi dengan penambahan resistor tunggal. Tapi pyupdi tidak mudah digunakan dari Arduino IDE, jadi ini bukanlah suatu pilihan. Pada versi 2.2.0, megaTinyCore menghadirkan implementasi Python portabel, yang membuka banyak pintu; Awalnya kami berencana untuk mengadaptasi pyupdi, namun atas desakan pembuatnya dan beberapa karyawan Microchip, kami malah mendasarkan fungsi ini pada pymcuprog, alat "lebih kuat" yang dikembangkan dan "dipelihara oleh Microchip" yang mencakup unggahan port serial yang sama fitur, hanya tanpa optimalisasi kinerja. Jika menginstal secara manual, Anda harus menambahkan paket Python yang sesuai dengan sistem operasi Anda untuk menggunakan metode pengunggahan ini (instalasi sistem Python tidak cukup, juga tidak diperlukan).
Baca dokumentasi SerialUPDI untuk informasi tentang pengkabelan.
Pada 2.3.2, dengan peningkatan kinerja yang dramatis, dan keandalan skema pengkabelan yang telah terbukti menggunakan dioda sebagai pengganti resistor, dan mengingat kelemahan firmware jtag2updi, ini sekarang merupakan metode pemrograman yang direkomendasikan. Pada versi ini, kecepatan pemrograman telah meningkat sebanyak 20 kali lipat, dan sekarang jauh melebihi apa yang mungkin dilakukan dengan jtag2updi (pemrograman melalui jtag2updi kira-kira kecepatannya sebanding dengan pemrograman melalui SerialUPDI pada opsi kecepatan "LAMBAT", 57600 baud; versi normal 230400 baud memprogram sekitar tiga kali lebih cepat daripada versi SLOW atau jtag2updi, sedangkan opsi "TURBO" (berjalan pada 460800 baud dan meningkatkan kecepatan unggah sekitar 50% dibandingkan versi normal. Versi kecepatan TURBO hanya boleh digunakan dengan perangkat yang berjalan pada 4.5v atau lebih, karena kita harus menjalankan jam UPDI lebih cepat untuk mengimbanginya (juga tidak diharapkan). agar kompatibel dengan semua adaptor serial - ini merupakan pengorbanan yang disengaja untuk meningkatkan kinerja), tetapi memungkinkan pengunggahan dan verifikasi sketsa 32kB dalam 4 detik.
Tiga desain sedang diulang: Adaptor serial port ganda yang keduanya merupakan port serial, adaptor serial port ganda yang satu portnya selalu UPDI, dan satu port yang dilengkapi saklar untuk memilih mode, dan papan tambahan opsional untuk memberikan LED menunjukkan status jalur kontrol modem.
Ini akan memungkinkan penggunaan konektor SMT JST-XH atau konektor dupont - dengan 6 pin untuk serial (pinout FTDI seperti yang ditandai) dan 3 pin (untuk UPDI).
Ketiganya akan mampu mensuplai 3.3 atau Vusb (nom. 5V), atau memutus sambungan Vusb dan 3V3 dari daya, dan mengharapkan perangkat target diberi daya dengan 5.5V > Vdd > 1.8V. Level logika yang digunakan dalam hal ini adalah tegangan apa pun yang diterapkan. Berhati-hatilah karena pada perangkat serial ganda, power rail VccIO digunakan bersama! Keduanya harus beroperasi pada voltase yang sama, merupakan perangkat yang sama, atau adaptor harus disetel untuk mensuplai keduanya dan dayanya diputus.
Tergantung pada model adaptor, dan sistem operasi, diperlukan pengaturan waktu yang berbeda; namun, pengaturan diperlukan untuk menjaga agar 230400 baud tidak gagal di Linux/Mac dengan sebagian besar adaptor menerapkan penalti waktu yang jauh lebih besar pada Windows, di mana penanganan serial OS cukup lambat sehingga tidak ada yang memerlukan penundaan itu...
"Penundaan penulisan" yang disebutkan di sini adalah untuk memungkinkan perintah hapus-tulis halaman selesai dijalankan; ini membutuhkan waktu yang bukan nol. Tergantung pada adaptornya, latensi USB dan buffer implisit 2 atau 3 byte (seperti USART, dan mungkin diimplementasikan sebagai satu secara internal. Byte ketiga yang masuk tidak dapat kemana-mana, karena buffer perangkat keras hanya sedalam 2 byte) mungkin cukup untuk memungkinkannya bekerja tanpa penundaan yang jelas. Atau, mungkin gagal di tengah jalan dan melaporkan "Kesalahan dengan st". Semakin cepat batas waktu latensi adaptor, dan semakin cepat penanganan serial OS, semakin besar kemungkinan masalah ini terjadi. Ini dikontrol oleh parameter baris perintah -wd
jika menjalankan prog.py secara manual. Pada 2.5.6 penundaan penulisan ini mendekati waktu sebenarnya yang diminta (dalam ms), sebelumnya memiliki granularitas beberapa ms, padahal yang Anda perlukan hanya 1, dan sebagai hasilnya, hukuman yang dikenakan sangat brutal , terutama pada jendela.
Panduan seleksi:
460800+ baud mengharuskan target berjalan pada 4,5V+ agar tetap dalam spesifikasi (dalam praktiknya, mungkin tidak perlu terlalu tinggi - tetapi tegangannya harus cukup tinggi agar stabil pada 16 MHz. Kami mengatur jam antarmuka ke maksimum untuk semua kecepatan di atas 230400 baud - sementara beberapa adaptor terkadang bekerja pada 460800 tanpa langkah ini (yang dengan sendirinya aneh - 460800 baud adalah 460800 baud kan?), sebagian besar tidak dan SerialUPDI tidak memiliki cara untuk menentukan adaptornya.
Adaptor berbasis CH340 memiliki latensi yang cukup tinggi di sebagian besar platform, dan hampir selalu bekerja pada kecepatan berapa pun tanpa harus mengalami penundaan penulisan. Semua opsi berfungsi tanpa menggunakan penundaan tulis.
Hampir semua adaptor bekerja pada Windows pada 230.4k tanpa menggunakan penundaan penulisan. Jarang ada yang tidak melakukan ini, termasuk beberapa mikrokontroler USB asli yang diprogram untuk bertindak sebagai adaptor serial (misal: SAMD11C).
Hampir tidak ada apa pun kecuali adaptor berbasis CH340 yang akan bekerja pada 460.8k atau lebih tanpa penundaan penulisan, apa pun platformnya.
Di Windows, banyak adaptor (bahkan yang benar-benar mendukungnya) tidak berhasil beralih ke 921600 baud. Saya tidak tahu kenapa. Gejalanya adalah jeda beberapa detik saat mencoba, diikuti dengan pengunggahan pada 115200 baud. Anehnya, satu-satunya yang berhasil saya gunakan sejauh ini adalah CH340.
460800 baud di Windows dengan penundaan penulisan seringkali lebih lambat daripada 230400 baud tanpa penundaan penulisan. Hal yang sama tidak berlaku di Linux/Mac, dan semakin kecil ukuran halaman, semakin besar kinerja yang dihasilkan dari penundaan penulisan.
57600 baud harus digunakan jika opsi lain tidak berfungsi, atau ketika pemrograman pada Vcc = <2.7V.
460800 baud berfungsi tanpa penundaan tulis pada beberapa adaptor dengan resistor 10k yang ditempatkan di dioda Schottky antara TX dan RX, jika tidak berfungsi tanpa itu kecuali penundaan tulis diaktifkan. Tidak, saya juga tidak mengerti bagaimana ini bisa terjadi!
Seperti yang dapat Anda lihat di atas, informasi ini sebagian besar bersifat empiris; belum diketahui bagaimana cara memprediksi perilaku tersebut.
Adaptor FTDI (FT232, FT2232, dan FT4232 dll), termasuk yang palsu yang tersedia di eBay/AliExpress dengan harga sekitar $2, pada default Windows, periode latensi yang sangat panjang yaitu 16 ms. Bahkan dengan durasi yang kami tempuh untuk membatasi jumlah periode penundaan latensi yang harus kami tunggu, hal ini akan memperpanjang unggahan 2,2 detik menjadi lebih dari 15 detik. Anda harus mengubahnya untuk mendapatkan kecepatan unggah yang lumayan:
Buka panel kontrol, pengelola perangkat.
Perluas Port (COM dan LPT)
Klik kanan port dan pilih properti
Klik tab Pengaturan Port
Klik "Lanjutan..." untuk membuka jendela pengaturan lanjutan.
Di bawah bagian "Opsi BM", temukan menu "Pengatur Waktu Latensi", yang kemungkinan besar akan disetel ke 16. Ubah ini menjadi 1.
Klik OK untuk keluar dari jendela opsi lanjutan, dan sekali lagi untuk keluar dari properti. Anda akan melihat pengelola perangkat menyegarkan daftar perangkat keras.
Pengunggahan seharusnya lebih cepat sekarang.
Satu dapat dibuat dari AVR Uno/Nano/Pro Mini klasik; Klon Nano yang murah adalah pilihan yang biasa, karena cukup murah sehingga dapat dihubungkan dengan kabel dan dibiarkan begitu saja. Kami tidak lagi menyediakan dokumentasi terperinci untuk proses ini; jtag2updi tidak digunakan lagi. Jika Anda masih menggunakannya, Anda harus memilih jtag2updi dari menu tools->programmer. Ini sebelumnya merupakan pilihan yang kami rekomendasikan. Karena bug jtag2updi yang terus-menerus, dan ketergantungannya pada alat 'avrdude' yang sebagian besar tidak dipelihara (yang antara lain menyisipkan pesan kesalahan palsu ke dalam semua unggahan UPDI yang dibuat dengannya), hal ini tidak lagi disarankan.
Rupanya Arduino tidak mengemas avrdude terbaru versi 32-bit. Saya mendefinisikan definisi alat baru yang merupakan salinan Arduino18 (terbaru) kecuali bahwa ia menggunakan versi 17, bukan pada Linux 32-bit, karena itulah yang terbaik yang tersedia untuk platform itu. Versi Arduino17 tidak mendukung pengunggahan dengan benar dengan beberapa alat pemrograman Microchip.
Saat ini ini hanya digunakan untuk beberapa rilis terakhir, dan seharusnya memperbaiki kesalahan avrdude tidak tersedia untuk platform ini.
tinyAVR 2-Seri
ATtiny3227,1627,827,427
ATtiny3226,1626,826,426
ATtiny3224,1624,824,424
tinyAVR 1-Seri
ATtiny3217,1617,817,417
ATtiny3216,1616,816,416
ATtiny1614,814,414,214
ATtiny412,212
tinyAVR 0-Seri
ATtiny1607,807
ATtiny1606.806.406
ATtiny1604,804,404,204
ATtiny402,202
Apa pun yang diberi nama seperti "AVR##XX##" dengan X adalah huruf dan # adalah angka - Anda ingin DxCore saya untuk itu
Semua bagian tinyAVR klasik (pra-2016) - hampir semuanya didukung oleh salah satu inti saya yang lain ATTinyCore
ATtiny 25/45/85, 24/44/84, 261/461/861, 48/88, dua kecil dan satu (aneh 43 dan 4313/2313), dan di 2.0.0, 26 serta final -empat (yang menunjukkan petunjuk eksperimen ke arah AVR modern), ATtiny 441/841, 1634 dan 828 ditambah yang lebih asing lagi 26.
Yang lainnya Lihat dokumen ini untuk daftar keluarga bagian AVR dan inti Arduino yang digunakan - hampir semuanya memiliki inti yang menawarkan dukungan, biasanya oleh saya sendiri atau MCUdude.
Lihat dokumen ini mencakup semua AVR modern
Fitur | Seri 0 | 1-seri | 1+seri | 2 seri |
---|---|---|---|---|
Kilatan | 2k-16k | 2k-8k | 16k/32k | 4k-32k |
jumlah pin | 8-24 | 8-24 | 14-24 | 14-24 |
SRAM | 128b-1k | 128b-512b | 2k | 512b-3k |
TCD | TIDAK | Ya | Ya | TIDAK |
TCB | 1 | 1 | 2 | 2 |
ADC | 1x10bit | 1x10-bit | 2x10-bit | 1x12-bit dengan PGA |
pin VREF | TIDAK | TIDAK | Ya | Ya |
AC | 1 | 1 | 3 | 1 |
Peristiwa * | 3 saluran | 6 saluran | 6 saluran | 6 saluran |
CCL** | 2 LUT | 2 LUT | 2 LUT | 4 LUT |
*
Saluran acara, kecuali pada tinyAVR seri 2 (dan semua AVR modern non-kecil) dibagi menjadi dua jenis - sinkron (ke jam sistem) dan asinkron. Tidak semua generator dapat digunakan dengan saluran sinkron, dan beberapa pengguna acara hanya dapat menggunakan saluran sinkron, dan daftar saluran kurang konsisten dan lebih banyak. Kegilaan ini ditinggalkan begitu saja - bahkan mega0 telah menghilangkan perbedaan itu.
**
hanya 2 bagian seri dan non-kecil yang dapat memicu interupsi berdasarkan status CCL.
Semua bagian memiliki input analog yang tersedia di sebagian besar pin (semua pin pada PORTA dan PORTB 0-1, dan 4-5). ADC kedua pada 1-series+ dapat menggunakan pin pada PORTC sebagai input juga (lihat referensi analog untuk informasi tentang penggunaan ini).
Ini adalah pilihan anggaran. Meskipun didukung, namun tidak direkomendasikan. Ini tidak pernah mendapatkan "peningkatan" yang didapat seri tinyAVR 1 pada 16k, tidak memiliki TCB kedua dalam konfigurasi apa pun, tidak ada TCD, hanya 3 saluran acara, tidak ada satupun yang dapat membawa keluaran acara RTC. Bagian ini memiliki 2 CCL LUT seperti seri 1, dan tersedia dengan flash hingga 16k dalam konfigurasi 14, 20, dan 24-pin (hanya 4k untuk bagian 8-pin), dan SRAM hingga 1k.
Ini memiliki flash 2k, 4k atau 8k dan ram 128, 256, atau 512b, sama seperti seri 0. Mereka tidak memiliki ADC kedua, konfigurasi triple AC atau TCB kedua, meskipun mereka memiliki TCD.
Tiba-tiba, pada 16k, bagian 1 seri menjadi jauh lebih menarik. Mendampingi flash yang lebih besar adalah gudang periferal yang tampaknya cocok untuk chip yang jauh lebih besar, dan apakah 16k atau 32k, semuanya mendapatkan SRAM 2k. Seluruh ADC kedua adalah unik di antara AVR. Tampaknya ini telah menjadi ajang pengujian bagi banyak fitur yang muncul dalam bentuk yang disempurnakan pada seri AVR Dx. Harga tersebut tampaknya tidak memperhitungkan periferal yang jauh lebih unggul pada seri 16k 1,
Seperti yang Anda lihat dari tabel di atas, seri 2 hampir lebih merupakan sidegrade daripada upgrade. Mereka memiliki ADC yang jauh lebih baik, sistem acara dan CCL "normal", dan mereka memiliki lebih banyak RAM, bagian 14-pin tersedia dengan flash 32k (3214 tampaknya direncanakan, tetapi kemudian dibatalkan; sudah cukup jauh untuk berada di ATPACK untuk sementara waktu sebelum dihapus)
Saya telah menulis ringkasan singkat kapan Anda ingin menggunakan seri mana, jika pilihan yang tepat belum jelas saat ini.
Dalam definisi resmi papan Arduino untuk paket perangkat keras "megaavr", mereka menyiratkan bahwa arsitektur baru pada bagian megaAVR 0-Series (yang hampir sama dengan yang digunakan pada tinyAVR 0-Series dan 1-Series) disebut "megaavr " - itu bukan istilah resmi. Microchip menggunakan istilah "megaAVR" untuk merujuk pada bagian "ATmega" mana pun, baik yang memiliki periferal gaya lama atau modern. Tidak ada istilah resmi untuk merujuk pada seluruh bagian AVR dari satu keluarga atau keluarga lainnya, dan seorang karyawan Microchip bahkan menyangkal bahwa ada istilah seperti itu secara internal. Saya tidak yakin bagaimana Anda dapat membuat dua set komponen, dengan bagian-bagian di setiap set memiliki begitu banyak kesamaan satu sama lain dan sangat sedikit kesamaan dengan set lainnya, tanpa ada yang menciptakan frasa untuk merujuk pada salah satu dari mereka.
Dalam dokumen ini, sebelum versi 2.0.2, kami menggunakan konvensi Arduino, dan meskipun lebih dari satu tahun telah berlalu sejak saat itu, saya masih terus menemukan tempat yang saya sebut sebagai megaAVR. Silakan laporkan ini menggunakan masalah github jika Anda melihatnya. Perhatikan bahwa istilah avr
dan megaavr
masih digunakan secara internal (misalnya, di perpustakaan, untuk menandai bagian mana yang kompatibel dengan perpustakaan tertentu, atau memisahkan versi file yang berbeda berdasarkan pada apa yang akan dijalankan). Ini akan terus berlanjut - kita harus tetap menggunakan ini untuk kompatibilitas dengan apa yang dimulai oleh tim Arduino dengan inti untuk Uno WiFi Rev. 2 dan Nano Every.
Bagaimanapun, diperlukan beberapa kata untuk merujuk pada kedua kelompok tersebut dan Microchip belum menyediakan satu kata pun. Dengan tidak adanya istilah resmi, saya telah merujuk perangkat AVR pra-2016 (dengan register PORTx, DDRx, dll untuk pin) sebagai " AVR klasik " dan yang oleh Arduino disebut megaavr sebagai " AVR modern ". Ada juga beberapa bagian yang modul I/Onya sebagian besar lebih mirip AVR klasik tetapi juga memiliki versi set instruksi yang jauh lebih buruk, dan ukuran flash tipikal 1k atau kurang. Ini menggunakan varian AVR AVRrc (untuk inti tereduksi), sedangkan sebagian besar AVR klasik menggunakan AVRe atau AVRe+, dan AVR modern menggunakan AVRxt. Bagian AVRrc tidak didukung oleh inti ini, dan pada saat yang tidak menguntungkan ketika saya perlu membahas bagian yang sangat mengecewakan ini, saya akan menyebutnya sebagai bagian " Inti AVR yang Dikurangi ", karena itulah nama resminya, meskipun saya punya banyak frase yang lebih berwarna untuk mereka. Direkomendasikan agar tidak ada desain yang menggunakan Reduced Core AVR , titik. Bukan berarti mereka ketinggalan jaman, mereka hanya jelek. Direkomendasikan agar " AVR modern " (yang dilengkapi periferal baru dan set instruksi AVRxt ) - baik seri Ex, seri Dx, tinyAVR 0/1/2, atau mega0 digunakan untuk semua desain baru
Lembar Data untuk Seri 2 tinyAVR yang baru - Meskipun lembar data hanya "mencakup" 16 ribu bagian, lembar data tersebut dengan jelas menyatakan bahwa tidak ada perbedaan fitur antara bagian-bagian dengan jumlah pin yang sama (artinya, tidak ada bagian "emas" seperti 16k/32k 1-Series), hanya antar bagian dengan jumlah pin berbeda, dan hanya sesuai dengan jumlah pin (yakni, fitur pada bagian 24 pin akan ada pada bagian 14 pin, kecuali yang 14-pin tidak memiliki pin yang diperlukan, dan itu adalah sesuatu yang tidak dapat digunakan tanpa pin). Bagian 14, 20, dan 24 pin semuanya terdaftar dengan flash 4k, 8k, 16k dan 32k; opsi ukuran flash ini, masing-masing, hadir dengan SRAM 512, 1024, 2048, dan 3072 byte (yaitu, bagian 4k dan 8k memiliki SRAM dua kali lipat), bagian 4/8k mendapatkan 128 byte EEPROM, bagian yang lebih besar mendapatkan 256 byte Bagian 14-pin hadir dalam SOIC dan TSSOP, 20-pin dalam SOIC (lebar), SSOP, dan itu. QFN yang sangat kecil seperti 1616 (kali ini mereka memberi kami bagian 32k dalam paket itu juga, tapi semoga berhasil mendapatkannya, sudah dipesan di mana-mana - saya tidak bisa mencetak satu pun) dan 24-pin di VQFN yang sama dengan 3217.
TWI, SPI, USART0, AC0, tidak berubah, begitu pula NVMCTRL (perubahan yang diperlukan pada bootloader semata-mata sehubungan dengan mendukung USART kedua). Opsi jam tidak berubah. TCB0 dan TCB1 ditingkatkan ke versi di Seri Dx: opsi acara clock off, kaskade, dan bit INTCTRL terpisah untuk OVF dan CAPT - tambahan yang bagus, tetapi tidak ada yang relevan dengan inti itu sendiri), dan semua bagian memiliki kedua TCB. Kami sekarang mendapatkan 4 CCL LUT dan 2 sequencer, bukan 2 dan 1 - dan mereka dapat mengaktifkan interupsi seperti bagian lain dengan CCL (dan tidak seperti tinyAVR 0/1-Series). Salah satu fitur yang paling menarik adalah, seperti yang diharapkan, mereka memiliki USART kedua (suara yang Anda dengar adalah ATtiny841 dan ATtiny1634 terisak-isak di sudut). Register PORTMUX sekarang diberi nama seperti AVR modern lainnya - tetapi kami tidak kehilangan kendali individu atas pin untuk setiap saluran TCA WO. EVSYS sekarang berfungsi seperti halnya pada komponen non-tinyAVR-0/1-Series (yang merupakan perubahan yang disambut baik - Seri 0/1 adalah yang paling ganjil, dan beberapa cara di mana EVSYS mereka berbeda sangat buruk. ). Fitur Seri 1 TCD0, AC1/2, DAC0, dan ADC1 hilang . Sebagai gantinya, ADC0 jauh lebih menarik dan hampir tidak dapat dikenali, AVR baru pertama yang dirilis sejak pembelian yang menampilkan ADC diferensial nyata. (antrian ratapan penderitaan lainnya dari '841 yang malang, yang juga memiliki ADC yang sangat mewah dengan opsi diferensial yang bagus, tetapi terlihat sangat kuno di samping yang baru)... dilihat dari volume postingan tentang berbagai topik yang saya miliki sepertinya, saya merasa bahwa ADC diferensial tidak berada di urutan teratas dari sebagian besar daftar keinginan Anda - tetapi berada di urutan teratas daftar pelanggan chip utama, dan itulah yang kami dapatkan. Dan sudah dekat waktunya kita mendapatkan ADC diferensial yang tepat daripada yang ada pada seri Dx. Dan itu sangat mewah. Lihat di bawah.
megaTinyCore menyediakan implementasi analogRead(), dan fungsi yang lebih canggih untuk menggunakan oversampling dan PGA (lihat bagian fitur analog di bawah).
Oh, dan satu hal lagi... konfigurasi pin UPDI memiliki opsi lama - UPDI, I/O, atau Reset... dan yang baru: UPDI di PA0, dengan pin RESET perangkat keras di PB4! Optiboot akhirnya akan menjadi pilihan yang layak dan nyaman setidaknya pada bagian yang memiliki PB4, yaitu bukan bagian 14-pin. Yang juga merupakan (jika penjualan toko Tindie saya merupakan indikasi) jenis yang paling populer.
Apakah menurut Anda akan ada 3 seri? saya tidak. DD dan EA jelas mengejar mereka dan mengambil posisi strategis di sekitar wilayah tinyAVR. Saya pikir hanya masalah waktu saja sebelum merek tersebut dihilangkan seperti yang mereka lakukan pada megaAVR setelah megaAVR 0-series. Ini belum tentu merupakan hal yang buruk: Semua bagian seri Dx dan EA sangat mirip dalam pemetaan pin dan perilakunya, dan ini sangat bagus. Yang terkecil kurang sistematis, meskipun mereka mendistribusikan pin ke lebih banyak periferal. Prinsip panduannya tampaknya adalah "tidak ada perangkat yang tertinggal". Berbeda dengan pemetaan pin seri Dx dan EA yang semuanya mengikuti rencana induk tetap. Bagian-bagiannya memiliki atau tidak memiliki pin tertentu, dan jika tidak, maka fungsi tersebut tidak tersedia. Di kedua kelompok besar tersebut, menurut saya ada manajer produk yang tugasnya adalah mencambuk para insinyur yang berpikir untuk membuat "pengecualian" pada Pinout Suci (karena pengecualian tersebut pasti berkembang biak dan itulah yang menyebabkan kita berakhir dengan penugasan pin papan dart dengan mata tertutup pada tinyAVR klasik)
Penomoran pin aneh pada tinyAVR, dan ini adalah kesalahan Microchip - mereka memberi nomor pada pin di dalam port dengan aneh: Ini dimulai secara berurutan, kecuali PA0 adalah UPDI dan umumnya tidak dapat digunakan, maka pin PORTB diberi nomor dalam urutan terbalik, kemudian PORTC kembali ke penomoran berlawanan arah jarum jam yang sama dengan PORTA. Beri aku istirahat! Karena tradisinya adalah menggunakan pin 0 untuk pin pertama, dan menjadikan nomor terakhir sebagai pin yang tidak dapat Anda gunakan tanpa menyetel sekring yang membuat chip sulit diprogram. Saya lebih suka memberi nomor berlawanan arah jarum jam dimulai dengan A0 tanpa melanggar konvensi kode Arduino yang tidak tertulis. Orang dapat berargumen bahwa saya membuat keputusan yang buruk pada pemetaan pin - mungkin mereka seharusnya memulai dengan PA0 (tidak dapat digunakan kecuali sekering disetel, dalam hal ini chip sulit diprogram) sebagai pin 0, kemudian memberi nomor pada pin berlawanan arah jarum jam. Namun Anda tetap tidak dapat melakukan trik yang dapat Anda lakukan jika semua port sudah beres, kecuali jika Anda memberi nomor pada pin PORTB secara terbalik. Jika Anda dapat menghilangkan harapan bahwa semua pin diberi nomor secara berurutan (dan hanya menggunakan notasi PIN_Pxn) penghematan yang signifikan dapat terwujud
Saya prediksi, 2-4 tahun lagi akan ada AVR DA, DB, DD. Bagian DU (yang USB), EA, dan seri D/E/F hingga jumlah pin 8 (atau setidaknya 14) dan bagian 64-pin dengan flash 128k dan ADC baru. Dan tidak ada merek lain yang bermerek ATtiny. Mungkin pertanyaan terbesar yang tersisa adalah apakah mereka akan mengganti ATmega2560 dengan AVR modern dengan total 100 pin (mungkin 80-88 di antaranya adalah I/O) dan opsi flash hingga 256k; Hal ini akan menimbulkan tiga masalah - pertama, setelah 56 pin I/O tidak ada lagi register VPORT yang tersisa - ruang I/O rendah penuh dengan 28 VPORT dan 4 GPIOR. Bagaimana mereka menangani 4 port tambahan? (pada 2560, itu hanyalah port kelas dua yang diakses lebih lambat dan tidak memiliki akses siklus tunggal. Saya memiliki beberapa pemikiran tentang hal itu dan kelayakan dengan betapa sedikitnya opcode yang tersedia di lampiran A di sini. dan kedua, untuk pelanggaran Penghalang 128K di Flash, Anda harus pergi ke penghitung program 17-bit. X bagian pada 256k flash akan memiliki 32k RAM. , tidak meninggalkan ruang untuk SFRS, yang berada di ruang alamat yang sama.
Saya menjual papan pelarian dengan regulator, header Updi, dan header serial di toko Tindie saya, serta papan telanjang. Membeli dari toko saya membantu mendukung pengembangan lebih lanjut pada inti, dan merupakan cara yang bagus untuk mulai menggunakan bagian -bagian baru yang menarik ini dengan Arduino. Saat ini papan Attiny1624 tersedia, tetapi bagian 20 dan 24-pin tidak akan dijual sebagai papan yang dirakit sampai desain PCB yang baru direvisi kembali dari rumah papan untuk memungkinkan autoreset pada pin alt-reset. Ada juga revisi papan 14 -pin yang akan datang - pikir itu sebagian besar kosmetik. Topeng solder kuning harus pergi, karena keterbacaan tampaknya semakin buruk dalam beberapa batch terakhir. Papan baru juga menstandarkan jarak 0,6 "di antara baris pin, bukan jarak 0,7" saat ini, sehingga Anda akan dapat, misalnya, meletakkan header pin mesin ke dalamnya dan mencolokkannya ke dalam soket dip wide-dip, atau Gunakan dengan papan prototipe kami yang dioptimalkan untuk jarak baris itu. Papan seri 0 yang dirakit sedang dihentikan, dan tidak akan diisi ulang begitu mereka terjual habis. Hal yang sama akan terjadi untuk bagian 16K 2-seri setelah 32k tersedia.
ADC pada seri 2 dan EA-Series adalah ADC terbaik yang telah dirilis pada AVR di era AVR modern. Selain keduanya. Perbandingan terdekat adalah AVR klasik yang mendapatkan ADC diferensial dengan fitur terkemuka (T841, MEGA2560 dan (secara mengejutkan) T861 menjadi pesaing terkuat). Meskipun tidak mampu mendapatkan keuntungan 100x dan 200x yang gila yang beberapa bagian menyombongkan pada hari -hari AVR klasik, tidak pernah jelas bagi saya berapa banyak yang diperkuat hanyalah kebisingan (mengingat pengalaman saya yang terbatas yang diakui bermain dengan ADC diferensial diferensial Saya akan mengatakan "Mungkin sebagian besar, dan pasti sebagian besar jika Anda membiarkan saya merancang perangkat keras, saya tidak tahu analog!"). ADC baru ini tentu saja sangat mampu, dengan kemampuan diferensial sejati (tidak seperti seri DA dan DB), dan yang naik kepala dan bahu di atas apa pun yang tersedia di AVR modern lainnya hingga saat ini. Penguat gain yang dapat diprogram adalah kemampuan baru, dan masih harus dilihat seperti apa prestasi pengukuran analog yang dapat dihilangkan orang; Tampaknya tampak menjanjikan. Akan sangat menarik untuk memahami perbedaan antara menggunakan PGA pada gain 1x, vs tidak menggunakan PGA, dan manfaat serta kerugian dari melakukannya. (Microchip akan dilayani dengan baik oleh dokumen yang membahas bagaimana memilih konfigurasi ADC yang tepat untuk tugas dalam kasus umum; saya telah mengangkat kekhawatiran ini dengan microchip dan orang yang saya ajak bicara mengindikasikan bahwa itu adalah prioritas tinggi; sementara Situasi telah sangat ditingkatkan, masih tampak bahwa kelompok DOC secara khusus diinstruksikan untuk tidak membuat rekomendasi konkret yang sebenarnya dalam bentuk apa pun.
Penambahan akumulasi 1024-sampel untuk keperluan oversampling dan desimasi adalah tambahan yang disambut baik, meskipun yang juga berisiko meremehkan besarnya dan relevansi kesalahan offset. (Mengambil 1024 sampel, (yang semuanya memiliki kesalahan offset yang diberikan), kemudian menghancurkan jumlah untuk menghasilkan pengukuran ADC 17-bit membuatnya mudah untuk membayangkan bahwa kesalahan apa pun akan terbatas pada beberapa bit terendah. Tetapi jika kesalahannya adalah, katakanlah 5 LSB pada satu pengukuran, ketika Anda mengumpulkan 1024 sampel dan memusnahkan, Anda memiliki kesalahan offset 160, sangat mudah untuk melihatnya dan berpikir itu sinyal bukan noise.
Chip ukuran penuh pertama (non-kecil) dengan ADC baru tersedia dalam paket pin 28-48 dengan flash hingga 64K. Ada spekulasi yang biasa tentang bagaimana jika ada sesuatu yang akan berubah dari 2-seri ke seri EA: Sepertinya jawabannya adalah, salah satu tombol yang membingungkan telah dihapus, dan pemotongan tanda otomatis untuk akumulasi pengukuran (
Timer Type D hanya digunakan untuk PWM pada 20/24 pin 1-Series bagian pada pengaturan pin PWM default. Pada bagian yang lebih kecil, itu tidak akan membiarkan kita meningkatkan jumlah total pin PWM. Hanya pin WOC dan WOD (masing-masing pada PC0 dan PC1) yang belum memiliki PWM yang digerakkan oleh TCA. As such, since analogWrite() does not support any features that would be enabled by turning off split mode (like 16-bit PWM) or enhanced by using the type D timer (like adjusting the frequency), it would just be worse, because Ini akan membutuhkan ruang tambahan untuk menyimpan rutinitas untuk menghidupkan dan mematikan PWM dari dua jenis timer, bukan satu. Ini tidak dapat diabaikan pada bagian flash yang lebih kecil; Itu ada di urutan 600 byte. 150 untuk DigitalWrite () dan 450 untuk analogwrite () jika itu pernah dipanggil pada pin PWM TCD. Pengoptimal harus dapat mengoptimalkan bagian tersebut dari fungsi -fungsi tersebut dalam kasus ini, selama pin yang digunakan dengan fungsi -fungsi tersebut tidak termasuk pin PWM TCD. Catatan Pengoptimal akan mempertimbangkannya secara mandiri, yaitu, DigitalWrite () akan menyertakan kode untuk mematikan TCD PWM jika digunakan dengan pin yang menggunakan TCD untuk PWM, apakah Anda pernah memanggil analogwrite () pada pin itu atau tidak.
Tidak seperti hampir setiap AVR lainnya (saya dapat memikirkan mungkin 3 contoh, dan hanya satu dari mereka adalah "bonus" bukan "unbonus"), ada fitur "bonus" tambahan berdasarkan ukuran flash bagian dalam keluarga . Versi 16K dan 32K (hanya) memiliki beberapa fitur tambahan (yang juga tampaknya tidak dipertimbangkan untuk penetapan harga) - mereka semua memiliki 2K RAM, baik 16K atau 32K, mereka memiliki 3 pembanding analog (termasuk mode jendela opsi), yang kedua - sangat dibutuhkan - timer Type B - dan paling aneh dari semua mereka memiliki ADC kedua, hanya berbeda di mana pin saluran sesuai!
Tidak seperti AVR klasik, pada bagian -bagian ini, flash dipetakan ke ruang alamat yang sama dengan sisa memori . Ini berarti pgm_read_*_near()
tidak diperlukan untuk membaca langsung dari flash. Karena itu, kompiler secara otomatis menempatkan variabel apa pun yang dinyatakan const
progmem, dan mengaksesnya secara tepat - Anda tidak perlu lagi secara eksplisit menyatakannya sebagai progmem. Ini termasuk literal string yang dikutip, sehingga makro f () tidak lagi diperlukan, meskipun untuk mempertahankan kompatibilitas dengan beberapa perpustakaan pihak ketiga, f () masih menyatakan argumennya progmem.
Namun, perhatikan bahwa jika Anda secara eksplisit mendeklarasikan progmem variabel, Anda masih harus menggunakan fungsi pgm_read
untuk membacanya, seperti pada AVR klasik. Ketika suatu variabel dinyatakan sebagai progmem pada bagian -bagian dengan flash yang dipetakan memori, pointer diimbangi (alamat relatif untuk memulai flash, bukan awal ruang alamat); Offset yang sama ini diterapkan saat menggunakan makro pgm_read_*_near()
. Perhatikan bahwa menyatakan hal -hal progmem dan mengakses dengan pgm_read_*_near
, meskipun berfungsi dengan baik, lebih lambat dan membuang sejumlah kecil flash (dibandingkan dengan hanya menyatakan variabel const); Hal yang sama berlaku untuk makro F () dengan string konstan di 2.1.0 dan yang lebih baru (untuk jangka waktu tertentu sebelum 2.1.0, F()
tidak melakukan apa pun - tetapi itu menyebabkan masalah untuk perpustakaan pihak ketiga). Penulis menyatakan bahwa masalahnya adalah dengan inti, bukan perpustakaan, dan pilihan saya adalah menerima lebih sedikit efisiensi, atau menyangkal akses pengguna saya ke perpustakaan populer). Menggunakan F()
makro mungkin diperlukan untuk kompatibilitas dengan beberapa perpustakaan pihak ketiga (kasus spesifik yang memaksa kembalinya F()
atas kami tidak dari semacam itu - kami sebenarnya dapat membuat yang saya tahu bekerja dengan F ()-Kode asnoop, dan mereka mengambil beberapa byte lebih sedikit flash sebagai hasilnya).
Versi otomotif juga harus berfungsi. Anda harus selalu memilih kecepatan clock yang diturunkan dari 16 MHz pada bagian-bagian ini. Mereka tidak mendukung operasi 20 MHz, dan opsi jam yang disetel tidak boleh digunakan.
Sekarang ke bagian yang baik, di mana kita bisa berbicara tentang bagaimana semua ini diekspos oleh megatinycore. Kami akan mulai dengan masalah bagaimana Anda harus merujuk ke pin untuk hasil terbaik, dan kemudian beralih ke fitur inti, opsi menu, sebelum diakhiri dengan serangkaian tautan ke dokumen dengan lebih detail pada berbagai subsistem.
Masa sederhana tentang cara merujuk pada pin untuk analogread () dan digitalRead (), terutama pada perangkat keras non-standar, telah menjadi sumber kebingungan yang terus-menerus di antara pengguna Arduino. Saya pendapat saya bahwa sebagian besar menyalahkan ada pada keputusan yang dibuat oleh tim Arduino (dan penulis kabel sebelum mereka) mengenai bagaimana pin harus dirujuk; Penunjukan beberapa pin sebagai "pin analog" membuat orang berpikir bahwa pin tersebut tidak dapat digunakan untuk operasi digital (mereka lebih dianggap sebagai "pin dengan input analog" - seperti bagaimana ada "pin yang dapat menghasilkan PWM"). Fakta bahwa pin secara tradisional telah dinomori ulang telah semakin merusak air. Untuk bagian-bagian AVR klasik non-standar, masalah sering kali lebih buruk oleh beberapa "pemetaan" pin "yang tidak kompatibel yang dibuat oleh berbagai penulis selama bertahun-tahun untuk membuat bagian tindakan" lebih seperti uno "atau untuk tujuan lain (attinycore adalah yang khusus berantakan dengan cara ini, dengan beberapa bagian memiliki tiga pemetaan pin yang sama sekali berbeda, dalam setidaknya satu kasus, salah satu pemetaan alternatif adalah karya jahat yang terinspirasi dari iblis, tidak membutuhkan tabel pencarian tambahan untuk mengubah pin analog menjadi digital pin).
Inti ini menggunakan skema sederhana untuk menetapkan nomor pin Arduino: pin diberi nomor mulai dari pin I/O yang paling dekat dengan VCC sebagai pin 0 dan melanjutkan berlawanan arah jarum jam, melewatkan pin updi yang tidak dapat digunakan (kebanyakan). Pin Updi kemudian ditetapkan ke nomor pin terakhir (seperti yang disebutkan di atas, dimungkinkan untuk membaca pin Updi (baik bacaan analog dan digital berfungsi) bahkan jika tidak ditetapkan sebagai GPIO). Kami merekomendasikan ini sebagai upaya terakhir: pin updi selalu diaktifkan pullup ketika tidak ditetapkan sebagai pin GPIO, dan sinyal yang terlihat terlalu seperti urutan Updi Enable akan menyebabkan operasi yang tidak diinginkan.
Untuk mencegah semua kebingungan tentang identitas pin dan menghilangkan ambiguitas, kami sarankan menggunakan notasi PIN_PXN untuk merujuk ke pin kecuali Anda menggunakan papan pengembangan dengan angka atau nama yang berbeda untuk pin yang dicetak di atasnya. Ini akan memaksimalkan portabilitas kode Anda ke perangkat keras serupa lainnya dan membuatnya lebih mudah untuk mencari informasi pada pin yang Anda gunakan di lembar data yang relevan, jika diperlukan.
Ini adalah cara yang disarankan untuk merujuk ke pin #defines
juga disediakan dari bentuk PIN_Pxn
, di mana x
adalah a, b, atau c, dan n
adalah angka 0-7 - (jangan bingung dengan definisi pin_an yang dijelaskan di bawah). Ini hanya menyelesaikan ke jumlah pin digital dari pin yang dimaksud - mereka tidak melalui jalur kode yang berbeda atau apapun. Namun, mereka memiliki utilitas khusus dalam menulis kode yang berfungsi di seluruh lini produk dengan periferal yang terkait dengan pin tertentu (berdasarkan port), seperti kebanyakan periferal. Beberapa potong kode demo dalam dokumentasi memanfaatkan ini. Manipulasi port langsung juga dimungkinkan - dan pada kenyataannya beberapa opsi tambahan yang kuat tersedia untuk itu - lihat manipulasi port langsung .
PIN_Pxn
- bukan Pxn
, dan bukan PIN_xn
- itu berarti hal yang berbeda!
Ketika satu nomor digunakan untuk merujuk ke pin - dalam dokumentasi, atau dalam kode Anda - selalu "nomor pin Arduino". Ini adalah nomor pin yang ditunjukkan pada oranye (untuk pin yang mampu analogread ()) dan biru (untuk pin yang tidak) pada grafik pinout. Semua cara lain merujuk pada pin yang ditentukan ke nomor pin Arduino yang sesuai.
Inti juga menyediakan An
dan PIN_An
(di mana n
adalah angka dari 0 hingga 11). Seperti halnya inti resmi, PIN_An
didefinisikan sebagai nomor pin digital dari pin yang dibagikan dengan saluran analog dan ini merujuk pada nomor saluran ADC0. Sistem penamaan ini mirip dengan apa yang digunakan pada banyak inti AVR klasik tetapi di sini, mereka hanya ditentukan sebagai nomor pin Arduino yang sesuai . Jika Anda perlu mendapatkan nomor saluran analog pada pin digital, gunakan makro digitalPinToAnalogInput(pin)
- tetapi Anda hanya perlu itu jika Anda menulis perpustakaan ADC canggih.
Bagian-bagian ini (yah, setidaknya 1/2-seri-Seri 0 dimaksud sebagai opsi anggaran, kecuali mereka gagal mengecilkan anggaran, dan mereka hanya beberapa sen yang lebih murah) memberikan kotak alat yang sangat baik dari serbaguna yang serba guna serbaguna dan periferal yang kuat; Yang top -end setara atau lebih baik dari bagian Megaavr klasik - dengan harga tinyavr. Salah satu prinsip panduan dari desain megatinycore, seperti halnya inti saya yang lain, adalah untuk memungkinkan bagian yang didukung mencapai potensi penuh mereka - atau sedekat mungkin dengan itu dalam keterbatasan Arduino. Bagian ini (sangat besar) mencakup fitur -fitur bagian -bagian ini dan bagaimana mereka diekspos oleh megatinycore, serta fitur -fitur inti itu sendiri. Bagian ini (sangat besar) berupaya untuk menutupi masing -masing area fitur. Cobalah untuk menemukan fitur yang sedang Anda kerjakan jika Anda mencoba menggunakan beberapa fitur chip dan mengalami masalah!
20 MHz internal (4.5V -5.5V - khas untuk sistem 5V)
16 MHz internal (4.5V -5.5V - khas untuk sistem 5V)
10 MHz internal (2.7V -5.5V - khas untuk sistem 3.3V)
8 MHz internal (2.7V -5.5V - khas untuk sistem 3.3V)
5 MHz Internal (1.8V-5.5V)
4 MHz internal (1.8V-5.5V)
2 MHz internal (1.8V-5.5V, diuji dengan buruk)
1 MHz internal (1.8V-5.5V, diuji dengan buruk)
20 MHz Jam Eksternal (4.5V-5.5V, diuji dengan buruk)
16 MHz Jam Eksternal (4.5V-5.5V, diuji dengan buruk)
12 MHz Jam Eksternal (2.7V-5.5V, diuji dengan buruk)
10 MHz Jam Eksternal (2.7V-5.5V, diuji dengan buruk)
8 MHz Jam Eksternal (2.7V-5.5V, diuji dengan buruk)
6 MHz internal (disetel, belum teruji)
5 MHz internal (disetel, diuji dengan buruk)
4 MHz internal (disetel, diuji dengan buruk)
2 MHz internal (disetel, diuji dengan buruk)
1 MHz internal (disetel, diuji dengan buruk))
7 MHz internal (disetel, untuk masokis, belum teruji)
8 MHz internal (disetel, diuji dengan buruk)
10 MHz internal (disetel, diuji dengan buruk)
12 MHz internal (disetel, belum teruji)
14 MHz internal (disetel, untuk masokis, belum teruji)
16 MHz internal (disetel)
20 MHz internal (disetel)
24 MHz internal (disetel, overclock, diuji dengan buruk)
25 MHz internal (disetel, overclock, diuji dengan buruk)
30 MHz internal (disetel, overclock, diuji dengan buruk) - 0/1 -seri membutuhkan pengaturan sekering OSCCFG "20MHz"; Bagian 2-seri mungkin atau mungkin tidak dapat mencapai 30 dengan "16 MHz" yang dipilih.
32 MHz internal (disetel, overclock, diuji dengan buruk) - hanya 2 -seri, overclocking yang sangat optimis, mungkin tidak stabil.
24 MHz jam eksternal (overclock, diuji dengan buruk)
Jam eksternal 25 MHz (overclock, diuji dengan buruk)
30 MHz jam eksternal (overclock, diuji dengan buruk)
32 MHz jam eksternal (overclock, diuji dengan buruk)
Kami tidak membuat klaim tentang rentang tegangan atau suhu untuk bagian yang overclock - yang kami klaim hanyalah bahwa setidaknya satu chip yang telah kami kerjakan pada kecepatan itu pada suhu kamar, menjalankan sketsa tertentu, pada 5V. Jarak tempuh Anda diharapkan bervariasi, tetapi umumnya lebih baik dengan f spec versus bagian spec n atau u.
Penting - Baca tentang penyetelan sebelum memilih opsi yang disetel!
Informasi lebih lanjut tentang kecepatan clock ini dapat ditemukan di referensi jam
Tegangan yang ditampilkan adalah yang dijamin bekerja dengan spesifikasi pabrikan (. Kecuali mendorong batas kisaran suhu operasi, bagian-bagian ini biasanya akan jauh lebih baik (2-seri umumnya bekerja pada suhu 32 MHz dan 5V @ bahkan dari osilator internal; 0 /1-seri juga biasanya akan bekerja pada 32 MHz dengan jam eksternal asalkan catu daya adalah 5.0-5.5V yang stabil).
Tidak diperlukan tindakan untuk mengatur sekering OSCCFG
saat sketsa diunggah melalui Updi. Saat diunggah melalui OptiBoot, sekering tidak dapat diubah, jadi apa pun yang dipilih ketika bootloader dibakar adalah apa yang digunakan, dan hanya "Burn Bootloader" atau mengunggah sketsa melalui Updi akan mengubahnya.
Semua opsi kecepatan clock osilator internal menggunakan kalibrasi default pabrik kecuali opsi "disetel" dipilih, dalam hal ini kalibrasi disesuaikan seperti yang didokumentasikan dalam referensi tuning . Ini dapat digunakan untuk mendapatkan operasi 16 MHz pada chip OptiBoot yang menyatu untuk 20 MHz dan sebaliknya.
Lihat referensi kelas kecepatan untuk informasi lebih lanjut tentang nilai kecepatan pabrikan. Perhatikan bahwa itu adalah tegangan dan kecepatan clock di mana dijamin berfungsi. Bagian -bagian ini dimaksudkan agar cocok untuk digunakan dalam aplikasi di mana kesalahan yang tidak terduga dari beberapa deskripsi dapat menimbulkan bahaya bagi orang atau properti (pikirkan mobil, peralatan industri, pesawat terbang, reaktor nuklir - tempat di mana orang bisa mati jika bagian yang berfungsi) dan saya Percaya untuk aplikasi militer juga, yang memiliki persyaratan keandalan yang sama, hanya untuk alasan yang berlawanan. Pengguna hobi yang khas akan jauh lebih santai tentang potensi masalah stabilitas, dengan kecelakaan menjadi sedikit lebih dari gangguan, dan ekstrem bagian kisaran suhu yang diperluas jauh melampaui apa yang kita butuhkan. Dengan asumsi papan memiliki lapisan tahan air, secara termal, bagian kelas N harus dapat berfungsi per tingkat kecepatan dalam pot air mendidih. Dan itu hanya n-spec. F-Spec harus bagus untuk 125!
Telah ditetapkan bahwa overclock bagian suhu yang diperluas lebih baik yang masuk akal. Bagian yang spesifik untuk berjalan pada 20 MHz pada 125C akan diharapkan memiliki peluang yang lebih baik untuk berlari pada 32 MHz pada suhu kamar daripada yang ditentukan hanya untuk berjalan pada 20 MHz hanya pada 105C
Pada versi 2.4.0, kami sekarang menyediakan opsi "Dewan Microchip Resmi". Ini tidak melakukan sesuatu yang istimewa selain mendefinisikan LED_BUILTIN
untuk menjadi pin yang memiliki LED di papan itu, bukan A7, dan mendefinisikan makro PIN_BUTTON_BUILTIN
yang didefinisikan sebagai pin dengan tombol pengguna di atasnya dan membuat "unggah" dengan non Versi -Optiboot selalu menggunakan programmer/debugger onboard; Tools -> Programmer hanya akan digunakan untuk "Burn Bootloader" dan "Unggah Menggunakan Programmer". Dalam kasus nano yang dilapisi attiny416, ia juga memilih versi bootloader yang menggunakan pin alternatif untuk port serial - tidak secara otomatis menggunakan pin alternatif untuk USART0 seolah -olah Anda akan melakukan serial.swap (1) - Fungsionalitas untuk mendukung pertukaran default pin seri akan datang dalam pembaruan di masa depan, di samping beberapa perubahan lain dalam mesin yang mendasari mekanisme pinswap yang diharapkan juga akan mengurangi penggunaan flash.
Seperti disebutkan di atas, ini mungkin tidak berfungsi dengan benar pada platform Linux 32-bit. Ini di luar kendali saya; Saya tidak membangun binari Avrdude dan saya tidak mengambil tugas itu juga. Saya sudah memiliki terlalu banyak.
blink()
mengambil lebih banyak flash pada mini xplained vs xplained pro?Keduanya memiliki attiny817 yang sama! Bagaimana mereka bisa berbeda?
Untuk alasan yang sama bahwa Blink akan mengambil lebih banyak flash jika Anda mengubahnya untuk menggunakan PIN_PC0
sebagai lawan dari PIN_PB4
: pc0, yang digunakan pada mini xplained adalah pin PWM, sedangkan PB4, yang digunakan oleh Xplained Pro tidak. Karena itu adalah satu -satunya pin yang digunakan DigitalWrite (), kompiler bebas untuk mengoptimalkan apa pun yang tidak diperlukan untuk DigitalWrite () pada pin itu, termasuk fungsionalitas untuk mematikan output PWM pada pin yang mendukung PWM . Perbedaannya lenyap jika DigitalWrite () juga digunakan pada pin yang mendukung PWM pada kedua perangkat (menghasilkan hasil penggunaan flash yang lebih tinggi) atau jika digitalwrite () diganti dengan DigitalWriteFast (), yang akan menggunakan flash lebih sedikit (tetapi mengasumsikan Anda menang 'T Sebutkan pada PIN outputting PWM).
Setiap kali seorang programmer Updi digunakan untuk mengunggah kode, semua sekering yang dapat ditetapkan "dengan aman" (seperti dalam, tanpa risiko batu bata papan, atau membumbui papan jika seseorang tidak memiliki akses ke programmer HV), dan yang memilikinya Opsi konfigurasi bawaan, akan diatur. Dengan demikian, kecuali jika dicatat, perilaku akan selalu cocok dengan menu alat yang dipilih. Singkatnya, ini ditangani sebagai berikut:
WDTCFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
BODCFG will not be changed - not safe, you could set the BOD level to 4.3 on a 3.3v system, and then it would need to get > 4.3v applied to reprogram it. If it is on the same circuit board as parts that would be damaged, this is a difficult situation to recover from.
OSCCFG will be set
TCD0CFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
SYSCFG0 will not be changed - not safe
SYSCFG1 will be set
APPEND will not be changed - it is not configured by megaTinyCore. There is insufficient demand to justify the development effort.to make use of this as DxCore does
BOOTEND will be set
LOCKBIT will not be changed - it is not configured by megaTinyCore; supporting the lockbits presents several additional complications, and commercial users with need of this facility are unlikely to be using the Arduino IDE to program production units.
BODCFG
tidak aman, karena mengatur ini ke tegangan yang lebih tinggi daripada yang dijalankan di papan dan memungkinkannya akan "membatukan" papan sampai tegangan operasi yang lebih tinggi dapat disediakan; Ini bisa sangat canggung jika disolder ke PCB yang sama dengan perangkat yang tidak akan mentolerir tegangan tersebut.
SYSCFG0
tidak aman karena di sinilah RSTPINCFG
hidup; Mengubah ini dapat membuat papan tidak terprogram kecuali melalui pemrograman HV Updi, dan tidak semua orang memiliki programmer HV Updi. Di masa mendatang jika/ketika seorang programmer yang menjamin kemampuan pembaruan HV yang dapat dipilih sebagai programmer (yaitu, menjadi mungkin untuk membuat alat -> opsi programmer yang hanya akan bekerja dengan pemrogram HV) sekring ini akan diatur secara otomatis saat menggunakan programmer itu.
Akibatnya 2.2.0 dan yang lebih baru, Anda tidak perlu lagi 'membakar bootloader' untuk beralih antara kecepatan 16-MHz dan 20-MHz saat mengunggah menggunakan Updi
Inti ini selalu menggunakan pengoptimalan waktu tautan untuk mengurangi penggunaan flash - semua versi kompiler yang mendukung komponen tinyavr 0/1/2 -seri juga mendukung LTO, sehingga tidak perlu membuatnya opsional, seperti yang dilakukan dengan attinycore. Ini adalah peningkatan besar dalam kodes ketika diperkenalkan, biasanya pada urutan 5-20%!
Semua bagian ini memiliki sejumlah besar input analog-seri DA dan DB memiliki hingga 22 input analog, sedangkan seri DD memiliki input analog pada setiap pin yang tidak digunakan untuk menggerakkan kristal HF (meskipun pin di portc adalah hanya didukung saat MVIO dimatikan). Mereka dapat dibaca dengan analogRead()
seperti pada AVR normal, dan kami default ke resolusi 10-bit; Anda dapat berubah menjadi 12-bit penuh dengan analogReadResolution()
, dan menggunakan fungsi analogread yang ditingkatkan untuk mengambil bacaan yang secara otomatis oversampled, decimated untuk resolusi yang lebih tinggi dan untuk melakukan pengukuran diferensial. Ada 4 referensi tegangan internal di 1.024, 2.048, 4.096 dan 2.5V, ditambah dukungan untuk tegangan referensi eksternal (dan VDD tentu saja). Bacaan ADC diambil 3 kali lebih cepat dari AVR klasik, dan kecepatan itu dapat digandakan lagi jika apa yang Anda ukur adalah impedansi rendah, atau memperpanjang waktu pengambilan sampel dengan faktor yang sangat untuk membaca sumber impedansi yang sangat tinggi. Ini dirinci dalam referensi analog.
Bagian DX-Series memiliki DAC 10-bit yang dapat menghasilkan tegangan analog nyata (perhatikan bahwa ini memberikan arus rendah dan hanya dapat digunakan sebagai referensi tegangan atau tegangan kontrol, tidak mungkin