Một trong những ưu điểm lớn nhất của các chip AVR là tính đơn giản khi sử dụng trong đó có việc nạp chương trình cho chip. AVR hỗ trợ khả năng nạp chương trình ngay trong hệ thống - ISP(In-System Programming), có thể nạp trực tiếp chương trình vào chip mà không cần tháo chip ra khỏi mạch ứng dụng.
Mạch nạp cho AVR rất phong phú nhưng hầu hết đều rất đơn giản. Trong bài này phamhoangvuong.com giới thiệu 2 loại mạch nạp rất phổ biến trong những người sử dụng AVR đó là mạch ISP SKT200/300 (gọi tắt là AVR ISP) và mạch USB AVR910. Mỗi loại có ưu và nhược điểm riêng, tùy theo nhu cầu và khả năng bạn sẽ chọn chế tạo cho mình 1 loại mạch nạp phù hợp.
Mạch nạp loại này sử dụng cho các board STK200/300 của Atmel nên thường được gọi là STK200/300. Mạch này giao tiếp với máy tính qua cổng LPT (cổng song song). Có 2 phiên bản phổ biến của mạch STK200/300 đó là phiên bản thu gọn và phiên bản sử dụng IC đệm 74xx244.
Sơ đồ mạch nạp thu gọn được trình bày trong hình 1. Đây là loại mạch đơn giản nhất trong tất cả các loại mạch nạp cho AVR, mạch chỉ bao gồm 4 điện trở. Nhược điểm của mạch này là không an toàn, có thể gây hại cho cổng LPT (thật ra phamhoangvuong.com chưa mắc phải vấn đề này khi sử dụng mạch STK200/300 thu gọn). Mặt khác mạch này không đảm bảo nạp được cho tất cả các chip AVR. Tuy nhiên, nếu bạn không có nhiều kinh nghiệm làm các mạch điện tử thì có thể chế tạo mạch này để test chương trình AVR mà bạn đã học.
Hình 1. Sơ đồ mạch nạp STK200/300 thu gọn.
Một loại mạch STK200/300 khác được sử dụng rất phổ biến là loại mạch có dùng IC đệm 74HC244 (hoặc 74LS244), so với mạch thu gọn, mạch này có phức tạp hơn đôi chút (xem hình 2) nhưng bù lại nó là mạch nạp rất ổn định và an toàn. Mạch này được hỗ trợ bởi rất nhiều chương trình nạp và sử dụng được cho hầu hết các loại chip AVR.
Hình 2. Sơ đồ mạch nạp STK200/300 đầy đủ.
Như quan sát trong hình 1 và 2, việc nạp ISP cho AVR thường được thực hiện thông qua 6 đường nạp cơ bản, đó là GND, VCC, RESET, SCK, MISO và MOSI. Khi chế tạo mạch nạp, bạn phải chú ý thứ tự của các đường nạp này sao cho phù hợp với thứ tự mà bạn đã bố trí cho mạch ứng dụng. Một điều đặc biệt là ở các chip ATmega16, ATmega32, ATmega8535, AT90S8535...6 đường dành cho việc nạp ISP nằm cạnh nhau và theo thứ tự GND, VCC, RESET, SCK, MISO, MOSI. Vì thế phamhoangvuong.com khuyên bạn nên bố trí theo thứ tự này để tiện trong việc kết nối với mạch ứng dụng (nhất là khi bạn sử dụng các loại chip trên và làm mạch test bằng bread board)..Các mạch nạp STK200/300 được mô tả trong hình 3.
Hình 3. Mạch nạp STK200/300.
Chương trình nạp là một tiện ít giúp đổ file hex sau khi biên dịch vào chip thông qua các mạch nạp. Hầu hết các bộ công cụ lập trình cho AVR đều tích hợp sẵn một chương trình nạp chip. avrdude là chương trình nạp miễn phí hỗ trợ rất nhiều loại mạch, được tích hợp với WinAVR. Tuy nhiên, đây là chương trình nạp console (không có giao diện) nên sử dụng tương đối khó khăn nhất là khi cần nạp các bit Fuse hay Lock. Các phần mêm lập trình cho chip như CodevisionAVR, ICCAVR, Bascom,...đều có chương trình nạp riêng rất đa năng và dễ sử dụng. Nhưng do đây là các công cụ thương mại nên bạn cần mua nếu muốn sử dụng. AVR Studio, tất nhiên, có chương trình nạp chip AVR Prog nhưng chương trình này lại không hỗ trợ mạch nạp mà STK200/300 mà phamhoangvuong.com giới thiệu bên trên. Cuối cùng là PonyProg, PonyProg không phải là hoàn hảo nhất nhưng là lựa chọn tối ưu nhất để nạp bằng mạch STK200/300. Đây là chương trình nạp hoàn toàn miễn phí, hỗ trợ nhiều loại mạch và nhiều dòng vi điều khiển (như AVR, PIC...), giao diện lại khá dễ sử dụng. Trong phần này phamhoangvuong.com dùng PonyProg để minh họa cho cách nạp chương trình vào AVR thông qua mạch nạp STK200/300.
Download và cài đặt PonyProg: bạn có thể download miễn phí PonyProg tại website chính thức của Lancos . Cài đặt và tiến hành setup phần mềm.
Setup: Trước khi sử dụng PonyProg để nạp AVR bạn cần Setup một số thông số cho phần mềm như loại chip, loại mạch nạp...Chạy PonyProg, chọn menu Device và chọn loại chip mà bạn cần nạp (ví dụ "AVR micro/ ATmega32"). Tiếp đến xác nhận loại mạch nạp và giao diện cổng bằng cách vào menu "Setup/Interface Setup"...Với mạch nạp STK200/300, hãy set các thông số trong dialog "I/O Port setup" như trong hình 4 và nhấn OK để xác nhận Setup.
Hình 4. Setup port cho ponyProg.
Ghi fuse bits và Lock bits: Ponyprog cho phép người dùng ghi và đọc các bit cấu hình của chip như fuse bits và lock bits, để thực hiện, chọn menu "Command/Security and Configuration bits" hay đơn giản là nhấn tổ hợp phím Ctrl+S. Dialog mới xuất hiện cho phép bạn cài đăt các bit cấu hình cho chip (chọn các bit mong muốn và nhấn button write - xem thêm bài fuse bits để hiểu rõ hơn chức năng các bit này).
Download chương trình vào chip: Hãy mở file chương trình cần nạp vào chip bằng cách vào menu "File/Open Program (FLASH) file" hoặc nhấn nút công cụ "P" trên thanh công cụ. Nội dung file FLASH sẽ được hiển thị trong 1 cửa sổ con. Để nạp chương trình cho chip, hãy vào menu "Command/Write Program(FLASH)" hoặc nhấn nút công cụ "Write Program Memory(FLASH)" trên thanh công cụ.
Ngoài ra, PonyProg còn có rất nhiều chức năng khác như đọc nội dung chip, xóa chip, kiểm tra...với các chức năng này bạn hãy tự khám phá và sử dụng.
Khuyến cáo: theo phản hồi của một số bạn đọc trên hocavr.com, mạch USB AVR910 dễ mắc lỗi set sai fuse bit và dẫn đến một số khó khăn nhất định để reset lại fuse. Vì vậy nếu là người chưa có nhiều kinh nghiệm xử lí sự cố với AVR, bạn được khuyên nên làm mạch USBasp thay cho mạch AVR910.
Tuy mạch nạp STK200/300 đơn giản, dễ chế tạo nhưng có một hạn chế là mạch này sử dụng cổng LPT làm cổng giao tiếp. Trên một số máy tính gần đây cổng LPT đã bị loại bỏ, thay vào đó các cổng USB đã trở thành cổng giao tiếp không thể thiếu của máy tinh. Một mạch nạp sử dụng cổng USB sẽ tiện lợi hơn rất nhiều so với cổng LPT hay COM. Có một số dự án nghiên cứu chế tạo mạch nạp USB cho AVR, trong số đó có lẽ phổ biến nhất là mạch nạp AVR910 USB của Prottoss. Gọi là mạch AVR910 vì nguyên lý nạp chương trình của mạch này áp dụng hướng dẫn trong application note 910 của Atmel về In-System Programming. Mạch AVR910 USB được điều khiển bởi một chip Master Atmega8, chip này chứa một firmware bên trong, firmware thực hiện 2 chức năng: thứ nhất là một cầu chuyển USB-UART dựa trên thư viện của Objective Development và thứ hai là điều khiển quá trình nạp theo "chuẩn" AVR910.
Mạch nạp ARV910 USB không quá phức tạp cho bạn tự chế tạo, hãy download các công cụ cần thiết từ website của Prottoss (đã dịch bằng google translate) và thực hiện theo các chỉ dẫn bên dưới.
Giải nén file rar vừa download về bạn sẽ thấy có 3 files bên trong. File thứ nhất là sơ đồ mạch điện (file pdf), file thứ hai là driver cho máy tính (file inf) và file thứ 3 là firmware cho chip master ATmega8 (file hex - xem hình bên dưới).
Chế tạo mạch: tham khảo sơ đồ mạch điện và chế tạo một mạch điện theo mạch nguyên lý trong file pdf hoặc trong hình 5 bên dưới.
Hình 5. Sơ đồ mạch nạp AVR910 USB của Prottoss.
Khi chế tạo mạch điện trên, bạn lưu ý một số điểm như sau: hãy bỏ qua các Jumper J1, J2 và J3, nối trực tiếp chân 16 của ATmega8 với điện trở R13. Nếu bạn không biết cách xác định thứ tự chân của cổng USB thì hãy dùng một đổng hồ đo điện áp, chân 1 sẽ có điện áp dương (khoảng 5V) và chân 4 là chân GND).
Nạp firmware cho chip mega8: trước khi gắn chip mega8 vào mạch điện hình 5, bạn phải nạp firmware (file USB.910.Programmer.hex) vào chip này bằng một mạch nạp bất kỳ mà bạn có (ví dụ mạch STK200/300). Chú ý bạn cần set fuse bit cho chip này sao cho nguồn thạch anh ngoài 12MHz đươc sử dụng (hãy đặt 2 bit BOOTZS0 và BOOTSZ1 bằng 0 (checked), các bit còn lại bằng 1 (bỏ trống) - tham khảo bài Fuse bits).
Cài driver cho windows: sau khi chế tạo mạch và nạp firmware cho chip master, bạn kết nối mạch nạp với cổng USB của máy tính. Một cách tự động, Windows sẽ nhận diện một phần cứng mới được kết nối và yêu cầu cài đặt driver cho thiết bị. Hãy browse đến thư mục chứa file driver inf mà bạn đã giải nén. Quá trình cài driver sẽ bắt đầu, nếu trong quá trình cài đặt Windows thông báo lỗi bạn hãy nhấn "Continue anyway..." để tiếp tục cài đặt đến khi hoàn tất. Sau khi cài đặt driver một cổng COM ảo sẽ xuất hiện trong Hardware list của bạn, hãy mở tiện ích Device manager của Windows để kiểm tra, hãy ghi lại chỉ số cổng COM ảo (COM1, COM2, COM3...) để khai báo trong các chương trình nạp.
Sử dụng AVR910 USB: mạch nạp AVR910 USB được hỗ trợ bởi phần mềm nạp của CodevisionAVR và AVR Prog của AVRStudio. Kết nối mạch với máy tính, chạy AVRStudio và chương trình nạp AVR Prog (vào menu Tools/AVR Prog). Trong mục Hex file hãy browse đến file hex cần nạp cho chip, mục Device chọn loại chip AVR và sau đó nhấn button Write trong mục Flash để nạp vào file hex vào chip. Nếu muốn xác lập fuse bits hay lock bits, hãy nhấn button Advance.
Hình 6. Nạp chip bằng mạch nạp AVR910 USB và AVR Prog.
So với mạch nạp AVR910, mạch nạp USBasp của Thomas Fischl được người viết đánh giá cao hơn về tính ổn định và tính tiện lợi (chương trình nạp phong phú). Mạch điện nguyên lý cũng tương đối đơn giản, sử dụng chip Atmega8 hoặc Atmega48.
Trước hết hãy download các công cụ cần thiết từ website của Flischl và thực hiện theo các chỉ dẫn bên dưới.
Giải nén file gz (hoặc file rar) vừa download về bạn sẽ thấy có 3 thư mục và 2 files bên trong. Thư mục thứ nhất tên bin, bên trong thư mục này có chứa 2 thư mục con là firmware chứa file hex cho chip master và win-driver chứa driver cho máy tính. Thư mục thứ hai tên circuit chứa sơ đồ mạch nguyên lý của mạch nạp USBasp (cả file pdf và file sch cho phần mềm Eagle). Thư mục thứ ba tên firmware chứa mã nguồn của firmware cho chip Master. Nếu bạn chỉ muốn làm mạch nạp thì bỏ qua thư mục thứ ba này.
Chế tạo mạch: tham khảo sơ đồ mạch điện và chế tạo một mạch điện theo mạch nguyên lý trong file pdf hoặc trong hình 5 bên dưới.
Hình 7. Sơ đồ mạch nạp USBasp của Flisch.
Khi chế tạo mạch điện trên, bạn lưu ý một số điểm như sau: hãy bỏ qua Jumper JP2, nối trực tiếp JP1 lại (dùng mạch nạp cấp nguồn luôn cho chip). Bạn có thể dùng 1 trong 2 loại chip là Atmega8 hoặc Atmega48, chú ý dùng loại chip cho phép tần số clock lên đến 16MHz (các chip có mã 16 ở phía sau, ví dụ Atmega8-16PU).
Nạp firmware cho chip Master (Atmega8 hoặc Atmega48): trước khi gắn chip mega8 vào mạch điện hình 7 bạn phải nạp firmware (file hex trong thư mục bin\firmware) vào chip này bằng một mạch nạp bất kỳ mà bạn có (ví dụ mạch STK200/300). Chú ý bạn cần set fuse bit cho chip này sao cho nguồn thạch anh ngoài 12MHz đươc sử dụng (hãy đặt 2 bit BOOTZS0 và BOOTSZ1 bằng 0 (checked), các bit còn lại bằng 1 (bỏ trống) - tham khảo bài Fuse bits).
Cài driver cho windows: sau khi chế tạo mạch và nạp firmware cho chip master, bạn kết nối mạch nạp với cổng USB của máy tính. Một cách tự động, Windows sẽ nhận diện một phần cứng mới được kết nối và yêu cầu cài đặt driver cho thiết bị. Hãy browse đến thư mục "bin\win-driver\libusb_0.1.12.1". Quá trình cài driver sẽ bắt đầu, nếu trong quá trình cài đặt Windows thông báo lỗi bạn hãy nhấn "Continue anyway..." để tiếp tục cài đặt đến khi hoàn tất. Sau khi cài đặt driver trong Device list sẽ xuất hiện một thiết bị gọi là USBasp. Hãy vào Device manager (Nhấn tổ hợp phím Wins+Break, chọn tab Hardware và nhấn Device manager) bạn sẽ thấy thiết bị này như hình bên dưới.
Sử dụng mạch nạp USBasp: bạn có thể dùng mạch nạp USBasp với phần mềm nạp avrdude tích hợp sẵn trong Winavr, hoặc Bascomavr, hoặc eXtreme Burner, hoặc Khazama AVR Programmer. Theo gợi ý của người viết, bạn nên dùng phần Khazama cho mạch USBasp vì phần mềm này có giao diện thân thiện, việc set fuse bit cũng dễ dàng như các phần mềm Ponyprog hay CodevisionAVR programmer.
Hình 8. Phần mềm Khazama cho mạch nạp USBasp
Đăng nhận xét