Papan Arduino khusus berbunyi bip dan proses membeku saat saya mengunggah sketsa ke sana. Mengapa?

8

Hal aneh terjadi pada papan Arduino mandiri yang saya desain dan bangun. Papan (yang skemanya di bawah) memiliki fitur berikut:

  1. Ini memiliki ATmega328P dengan regulator tegangan 5V dan sirkuit biasa ketika diatur sebagai pengontrol mandiri.
  2. Ini mengontrol papan skor dengan beberapa digit 7-display yang terhubung melalui konektor di sebelah kanan (JP1 hingga JP12).
  3. Ini memiliki tombol kursor diterjemahkan menggunakan tangga tegangan melalui ANALOG_0 (A0).
  4. Ini memiliki Jam Real Time untuk menjaga waktu ketika dimatikan.
  5. Ini memiliki modul penerima RF.
  6. Memiliki header UART (JP17) sehingga saya dapat memprogram board menggunakan port serial.
  7. Memiliki speaker yang terpasang pada pin digital 3 (D3).

Skema pengontrol

Saya mengunggah sketsa ke sana menggunakan adaptor RS232-to-TTL yang saya juga buat (skema juga di bawah) dan kabel Serial-to-USB. Saat memprogramnya, papan berperilaku seperti papan Severino .

masukkan deskripsi gambar di sini

Yang aneh adalah, ketika saya mengunggah sketsa, prosesnya dijeda di tengah dan kemudian pembicara mulai berbunyi bip terus-menerus. Itu dijeda dengan pesan avrdude berikut:

avrdude: Versi 5.11, disusun pada 2 Sep 2011 di 19:38:36 Hak cipta (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Hak cipta (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"

     Using Port                    : \\.\COM1
     Using Programmer              : arduino
     Overriding Baud Rate          : 115200

Ketika saya menekan reset di papan tulis, avrdude terus menampilkan pesan-pesannya (seperti di bawah), bunyi bip berhenti, unggahan berlanjut dan sketsa diunggah dengan sukses ke papan tulis.

avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
... messages and upload continue and completes successfully.

Saya tidak memiliki sisa pesan yang berguna di sini, tetapi saya harap Anda mendapatkan idenya.

Jadi, pertanyaan saya adalah:

  1. Apa yang membuat proses pengunggahan terhenti?
  2. Mengapa bel berbunyi saat proses jeda?
Ricardo
sumber
1
Pada preferensi IDE, nyalakan Verbose untuk diunggah. Log ini harus memberikan beberapa wawasan, atau lebih banyak petunjuk.
mpflaga
1
Pertanyaan bodoh: Sudahkah Anda memprogram ATmega328p dengan bootloader?
Connor Wolf
1
"berfungsi sempurna dalam UNO" -Itu info yang berguna. Jadi papan Anda harus memiliki soket. Jika demikian - Anda dapat menentukan sumber lebih khusus dengan eksperimen cepat. Untuk setiap pin IO, bengkokkan pin keluar, karena tidak melakukan kontak. Mengambang! Saat Anda memasukkan IC ke soket Anda. Akhirnya, dengan semua pin yang mengambang sirkuit Anda akan keluar dari pertanyaan. Dan karena beberapa titik antara penundaan / bip harus berhenti. Dan laporkan kembali.
mpflaga
1
@ jfpoilpret jika pembicara sebenarnya adalah buzzer (piezo), maka tidak ada induksi, maka tidak diperlukan dioda. Lupakan komentar asli saya.
jfpoilpret
1
Salah satu teman saya yang melakukan banyak elektronik di masa mudanya pernah mengatakan kepada saya: "jika tidak bekerja seperti yang Anda harapkan, tambahkan kapasitor decoupling". Dalam banyak kesempatan, saya telah mengikuti saran ini dengan sangat sukses! Dalam skema Anda, tidak jelas bagi saya, di mana Anda dapat menambahkan kapasitas decoupling. Sudahkah Anda mencoba // dengan bel? Anda juga dapat mencoba 2 (satu untuk freqs rendah, satu untuk freqs tinggi): satu elektrolitik setidaknya 1uF, satu keramik 100nF. Paling buruk, itu tidak akan berpengaruh :-)
jfpoilpret

Jawaban:

3

Apa yang membuat proses pengunggahan terhenti?

Nah, mengingat semua komentar yang dibuat di bawah pertanyaan Anda, ini pasti yang rumit. Anda mungkin ingin mencoba untuk menambahkan kapasitor decoupling seperti yang disarankan oleh @jfpoilpret, meskipun skema Anda terlihat baik-baik saja bagi saya ... (mungkin bertanya review tentang itu pada EE SE ).

Saya juga menyarankan Anda untuk menyalin avrdudeperintah dari output Arduino IDE (Anda akan menemukannya di bagian atas), dan menjalankannya di shell perintah dengan bitrate lebih rendah:

avrdude -v -v -v -v -C "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf" -P COM1 -patmega328 -U… -B3 -b115200

semakin tinggi -Bnilainya semakin rendah bitrate Anda. dan -bbaudrate yang tepat untuk bootloader Anda (apakah Anda yakin ini adalah 115200? ini lebih umum untuk dilihat 57600).

Apakah Anda juga mengatur sekering dengan benar? Anda mungkin juga ingin memeriksa nilai-nilai sekering untuk melihat apakah jam sudah diatur dengan benar:

avrdude -U lfuse:r:-:i -U hfuse:r:-:i -U efuse:r:-:i

yang akan menampilkan nilai-nilai sekering. Kemudian untuk membuat nilai dapat dibaca, letakkan nilai di bagian bawah formulir di situs kalkulator sekering , setelah memilih Atmega328PMCU dari daftar dropdown.

Periksa kembali bahwa:

  • Anda memiliki ukuran yang cukup untuk bootloader (biasanya semakin Anda memberikannya semakin baik);
  • Anda telah dengan benar mengatur konfigurasi kristal untuk desain Anda (yang mungkin tidak kompatibel dengan pengaturan Uno default seperti pengaturan oleh Arduino IDE), memeriksa apakah Anda benar mengatur kristal eksternal pada 16MHz ...

Mengapa bel berbunyi saat proses jeda?

Itu karena ketika prosesor tidak memiliki pengaturan output, nilai-nilai dalam register berada dalam keadaan yang tidak ditentukan dan tidak dapat diprediksi. Yang berarti bahwa biasanya ia menyimpan nilai terakhir sebelum reset, atau mengubah keadaan karena keanehan elektrostatik, atau memberikan beberapa output PWM aneh karena pengaruh jam di dekatnya.

Jadi pada dasarnya, ada sesuatu yang salah terjadi ketika Anda mengunggah kode Anda dan hal yang salah itu memiliki efek tidak langsung pada audio. Saya tidak akan terlalu khawatir tentang hal itu, tetapi lebih banyak tentang penyebab jeda.

Sayangnya, saya tidak punya jawaban langsung untuk Anda, tetapi paling tidak beberapa jalur Anda harus menyelidiki lebih lanjut. HTH

zmo
sumber
+1 Terima kasih atas petunjuknya! Sangat berguna. Saya akan mencoba semuanya dan melaporkan kembali dalam beberapa hari.
Ricardo
Hanya ingin memberi tahu Anda bahwa saya telah memperbaiki masalahnya. Lihat jawaban saya untuk pertanyaan ini. Bagaimanapun, terima kasih!
Ricardo
3

Saya akhirnya menemukan apa yang menyebabkan masalah: sinyal reset dari pin 4 (DTR - Data Terminal Ready) pada konektor DB9-Female melonjak hingga 10V sebelum pergi ke 0V dan memicu pemrograman tegangan tinggi pada ATmega. Di bawah ini adalah bidikan lingkup yang menunjukkan situasi:

Cakupan bidikan menunjukkan lonjakan tegangan hingga 10V

Jejak kuning adalah DTRsinyal sedangkan jejak hijau adalah RESETsinyal pada ATmega.

Menurut Atmel's Atmel AVR042: Catatan aplikasi Pertimbangan Desain Perangkat Keras AVR , seseorang harus menambahkan dioda ESD antara ATmega RESETdan Vccuntuk mencegah sinyal reset memicu mode pemrograman tegangan tinggi, seperti:

Koneksi pin RESET yang disarankan untuk ATmegas

Setelah menambahkan dioda sinyal kecil (1N4148) seperti catatan aplikasi yang disarankan, saya memperbaiki masalahnya. Lihat di bawah lingkup pengambilan yang diambil setelah dioda ditambahkan.

Tembakan lingkup setelah memperbaiki papan

Sekarang puncak 10V hilang.

Itu yang sulit !! Tetapi saya tidak akan pernah menemukan apa yang salah tanpa penelitian dan alat yang tepat. Uang pada ruang lingkup adalah uang yang dihabiskan dengan baik !!

Ricardo
sumber
1
Ini terjadi karena garis setel ulang Anda tidak memiliki jenis penerjemah level yang diterapkan pada baris data serial. Sebagian besar menggunakan penerjemah level ic dan menjalankan reset melalui saluran itu.
Chris Stratton
@ Chris - Ya, saya ingat Anda mengatakan kepada saya untuk menggunakan konverter MAX232 ke-2 untuk memperbaikinya. Saya akan melihat lagi dan melihat apakah saya dapat memperbaiki desain itu. Terima kasih!!
Ricardo
1

Saya tidak yakin tetapi masalahnya mungkin juga terkait dengan fitur reset-otomatis papan konverter.

Saya menyalin desain papan konverter dari Arduino Severino dan sesuai dengan manualnya , komunikasi serial harus diatur ke 19.200 bps agar fitur pengaturan ulang otomatis berfungsi.

Pastikan kecepatan COM Port komputer diatur ke 19200bps jika tidak reset otomatis tidak akan berfungsi dengan baik.

Yah, saya menggunakan 115.200, jadi itu pasti masalah.

Ricardo
sumber