Sửa chữa Robot dân dụng
Sửa chữa Robot đồ chơi công nghệ

Khôi phục board Mega, Uno cho máy in 3D

Đăng lúc: Thứ hai - 31/10/2016 09:27 - Người đăng bài viết: SuperG
Khôi mục board Mega, Uno cho máy in 3D

Khôi mục board Mega, Uno cho máy in 3D

sự phổ biến của Arduino đã kích thích, khơi nguồn cảm hứng sáng tạo cho rất nhiều người trên thế giới, Marlin firmware hay dự án Reprap có thể nói là sản phẩm của cộng đồng Arduino sáng tạo ra nhằm thỏa mãn nhu cầu in 3D những người yêu thích khám phá. Trong họ Arduino thì Mega 2560 cung cấp số lượng các cổng I/O nhiều nhất nên bo mạch này được chọn để phát triển.

 

Bo mạch Arduino Mega 2560

Bo mạch Arduino Mega 2560

1) Cổng kết nối USB (dùng để upload rom, nạp chương trình cho bo mạch)

2) Cổng tín hiệu (in/out) số  (digital) – trong Marlin các cổng này điều khiển tín hiệu cấp cho động cơ bước

3) Cổng tín hiệu (in/out) tương tự (analog) – Trong Marlin các cổng này nhận tín hiệu từ cảm biến về

4) Cổng nguồn vào và ra (5-12V)

5) Cổng cấp nguồn nuôi chính cho bo mạch

Cấu hình phần cứng của bo mạch Arduino Mega 2560

Vi xử lý ATmega2560
Điện thế hoạt động vi xử lý 5V
Điện áp vào khuyến cáo cấp cho bo mạch 7-12V
Giới hạn điện áp vào 6-20V
Số lượng cổng số 54 (of which 15 provide PWM output)
Số lượng cổng tương tự 16
điện áp trên các cổng (DC) 20 mA
điện áp trên cổng 3.3V (DC) 50 mA
Bộ nhớ Flash (lưu chương trình) 256 KB of which 8 KB used by bootloader
SRAM 8 KB
EEPROM 4 KB
Xung nhân 16 MHz
Chiều dài 101.52 mm
Chiều rộng 53.3 mm
trọng lượng 37 g

 

 

Nạp firmware Atmega16U2 trên Uno hoặc Mega

Tải phần mềm FLIP

Các bạn download tại đây:

http://www.atmel.com/tools/FLIP.aspx...

FLIP hỗ trợ việc lập trình các thiết bị flash qua các giao thức USB, RS232 hay CAN.

Lưu ý: cài rất dễ nên mình ko đi chi tiết ! Sau khi cài xong thì ta dc cái shortcut thế này

Kết nối arduino với máy tính

Sau khi kết nối bạn mở Device Manager lên: 

Vẫn để cửa sổ Device Manager lên như vầy cho tiện kiểm soát

Tiếp theo là phần quan trọng đây, lúc nãy hẳn là các bạn đã kết nối arduino với máy tính nên hiện trên Device Manager , phần Ports sẽ hiện lên Arduino Uno (COM3) (có thể là COM khác tùy máy).

Bạn tìm 1 sợi dây dẫn để nối 2 chân dc khoanh tròn lại với nhau, sau khi nối xong thì các bạn cũng rút ra luôn , ko cần làm nhanh đâu , lúc này cửa sổ Device Manager sẽ reset và xuất hiện thế này. Làm như vậy để reset con atmega16u2 vào chế độ bootloader.

Khi thấy Unknown device, các bạn ko việc gì phải Xoắn mà bình tĩnh tiếp tục thao tác sau:

Chuột phải vào nó và chọn update như trên hình , nó sẽ xuất hiện khung cửa sổ mới:

Bạn chọn như trên hình, nó sẽ lại tiếp tục xuất hiện một cửa sổ mới:

Các bạn thấy khu vực dc khoanh đỏ chứ, hãy nhấp vào Browse...  và theo đường dẫn mình đưa để đi tới file cài đặt phần mềm lúc nãy mà chúng ta đã tải về và cài đặt :

C:\Program Files (x86)\Atmel\Flip 3.4.7

Sau đó nhấn Next và đợi giây lát, nếu nó yêu cầu install thêm gì đó thì cứ install, sau khi đã hoàn tất Device Manager lại tiếp tục reset và xuất hiện biểu tượng này.

Nạp firmwave mới cho Atmega16U2

Mở phần mềm Flip 3.4.7 lên

Nó sẽ hiện ra thế này:   

Click vào vị trí mũi tên như trong hình: 

Sau đó chọn con chip Atmega16U2 và nhấp Ok !  

Tiếp tục nhấp vào biểu tượng kế bên con chip lúc nãy:

Tiếp tục chọn USB và nó sẽ hiện một thông báo nhỏ như hình dưới và các bạn chọn Open:

Bây giớ các bạn cần tải firmwave HID cho con Atmega16U2 Link tải đây: 

https://goo.gl/eO8js8... (mirror)

Download về và giải nén nó ra, bạn sẽ dc một foder gồm 1 foder và 2 tệp tin có đuôi hex .

Quay trở lại với phần mềm hồi nãy các bạn chọn File => Load HEX File ... rồi tìm đến thư mục giải nén lúc nãy và chọn như hình dưới 

Vậy là đã chuẩn bị xong, giờ bắt đầu nạp:

Nạp xong thì rút board uno ra khỏi máy tính và cắm lại vậy là xong.

 

Đưa Atmega16u2 về trạng thái cũ.

Rút arduino ra khỏi máy tính sau đó nối dây vào 2 chân khoanh tròn như hình dưới : đừng rút dây vội nhé

Bây giờ kết nối với máy tính sau đó rút dây ra và cửa sổ Device Manager sẽ xuất hiện như sau:

Lúc này mở Flip 3.4.7 lên làm lại thao tác nạp như lúc nãy nhưng lúc Load HEX File. Nhưng bạn chọn đường dẫn đến thư mục cài đặt Arduino :  arduino-1.6.7\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial 

Chọn:

Arduino-usbserial-atmega16u2-Uno-Rev3.hex

Nạp vào rồi rút Arduino ra khỏi máy tính và cắm lại và em nó lại là arduino của ngày hôm qua devil

Hoodloader2 cũng có một file hex để các bạn thay đổi firmwave thành chuẩn HID.

 

Hoodloader2 

Trước đây, bạn đã từng đặt câu hỏi, cái con Atmega16U2 trên mạch Arduino Uno / Mega2560 của mình làm nhiệm vụ gì chưa? Nếu bạn đã từng đọc bài giới thiệu về Arduino Uno hay Arduino Mega 2560 thì có thể sẽ biết con Atmega16U2 đó sẽ làm nhiệm vụ USB-to-Serial, hay nói cách khác là tạo cổng COM ảo từ đó lập trình cho con vi điều khiển Atmega328p (UNO) hoặc Atmega2560 (Mega 2560). Nhưng khi mình tra datasheet con Atmega16U2 thì thấy rằng, chúng ta đang có một sự lãng phí lớn (12KB flash, 512byte ram) nhưng chỉ nạp bootloader DFU để biến nó thành một mạch USB-to-Serial. Đem vấn đề này đi hỏi, thì mình đã được khai sáng bằng một bootloader với cho con Atmega16U2 này, nó có tên là Hoodloader2 và nó sẽ giúp ta biến con Atmega16U2 này thành một mạch Arduino hoàn chỉnh! Nói cách khác, với Hoodloader2, ta có thể làm việc với 2 con vi điều khiển trên mạch Arduino Uno / Mega2560.

 

Giải thích hình trên:

  • Atmega328 có firmware là Optiboot được kết nối với các phần như: 14 chân digital, 6 chân analog, 1 nút reset, led 13 và cổng SPI hardware ở cuối bord
  • Atmega16u2 có firmware là Hoodloader2 (tương thích với môi trường Arduino), đảm nhận giao tiếp với PC qua cổng USB, đảm nhận giao tiếp với Atmega328 qua cổng Serial hardware, có 7 chân digital với 3 chân được nối trong khối SPI hardware bên góc trên.

Hoodloader2 là gì?

Hoodloader2 là một bootloader với khả năng cho lập trình chính bản thân mình và hỗ trợ chức năng USB-to-Serial siêu nhanh (mức baudrate có thể lên tới 2 triệu). Với Hoodloader2, bạn có thể tái lập trình con Atmega16U2 của mình trên các mạch Arduino Uno R3 / Arduino Mega 2560 với một sketch Arduino bình thường heart. Bạn có thể sử dụng 7 chân digitlal của Atmega16U2 (trong đó có 1 chân hỗ trợ PWM) để lập trình với bộ nhớ flash lên tới 12KB và RAM tới 512 byte.

Với mình, như vậy là quá tuyệt vời. Với 12KB, 512 byte ram, là một môi trường rộng rãi để lập trình nhúng.

HACK NÃO

Với việc hỗ trợ chức năng USB-to-Serial, thì bạn có thể lập trình cho con này như là một mạch Arduino Leonardo. Nghĩa là bạn có thẻ biến con Arduino Mega 2560 / Uno R3 trở thành một con chuột, bàn phím hy tay cầm game play station với thư viện HID!

Điều đặc biệt nhất là từ nay bạn có thể lập trình cho 2 con vi điều khiển trên Arduino Mega 2560 hay con Arduino Uno R3 của mình. Thật tuyệt vời!

Burn hoodloader2 cho Atmega16U2

1. Yêu cầu trước khi bắt đầu

  • Bạn cần cài đặt bản Arduino IDE mới nhất, đó là bản Arduino IDE 1.6.7, có thể tìm và tải về tại mục Tải về ở góc trên màn hình. Vì sao phải cài như vậy? Theo như trang wiki thông cáo là Arduino IDE 1.6.6 trở lên hỗ trợ cập nhập các dòng ic có đuôi là u2 (atmega16u2).
  • Chuẩn bị 1 con Arduino Uno R3 hoặc Arduino Mega2560 Rút hết các dây cắm trên Arduino Uno R3 hoặc Mega 2560 của bạn.
  • Kiểm tra kỹ con vi điều khiển trên mạch Arduino của bạn là con nào? ATmega16U2 hay ATmega8U2 hay ATmega32u4 hay at90usb82 hay at90usb162. Bài viết phía dưới mình chỉ hướng dẫn cho ATmega16u2, các bạn dùng loại khác, vui lòng bình luận phía dưới mình sẽ cập nhập / hướng dẫn thêm, vì mình thấy ở Việt Nam chỉ dùng ATmega16U2 mà thôi, vì vậy mình không muốn HACK NÃO các bạn.
  • Cài Teensy Driver để nhận driver sau này.
  • Mua một chai nước để bình tĩnh và cảm nhận sự thú vị với 2 con vi điều khiển.

Cài đặt định nghĩa board Hoodloader cho Arduino IDE 1.6.4+

Bước 1

Mở Preferences của Arduino IDE lên.

Bước 2

Thêm đường dẫn sau vào mục Additional Boards Manager URLs rồi nhấn OK như hình.

https://raw.githubusercontent.com/NicoHood/HoodLoader2/master/package_NicoHood_HoodLoader2_index.json

Bước 3

Mở Boards Manager

Bước 4

Cài HoodLoader2

2. Đối với Arduino Uno R3

a. Nạp code để nạp bootloader cho ATmega16U2 từ Atmega328p

Link file: https://codebender.cc/sketch:246834?referrer=hack%20n%C3%A3o

 

LƯU Ý

Khi nạp xong, nó báo Done uploading, các bạn gỡ dây USB nối với Arduino ra khỏi máy tính nhé.

b. Burn Bootloader2 cho Atmega16U2

Bạn phải rút dây USB nối với Arduino ra nhé!

Nối dây như hình

Con tụ 100nF có thể thay thế bởi các loại tụ cao có điện dung cao hơn (Có thể là tụ hóa hoặc tụ gốm), nó dùng để ngăn chặn việc tự động reset của board!

Chân 7, 8 các bạn không cần nối dây


  1. Đin tr 100nF:
    
  2. 328/2560 RESET - GND
  3.  
  4. Pin connections:
  5. 328/2560 - 16u2
  6. MOSI - MOSI
  7. MISO - MISO
  8. SCK - SCK
  9. PIN 10 - 16u2 RESET

Sau khi nối dây xong, Atmega328 sẽ tự động nạp Bootloader cho Atmega16u2 (tác giả NicoHood đã thiết kế như vậy).

Khi gắn dây USB vào Arduino, đèn 13 sẽ blink trong 10 giây với tốc độ chậm (delay 1000ms). Sau đó, atmega328 sẽ tiến hành nạp bootloader cho atmega16u2, lúc này đèn led 13 sẽ nháy nhanh hơn (mỗi 100ms). Bạn đợi tầm 30 giây sau khi nó bắt đầu nháy là ok, bạn đã nạp được Hoodloader2.

Tuy nhiên, nếu nó lại nháy chậm (blink) led 13 trong 10 giây rồi lại nháy thì quá trình burn bootloader đã không thành công! Hãy comment và quay video dưới mình bình luận quá trình làm để mình hướng dẫn thêm nhé.

Thường thì các bạn nạp không được là do dây breadboard bị đứt, nối dây sai!

Đối với Arduino Mega 2560

a. Nạp code để nạp bootloader cho ATmega16U2 từ Atmega1280

 

b. Burn Bootloader2 cho Atmega16U2

Các bạn thấy đấy, mạch này cũng không khác gì với Arduino Uno R3, vì vậy, kéo lên trên coi cách nối dây rồi thực hiện tương tự với mạch Arduino Uno R3 nhé.

Kiểm tra Hoodloader đã được nạp vào hay chưa?

Việt Nam dùng Windows là chủ yếu còn MAC / Linux ít dùng nên mình sẽ không hướng dẫn, các bạn nào dùng 2 hệ điều hành kia mà không biết thì hãy comment nhé!

Các bạn mở file Devices and Printers (vào phần tìm kiếm của windows và paste vào là được ngay) của Windows lên và sẽ thấy hoặc dán đường dẫn dưới vào File Explorer (My Computer cho các bạn nào không biết kiss).

Control Panel\Hardware and Sound\Devices and Printers

Thấy được cái HoodLoader2 là được heart

Một phát nữa là chắc ăn

Nạp code blink trên Atmega16U2

Một khi bạn đã burn thành công HoodLoader2 lên con ATmega16u2 thì mạch Arduino Uno / Mega2560 của bạn sẽ có 2 con vi điều khiển (microcontroller unit - MCU), để thuận tiện, tác giả NicoHood đã gọi con MCU Atmega16U2 là Arduino USB MCU, MCU Atmega328p / MCU ATmega2560 là Arduino USB IO.

Trong phần này, mình sẽ hướng dẫn các bạn upload code blink lên cả 2 con MCU và hướng dẫn về cách sử dụng 7 pin của Arduino USB MCU.

Nạp code blink lên Arduino USB IO

Các bạn chọn board là HoodLoader2 Uno là được

Sau đó, nạp đoạn code blink như bình thường ở bài viết này.

Sơ đồ chân của con Arduino USB MCU

Sau đây là sơ đồ chân của mạch Arduino Uno R3 và Atmega16u2.

Hình trên Mega 2560 của con Atmega16u2 cũng tương tự hình này nhé.

Pinout của Atmega16u2 có nền màu vàng. 4 header màu trắng chưa được hàn, các bạn xem những hình dưới nhé.

Board Arduino Uno R3 lúc mới mua sẽ không hàn 4 chân header đó

Hàn header vào vị trí 4 lỗ có sẵn trên board

Như vậy, chúng ta có 7 chân digital được đánh số từ PB1 đến PB7. Sau này trong khi lập trình, chúng ta không cần ghi chữ PB ở trước, mà chỉ cần ghi 1, 2,..., 7 thì Arduino IDE sẽ tự hiểu là các chân đó.

Nạp code blink lên Arduino USB MCU

Mình sẽ làm một demo upload blink lên chân PB1.

Mình khoanh đỏ ý, bạn nhớ mắc một con LED và một con điện trở vào chân đó nhé.

Sau đó chọn board như hình dưới và tiến hành nạp code!

Đầu tiên, chọn "Hoodloader2 16u2"

Chọn loại board mà bạn nạp Hoodloader, nếu là Uno thì chọn như mình, còn mega thì chọn ô Hoodloader2 Mega

Nạp code


  1. /*
    
  2. Blink - Nhấp nháy
  3. Đoạn code làm nhấp nháy một đèn LED cho trước
  4. */
  5.  
  6. // chân digital 1 cần được kết nối với đèn LED
  7. // và chân digital 1 này sẽ được đặt tên là 'led'. Biến 'led' này có kiểu dữ liệu là int và có giá trị là 1
  8. int led = 1;
  9.  
  10. // Hàm setup chạy một lần duy nhất khi khởi động chương trình
  11. void setup() {
  12. // đặt 'led' là OUTPUT
  13. pinMode(led, OUTPUT);
  14. }
  15.  
  16. // Hàm loop chạy mãi mãi sau khi kết thúc hàm setup()
  17. void loop() {
  18. digitalWrite(led, HIGH); // bật đèn led sáng
  19. delay(1000); // dừng chương trình trong 1 giây => thây đèn sáng được 1 giây
  20. digitalWrite(led, LOW); // tắt đèn led
  21. delay(1000); // dừng chương trình trong 1 giây => thấy đèn tối được 1 giây
  22. }

Và đây là kết quả

 

Serial bridge cho Arduino USB MCU

Mặc định khi gắm điện vô con Arduino Uno đã nạp Hoodloader2 cho Atmega16u2 và bạn đã nạp một sketch bất kỳ thì khi mở Serial monitor lên nó sẽ giao tiếp với con Arduino USB MCU, để giao tiếp Serial với con Arduino IO MCU từ máy tính thì bạn phải nạp code lại cho con Arduino IO MCU hoặc làm một chiếc cầu nối ở giữa như những gì mình sắp trình bày. Nhưng để thêm sôi động, mình sẽ kết hợp thêm một tí để con Arduino IO MCU gõ ra màn hình máy tính dòng chữ: "To thich HACK NAO moi nguoi <3 <3 <3".

Trước tiên, bạn hãy tải HID-project, thư viện để giả lập Arduino thành một thiết bị ngoại vi như chuột, bàn phím, tay cầm game,...

Upload lên Arduino IO MCU


  1. char string[] = "To thich hack nao moi nguoi!";
    
  2. void setup() {
  3. Serial.begin(115200); //Bật Serial monitor ở mức baudrate 115200
  4. }
  5.  
  6. void loop() {
  7. for (int i = 0; i < strlen(string); i++) {
  8. Serial.write(string[i]);
  9. delay(200); //delay tí cho vui
  10. }
  11. while (1);// dừng luôn
  12. }

Bật Serial Monitor lên thì bạn sẽ thấy nội dung sau:

Upload lên Arduino USB MCU

Để giao tiếp với máy tính, thì Atmega16u2 cần 1 cổng serial, để giao tiếp với Arduino IO MCU thì nó cũng cần một cổng Serial nữa. Như vậy Arduino USB MCU có 2 cổng Serial. Và thật may mắn, cả 2 cổng đó đều là hardware serial, nghĩa là bạn có thể làm rất nhiều thứ với hàng đợi buffer (128 byte) ở mỗi cổng!


  1. #include "Keyboard.h"
    
  2. #include "HID.h"
  3.  
  4. void setup() {
  5. //Giao tiếp với Arduino IO MCU
  6. Serial1.begin(115200);
  7.  
  8. // Khởi động thư viện Keyboard
  9. Keyboard.begin(); //baudrate 57600, vì vậy bạn không thẻ dùng Serial ở mức baudrate 57600, vì nó đã được dùng để giao tiếp với máy tính!
  10.  
  11. // Bật serial monitor (giao tiếp với máy tính) ở mức baudrate 1152000 để bạn debug thôi mà :3
  12. Serial.begin(115200);
  13.  
  14. }
  15.  
  16. void loop() {
  17. // đọc rồi xuất ra
  18. if (Serial1.available()) {
  19. char c = Serial1.read();
  20. Serial.print("USB: ");
  21. Serial.print(c);
  22. Serial.println();
  23. Keyboard.print(c);
  24. }
  25. }

Không muốn quay video, muốn bạn tự thưởng với thành quả của mình bằng chai nước chuẩn bị lúc ban đầu!

Đi xa hơn

Với việc sở hữu đến 2 cổng Serial, 1 cổng SPI, 7 chân digital (1 hỗ trợ PWM - PB7), chúng ta có thể làm rất nhiều thứ vui tươi. Sắp tới, mình sẽ viết một bài việc 2 mạch Arduino giao tiếp với nhau bằng Serial với 4 mạch NRF. Các bạn nên nhớ, giá của một mạch NRF rất rẻ cho 10k thôi, mà về Việt Nam bị các shop thổi lên đến 60 - 80k / mạch :3. Đúng kiểu BPhone!

Cách nạp lại Hoodloader Uno nếu bị lỗi

Mình xin chia sẻ là sau khi nạp xong chip 16u2 muốn nạp quay trở lại nạp 328 thì các bạn có thể sử dụng pin reset của 16u2 để đưa về bootloader mode để nạp như trước . Bạn có thể chặp chân reset và chân ground của nhóm 6 chân gần 16u2 2 lần liên tục thật nhanh để đưa về bootloader mode.

 

Cách xóa Hoodloader2 cho con Atmega16u2/Atmega32u4 trên Arduino Uno / Mega

 

Hôm nay, mình sẽ chỉ cách xóa, vì nhiều lúc mình chỉ cần con atmega328 thôi. Mà cứ mỗi lần nạp cho nó thì phải qua bước kiểm tra con atmega16u2 thì chán quá.

Mình tham khảo đoạn code.


  1. /*
    
  2. Copyright (c) 2015 NicoHood
  3. See the readme for credit to other people.
  4. HoodLoader2 Run Bootloader example
  5. Starts Bootloader mode.
  6. This is useful if you only want to use
  7. the Fast USB-Serial bridge again.
  8. https://github.com/NicoHood/HoodLoader2/blob/master/avr/examples/RunBootloader/RunBootloader.ino
  9. You could delete the firmware with avrdude,
  10. but this sketch is way simpler to upload for beginners.
  11.  
  12. It forces a watchdog reset,
  13. meaning the bootloader is started completely independant.
  14. */
  15.  
  16. #include
  17.  
  18. void setup() {
  19. // close interrupts
  20. cli();
  21.  
  22. // write magic key to ram
  23. *(uint16_t*)MAGIC_KEY_POS = 0x7777;
  24.  
  25. // watchdog reset
  26. wdt_enable(WDTO_120MS);
  27. }
  28.  
  29. void loop() {
  30. // wait for reset
  31. }

Bạn bật Arduino lên và nạp đoạn code kia cho Arduino USB MCU (atmega16u2/atmega32u4) là ok.

 

 

 

  •  

 

 

 

 

Đánh giá bài viết
Tổng số điểm của bài viết là: 0 trong 0 đánh giá
Click để đánh giá bài viết
 

Cung cấp vật liệu in 3D toàn quốc

Cung cấp vật liệu in 3D toàn quốc Chúng tôi nhận đặt hàng vật liệu in 3D với mọi số lượng.  Với những vật liệu thông dụng như sợi ABS, PLA, PP... sẽ sản xuất ngay trong nước. Với một số sản phẩm đặc thù như Carbon, Resin.. chúng...

Liên kết

Scan 3D Hanoi
May in 3D Ha Noi
1 1 1