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 ElectronicsProteus 7 ProfessionalLIBRARY
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 😀 (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é! 😀
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:UsersTên người dùngAppDataRoamingArduino15 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 FilesArduinolibpreferences.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é 😀
4. Lắp ráp và hoàn tất
Một cái kết
Tôi là Nguyễn Văn Sỹ có 15 năm kinh nghiệm trong lĩnh vực thiết kế, thi công đồ nội thất; với niềm đam mê và yêu nghề tôi đã tạo ra những thiết kếtuyệt vời trong phòng khách, phòng bếp, phòng ngủ, sân vườn… Ngoài ra với khả năng nghiên cứu, tìm tòi học hỏi các kiến thức đời sống xã hội và sự kiện, tôi đã đưa ra những kiến thức bổ ích tại website nhaxinhplaza.vn. Hy vọng những kiến thức mà tôi chia sẻ này sẽ giúp ích cho bạn!