Jalankan waktu
Sepengetahuan saya Anda tidak dapat mendeteksi jenis papan, tetapi Anda dapat membaca ID perangkat ATmega. Periksa pertanyaan ini bagaimana hal itu dapat dilakukan: Dapatkah tanda tangan ATmega atau ATtiny perangkat dibaca saat berjalan? Perhatikan bahwa ketika menggunakan metode ini, beberapa tugas register akan berubah, bukan hanya pinout. Karenanya kode Anda mungkin menjadi jauh lebih kompleks. Keuntungannya adalah jika Anda berhasil mengatasi semua perubahan tugas register dan dependensi perangkat keras lainnya, Anda dapat menggunakan file .hex tunggal untuk memprogram langsung dari perangkat Anda avrdude
.
Waktu kompilasi
Cara lain untuk mengetahui tipe papan / pengontrol adalah pada waktu kompilasi. Pada dasarnya Anda mengkompilasi bagian dari kode atau mengatur makro tergantung pada jenis perangkat yang dikonfigurasi dalam Arduino IDE. Lihat sniplet kode ini untuk contoh:
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif
Cuplikan kode disalin tanpa malu dari https://github.com/gillham/logic_analyzer/wiki Periksa kode itu untuk mengetahui beberapa tipu daya khusus perangkat lainnya.
Bergantung pada sistem operasi host Anda, jenis pengontrol yang didukung dapat ditemukan di file berikut:
- Linux:
/usr/lib/avr/include/avr/io.h
- Windows:
...\Arduino\hardware\tools\avr\avr\include\avr\io.h
Penggunaan C-preprocessor (yang menangani kode di atas) mungkin di luar ruang lingkup untuk situs ini. http://stackoverflow.com akan menjadi tempat yang lebih baik untuk pertanyaan terperinci.
Jika Anda menggunakan Linux, Anda dapat dengan mudah menemukan semua jenis pengontrol yang didukung dengan mengetik:
grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'