Saya mengikuti tutorial ini , pemrograman ATtiny85 dengan Arduino, menggunakannya untuk memainkan beberapa nada (melalui speaker piezo). Saya kesulitan mendapatkan nada pada nada yang tepat (saya membuat bentuk gelombang secara manual, karena fungsi nada () tidak didukung pada ATtiny85).
Saya percaya masalahnya mungkin karena perbedaan kecepatan clock pada Arduino dan ATtiny. Saya mengerti kecepatan clock dapat diubah pada ATtiny, bagaimana cara melakukannya menggunakan lingkungan Arduino?
arduino
attiny
fuse-bits
clock-speed
ketakutan
sumber
sumber
Jawaban:
Saya percaya perangkat lunak Arduino (perpustakaan dan semua) menganggap Anda beroperasi pada 16MHz. Jika Anda menerapkan asumsi itu pada jam Anda benar-benar berjalan pada ... hal-hal akan berhasil. Dengan asumsi Anda menjalankan Tiny85 pada osilator internal, saya pikir itu berjalan pada 1MHz, jadi cukup gandakan semua pernyataan keterlambatan Anda (dan pengertian waktu lainnya) dengan 16.
Jika Anda membutuhkan akurasi yang lebih baik daripada osilator internal, Anda harus berpikir tentang menggunakan kristal eksternal atau resonator, tetapi Anda harus mengubah pengaturan sekering AVR agar bisa berfungsi, dan saya pikir Anda akan memerlukan programmer seperti AVRISP mkII untuk melakukan itu dengan AVR Studio (rekomendasi saya).
Saya tidak tahu banyak tentang sketsa ArduinoISP tetapi bagi saya kelihatannya ini agak mengganggu protokol ISP untuk mengunggah program ke chip target (bukan pada board Mega328), tidak yakin itu dilengkapi untuk memanipulasi sekering. ArduinoISP didokumentasikan di sini http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Perhatikan bahwa Anda tidak dapat menggunakan UNO saat ini untuk menjalankan sketsa ArduinoISP. Bagiku tidak terlihat seperti Anda dapat menggunakan sketsa untuk membuat Arduino antarmuka yang layak untuk menggunakan alat AVR Studio GUI.
EDIT : Sepertinya barang sudah menyusul dan UNO layak untuk ArduinoISP sekarang - terima kasih atas komentarnya semua
sumber
delay(20)
insteddelay(40)
dalam definisivoid heartbeat()
.)Saya berhasil menggunakan Arduino UNO + ArduinoISP.
Tambahkan
-U
bendera keavrdude
perintah Anda untuk mengatur salah satu atau semua dari sekering ATtiny.Pemilihan jam dilakukan dalam bit [3: 0] pada sekering ketiga ('Fuse Low Byte'). Tetapkan mereka sebagai berikut untuk menggunakan kristal eksternal (8MHz atau lebih cepat):
Definisinya (saya simpulkan) harus seperti: [Fuse Low Byte]: [tulis]: [hex value]: [atur secara manual]
Nilai default untuk empat bit tinggi byte ini
0110
, sehingga meninggalkan6
di0x6f
seperti itu, dan hanya mengubah digit kedua,f
(nilai default adalah2
).NB: Jika proses Anda memakan waktu lebih lama atau lebih pendek dari yang Anda harapkan, periksa prescaler jam Anda dan definisi Anda dari F _ CPU.
sumber
-U lfuse:w:0x6f:m
opsi avrdude di atas . Saya harus mengatur ulang menggunakan pengaturan tegangan tinggi. Jadi kata hati-hati untuk orang-orang (seperti saya) yang mencoba mengatur ulang sekering tanpa mengetahui apa yang mereka lakukan.Coba gunakan tutorial terkait oleh grup yang sama (Teknologi Tinggi-Rendah MIT) yang berjudul Pemrograman ATtiny w / Arduino 1.0 .
Ringkasan cepat: Dari menu Tools-> Board di Arduino IDE, pilih ATtiny85 dan frekuensi yang Anda inginkan (jam internal 1 atau 8 Mhz, atau kristal eksternal 20Mhz) dan kemudian gunakan Tools -> Burn Bootloader " Saya percaya memilih papan kecepatan yang diinginkan mengubah cara penundaan () dan fungsi Arduino terkait waktu lainnya bekerja untuk menyinkronkan dengan kecepatan jam.
Saya telah berhasil dengan pendekatan ini sendiri menggunakan beberapa chip ATtiny84. Program kedip sederhana sudah diperbaiki, serta waktu yang lebih sensitif diperlukan untuk secara manual mengendalikan pulsa yang dikirim ke servo menggunakan delayMicroseconds ().
sumber
Tampaknya Anda menggunakan ArduinoISP, coba gunakan AVR Studio atau opsi baris perintah untuk
avrdude
. Bergantung pada bagaimana ArduinoISP ditulis, ia dapat berfungsi seperti Atmel AVRISP mkII atau serupa.sumber
Pengaturan sekering default untuk ATtiny85 adalah: lfuse 0x62, hfuse 0xdf, efuse 0xff. Ini menggunakan osilator RC internal (8 MHz) dengan "bagi dengan 8" sehingga clock adalah 1 MHz.
Lihat http://www.engbedded.com/fusecalc untuk pengaturan sekering yang lebih banyak.
Anda masih dapat menggunakan avrdude secara langsung untuk mengubah pengaturan sekering ATtiny85 Anda, bahkan ketika menggunakan ArduinoISP sebagai programmer.
Jika Anda akhirnya mengubah sekering secara manual untuk mengubah jam, pastikan untuk mengedit
attiny85.build.f_cpu
baris file [arduino_folder] \ hardware \ attiny45_85 \ boards.txt Anda.sumber
Saya pikir Anda dapat mengatur sekering dengan ArduinoISP, tetapi tidak dengan Arduino IDE tetapi dengan avrdude, periksa tautan ini . Tidak pernah mengujinya sendiri.
Tutorial secara eksplisit mengatakan Anda dapat menggunakan Arduino UNO dan saya telah mengujinya dan berfungsi, jadi saya dapat mengonfirmasi hal itu, sehingga halaman ArduinoISP sudah usang dan peringatan UNO harus diabaikan. Jika UNO Anda adalah salah satu dari batch pertama Anda mungkin memiliki bootloader yang salah, Anda perlu merombak bootloader. Periksa halaman ini untuk informasi lebih lanjut (abaikan nomor seri, semua UNO saya bukan dari seri itu dan ada masalah).
Pustaka inti porting yang Anda unduh dari tutorial ditulis untuk menggunakan osilator internal 1MHz (dikonfirmasi dari file boards.txt), jadi mungkin masalah pengaturan waktu mungkin ada di pustaka inti porting atau dalam kode Anda.
Salam
sumber
Pilih papan ATTiny dari "papan manager" yang mencakup ATTiny85 tersebut. Ini ada di Menu "Tools". Saya pikir ini termasuk "16MHz internal PLL" sekarang. (Anda dapat menginstal salah satu dari http://drazzy.com/package_drazzy.com_index.json )
Pilih ATTiny85 secara eksplisit jika diperlukan.
Pilih jam. Sampai Anda tahu lebih banyak, pilih jam internal .
Klik "Bakar Bootloader" sebagai Item Menu.
Hati-hati, Anda mungkin tidak lagi dapat memprogram MCU jika Anda memilih nilai-nilai yang sangat rendah. Jika ini maksud Anda, lakukan ini terakhir kecuali Anda memiliki suku cadang atau Programmer Tegangan Tinggi untuk mengatur ulang sekering.
sumber