LẬP TRÌNH với AVR STUDIO , Lập trình Asembly bằng AVR Studio, Lập trình C bằng AVR Studio.
Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Lập trình với AVR Studio Nội dung Lập trình Asembly AVR Studio Lập trình C AVR Studio Các cần tham khảo trước • Làm quen AVR Download AVRStudio Trong hướng dẫn cách sử dụng công cụ AVRStudio đề tạo Project lập trình ngôn ngữ Assembly C Tôi dùng ví dụ chương trình quét LED 1để minh họa cho cách tạo Project Assembly C I Lập trình Assembly AVRStudio Việc cài đặt AVRStudio tương đối đơn giản Bạn download phần mềm từ website Atmel 4.623 (hoặc mirror khác) cài đặt vào máy Theo mặc định, chương trình cài vào ổ đĩa C tại: C:\Program Files\Atmel\AVR Tools Bắt đầu với AvrStudio4: bạn chạy AvrStudio từ “Start/ All Programs/ Atmel AVR Tools/ AvrStudio 4” Ở lần đầu chạy AvrStudio, dialog “Welcome to AvrStudio 4” xuất hiện, bỏ check ô “show dialog at Startup” nhấn cancel Hình Welcome to AVR studio Diaolg Bạn thấy giao diện AVR Studio sau: Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Hình Giao diện AVR Studio Giao diện AVR Studio dễ sử dụng, kết hợp tìm hiểu lúc viết ví dụ Tạo Project mới: từ menu Project, chọn “Project/New Project” Hình Tạo Project Một dialog xuất cho phép bạn setting Project bạn, vùng “Project Type” chọn “Atmel AVR assembler”, tức lập trình ngôn ngữ Assembly trình dịch Atmel AVR assembler (trình dịch tích hợp AVR Studio); Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com “Location”, chọn nơi chứa Project (trong ví dụ chọn thư mục D/AVR1); “Project name”, tên Projetc bạn, đặt avr1 Hình 4.Setting Project Nhấn Next để tiếp tục chọn Platform device, việc phục vụ cho mục đích debug chương trình hay mô avr simulator Bạn chọn “AVR Simulator” ô Platform Atmega8 ô device (chúng ta viết chương trình cho chip Atmega8) Hình Chọn Platform device Nhấn finish để kết thúc setting project, bạn thấy cửa số “Project” chứa thông tin Project bạn, bạn thấy mục “Source files” có file “avr1.asm” Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR source code bạn Bạn nhấn vào switch tab bên cửa sổ Project để xem cửa số “I/O View”, cửa số chứa thông tin chip dùng mô Cửa số Build chứa thông tin kết biên dịch “Editor” vùng viết chương trình, trường hợp file “avr1.asm” bạn Hình Cửa sổ lập trình Việc lại viết code vào cửa sổ Editor sau dịch chương trình phím F7 II Lập trình C AVRStudio Về chất AVRStudio không hỗ trợ lập trình ngôn ngữ C trình dịch C Tuy nhiên cho phép tích hợp trình dịch C công cụ WinAVR Vì thế, muốn sử dụng AVRStudio để lập trình C cho AVR bạn phải cài đặt trình dịch thư viện avr-gcc từ GNU đơn giản cài đặt WinAVR AVRStudio Bạn tham khảo thêm hướng dẫn WinAVR để biết cách download cài đặt WinAVR Các hướng dẫn bên giả sử bạn cài đặt thành công AVRStudio WinAVR Việc tạo Project lập trình ngôn ngữ C AVR Studio không khác so với việc tạo Project ASM Điều cần ý bước chọn trình biên dịch Xem lại hình tạo Project ASM, chọn Atmel AVR Assempler làm trình Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com dịch chính, để tạo Project C chọn AVR GCC làm trình biên dịch hình Cần lưu ý trình dịch AVR GCC xuất danh sách lựa chọn AVR Studio bạn cài WinAVR vào máy trước Hình Chọn AVR GCC làm trình biên dịch Xem hình 7, giả sử bạn đặt tên Project avr1 ô Project name, bạn thấy AVR Studio đề nghị tự tạo file chương trình tên avr1 có phần mở rộng ".c", khác với phần mở rộng ".asm" tạo Project Assembly Các việc lại hoàn toàn tương tự trường hợp tạo Project ASM nên bạn xem lại phần Sau tạo Project lập trình C AVR Studio, bạn save Project vào thư mục chứa Project tạo, bạn thấy file Makefile tự động tạo Makefle AVR Studio tạo tự động lúc tạo Project, bạn không cần dùng đến trình MFile Ngôn ngữ C cho AVR Studio hoàn toàn AVR GCC WinAVR, bạn copy, load file source từ WinAVR vào mà không cần chỉnh sửa Một ưu điểm khác bạn lập trình C AVR Studio bạn tận dùng trình AVR Simulator để debug code C trực tiếp Đồng thời, trình biên tập (Editor) AVR Studio giúp bạn viết code thuận tiện Programmer notepad Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Assembly cho AVR Nội dung Instruction dùng cho Register Files Instruction cho ghi I/O Các trỏ X, Y, Z cách truy cập toàn không gian nhớ Rẽ nhánh vòng lặp Các cần tham khảo trước • • • Làm quen AVR Cấu trúc AVR WinAVR Phần giới thiệu số instruction mà hay sử dụng lập trình cho AVR Tôi chia instruction thành nhiều nhóm dựa theo phạm vi tác động chức chúng Trước hết thống số cách sử dụng ký hiệu cách viết cú pháp instruction sau: • • Rd: ghi nguồn đích thuộc Register File Rr: ghi nguồn thuộc Register File Khái niệm nguồn (Source), đích (Destination) toán hạng kết phép toán đại số Logic, ví dụ ADD R1, R2 lệnh cộng giá trị chứa ghi R1, R2, trường hợp R1 R2 gọi nguồn chứa giá trị trước thực phép cộng Sau phép cộng thực hiện, kết chứa lại R1 R1 gọi đích trường hợp R1 vừa nguồn, vừa đích R2 nguồn, viết ví dụ dạng tổng quát : ADD Rd, Rr • • • • • • • • R: kết sau lệnh thực thi K: số k: số địa tuyệt đối ghi b: (0 đến 7) số thứ tự bit ghi Register File vùng nhớ I/O s: (0 đến 7) số thứ tự bit ghi trạng thái SREG X,Y,X: ghi địa tương đối (X=R27:R26, X=R29:R28, X=R31:R30) A: địa I/O q: độ dịch chuyển địa tuyệt đối I Instruction dùng cho Register Files - LDI (LoaD Immediate) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR • • • • Thanhtam Ho - www.hocavr.com Cú pháp: LDI Rd,K Chức năng: Load số K vào ghi Rd Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: LDI R16, 99 kết ghi R1 mang giá trị 99 - MOV (MOVE) • • • • Cú pháp: MOV Rd, Rr Chức năng: Copy giá trị ghi Rr vào ghi Rd Giới hạn: áp dụng cho tất ghi RF Ví dụ: MOV R15, R16 kết R15 có giá trị với R16 (R15=R16=99) - CLR (CLEAR Register) • • • • Cú pháp: CLR Rd Chức năng: Copy giá trị ghi Rr vào ghi Rd Giới hạn: áp dụng cho tất ghi RF Ví dụ: áp dụng cho tất ghi RF - SER (SET Register) • • • • Cú pháp: SER Rd Chức năng: set tất bit tronh ghi Rd lên 1, sau lệnh ghi Rd=0xFF Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: SER R16 kết R16 = 0xFF - CBR (CLEAR Bit in Register) • • • • Cú pháp: CBR Rd, K Chức năng: xóa bit ghi Rd với “mặt nạ” K, Bit K Bit tương ứng Rd bị xóa Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: CBR R16, 0xF0 kết bit cao R16 bị xóa K=11110000 (B) - SBR (SET Bit in Register) • • • • Cú pháp: SBR Rd, K Chức năng: set bit ghi Rd với “mặt nạ” K, Bit K Bit tương ứng Rd set lên Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: SBR R16, 0xF0 kết bit cao R16 set lên K=11110000 (B) - BLD (Bit LoaD from T Flag) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR • • • • Thanhtam Ho - www.hocavr.com Cú pháp: BLD Rd,b Chức năng: Load giá trị cờ T ghi SREG vào bit thứ b ghi Rd Đây chức cờ T Giới hạn: áp dụng cho tất ghi RF Ví dụ: SET ; set bit T lên BLD R16, Kết bit ghi R16 set lên giá trị bit T - BST (Bit Storage from T Flag) • • • • Cú pháp: BST Rd,b Chức năng: Copy bit thứ b ghi Rd vào cờ T ghi SREG Đây chức cờ T Giới hạn: áp dụng cho tất ghi RF Ví dụ: BST R16, kết cờ T chứa giá trị bit ghi R16 - CPI (COMPARE with Immediate) • • • • Cú pháp: CPI Rd, K Chức năng: so sánh ghi Rd với số K, lệnh làm thay đổi nhiều bit ghi SREG thay đổi cờ Zero quan trọng nhất, Rd = K cờ Z=1, ngược lại Z=0, sử dụng đặc điểm thay đổi cờ Z kết hợp với lệnh BRNE BREQ tạo thành lệnh rẽ nhánh Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: LDI R16, 10 CPI R16, 10 Kết cờ Z set thành lúc R16 =10 - ANDI (AND with Immediate) • • • • Cú pháp: ANDI Rd, K Chức năng: thực phép Logic AND ghi Rd với số K kết đặt lại Rd Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: ANDI R17, 0x00 kết R17 có 0x00 - AND (Logical AND) • • • • Cú pháp: AND Rd, Rr Chức năng: thực phép Logic AND ghi Rd Rr , kết đặt lại Rd Giới hạn: áp dụng cho tất ghi RF Ví dụ: LDI R1, 0xFF ;(11111111) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com LDI R17, 0xAA; (10101010) AND R1, R17 Kết R1=0xAA 11111111 & 10101010 =10101010 - ORI (Logical OR with Immediate) • • • • Cú pháp: ORI Rd, K Chức năng: thực phép Logic OR ghi Rd với số K kết đặt lại Rd Giới hạn: áp dụng cho ghi từ R16 đến R31 Ví dụ: ORI R17, 0xFF kết R17 có 0xFF - OR (Logical OR) • • • • Cú pháp: OR Rd, Rr Chức năng: thực phép Logic OR ghi Rd Rr , kết đặt lại Rd Giới hạn: áp dụng cho tất ghi RF Ví dụ: LDI R1, 0xFF ;(11111111) LDI R17, 0xAA; (10101010) OR R1, R17 Kết R1=0xFF 11111111 or 10101010 =11111111 - LSL (Logical Shift Left) • • • • Cú pháp: LSL Rd Chức năng: dịch tất ghi Rd sang trái vị trí, Bit (bit lớn nhất) Rd chứa cờ nhớ C, bit Rd bị xóa thành Thực chất LSL tương đương với phép nhân ghi Rd với Bạn xem hình minh họa bên Giới hạn: áp dụng cho tất ghi RF Ví dụ: LDI R1, 0B11000011 ; (dạng nhị phân 195) LSL R1 Kết R1=10000110 cờ C =1 ghi R1 dịch sang trái vị trí, trước dịch bit R1 nên sau dịch bit chứa C, C=1 - LSR (Logical Shift Right) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page Copyright © 2010 Cùng học AVR • • • • Thanhtam Ho - www.hocavr.com Cú pháp: LSR Rd Chức năng: dịch tất ghi Rd sang phải vị trí, Bit (bit nhỏ nhất) Rd chứa cờ nhớ C, bit Rd bị xóa thành Thực chất LSR tương đương với phép chia ghi Rd cho Bạn xem hình minh họa bên Giới hạn: áp dụng cho tất ghi RF Ví dụ: LDI R1, 0B11000110 ; (dạng nhị phân 195) LSR R1 Kết R1=01100001 cờ C =1 ghi R1 dịch sang phải vị trí, trước dịch bit R1 nên sau dịch bit chứa C, C=1 - ADD (ADD without Carry) • • • • Cú pháp: ADD Rd, Rr Chức năng: thực phép cộng ghi Rd Rr , kết đặt lại Rd Cờ nhớ C không sử dụng Giới hạn: áp dụng cho tất ghi RF Ví dụ: LDI R16, 30 LDI R17, 25 ADD R16, R17 Kết R16=55 - INC (INCrement) • • • • Cú pháp: INC Rd Chức năng: tăng ghi Rd đơn vị kết đặt lại Rd Lệnh đặc biệt thích hợp cho ứng dụng lặp, kết hợp với BREQ hay BRNE tạo thành vòng lặp FOR Giới hạn: áp dụng cho tất ghi RF Ví dụ: INC R17 kết R17 tăng thêm đơn vị - SUB (SUBtract without Carry) • • • Cú pháp: SUB Rd, Rr Chức năng: thực phép trừ ghi Rd - Rr , kết đặt lại Rd Cờ nhớ C không sử dụng Giới hạn: áp dụng cho tất ghi RF Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 10 Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR Tên kiểu liệu (Data type) signed long long int Số byte unsigned long long int float double long double 8 12 Khoảng liệu (Range) same as long long int (C99 only) to 264–1 (C99 only) digits of precision 10 digits of precision 10 digits of precision Một số kiểu liệu thông dụng char (1 byte), int (2 byte) float Từ khóa unsigned thêm trước kiểu liệu nguyên để định số nguyên dương, khoảng giá trị nguyên tăng lên gần lần Ví dụ char số nguyên từ 127 đến 127 thường dùng để mã ASCII ký tự bảng mã ASCII, unsigned char bao gồm số nguyên dương từ đến 255 thường dùng làm việc với ghi bit Ngoài ra, avr-libc định nghĩa số kiểu liệu thay thế, dùng kiểu liệu thay cho kiểu thông thường, xem tóm tắt bên Một khai báo uint8_t val tương đương usigned char val, sử dụng kiểu khai báo thói quen người sử dụng Chú ý theo mặc định, biến khai báo theo cách thông thường đặt SRAM, bạn biết SRAM AVR tương đối nhỏ nên khai báo sử dụng hợp lí biến, đừng khai báo nhiều biến bạn không sử dụng hết, đừng khai báo kiểu biến lớn so với giá trị thật sử dụng, nhiên không khai báo kiểu liệu có kích thước nhỏ so với giá trị mà biến vươn tới Sử dụng nhớ chương trình (flash program memory) để lưu trữ liệu không đổi kỹ thuật khác để tiết kiệm SRAM, đề cập vấn đề khác Cuối việc khai báo biến, biến gán giá trị khởi tạo lúc khai báo trường hợp chúng ta, biến val=1 lúc khai báo - Dòng “int main(void){” bắt đầu chương trình Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 45 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com - Dòng 7: “DDRB=0xFF” gán giá trị hexadecimal 0xFF (11111111) cho thi điều khiển Port B, DDRB, Port B trở thành Port xuất - Dòng “while (1){”: bắt đầu vòng lặp vô tận - Dòng dòng 10: xuất val PORTB gọi lệnh delay - Bạn cần ý 11 12, dòng có chức “xoay” giá trị biến val để xuất PORTB tạo hiệu ứng xoay vòng val*=2 hiểu val=val*2, kiểu viết thu gọn C, toán hạng thứ kết trả biến, bỏ bớt tên biến di chuyển toán tử bên phải toán tử gán “=” Ví dụ: i = i + rút gọn thành i + = Như sau câu lệnh val*=2 giá trị val tăng lên lần Ý nghĩa thật việc gấp đôi biến val gì? Hãy nhìn vào giá trị nhị phân val, lúc khai báo val, gán cho val = hay val = 00000001 (nhị phân), sau gấp đôi lần thứ nhất, val = 2=00000010, tiếp tục gấp đôi lần thứ hai, val = 4=00000100…có thể bạn thấy chuyện xảy ra? Đây câu trả lời: “trong thao tác với số nhị phân, gấp đôi số nghĩa di chuyển số sang trái vị trí”…Quá trình gấp đôi tiếp diễn đến lúc val = 128=10000000, tiếp tục gấp đôi, bạn nghĩ val = 256 ? Tuy nhiên bạn nhớ khai báo biến val có kiểu unsigned char (8 bits), 256=100000000 (9 bits), gán val = 256, có bits thấp (00000000) 256 gán cho val, kết val = Nói cách khác, sau val=128, val = 0, câu lệnh: “ if (!val) val=1; ” giúp cho trình quét lặp quay lại từ đầu val = Mọi thứ rõ Cuối chương trình có kiểu int (int main…) cần “trả về” giá trị đó, “return 0;” thực trả (bạn trả giá trị tùy ý) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 46 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Thiết lập Fuse Bits Nội dung JTAGEN OCDEN BODEN EESAVE Các cần tham khảo trước Cấu trúc AVR Mạch nạp Thảo luận: Thiết lập sai Fuse bits BOOT LOADER NGUỒN XUNG GIỮ NHỊP AVR có sẵn số mạch điện thiết bị hỗ trợ bên trong, việc “điều khiển” mạch điện thực thông qua Fuse bits Ví dụ bên chip AVR có tạo dao động cho chip, muốn sử dụng vô hiệu hóa tạo dao động set Fuse bits điều khiển nguồn xung clock(cụ thể phần sau) Như thế, Fuse bits giống “cầu chì” hay “công tắc cứng” nối AVR với mạch điện hỗ trợ Vì “công tắc cứng” nên chúng phải set riêng biệt, không set lệnh "mềm" Mỗi loại AVR có số lượng mạch điện hỗ trợ khác số lượng Fuse bits khác Vị trí Fuse bits khác dòng chip nhiên tên gọi Tôi dùng chip ATmega32 làm minh họa Chip ATmega32 có 16 Fuse bits bố trí byte gọi “Fuse High Byte” “Fuse Low Byte” Vị trí Fuse bits không quan trọng (vì dùng phần mềm hỗ trợ set Fuse bit) tên gọi chức cần khảo sát Bảng tóm tắt bits Fuse High Byte bảng tóm tắt bits Fuse Low Byte Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 47 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Bảng Fuse High Byte Bảng Fuse Low Byte Đa số chương trình nạp chip hỗ trợ nạp Fuse bits Các Fuse nạp độc lập file chương trình Các phần mềm nạp PonyProg, phần mềm nạp CodevisionAVR, Bascom, ICCAVR…hỗ trợ set Fuse bit số chương trình avrdude hỗ trợ nạp byte Fuse, muốn sử dụng chương trình nạp để nạp Fuse bạn cần tính toán giá trị byte Fuse trước Một ý quan trọng Fuse bits, gán giá trị cho Fuse bit đồng Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 48 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com nghĩa với Fuse bit lập trình (programmed), nghĩa không lập trình (unprogrammed) Tôi sử dụng phần mềm PonyProg để làm minh họa nạp Fuse bits cho chip ATmega32 Trước nạp Fuse bits bạn cần chọn device loại mạch nạp PonyProg (xem lại Mạch nạp) Để nạp Fuse bits bạn chọn menu “Command/Security and Configuration Bits…” nhấn “Ctrl+S” (mạch nạp phải nối sẵn với máy tính mạch AVR) Nhấn nút “Read” để đọc cấu hình Fuse bits chip bạn, lần chip ATmega32 bạn nạp Fuse bits bạn thu kết cấu hình Fuse bits hình Hình Cấu hình Fuse bits mặc định chip ATmega32 Chúng ta khảo sát Fuse bit theo nhóm chức chúng JTAGEN (JTAG Enable): AVR có tích hợp sẵn JTAG, module giao tiếp với phần cứng chip Nhìn chung, JTAG thường dùng để kiểm tra hoạt động chip Trên AVR, JTAG dùng để nạp chương trình phổ biến dùng để debug lỗi chương trình (gỡ rối chương trình) Module JTAG làm việc thông qua chân TCK, TMS, TDO TDI, chip ATmega32 chân lần PC2, PC3, PC4 PC5 Theo mặc định JTAG kích hoạt, bit JTAGEN=0 (programmed) hình Vì với chip ATmega32 mua về, chân PC2:5 PORTC không sử dụng để xuất nhập thông thường Nếu bạn không muốn sử dụng chức Debug trực tiếp chip uncheck bit JTAGEN(uncheck tương đương unprogrammed, tương đương JTAGEN=1) để dùng chân JTAG chân xuất nhập thông thường OCDEN (On Chip Debug Enable): trình bày trên, AVR cho phép gỡ rối chương trình trực tiếp chip thông qua module JTAG Trong bit JTAGEN cho phép kích hoạt JTAG bit OCDEN cho phép thực Debug chip (Nghĩa cho dù kích hoạt JTAG bạn chưa thể dùng chức debug chưa kích hoạt OCDEN) Nếu bạn có mạch Debug cho AVR mạch JTAG Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 49 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com ICE Atmel (xem Debug với JTAG ICE) bạn muốn debug chương trình set bit OCDEN (check vào ô OCDEN) Bạn cần nhớ rằng, lập trình cho bit OCDEN AVR hoạt động mode Debug, mode chip trạng thái “ngủ” (Sleep mode), bạn thực Debug mà chạy chương trình thật Theo mặc định, OCDEN không lập trình chế độ Debug vô hiệu hóa Lời khuyên bạn nên để bit unprogrammed trước đưa chip vào sử dụng (đừng đụng vào bit bạn ý định Debug chip) BODEN (Brown-Out Detection Enable) BODLEVEL(BOD Level): AVR có sẵn mạch điện Brown-Out Detection, hiểu nôm na mạch phát sụt điện áp nguồn Nếu fuse BODEN lập trình mạch BOD kích hoạt, fuse bit BODLEVEL chọn mức điện áp BOD (mức điện áp dùng so sánh sụt nguồn) Nếu BODLEVEL=1 (unprogrammed) mức điện áp BOD mặc định 2.7V, ngược lại BODLEVEL lập trình mức điện áp BOD 4.0V Khi mạch BOD sử dụng, điện áp VCC giảm xuống thấp mức điện áp BOD Reset BOD xảy Nếu không thật cần thiết để bit không lập trình mặc định Hình mô tả kiện BOD AVR Hình Sự kiện BOD AVR EESAVE (EEPROM Erase SAVE): bit EESAVE lập trình (bằng 0), nhớ EEPROM không bị xóa xóa chip, ngược lại EESAVE =1 (unprogrammed) EEPROM bị xóa theo chip BOOT LOADER: tính hay chip AVR (chú ý dòng AVR có Boot Loader), Boot Loader phần nhớ chương trình kích hoạt khởi động chip Boot Loader chip AVR bố trí phía nhớ chương trình (xem lại 2, cấu trúc AVR) Boot Loader thường sử dụng để ghi đọc nội dung nhớ chương trình, ứng dụng phổ biến update chương trình cho chip một cách nhanh chóng mà không cần mạch nạp Cơ chế sau: Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 50 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com -Trước hết cần có chương trình Boot Loader nạp sẵn phần nhớ Boot Loader (phía nhớ chương trình) Chương trình có khả giao tiếp với máy tính (thông qua UART chẳng hạn) đọc, ghi nhớ chương trình chip -Khi cần update chương trình cho AVR, máy tính có chương trình giao tiếp với Boot Loader, kết nối AVR với máy tính, chương trình máy tính gởi nội dung cần update cho AVR, chương trình Boot Loader đọc nội dung ghi vào nhớ chương trình AVR Bằng cách “nạp” chương trình cho AVR mà không cần dùng mạch nạp Nạp chương trình Boot Loader cho phép khách hàng bạn tự cập nhật chức mà không cần trao chip cho bạn Sử dụng hay không sử dụng Boot Loader xác lập thông qua Fuse bits BOOTRST, BOOTSZ1 BOOTSZ0 -BOOTRST (Select Reset Vector) : Nếu Fuse bit BOOTRST không lập trình (bằng 1) vừa khởi động chip, trỏ chương trình nhảy đến vị trí chương trình (0x0000) để thực thi phần chương trình thông thường Nếu BOOTRST lập trình (bằng 0) vị trí Reset địa đầu phần Boot Loader, địa 0x0000 thường lệ Khi phần chương trình Boot Loader thực thi thay cho chương trình phía (xem hình 3) Hình Ảnh hưởng Fuse bit BOOTRST -BOOTSZ1 BOOTSZ0 (Select Boot Size): kích thước phần nhớ dành cho Boot Loader không cố định, Boot Loader không kích hoạt (fuse BOOTRST=1) toàn bộ nhớ chương trình dành cho chương trình Khi Boot Loader kích hoạt, Fuse bits BOOTSZ1 BOOTSZ0 định kích thước Boot Loader Bảng tóm tắt kích thước phần Boot Loader phụ thuộc vào bit BOOTSZ1:0 Chú ý kích thước tính theo INSTRUCTION WORD, với AVR INSTRUCTION WORD = bytes Phải nhắc lại Fuse bits, giá trị nghĩa không lập trình (không check Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 51 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com PonyProg) Nếu bit BOOTRST không lập trình bit BOOTSZ tác dụng Bảng Kích thước Boot Loader Trong ứng dụng lập trình thông thường, Boot Loader không quan tâm, tối khuyên bạn nên để Fuse bit BOOTRST, BOOTSZ1:0 mặc định, cần sử dụng nói rõ (xem Debug với mạch JTAG ICE) Chọn Nguồn Xung giữ nhịp thời gian khởi động (start-up times): Đây phần quan tâm set Fuse bits Có đến Fuse bits tham gia vào việc bits CKSEL3:0, bis SUT1:0 bit CKOPT Trong bit SUT1:0 chủ yếu dùng để chọn thời gian khởi động, phần không ảnh hưởng nhiều hầu hết trường hợp (ít ví dụ Cùng học AVR) bỏ qua, để fuse bits mặc định Nếu start-up time thật ảnh hưởng đến chương trình bạn, bạn tham khảo thêm phần “System Clock and Clock Option” datasheet chip Phần chủ yếu trình bày cách chọn nguồn xung giữ nhịp cho chip Có tất loại nguồn xung giữ nhịp cho chip để đơn giản xét trường hợp dùng nguồn thạch anh dùng xung giữ nhịp tạo mạch RC chip Xung giữ nhịp chip (xung nội): Hầu hết chip AVR trang bị mạch tạo xung giữ nhịp RC bên trong, sử dụng nguồn xung giự nhịp bỏ qua mạch tạo xung bên Nguồn xung giữ nhịp tạo bên chip cố định mức : 1MHz, MHz, Mhz MHz Các Fuse bits CKSEL3:0 định việc chọn nguồn xung Bảng tóm tắt cách phối hợp Fuse bits CKSEL để chọn nguồn xung nội Bảng Chọn xung giữ nhịp nội Fuse bits CKSEL Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 52 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com (Nomial frequency: tần số danh nghĩa, giá trị thực khác sai số) Đối với chip ATmega32, nguồn xung nội 1MHz set mặc định chip Xem lại hình bạn thấy CKSEL3=0 (được checked), CKSEL2=0 (được checked), CKSEL1=0 (được checked), CKSEL0=1 (không check) Các hình 4, 5, bên gợi ý bạn cách chọn nguồn xung nội phần mềm nạp PonyProg, ý sau chọn bits bạn phải nhấn bút “Write” để ghi vào chip Hình Chọn nguồn xung nội 1MHz (đồng thời tắt JTAG, Boot Loader, BOD) Hình Chọn nguồn xung nội 2MHz (đồng thời tắt JTAG, Boot Loader, BOD) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 53 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Hình Chọn nguồn xung nội 4MHz (đồng thời tắt JTAG, Boot Loader, BOD) Hình Chọn nguồn xung nội 8MHz (đồng thời tắt JTAG, Boot Loader, BOD) Xung giữ nhịp từ mạch thạch anh bên (Crystal): dùng xung nội có nhược điểm số xung giữ cố định mức số cao đạt 8MHz AVR cho phép làm việc 16Mhz, mặc khác sai số tương đối lớn xùng xung nội Dùng thạch anh để tạo xung giữ nhịp giải pháp tốt, tạo mạch thạch anh đơn giản nối với chân XTAL1 XTAL2 AVR hình Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 54 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Hình Mạch tạo xung thạch anh Để “báo” cho AVR biết muốn sử dụng thạch anh làm mạch tạo xung, set Fuse bits CKSEL3:0 thành giá trị: 1111 1010 (nhị phân) Trong trường hợp này, Fuse bit CKOPT có tác dụng chọn chế độ khuyếch đại, chế độ CKOPT = (programmed) thích hợp với thạch anh có tần số lớn 16MHz CKOPT=1 (unprorgammed) tần số thạch anh nhỏ 8MHz Các hình 10 gợi ý cách set Fuse bits để chọn nguồn xung nhịp mạch thạch anh với tần số lớn 8MHz lớn 16MHz Hình Chọn xung giữ nhịp từ thạch anh với tần số lớn 8MHz Hình 10 Chọn xung giữ nhịp từ thạch anh với tần số lớn 16MHz Sau chọn Fuse bits, việc cuối quan trọng ghi Fuse bits vào chuip cách nhấn nút “Write” (PonyProg) Đối với chương trình nạp chip khác, Fuse bits set tương tự Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 55 Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR G.Edit Phần mềm biên tập Graphic LCD GIỚI THIỆU G.EDIT G.Edit - Graphic LCD Editor: phần mềm biên tập cho loại Graphic LCD loại chấm không màu Xử lí hình ảnh: - G.Edit cho phép nhập hầu hết định dạng file ảnh màu hay đen trắng - G.Edit hỗ trợ "Auto Resize" để tự động thay đổi kích thước hình ảnh khớp với kích thước Graphic LCD - G.Edit cho phép nhận dạng biên dạng vật thể ảnh trước chuyển sang hình ảnh cho Graphic LCD - Có thể tùy chọn mức độ xám (Gray level) trước chuyển sang hình ảnh cho Graphic LCD Xử lí chữ viết: - Chức "Text Input" cho phép nhập chữ trực tiếp từ bàn phím, chữ "trộn" với hình ảnh - Có thể tùy chọn Font cho chữ nhập vào Vẽ G.Edit: - Có thể tự vẽ xóa "chấm" hình Graphic LCD ảo - Kết tạm thời xem Previewer Điều khiền kết quả: - Kết lưu lại định dạng "lcd" - Xuất kết trực tiếp cửa sổ "Text", kết xếp thành phần tử mảng - Cho phép đảo kết hiển thị (chấm trắng thành chấm đen ngược lại) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 56 Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR Hình Giao diện phần mềm G.Edit FontGen - Font Generator: công cụ biên tập font G.Edit (xem hình 2) Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 57 Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR Hình FontGen Chức FontGen: - Tùy chọn fontface fontname - Biên tập ký tự nhập vào, kết hiển thị trực tiếp - Cân chỉnh trái-phải, lên-xuống - Chỉnh sửa trực tiếp cửa sổ hiển thị ký tự (thêm chấm, xóa chấm ) - Tự động tạo "Font Set" cho tất ký tự có mã ascii từ 33 đến 127 SỬ DỤNG CƠ BẢN G.EDIT - Menu file cho phép nhập hình ảnh vào G.Edit (Import Bitmap), mở file "lcd" trước (Open lcd) hay lưu kết thành file "lcd" (Sace lcd file) Hãy xem hình Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 58 Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR Hình Menu file G.Edit - Thay đổi Font chữ nhập vào menu "Text Font" - Chạy công cụ FontGen từ menu " Font Generator" menu "Tool" - Nhập chữ vào vùng "Text Input" giao diện - Để xem kết Graphic LCD, nhấn nút công cụ "Convert to LCD Data" - Xem mảng kết nhấn "Update the Results" .Và nhiều chức khác, bạn khám phá sử dụng G.Edit HẠN CHẾ CỦA PHIÊN BẢN DEMO Phiên Demo cung cấp cho bạn công cụ cần thiết để tạo hình ảnh học sử dụng Graphic LCD Tuy nhiên, với phiên Demo mà cung cấp miễn phí, số chức kể bên không tìm thấy Dưới vài hạn chế phiên Demo - Không có chức dò tìm cạnh vật thể ảnh - Không canh chỉnh vị trí ảnh Graphic LCD - Không thay đổi Font chữ nhập vào - Không sử dụng tiện ích FontGen - Kết biên tập bao gồm dòng chữ "hocavr.com" góc nhỏ Graphic LCD Phiên Demo sử dụng cho mục đích học tập (Education), tác giả không chịu trách nhiệm có trục trặc xảy cho phiên Demo Nếu chấp nhận hạn chế quy định trên, bạn Download Demo phần mềm Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 59 [...]... Page 26 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Hình 13 Kết quả mô phỏng Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 27 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Lập trình với WinAVR Nội dung 1 Giới thiệu WinAVR 2 Khởi động cùng Programmer Notepad Các bài cần tham khảo trước • • Làm quen AVR Cấu trúc AVR Download WinAVR WinAVR là công cụ chính tôi dùng trong... sao WinAVR: WinAVR (đọc là Whenever: theo tác giả của WinAVR) là một bộ phần mềm mã nguồn mở bao gồm các công cụ cho dòng vi điều khiển AVR WinAVR chạy trên nền hệ điều hành Windows, nó bao gồm các công cụ sau: • • • • • Trình biên dịch avr- gcc: GNU GCC là trình biên dịch C, C++ phát triển bởi cộng đồng mã nguồn mở GNU, avr- gcc phát triển riêng cho AVR Chương trình nạp chip avrdude Chương trình debugger... được tích hợp sẵn trong WinAVR, avr- gcc lugin được tích hợp sẵn trong pn cho WinAVR nên chúng ta có thể biên dịch code, download chương trình vào chip trực tiếp với pn (có thể tham khảo thêm về pn tại website http://www.pnotepad.org) (chú ý, bạn có thể viết code cho avr- gcc bằng AVRStudio, Eclipse IDE hay ngay cả với Windows Notepad ) MFile: để biên dịch 1 chương trình bằng trình biên dịch gnu gcc, bạn... huyhq.fet.hut@gmail.com Page 35 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com C cho AVR Nội dung 1 Một số khái niệm C cho AVR 2 Cấu trúc điều khiển và hàm 3 Ví dụ minh họa Các bài cần tham khảo trước Làm quen AVR Cấu trúc AVR WinAVR Như tôi đã trình bày ở các bài học trước, khi bạn đã hiểu AVR, để thực hiện các ứng dụng, bạn có thể không nhất thiết phải luôn lập trình bằng Assembly(ASM) Ngôn ngữ cấp cao... Chương trình debugger avr- gdb Programmer Notepad: trình biên tập code hỗ trợ nhiều ngôn ngữ như C, C++, CSS, HTML, Java,… MFile: tiện ích tạo các file Makefile dùng trong quá trình biên dịch code… Cốt lõi của WinAVR là trình biên dịch GNU GCC và thư viện avr- libc, đây là bộ công cụ lập trình C miễn phí hoàn chỉnh duy nhất cho AVR Có thể nói bộ công cụ này góp phần không nhỏ giúp cho chip AVR ngày càng trở... “quên” ASM, lập trình bằng C kết hợp ASM là giải pháp hay nhất Một chú ý là chúng ta chỉ sử dụng C để đơn giản hóa lập trình tính toán, cấu trúc điều khiển lập trình C cho AVR không có nghĩa là bạn không cần biết cấu trúc và cách thức hoạt động của chip Tôi không có ý định nói về ngôn ngữ C ở đây nhưng chỉ giới thiệu một cách cơ bản nhất về cách viết chương trình cho AVR bằng C, cụ thể là C trong avr- gcc... ứng dụng, bạn có thể không nhất thiết phải luôn lập trình bằng ASM Ngôn ngữ cấp cao như C sẽ giúp cho bạn xây dựng các ứng dụng nhanh chóng và dễ dàng hơn, tuy nhiên không vì thế mà bạn “quên” ASM, lập trình bằng C kết hợp ASM là giải pháp hay nhất Một chú ý là chúng ta chỉ sử dụng C để đơn giản hóa lập trình tính toán, cấu trúc điều khiển lập trình C cho AVR không có nghĩa là bạn không cần biết cấu trúc... tương tự như trong AVR1 , bạn đã thành công Lưu Project của bạn Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 34 Copyright © 2010 Cùng học AVR Thanhtam Ho - www.hocavr.com Như vậy bạn đã hoàn tất việc cài đặt và tạo Project mới với WinAVR Việc còn lại mà bạn phải thực hiện chính là viết code, tức lập trình bằng ngôn ngữ C trong WinAVR, phần này bạn hãy tham khảo bài "C cho AVR" Created by QuocHuy... cho AVR Created by QuocHuy Hoang huyhq.fet.hut@gmail.com Page 17 Thanhtam Ho - www.hocavr.com Copyright © 2010 Cùng học AVR Mô phỏng chương trình với Proteus Nội dung 1 Vẽ mạch điện trong Proteus 2 Nạp chương trình và mô phỏng Các bài cần tham khảo trước • Làm quen AVR Proteus VSM (Virtual Simulation Machine) của Labcenter Electronics là phần mềm mô phỏng mạch điện rất được ưa thích hiện nay So với. .. dẫn sử dụng các modules trên chip AVR bằng ngôn ngữ C Tuy nhiên, bài này tôi không nói về lập trình C mà chủ yếu hướng dẫn cách cài đặt và sử dụng WinAVR Tôi sẽ dùng ví dụ quét LED của bài "Làm quen AVR" để minh họa, nhưng phần code sẽ được viết lại bằng ngôn ngữ C thay cho ASM I Giới thiệu WinAVR Tại sao C: như tôi đã trình bày ở các bài học trước, khi bạn đã hiểu về AVR, để thực hiện các ứng dụng, ... chương trình, trường hợp file avr1 .asm” bạn Hình Cửa sổ lập trình Việc lại viết code vào cửa sổ Editor sau dịch chương trình phím F7 II Lập trình C AVRStudio Về chất AVRStudio không hỗ trợ lập trình. .. WinAVR AVRStudio Bạn tham khảo thêm hướng dẫn WinAVR để biết cách download cài đặt WinAVR Các hướng dẫn bên giả sử bạn cài đặt thành công AVRStudio WinAVR Việc tạo Project lập trình ngôn ngữ C AVR. .. Ngôn ngữ C cho AVR Studio hoàn toàn AVR GCC WinAVR, bạn copy, load file source từ WinAVR vào mà không cần chỉnh sửa Một ưu điểm khác bạn lập trình C AVR Studio bạn tận dùng trình AVR Simulator