Hiện tượng là Arduino Due khi bật nguồn lên chương trình không tự chạy mà phải nhấn nút reset hoặc tắt nguồn và bật lại ngay thì chương trình mới chạy. Nguyên nhân thì có thể là con Atmega16U2 gửi tín hiệu reset cho chip SAM quá nhanh khi đó nguồn cấp cho SAM chưa ổn định nên SAM không reset được.
Đây là một lỗi rất khó chịu vì không thể mỗi lần cấp nguồn phải thêm thao tác reset cho board mạch. Một số board Due được sản xuất sau này thì đã khắc phục hiện tượng trên, tuy nhiên nếu bạn có board Due gặp hiện tượng như vậy thì sau đây là cách khắc phục:
Cách 1: Hàn điện trở 10k (điện trở dán SMD 0603) giữa hai chân của con Fet A1SHB gần các pin ICSP của con Atmega16u2. Tuy nhiên cách này đòi hỏi bạn phải có công lực hàn board cực mạnh hoặc là bạn dùng điện trở loại xuyên lỗ rồi tìm đường mạch chỗ nào thích hợp đảm bảo nối hai chân của Fet để hàn vào.
Cách 2: Cập nhật firmware cho con chip Atmega16U2. Mình dùng USBasp và cách làm như sau:
- Kết nối USBasp vào ICSP của chip Atmega16U2, USBasp để cấp nguồn ở mức 5V. Sau đó cắm USBasp vào cổng usb của máy tính. Lưu ý khi dùng mạch USBasp thì nhớ không cấp nguồn ngoài hoặc cấp nguồn qua cổng usb trên mạch.
- Mở file explorer trên windows tìm đến thư mục cài đặt arduino copy file arduino-1.8.13\hardware\tools\avr\etc\avrdude.conf vào thư mục arduino-1.8.13\hardware\tools\avr\bin\avrdude.conf
- Copy file này vào thư mục arduino-1.8.13\hardware\tools\avr\bin\arduino_due_usbserial-prod-firmware-2013-02-05_resetfix.hex
- Mở Command Prompt lên (bằng cách vào Start trên windows, gõ cmd để mở Command Prompt) chuyển đến thư mục bin của arduino bằng cách gõ "cd thư_mục_cần_chuyển_đến", nếu ổ đĩa chứa arduino khác với ổ đĩa mặc định (C:) thì bạn cần chuyển ổ đĩa sang ổ đĩa của arduino trước bằng cách gõ ví dụ E: <enter>. Như trường hợp của mình thì chỉ cần gõ "cd C:\Minh\Embedded\arduino-1.8.13\hardware\tools\avr\bin"
- Backup firmware gốc trên con 16u2 để phòng trường hợp có vấn đề gì thì restore lại cái cũ bằng cách chạy câu lệnh "avrdude -p m16u2 -P usb -c usbasp -U flash:r:arduino_due_16u2_original_ef4_hd9_lff.hex:i"
- Cập nhật firmware mới để sửa lỗi bật nguồn mà chương trình không chạy bằng câu lệnh "avrdude -p m16u2 -P usb -c usbasp -U flash:w:arduino_due_usbserial-prod-firmware-2013-02-05_resetfix.hex:i"
- Rút USBasp ra khỏi board mạch, cấp nguồn lại cho Arduino Due bạn sẽ thấy chương trình trong chip SAM được chạy ngon lành ngay sau khi cắm điện vào.
Tham khảo
https://forum.arduino.cc/index.php?topic=167492#subject_1373055
https://forum.arduino.cc/index.php?topic=256771.75#subject_4157695
Chúc bạn thành công, nếu gặp vấn đề gì hoặc nếu trường hợp của bạn có cách khắc phục khác thì hãy comment bên dưới nhé, biết đâu sẽ hữu ích cho nhiều người đấy.
Comments
Post a Comment