Saat menggunakan Arduino Uno karena ISP melakukan “Ya! Tanda tangan perangkat tidak valid ”berarti koneksi buruk, konfigurasi buruk, atau versi buruk dari avrdude?

12

Saya menggunakan Arduino UNO untuk memprogram gambar hex pra-kompilasi ke ATTINY45, menggunakan avrdude di direktori IDE Arduino, pada Windows 7. Uno memiliki sketsa ISP yang dimuat dari direktori contoh dan berfungsi - LED detak jantung pulsa baik.

Di sisi perangkat keras saya memiliki pengaturan ini , kecuali ATTINY adalah permukaan-mount, disolder ke papan selancar dengan semua pinnya diverifikasi-disolder dengan voltmeter. Saya menggunakan strip header-pin, dipegang dengan tangan untuk mendapatkan pin menyentuh papan selancar, untuk mendapatkan sinyal dari Uno ke ATTINY.

Berikut adalah baris perintah, yang saya ambil dari melihat hasil debugging IDE:

REM set the fuse for 8MHz, so the ISP programmer can work
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0xe2:m 
REM load the program
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -Uflash:w:firefly.hex:i
REM set fuse for 1MHz, as the project requires
C:\Progra~1\Arduino\hardware/tools/avr/bin/avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0x62:m 

-Saya mencoba menjalankannya secara terpisah, tetapi selalu mendapatkan kesalahan ini:

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.

tapi terkadang jumlahnya ff0000 atau ffff00 atau ffffff

Saya membaca bahwa "Arduino menggunakan versi avrdude yang sedikit dimodifikasi untuk mengunggah sketsa ke papan Arduino. Versi standar menanyakan tanda tangan perangkat papan dengan cara yang tidak dimengerti oleh bootloader, yang mengakibatkan kesalahan ini." Apakah ini berarti menggunakan Arduino avrdude dengan chip ATTINY baru, tanpa bootloader di sana, juga akan menyebabkan kesalahan yang sama? Dengan kata lain, apakah avrdude yang dimodifikasi tidak mampu untuk menanyakan chip AVR yang bukan boot-Arduino?

Atau apakah kesalahan itu hanya berarti saya tidak memiliki kontak yang baik antara semua pin programmer saya dan ATTINY?

Dan, apakah pengaturan sekering benar-benar diperlukan, dapatkah Uno memprogram flash menjadi attiny yang berjalan pada 1MHz dan dengan demikian menyelamatkan saya beberapa langkah?

(Saya hanya akan membeli seorang programmer "nyata", tetapi perlu mendapatkan kode ini dalam dua hari ke depan, dan saya di bagian pedesaan Nova Scotia)

Yary
sumber
Coba atur programmer ke -c avrisp. Saya pikir Anda dapat memprogramnya pada 1 MHz tanpa masalah.
user2973
1
Ketika saya mengunggah dari arduino IDE dan mengatur programmer ke "Arduino as ISP" tidak menggunakan -carduinostk500. Coba unggah program blink ke attiny dari IDE. Dengan begitu Anda dapat melihat baris perintah yang benar di bagian bawah, jika Anda mengaktifkan "keluaran verbose" di pengaturan.
Gerben
Apakah Anda mengunggah sketsa ArduinoISP terlebih dahulu?
PhillyNJ
Phil, saya memuat sketsa ArduinoISP ke dalam Uno sebelum langkah-langkah ini berhasil, dan saya melihat LED "detak jantung" berwarna hijau di pin 9 pulsa. Gerben / user2973, saya memang mencoba "-carduino", saya akan mencoba "-c avrisp" selanjutnya. Terima kasih.
Yary
Ini terlihat seperti masalah koneksi target ISP <->. Apa pun di sirkuit Anda yang bisa memuat garis? Apakah sekering ATtiny masih diatur untuk jam internal, atau apakah Anda menyediakan yang eksternal? Apakah Anda yakin semua kabel sinyal dan ground terhubung, dan dalam urutan yang benar? Mungkin Anda harus memasang solder pengaturan hanya untuk memverifikasi itu bukan metode genggam Anda (meskipun saya juga pernah menggunakannya)
Chris Stratton

Jawaban:

12

Saya menyolder kabel ke pad untuk memastikan koneksi baik, dan menggunakan kabel itu untuk pemrograman dari Uno. Kemudian programmer bekerja, tanpa mengedit baris perintah seperti yang diposting pada pertanyaan. Saya berlari beberapa variasi dan mampu menjawab semua pertanyaan saya, dan beberapa lagi selain:

  1. Kesalahan "Yikes! Invalid device signature" disebabkan oleh kontak yang buruk antara programmer (Uno) dan pin ATTINY.

  2. Itu tidak ada hubungannya dengan bootloader yang tidak ada di mikrokontroler baru. Chip ATTINY45 baru tidak perlu bootloader agar programer di-sirkuit berfungsi.

  3. Uno dapat memprogram ATTINY45 yang dikonfigurasikan ke salah satu kecepatannya, 1MHz atau 8MHz. Pengaturan pabrik baik-baik saja, dan tidak perlu mengubah sekering.

  4. Kedua versi avrdude bekerja untuk pemrograman - 6.1 dari situs penulis, dan yang dimodifikasi dari Arduino IDE.

  5. AVRDUDE Program kaleng melalui Uno menggunakan salah -c avrisp, -c arduinoatau -c stk500v1, tidak masalah yang.

Satu pertanyaan kecil yang tidak bisa saya jawab, adalah kecepatan program Uno (kecepatan komunikasi antara pin I / O & mikrokontroler Arduino sedang di-flash). Apakah ini terkait dengan kecepatan port serial? Tapi ternyata tidak ada hubungannya dengan menjawab masalah ini. Orang lain dapat menanyakannya jika cukup ingin tahu.

Yary
sumber
2
ArduinoISP mengatur antarmuka SPI ke clock / 128, jadi untuk 16 MHz Uno AVR yang terhubung diprogram pada 16 MHz / 128 = 125 kbit / s. Tetapi faktor pembatasnya adalah kecepatan serial dan ketika PROG_FLICKER diatur, 30 ms penundaan ditambahkan untuk setiap komit halaman.
user2973
4

Aku punya persis masalah ini. Jika ATtiny diatur untuk jam eksternal, maka ArduinoISP tidak akan dapat memprogramnya tanpa kristal eksternal. Menghubungkan kristal 16 MHz dan 2 kapasitor dan bekerja dengan sempurna.

(Saya kemudian dapat mengatur ATtiny ke jam internal, menghapus kristal, dan kemudian bekerja dengan sempurna tanpa kristal.)

jcwh2
sumber
1

Tambahkan papan dan deskripsi sekring mereka dari apa yang sudah ditetapkan dan itu akan berfungsi.

Untuk menambah adil C:\Program Files\Arduino\hardware\arduino\avr\boards.txtdan menambahkan deskripsi papan.

########
############ Definitions for ATmega 8MHz 
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)

atmega16-8.upload.tool=avrdude

atmega16-8.upload.protocol=stk500v1

atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200

atmega16-8.bootloader.low_fuses=0xE8
atmega16-8.bootloader.high_fuses=0x99

atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=arduino:arduino
atmega16-8.build.variant=mega16

##############################################################
############################

Saya menggunakannya.

Shubham
sumber