Cách xuất file .HEX từ Arduino IDE và mô phỏng Arduino trên phần mềm Proteus

Xin chào các bạn!
 
Bài viết dưới đây mình sẽ giới thiệu đến các bạn làm thế nào để lấy được file .hex từ trình biên dịch Arduino IDE. (Chắc hẳn những bạn nào đã từng lập trình 8051 trên Keil C hoặc AVR trên Code Vision, Studio...đều đã quá quen thuộc với file .hex này). 
Kế đó là sơ lược về phần mềm mô phỏng mạch Proteus và cách mô phỏng Arduino trên Proteus.  

Mục đích bài viết

File .hex là gì và chúng ta lấy file .hex để làm gì? 

hex ở đây được viết tắt bởi từ hexadecimal có nghĩa là hệ cơ số 16 hay hệ thập lục phân. Khi bạn viết code và nạp chương trình cho vi điều khiển (cụ thể với board Arduino UNO là ATMEGA 328) thì không đơn thuần là nạp những "câu lệnh" bạn viết ra đưa vào vi điều khiển, mà phải thông qua trình biên dịch (Aruduino IDE, Code Vision, Keil C...đều là trình biên dịch) "dịch" lại những gì mình viết và tạo ra một chuỗi kí tự gồm những chữ (từ A đến F) và số (từ 0 đến 9) thuộc hệ thập lục phân. Những chữ số này nạp vào vi điều khiển thì vi điều khiển mới "hiểu" được. Những chữ số này được đóng gói và lưu lại thành một file có đuôi mở rộng là ".hex".

Khi bạn muốn nạp lại code thì chỉ cần lấy file .hex này nạp. Bạn cũng có thể "mổ xẻ" file .hex này xem nó chứa gì bằng Notepad. Sau đây là một đoạn thập lục phân trong file .hex mình vừa tạo

:060000002FC0FECFFDCF72 :10000600FCCFFBCFFACFF9CFF8CFF7CFF6CFF5CFAE :10001600F4CFF3CFF2CFF1CFF0CFEFCFEECFEDCFDE :1000260020202020202020202020202020202020CA :100036002756494554204E414D2720202020202078 :100046002020202020202020202080C02A0060019F :1000560026000200A30150000000F894EE27ECBB36 :10006600F1E0FBBFEBBFE5BFF8E1F1BDE1BD8DE01F :10007600A2E0BB27ED938A95E9F780E094E0A0E63D :10008600ED930197E9F7E2E5F0E085919591009708

Arduino IDE cũng dựa trên nguyên tắc cơ bản đó để nạp "chương trình mình viết" vào vi điều khiển nhưng để đơn giản cho người dùng không phải phức tạp qua nhiều thao tác như các trình biên dịch khác, Arduino IDE đã làm ẩn file .hex đi vì thế bạn chỉ cần ấn "Upload" chờ trong giây lát là xong mà không cần phải khổ sở tìm file .hex nào hết.

Nhưng có một thực tế đặt ra là Arduino IDE có thư viện code mẫu quá phong phú, viết chương trình trên Arduino IDE khá dễ dàng cộng thêm OpenSource viết riêng cho Arduino thì ngày càng nhiều (bởi cộng đồng Arduino ngày càng lớn mạnh mà ^^) chính vì vậy một số người trung thành với dòng AVR như ATMEGA 8, 16, 32, Tiny rất thích "địa" code của Arduino để nghiên cứu nhanh một đề tài dự án nào đó nhưng lại không có board Arduino. Điều này phát sinh ở họ là phải tìm cho được file .hex để nạp theo cách phổ thông. (Nếu có board Arduino bạn có thể tham khảo 2 bài viết sau: Attiny13 - Trợ thủ đắc lực của Arduino - Lập trình nó? và Nạp bootloader cho vi điều khiển trên Arduino)

Thứ hai nữa là dành cho những bạn trẻ nào "nghèo khó" không đủ điều kiện để mua một board Arduino nhưng lại có niềm đam mê với Arduino. Có một cách tiếp cận rất thực tế đó là sử dụng phần mềm mô phỏng Arduino trên máy tính mà mình sắp giới thiệu đây. Và tất nhiên, để mô phỏng được thì chúng ta cần phải trích xuất được file hex, sẽ nói kỹ hơn khi đi vào nội dung chi tiết. Sắp vào phần gay cấn rồi ^^ cố gắng bạn nhé!

Nội dung

1. Sơ lược về phần mềm Proteus:

Proteus là phần mềm cho phép mô phỏng hoạt động của mạch điện tử bao gồm phần thiết kế mạch và viết chương trình điều khiển cho các họ vi điều khiển như MCS-51, PIC, AVR, … Proteus là phần mềm mô phỏng mạch điện tử của Lancenter Electronics, mô phỏng cho hầu hết các linh kiện điện tử thông dụng, đặc biệt hỗ trợ cho cả các MCU như PIC, 8051, AVR, Motorola.

Phần mềm bao gồm 2 chương trình:

  • ISIS cho phép mô phỏng mạch
  • ARES dùng để vẽ mạch in.

Proteus là công cụ mô phỏng cho các loại vi điều khiển khá tốt, nó hỗ trợ các dòng vi điều khiển PIC, 8051, PIC, dsPIC, AVR, HC11, MSP430, ARM7/LPC2000 ... các giao tiếp I2C, SPI, CAN, USB, Ethenet,... ngoài ra còn mô phỏng các mạch số, mạch tương tự một cách hiệu quả. Nếu bạn đang muốn học lập trình trên Arduino hoặc bất kì vi điều khiển nào khác mà không có điều kiện hoặc kinh nghiệm để làm các mạch phát triển hoặc bạn muốn kiểm tra chương trình trước khi nạp vào mạch phát triển thì Proteus là lựa chọn không thể bỏ qua.                  

Ngoài chức năng mô phỏng "bá đạo" ra thì phần mềm Proteus còn được sử dụng để thiết kế mạch, làm board, mô phỏng 3D. Hiện nay Proteus đã cập nhật đến phiên bản 8. Nhưng theo kinh nghiệm sử dụng và đã cài qua bản 8.1 thì các bạn nên sử dụng bản 7.8 hoặc 7.10 (Bài viết này mình sử dụng Proteus 7.8 SP2 để minh họa) bởi vì nếu chỉ nghiệp dư dùng Proteus để mô phỏng thì ta cũng không cần "đú" lên 8.1 làm gì vừa tốn tài nguyên máy, vừa khó crack thành công vĩnh viễn và còn xuất hiện một số lỗi, những gì của bản 7. cung cấp là dư sức cho ta sử dụng.

Bạn có thể download phần mềm này trên trang diendanbaclieu.net. Nếu bạn yêu thích và muốn tìm hiểu sâu hơn về Proteus xin vui lòng tìm bài hướng dẫn trên google hoặc qua các video trên youtube, có rất nhiều tài liệu hay đấy bạn. Bài viết này chỉ mang tính chất giới thiệu, không đi sâu vào cách sử dụng phần mềm.                

Mặc định thư viện mô phỏng Proteus không có board Arduino :( nhưng cũng đừng lo lắng, bạn hãy download thư viện mô phỏng Arduino trên trang github.com/blogembarcadobr (download) sau đó  giải nén và chép BLOGEMBARCADO.LIB vào thư mục LIBRARY của Proteus theo đường dẫn

C:\Program Files (hoặc Program Files (x86) nếu máy bạn nào sử dụng 64 bit) \Labcenter Electronics\Proteus 7 Professional\LIBRARY 

Trong thư viện này hỗ trợ 5 loại board Arduino khác nhau và 1 cảm biến siêu âm Untrasonic

2. Mô phỏng trên Proteus

Sau khi đã cài đặt, add thư viện và crack thành công, bạn hãy mở ISIS Profesional bằng mọi "thủ đoạn" của bạn :D (ISIS Profesional là cái biểu tượng xanh)

Để "lấy" Arduino và một số linh kiện khác ra mô phỏng bạn ấn phím "P" sẽ xuất hiện hộp thoại Pick Devices. Tại Keywords bạn gõ linh kiện cần lấy (mình sẽ lấy ra 1 board Arduino UNO, 1 con trở và 1 con led đỏ để mô phỏng chương trình chớp tắt 1 led bạn nhé).

                   

Sau khi lấy linh kiện xong, bạn sắp xếp và đi dây như trong hình, bạn nhớ double vào con điện trở để thay đổi giá trị 10K thành 330 nhé (Mẹo nhỏ: để phóng to thu nhỏ trong Proteus bạn có thể ấn F6 - F7 hoặc lăn chuột - thử xem thế nào nhé :D)

Bạn có để ý rằng nguồn cấp cho board Arduino đâu không thấy? Đó là một sự đơn giản khi mô phỏng, mặc định thư viện này đã thiết lập cấp nguồn sẵn cho Arduino, nhưng khi lắp mạch thực tế bạn nhớ cấp nguồn cho Arduino nhé.

Tới đây chúng ta vẫn chưa thể ấn nút PLAY  (là nút tam giác ở góc trái phía dưới màn hình) để mô phỏng được đâu, sẽ báo 2 Error(s) như hình trên, bởi vì board Arduino UNO chưa có CODE nạp vào mà. Lúc này ta cần phải đưa file .hex vào để mô phỏng. Bằng cách nào thì mời bạn tiếp tục đọc phần sau nhé! :D  

3. Lấy file .hex từ Arduino IDE

Bạn hãy mở Arduino IDE lên, vì ta muốn mô phỏng led nhấp nháy nên sẽ vào File - Examples - 01. Basics - Blink (quá quen thuộc phải không nào) để mở đoạn code led nhấp nháy. Do không muốn phải chỉnh sửa code nên mình đã mắc sẵn led vào chân 13, bạn thấy đấy.  Cũng tại IDE bạn Click vào File - Preferences, sẽ xuất hiện hộp thoại Preferences, tại đây bạn tick vào ô vuông compilation, sau đó ấn OK.

Lưu ý với các bạn dùng phiên bản Arduino 1.6.x

Với các bản mới hơn đường dẫn như trong bài cũng dẫn đến file preferences.txt, nhưng file đó không chỉnh sửa được (trong đó có ghi và hướng dẫn đến file preferences khác chỉnh sửa đc cho các hệ điều hành khác nhau). Như bản 1.6.5 mình dùng thì là C:\Users\Tên người dùng\AppData\Roaming\Arduino15 và làm như trong bài (Lưu ý: Trc khi chỉnh sửa thì phải tắt Arduino IDE đi, nếu không tìm thấy AppData bật chọn hiện file ẩn). Cho chắc chắn nhất nên tìm ở đâu bạn vào File -> Preferences sẽ tìm thấy đường dẫn ở cuối.

Đóng góp của bạn @SumoBBQ

Tiếp đó bạn ấn  để Built chương trình. Bạn để ý sẽ thấy điều khác biệt: trình biên dịch IDE sẽ Built cho chúng ta một file .hex được lưu ở đường dẫn như hình dưới:

 

Bạn cũng cần chú ý chọn board khớp với board mình sẽ mô phỏng nhé, ở đây mình mô phỏng Arduino Uno.

Đến đây bạn đã có thể vào đường dẫn này để lấy file .hex ra mô phỏng, tuy nhiên chúng ta sẽ thêm một số bước nữa để PRO hơn nhé.

Bước 1: Mở tập tin C:\Program Files\Arduino\lib\preferences.txt bằng Notepad hoặc Notepad++

Bước 2: Thêm dòng lệnh sau vào cuối file preferences.txt: build.path = <path> (<path> là đường dẫn đến thư mục mà bạn muốn chứa  file hex sau khi Arduino hoàn tất quá trình biên dịch)

Ví dụ: Để lưu vào thư mục Built_Arduino (mình vừa tạo) trên desktop của mình, mình viết như sau:

Sau đó bạn nhớ ấn Ctr + S để Save lại nhé :D

Tiếp theo bạn tắt IDE đi và mở lại (nhất thiết phải vậy nhé), mở CODE Blink led nhấp nháy như trên mình trình bày và Verify 
Bạn sẽ thấy file .hex đã không còn ở thư mục temp khó tìm nữa mà vào đúng thư mục mình mong muốn.
 

4. Lắp ráp và hoàn tất

Bây giờ bạn đã có file .hex và mạch mô phỏng. Điều bạn cần làm lúc này là mở mạch hồi nãy bạn vẽ lên và double click vào board Arduino. Hộp thoại Edit Component xuất hiện. Tại khung Program File bạn tìm đến mục chứa file .hex lúc nãy bạn lưu. Sau đó ấn OK.

Lúc này bạn chỉ cần ấn nút PLAY  để mô phỏng và rung đùi xem thành quả đạt được thôi :D

Để dừng mô phỏng bạn ấn STOP  nhé !

Nếu thấy LED sáng hơi mờ bạn thử thay đổi giá trị điện trở xuống còn 220 xem sao nhé.

Một cái kết

Phù, vậy là xong rồi đấy. Uống một cốc nước cho mát nào! 

Mình hi vọng các bạn đọc bài viết này xong đều có thể làm được. Tuy thấy dài vậy đó nhưng nắm được những ý cơ bản rồi thì chỉ cần 30' là OK con dê hết :D Chúc các bạn thành công nhé.  

Mọi thắc mắc hay đóng góp ý kiến về bài viết các bạn có thể gửi bình luận ở dưới nhé. Đây là bài viết đầu tiên của mình trên diễn đàn này nên chắc chắn sẽ không thoát khỏi sơ xuất. Rất mong nhận được những ý kiến quý báu từ các bạn :D

lên
55 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Mẹo nhỏ khi làm việc với Arduino

Xin chào các bạn!

Bài viết hôm nay sẽ giới thiệu các bạn một số mẹo nhỏ trong quá trình làm việc với Arduino. Thời điểm hiện tại, những mẹo này là do bản thân mình khi làm việc với Arduino đã rút ra kinh nghiệm, hi vọng sẽ giúp ích cho các bạn laugh

Với những bậc tiền bối "lão làng" nếu đọc qua bài viết này mà thấy có gì sơ sót "xin ném đá nhẹ tay" và viết bình luận ở dưới để giúp bài viết của mình hoàn thiện hơn.

Bài viết sẽ được cập nhật liên tục khi có mẹo mới.  Để hoàn thiện bài viết này mình rất mong nhận được sự chia sẻ từ các bạn: những khó khăn gặp phải (để chúng ta cùng bàn "loạn" tìm ra hướng giải quyết) cũng như mẹo nhỏ khi làm việc với Arduino của chính bản thân các bạn.

 

lên
18 thành viên đã đánh giá bài viết này hữu ích.

Tổng quan về cách làm mạch in bằng phương pháp ủi thủ công

Xin Chào Các Bạn!

Bài viết này sẽ giúp các bạn hình dung một cách tổng quan những bước cơ bản để có thể tạo ra một mạch điện bằng phương pháp thủ công. Đồng thời đây cũng là bài viết cơ sở nền tảng giúp các bạn có thể dễ dàng tiếp cận những bài viết Tutorial Shield Board for Arduino sau này. Mình sẽ giới thiệu một cách chi tiết theo ngôn ngữ bình dị nhất có thể để các bạn không chuyên về điện tử vẫn có thể dễ dàng tiếp cận và làm theo được.

Mong mọi người đón đọc! 

lên
31 thành viên đã đánh giá bài viết này hữu ích.