Saya tidak pernah berurusan dengan bagian yang cacat selat dari digikey, tetapi 3 Atmel ATmega164A baru yang saya terima menunjukkan perilaku yang sangat aneh.
Saya mempersempitnya karena ada hubungannya dengan jam dan ternyata sinyal jam yang dihasilkan dari osilator internal yang seharusnya "dikalibrasi pabrik" itu bergerak-gerak di antara 650-700 kHz, bukannya solid 1 MHz seperti seharusnya. Saya bisa menulis ke byte kalibrasi untuk mendapatkan ini sangat dekat dengan 1 MHz (masih dengan beberapa jitter) dan kebanyakan hal bekerja tetapi UART tidak berperilaku baik, mereka tampaknya menghasilkan aliran terus menerus pulsa pendek tidak peduli apa yang Anda minta mereka lakukan.
Saya sudah berurusan dengan versi daya rendah mikrokontroler ini sebelumnya (164P) dengan nol masalah dan memutuskan untuk menjatuhkannya dan memeriksa output jam pada itu, dan 1 MHz yang solid tanpa jitter. Saya condong ke kesimpulan bahwa chip 164A ini rusak, tetapi apakah akan ada tes lain yang bisa saya coba untuk mengonfirmasinya?
Sunting: Hanya berpikir saya akan menggambarkan proses yang saya gunakan untuk mengukur jam. Saya telah mengaktifkan bit sekering keluaran jam dan mengukur pin yang sesuai dengan sampling penganalisa logika pada tingkat yang sangat tinggi. Saya punya program yang menulis ke register kalibrasi OSCCAL
dan saya sudah bisa coba-coba sampai 1 MHz.
Sunting # 2: Setelah penyelidikan lebih lanjut, tampak bahwa mikrokontroler mulai bekerja setelah ukuran program tertentuambang. Sebuah proyek tanpa tulang dengan file sumber tunggal yang mem-flash sebuah LED tampaknya baik-baik saja, tetapi mengkompilasi dan menghubungkan di salah satu file saya yang lain (katakanlah perpustakaan UART atau apa pun) tanpa membuat panggilan fungsi ke metode-metode tersebut menyebabkan mikrokontroler berperilaku perilaku yang dijelaskan di atas. Koneksi daya baik dan decoupling yang tepat telah dilakukan. Saya tidak punya waktu untuk men-debug ini lebih jauh saat ini, jadi kami telah melanjutkan dengan versi daya rendah sebagai gantinya. Saya tidak yakin di mana tepatnya masalahnya bisa 1) 164A dan 164P tidak kompatibel kode 2) Prosedur pemrograman berbeda untuk kedua UC ini 3) Unit rusak. Saya yakin dengan desain papan kami dan akan menyingkirkan masalah daya. Sayangnya, saya tidak dapat memilih jawaban yang benar sehingga saya akan meninggalkan pertanyaan ini - mungkin saya Aku akan kembali ke masalah lagi di masa depan. Terima kasih kepada semua orang yang memberikan komentar atau jawaban yang berwawasan luas, mereka mungkin berguna bagi orang lain dengan masalah UC di luar kotak.
Jawaban:
Sangat jarang mengalami kegagalan seperti itu. Anda mungkin berharap melihat lebih banyak noise pada pin, atau membuat pin tersebut benar-benar tidak berfungsi. Tetapi untuk memilikinya "agak berhasil, tetapi tidak dengan cara yang bermanfaat" jarang terjadi. Saya menduga ada masalah desain yang menyebabkan masalah, dan ada hubungannya dengan perbedaan antara 164A dan 164P. Karena jitter tinggi, saya akan melihat hal-hal yang berhubungan dengan kekuatan. Apakah semua pin power / gnd terhubung? Apakah pin I / O digerakkan atau ditarik tinggi atau rendah? Dll
Namun masih ada kemungkinan bagian-bagiannya buruk. Jarang, tetapi tidak pernah terdengar. Satu-satunya cara nyata untuk mengetahui adalah mendapatkan beberapa bagian lagi, dari pemasok yang berbeda, dan mencobanya. Jika mereka bekerja, maka Anda perlu menyelidiki lebih lanjut dan melihat apakah Anda membunuh mereka dalam penanganan / penyolderan atau apakah mereka benar-benar berasal dari Digikey.
sumber
Saya pernah memiliki masalah yang sangat mirip dengan bagian Microchip awal. Kami mengacaukan pemrograman ICSP dan menemukan cara untuk menghapus trim osilator, menyebabkan kesalahan besar dalam keakuratan jam internal. Pastikan bahwa perlengkapan pemrograman dan / atau alat pemrograman Anda terhubung dengan benar dan digunakan dengan benar.
Tidak ada cara mudah untuk memverifikasi keakuratan osilator tanpa memprogram bagian-bagiannya, jadi saya hanya akan menulis program port-toggle yang sepele (program yang tidak melakukan apa-apa selain menggoyangkan garis I / O) dan meminta orang lain memprogram bagian, lebih disukai dengan perangkat keras pemrograman yang berbeda. Setelah Anda memverifikasi goyangan, Anda dapat merefleksikan dengan kode Anda sendiri dan melihat apakah masalah berlanjut.
sumber