Sudahkah saya mengurangi Arduino Uno saya? Masalah dengan mengunggah ke papan

86

Saya tidak dapat mengunggah sketsa ke Arduino Uno saya.

  • Sudahkah saya "merusaknya"?
  • Langkah apa yang bisa saya ambil untuk mencari tahu apa yang salah?
  • Apa yang bisa saya lakukan untuk memperbaikinya?
Nick Gammon
sumber
7
Bagi mereka yang bertanya-tanya, ini bukan pertanyaan yang sebenarnya! Ini lebih merupakan pertanyaan referensi. Pertanyaan itu sendiri dibuat cukup luas dengan sengaja. Namun jawabannya sangat terperinci sehingga pertanyaan ini dapat digunakan sebagai referensi.
Paul
2
Ini lebih merupakan pertanyaan referensi. Cukup benar. Lihat Tidak apa-apa untuk Bertanya dan Menjawab Pertanyaan Anda Sendiri .
Nick Gammon
@Nick_Gammon Ya. Tapi saya merasa Anda entah bagaimana seharusnya mencatatnya di suatu tempat. Pada pandangan pertama saya (sedikit) terganggu oleh fakta bahwa pertanyaannya sangat luas dan sepertinya Anda belum melakukan penelitian. Tetapi ketika saya melihat jawaban Anda, semuanya masuk akal. Juga, (jika bisa) Anda tidak boleh lupa untuk menerima jawaban Anda sendiri, sehingga orang lain yang mencoba membantu tidak mulai menjawab, melihat ke dalam atau mengomentari pertanyaan tentang ini (yang tidak akan benar-benar membantu Anda, seperti Anda memang sudah menemukan cara yang cukup baik untuk men-debug masalah ini).
Paul
Terima kasih untuk umpan baliknya. Awalnya saya berpikir untuk mengirim pertanyaan dengan catatan bahwa saya akan memposting jawaban saya sendiri, tetapi kemudian saya melihat kotak centang tentang "jawab pertanyaan Anda sendiri" jadi saya mencentangnya sebagai gantinya. Sedangkan untuk menerimanya, saya tidak diizinkan selama 20 jam. Rasanya agak aneh bagi saya untuk menerima jawaban Anda sendiri, tetapi tentu saja saya bisa melakukan itu ketika saya diizinkan. Saya mengajukan pertanyaan di Meta Arduino. Apa itu pertanyaan kanonik? untuk mencoba mencari tahu prosedur yang benar tetapi tidak mendapat tanggapan.
Nick Gammon
@ FuaZe dan Nick Gammon: Ini tampak hebat secara umum, satu-satunya saran yang saya buat adalah membuat subjek lebih sugestif tentang apa sebenarnya pertanyaan dan jawaban itu. Karena itu, saya pikir saya mungkin tergoda untuk meledakkannya sebagai terlalu kabur. Mungkin judulnya adalah "Bagaimana saya bisa mengatasi masalah unggahan yang gagal?"
dlu

Jawaban:

115

Mungkin bukan bata

Saya punya cukup banyak Arduino, dan selama beberapa tahun terakhir hanya pernah satu "batu bata", dan saya pikir itu dengan kejutan listrik dengan listrik statis. Sayangnya yang satu itu memiliki chip prosesor SMD (surface mounted), jadi tidak mudah untuk mencoba menukar dengan chip yang lain.

Tetap tenang, dan coba langkah-langkah berikut ...


Papan contoh

"Arduino Uno" bukan hanya satu hal yang mungkin gagal. Ini memiliki beberapa komponen utama, dan mungkin hanya satu yang gagal (jika ada). Lihat foto referensi ini:

Komponen utama Arduino Uno

Komponen utama adalah:

  • Prosesor Atmega16U2 - ini menangani antarmuka ke koneksi USB
  • Prosesor Atmega328P - ini adalah prosesor "utama" yang memiliki sketsa Anda di atasnya
  • Regulator tegangan - ini mengubah daya yang masuk dari colokan daya ke 5 V
  • LED Daya (hijau) - bertanda "Aktif"
  • Indikator LED (kuning) bertanda "L" - terhubung melalui op-amp ke pin digital 13
  • LED Rx dan Tx (kuning) - ini menunjukkan jika chip USB (Atmega16U2) menerima atau mengirim

Perhatikan bahwa LED Rx dan Tx tidak terhubung langsung ke pin digital 0 dan 1 di papan tulis (bertanda Rx dan Tx). Mereka hanya menyala jika Anda melakukan komunikasi serial melalui USB , tidak jika Anda memiliki sesuatu (seperti GPS) yang dicolokkan langsung ke pin digital 0 dan 1.

Juga perhatikan bahwa karena "L" LED terhubung melalui op-amp, itu mungkin menyala jika pin 13 diatur ke input dalam sketsa Anda. Ini normal. Itu tidak berarti bahwa ada sesuatu yang salah mengirim data.


Periksa daya

Daya USB

  • Colokkan papan ke komputer Anda dengan kabel USB dan periksa apakah LED "On" menyala.

  • Gunakan multimeter dan beberapa jumper lead untuk menguji antara pin 5V dan pin GND (panah di bagian bawah). Anda harus mendapatkan pembacaan sekitar 5,0 V (saya mendapat 5,04 V pada saya).

(Anda dapat membeli multimeter murah seharga sekitar $ 10 jika Anda tidak memilikinya, tetapi Anda lebih baik mendapatkan yang lebih baik seharga sekitar $ 50 - periksa semua situs web elektronik dan toko-toko.)

  • Juga uji antara pin 3,3 V dan pin GND - Anda harus mendapatkan 3,3 V.

Jika Anda tidak mendapatkan 5 V dengan kabel USB terpasang pastikan ujung lainnya terhubung ke komputer Anda. Coba juga kabel yang berbeda.

Colokan listrik

  • Jika Anda menggunakan, atau berencana untuk menggunakan, colokan listrik (bertanda "power in" pada foto) lepaskan USB, dan colokkan catu daya - yang seharusnya 7 sampai 12 V DC dengan positif pada pin tengah .

  • Ukur pin 5 V dan 3.3 V seperti di atas. Anda masih harus melihat tegangan yang sama pada mereka.

Jika Anda mendapatkan 5 V dengan USB yang terhubung, tetapi tidak dengan catu daya maka regulator tegangan (ditandai pada foto) mungkin rusak. Atau, mungkin catu daya gagal. Coba catu daya yang berbeda untuk mengkonfirmasi.


Periksa lampu kilat LED daya

Jika Anda memiliki bootloader Optiboot (Uno biasanya disertakan dengan itu) maka jika Anda menekan dan melepaskan tombol Reset, atau mencabut dan pasang kembali kabel USB atau kabel daya, LED "L" akan berkedip cepat 3 kali. Waktu "nyala" dan "mati" masing-masing adalah 50 ms, ketiga kedipan harus berakhir dalam waktu 1/3 detik.

Jika tidak, Anda mungkin memiliki masalah dengan bootloader, atau chip prosesor utama (Atmega328P).


Coba unggah sketsa

Penting: Jika Anda mengalami masalah saat mengunggah sketsa, lepaskan semua perangkat yang terhubung (seperti perisai). Lepaskan juga kabel jumper yang terhubung ke soket papan. Secara khusus, seharusnya tidak ada yang terhubung ke pin digital 0 dan 1 (Rx dan Tx) karena itu akan mengganggu komunikasi dengan komputer yang mengunggah.

Pilih salah satu contoh sketsa sederhana (mis. Blink) dan coba unggah. Inilah yang harus Anda lihat:

  • LED "L" akan berkedip 3 kali. Ini karena chip utama sedang direset oleh perintah dari proses pengunggahan.

  • LED "Rx" harus berkedip cepat. Ini adalah instruksi dari proses pengunggahan yang mencoba mengaktifkan bootloader.

  • LED "Tx" harus berkedip cepat. Ini adalah prosesor yang mengakui data yang diunggah.

Anda dapat melihat hal di atas, bahkan jika proses pengunggahan gagal. Ini bisa jadi karena jenis papan yang salah dipilih.

Jika hanya "Rx" LED berkedip, itu bisa jadi karena masalah dengan bootloader, atau chip prosesor utama (Atmega328P). Seseorang mengetuk, tetapi tidak ada seorang pun di rumah!

Periksa jenis papan

Jika LED menyala, tetapi Anda mendapatkan pesan seperti ini:

avrdude: stk500_recv(): programmer is not responding

Periksa jenis papan:

Menu jenis papan

Jika Anda memilih jenis papan yang salah, mungkin akan mengirim instruksi pengunggahan yang salah, dan batas waktu atau gagal. Jika Anda seperti saya dan memiliki papan yang berbeda, mudah untuk melupakan bahwa unggahan terakhir yang Anda lakukan adalah untuk jenis papan yang berbeda.

Periksa port komunikasi

Jika LED tidak menyala sama sekali, Anda mungkin salah memilih port komunikasi.

Periksa port comm:

Menu comm port

Coba PC / Mac lain jika memungkinkan

Coba Arduino Anda pada PC / Mac yang berbeda jika Anda punya satu. Ini dapat mempersempit apakah Anda memiliki masalah dengan komputer tertentu yang Anda tancapkan, atau komputer pada umumnya.

Lakukan tes loopback

  • Putuskan sambungan semua perisai dan kabel lainnya
  • Lepaskan papan dari daya
  • Hubungkan kabel jumper dari RESET ke GND (kabel oranye di foto)
  • Hubungkan kabel jumper dari Rx ke Tx (kabel putih di foto)

Kabel:

Tes loopback

  • Hubungkan kabel USB, dan mulai program terminal - seperti Terminal Monitor di Arduino IDE. Ketik sesuatu dan kirimkan (mis. Tekan Enter di Terminal Monitor).
  • Semua yang Anda ketik harus digaungkan kembali.

Jika semuanya digemakan kembali: Itu menegaskan Anda memiliki port comm yang tepat, kabel USB OK dan chip antarmuka USB (Atmega16U2) mungkin OK.

Jika tidak ada yang digema kembali, periksa:

  • Anda memiliki port komunikasi yang benar.
  • Coba kabel lain. Beberapa kabel USB murah hanya memiliki kabel listrik dan bukan kabel data.
  • Periksa driver perangkat untuk Arduino diinstal. Anda mungkin tidak perlu melakukan ini jika papan itu bekerja sebelumnya di komputer ini, tetapi bisa dilakukan jika ini adalah pertama kalinya Anda memasang papan ini ke komputer ini.

Uji chip Atmega16U2

Jika board Anda gagal dalam tes loop-back, dan Anda yakin kabel USB OK, maka Anda dapat menguji chip Atmega16U2 itu sendiri. Ada header ICSP (In Circuit Serial Programming) di papan, berdekatan dengan chip Atmega16U2, dan dekat soket USB.

Putuskan sambungan daya terlebih dahulu (cabut kabel USB dan kabel daya apa pun).

Kemudian Anda dapat menghubungkan header ICSP melalui 6 kabel jumper ke Uno yang dikenal baik, seperti yang ditunjukkan dalam foto:

Uji chip Atmega16U2

Pin-out untuk header ICSP adalah (dari atas):

Header ICSP

Pin 1 pada header ICSP dekat chip Atmega16U2 ditandai dengan titik putih kecil, dekat "F" di "AREF". Pin 1 pada header ICSP dekat chip ATmega328P ditandai dengan titik putih kecil, di bawah "N" di "ON".

Terhubung:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Periksa ulang kabel Anda.

Kemudian pada papan "diketahui bagus" pasang sketsa "Atmega_Board_Detector" seperti yang dijelaskan pada halaman programmer Atmega bootloader . Kode ini ada di GitHub - nickgammon / arduino_sketches . Jika Anda mengklik tombol Unduh pada halaman itu, Anda akan mendapatkan sejumlah sketsa yang bermanfaat. Yang Anda inginkan disebut "Atmega_Board_Detector".

Setelah diinstal, buka monitor serial, atur ke 115200 baud, dan Anda akan melihat sesuatu seperti ini:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

Namun jika Anda mendapatkan pesan seperti ini:

"Failed to enter programming mode. Double-check wiring!"

Itu akan muncul untuk menunjukkan bahwa ATmega16U2 Anda tidak berfungsi.


Uji chip ATmega328P

Putuskan sambungan daya dari Arduino Uno "dikenal baik" dan pasang ulang jumper ICSP sesuai foto ini, untuk menghubungkannya ke prosesor "utama" di Uno Anda:

Uji chip ATmega328P

Pin-out untuk header ICSP adalah (dari atas):

Header ICSP

Pin 1 pada header ICSP dekat chip ATmega328P ditandai dengan titik putih kecil, di bawah "N" di "ON".

Kabelnya sama seperti sebelumnya, kecuali Anda menghubungkan ke header ICSP lainnya - yang ada di ujung papan, paling jauh dari soket USB.

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Setelah tersambung, buka monitor serial, atur ke 115200 baud, dan Anda akan melihat sesuatu seperti ini:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

Dalam hal ini menegaskan bahwa prosesor utama berfungsi, dan memiliki bootloader Optiboot di atasnya.


Hal-hal yang dapat Anda perbaiki

Regulator tegangan gagal

Ini tidak mudah untuk diganti, tetapi hanya diperlukan jika Anda menggunakan colokan listrik. Jika Anda menjalankan dari USB maka itu tidak diperlukan. Atau Anda dapat mengatur suplai 4 hingga 5 V (mis. 3 baterai AA x) dan menghubungkannya ke soket 5 V di papan secara langsung.


Chip ATmega16U2 gagal

Ini hanya diperlukan untuk mengunggah sketsa melalui port USB, dan debugging serial. Ini tidak mudah untuk diganti karena itu adalah SMD (perangkat yang dipasang di permukaan). Namun Anda dapat mengelola tanpanya.

Anda dapat mengunggah sketsa melalui tajuk ICSP, jika Anda membeli perangkat pemrograman ICSP.

Contoh perangkat semacam itu yang dicolokkan ke soket ICSP:

USBtinyISP

AVRISP

(Foto-foto itu diambil dari Ruggeduino, tetapi konsepnya sama).


Anda juga bisa mendapatkan kabel FTDI, seperti ini:

Hubungkan FTDI ke Arduino

Hubungkan ke port serial papan Anda seperti ini:

Kabel FTDI

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

Sekarang Anda dapat mengunggah sketsa langsung ke prosesor utama, melewati chip USB.


Anda juga dapat menggunakan programmer Atmega chip saya yang berdiri sendiri untuk mengunggah file .hex - ini memungkinkan Anda menyalin file .hex untuk sketsa ke kartu SD, dan kemudian memprogram papan melalui header ICSP.


Chip ATmega328P gagal

Prosesor utama dapat diganti dengan cukup mudah jika sudah dipasang di soket. Dapatkan chip pengganti dari suatu tempat seperti Adafruit sekitar $ AS 6. Atau, coba eBay. Cobalah untuk mendapatkan chip yang sudah memiliki bootloader Optiboot, untuk menghemat kerumitan.

Hati-hati hadiah chip yang ada keluar dari soket, dan pasang yang baru, perhatikan lokasi pin 1. Pin 1 memiliki takik pada chip, dan orientasi yang benar dicatat pada foto pertama dalam posting ini dengan warna kuning dot (paling dekat dengan tepi papan). Anda mungkin perlu sedikit meluruskan kaki. Pegang chip pada ujungnya dan tekan perlahan ke permukaan yang datar, seperti meja, hingga sedikit didorong ke dalam. Cobalah untuk tidak menyentuh pin logam, Anda dapat menidurinya dengan listrik statis.


ATmega328P merespons tetapi tidak memiliki bootloader

Saya punya sketsa di Atmega bootloader programmer yang akan menggantikan Optiboot bootloader. Kabelnya sama dengan sketsa detektor chip. Kode ini ada di GitHub - nickgammon / arduino_sketches . Jika Anda mengklik tombol Unduh pada halaman itu, Anda akan mendapatkan sejumlah sketsa yang bermanfaat. Yang Anda inginkan disebut "Atmega_Board_Programmer".

Instal sketsa di Uno "terkenal baik" Anda, dan hubungkan ke papan target dengan kabel yang ditunjukkan sebelumnya.

Uji chip ATmega328P

Buka Serial Monitor di Uno "bagus" Anda dan Anda akan melihat ini:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

Ketik "U" untuk pemuat Uno (Optiboot).

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...

Ketik "G" untuk memprogram chip.

Anda harus melihat:

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

Ini membutuhkan waktu sekitar satu detik. Sekarang bootloader diinstal.


Masalah pengawas waktu

Pengawas waktu (dinonaktifkan secara default) dapat dikonfigurasi untuk mengatur ulang prosesor setelah waktu tertentu. Tujuannya adalah untuk memulihkan dari "hang" untuk prosesor yang digunakan di lapangan. Namun jika timer diset untuk waktu yang singkat (seperti 16 ms) maka prosesor dapat mengatur ulang sebelum bootloader memiliki kesempatan untuk melakukan apa saja.

Gejalanya adalah Anda tidak dapat mengunggah sketsa baru. Beberapa bootloader modern (seperti Optiboot) mengambil langkah untuk menghentikan masalah ini sebagai salah satu hal pertama yang mereka lakukan. Namun yang lain tidak.

Ini bisa sulit untuk dipulihkan, karena begitu sketsa berjalan, Anda memiliki masalah pengaturan ulang, dan jika Anda memiliki masalah, Anda tidak dapat mengganti sketsa. Orang sering melaporkan bahwa mereka harus membakar bootloader baru untuk pulih. Namun itu hanya karena, sebagai efek samping, membakar bootloader menghapus sketsa saat ini.

Ada adalah cara untuk memulihkan. Ambil langkah-langkah ini:

  • Matikan papan sepenuhnya (lepaskan kabel USB).
  • Tekan terus tombol Reset, dan tahan terus (atau, jalankan kawat jumper dari pin RESET ke pin GND). Ini menghentikan sketsa masalah dari mulai, dan dengan demikian mengaktifkan pengawas waktu
  • Masih menahan Reset, sambungkan kembali kabel USB.
  • Mulai mengunggah sketsa yang tidak memiliki masalah ini (mis. Berkedip)
  • Setelah IDE melaporkan "Mengunggah" lepaskan tombol Reset (atau lepaskan kabel jumper).
  • Sekarang seharusnya mengunggah OK - karena sketsa yang mengaktifkan pengawas waktu tidak pernah dimulai.

Masalah dengan unggahan Mega2560

Saya menyebutkan ini di sini, meskipun postingan ini benar-benar menargetkan papan Uno, karena sangat umum.

Beberapa versi bootloader Mega2560 mencari "!!!" dalam unggahan masuk dari PC, dan jika mereka melihatnya, masuk ke mode debugging. Ini menyebabkan unggahan gagal.

Kode contoh:

Serial.println ("Furnace overheating!!!");

Solusi:

  • Instal bootloader yang lebih baru. Sketsa "pengunggah bootloader" yang saya sebutkan sebelumnya dalam balasan ini harus memasang bootloader yang tidak memiliki masalah itu.

Atau (lebih sederhana):

  • Jangan gunakan "!!!" dalam sketsa Anda.

Masalah mengunggah ke Leonardo / Micro / Esplora dll.

Papan dengan ATmega32u4 sebagai prosesor utama (dan satu-satunya) mereka mungkin lebih sulit untuk diunggah. Ini karena chip yang sama harus menangani unggahan dan juga menjalankan kode Anda.

Ada jendela kecil peluang, setelah papan disetel ulang, saat sketsa baru akan diunggah. Teknik untuk mengunggah ke papan ini adalah:

  • Kompilasi sketsa Anda tanpa kesalahan.
  • Mulai unggah
  • Segera setelah IDE melaporkan "Mengunggah" tekan dan lepaskan tombol Reset.

Anda hanya memiliki satu atau dua detik untuk melakukan ini, sebelum sketsa lama mulai berjalan. Jangan berkecil hati jika Anda harus mengulangi proses ini beberapa kali. Itu normal.


Referensi

Nick Gammon
sumber
5
Wow. Ini adalah jawaban yang sangat bagus
rpax
1
Itu jawaban yang bagus, tuan.
Mert Gülsoy
"Jika Anda mendapatkan 5 V dengan USB yang terhubung, tetapi tidak dengan catu daya maka regulator tegangan (ditandai pada foto) mungkin rusak. Atau, mungkin catu daya telah gagal. Coba catu daya yang berbeda untuk mengkonfirmasi yang mana itu . " - mengapa ini mencegah Anda dari mengunggah sketsa?
user2813274
Anda benar, itu tidak benar. Namun daftar periksa itu seharusnya menjadi daftar periksa umum untuk kegagalan. Dalam hal ini akan lebih seperti "Saya dapat mengunggah sketsa, tetapi ketika digunakan di lapangan, dengan catu daya (kutil dinding) itu tidak berfungsi".
Nick Gammon
1
Saya baru-baru punya masalah dengan driver FTDI baru yang "bata" Cina "FTDI kompatibel" (baik Anda bisa mengatakan imitasi) chip. Mereka menempatkan PID perangkat ke 0x0000, yang akan membuat driver tidak valid. Anda dapat memilih untuk mengubah PID kembali dengan alat M_PROG di FTDI atau mengubah driver (dan mengatur windows untuk mengizinkan driver yang tidak terverifikasi).
Paul
14

Paling tidak - karena saya menganggap Anda mengunggah sketsa Anda melalui avrdude - tolong beri informasi lebih lanjut tentang kegagalan unggahan (misalnya, keluaran pengunggah sketsa) sehingga orang-orang di sini dapat membantu Anda dengan lebih baik.

Selain jawaban hebat Nick Gammon, silakan cari tanda seru di sketsa Anda. Jika sketsa Anda berisi string dengan lebih dari atau sama dengan 3 tanda seru, unggahan akan gagal, karena Arduino Bootloader versi lama akan mengartikan tanda seru ini sebagai fungsi lain dan unggahan akan berhenti.

Contoh untuk menghentikan unggahan:

char* test = "This will stop the upload!!!";

Lihat masalah Kode Google .

mw
sumber
1
Poin bagus. Ini berlaku terutama untuk Mega2560, tapi saya akui saya telah menghilangkannya. :)
Nick Gammon
1
Menambahkan bagian untuk menangani masalah ini.
Nick Gammon
2

Saya telah memasang 2x ATMega328P di papan Arduino Uno saya karena statis (saya pikir).

Statis tampaknya telah membunuh pin TX dan karenanya program tidak dapat diunduh menggunakan kabel USB.

Solusi termudah adalah mengganti mikrokontroler. Anda dapat membeli DIP ATMega328P baru yang diprogram dengan Arduino bootloader ( seperti yang ini dari Adafruit ) dan Anda siap untuk pergi lagi.

Atau, Anda masih dapat memprogram ATMega328P dengan menggunakan programmer AVRISPmkII. Ketika Anda melakukannya, semua kecuali Tx pin berfungsi dengan baik.

sa_leinad
sumber