Skip to main content

Arduino Due không chạy chương trình khi cắm nguồn

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.

Postition to add a 10k resistor on Arduino Due

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.

USBasp Arduino Due 16u2 ICSP

USBasp Arduino Due 16u2 ICSP

- 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

Arduino bin folder

- 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"

Backup arduino due 16u2 firmware
 

- 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"

Arduino due reset fix
 

- 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

Popular posts from this blog

Arduino Nano nạp code không được

Tình trạng Khi bạn nạp code cho arduino nano, IDE sẽ hiển thị là Uploading... rất lâu sau đó báo lỗi: avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x5c avrdude: stk500_recv(): programmer is not responding avrdude: s...

STM32F103C8T6 lỗi không nạp được code

Tình trạng Sau khi nạp code lần đầu, STM32 ST-Link Utility sẽ không kết nối được nữa và hiện lên thông báo lỗi: Cannot connect to target! Please select "Connect Under Reset" mode from Target -> Settings menu and try again. If you are trying to connect to low frequency application, please select a lower SWD Frequency mode from Target -> Settings menu. Tình trạng này có thể xảy ra với tất cả các dòng F1 và cách khắc phục cũng tương tự nhau. Khắc phục 1. Trong STM32CubeMX cần phải chọn lại trong SYS > Debug là Serial Wire sau đó generate lại code. 2. Board arm kết nối ST-Link Utility không được, lúc đó hãy nhấn giữ nút Reset trên board rồi nhấn nút Connect trên ST-Link Utility, chờ khoảng 3-5 giây sau đó thả nút Reset. Có thể bạn sẽ phải làm vài lần như vậy mới có được 1 lần kết nối thành công. 3. Sau khi kết nối thành công, nạp code mới có config Debug là Serial Wire ở trên. Khi đó board sẽ kết nối bình thường cho các lần tiếp theo Mạch nạp ST-LINK có thể m...

Dùng mạch nạp USBasp để nạp code cho Arduino

Arduino có thể dễ dàng nạp code và chạy chương trình chỉ với thao tác đơn giản cắm board mạch vào máy tính chọn cổng COM và nhấn nút Upload. Để làm được như vậy, bên trong chip vi xử lý được nạp sẵn một đoạn mã lệnh gọi là boot loader. Boot loader luôn luôn được chạy lên đầu tiên, sau đó mới chuyển quyền điều khiển lại cho phần mã của người dùng nạp vào.   Như vậy để các Chip Arduino có thể làm việc được với Arduino IDE thông qua giao tiếp USB-COM thì trong vi điều khiển phải được nạp sẵn boot loader. Các board mạch Arduino bán sẵn trên thị trường như Arduino Uno, Arduino Nano, Arduino Mega 2560,... đều được nạp sẵn boot loader. Như vậy ưu điểm của boot loader là để người dùng dễ dàng tiếp cận, thử nghiệm, và làm ra được sản phẩm nhanh chóng, dễ dàng. Nhưng nhược điểm là boot loader luôn luôn cần một khoảng thời gian từ 1.6s đến 2s để khởi động. Nếu bạn không muốn mất 1.6 - 2s đầu tiên mà muốn chương trình chạy gần như ngay lập tức khi cấp nguồn hoặc reset thì dùng mạch nạp USBasp ...