SỞ KHOA HỌC VÀ CÔNG NGHỆ THÀNH ĐOÀN
TP. HỒ CHÍ MINH TP. HỒ CHÍ MINH
CHƯƠNG TRÌNH VƯỜN ƯƠM
SÁNG TẠO KHOA HỌC VÀ CÔNG NGHỆ TRẺ
X * W
B
B
Á
Á
O
O
C
C
Á
Á
O
O
N
N
G
G
H
H
I
I
Ệ
Ệ
M
M
T
T
H
H
U
U
(Đã chỉnh sửa theo góp ý của Hội đồng nghiệm thu ngày 14 tháng 04 năm 2010)
Chủ nhiệm đề tài: NGUYỄN CHÍ NHÂN
Cơ quan chủ trì: TRUNG TÂM PHÁT TRIỂN
KHOA HỌC VÀ CÔNG NGHỆ TRẺ
TP. Hồ Chí Minh, tháng 04 năm 2010
NGHIÊN CỨU VÀ THIẾT KẾ
KIT PHÁT TRIỂN ĐA NĂNG
SỬ DỤNG VI ĐIỀU KHIỂN AVR
v
M
M
Ụ
Ụ
C
C
L
L
Ụ
Ụ
C
C
Trang
Xác nhận chỉnh sửa báo cáo nghiệm thu
Thông tin đề tài i
Giới thiệu iii
Mục lục v
Danh sách các chữ viết tắt vii
Danh sách bảng vii
Danh sách hình vii
Phần 1: TỔNG QUAN VỀ ĐỀ TÀI 1
Phần 2: NỘI DUNG NGHIÊN CỨU
Chương 1: HỌ VI ĐIỀU KHIỂN AVR 6
1.1. TỔNG QUAN VỀ VI ĐIỀU KHIỂN AVR 6
1.2. ĐẶC ĐIỂM CỦA VI ĐIỀU KHIỂN AVR 6
1.2.1. Kiến trúc RISC 6
1.2.2. Một số chip AVR 7
1.3. KI
ẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR 7
1.3.1. Hoạt động của AVR 7
1.3.2. Kiến trúc cơ bản bên trong của AVR 8
1.4. LỰA CHỌN VI ĐIỀU KHIỂN AVR 9
1.5. KIẾN TRÚC VI ĐIỀU KHIỂN ATMEGA32 10
1.5.1. Một số đặc tính của ATmega32 10
1.5.2. Tổ chức bộ nhớ trong AVR 11
1.5.3. Các thanh ghi chức năng 15
1.5.4. Hoạt động ngắt-Interrrupt 17
1.5.5. Hoạt động của bộ định thời-Timer/Counter 19
Chương 2: NGHIÊN CỨU CÁC KIT THÍ NGHIỆM 23
2.1. KIT THỰC T
ẬP VI ĐIỀU KHIỂN LD1 23
2.2. EasyAVR Devlopment KIT và EasyPIC-PRO Development KIT 24
vi
2.3. KIT DE PIC 26
2.4. BỘ MÔ HÌNH THÍ NGHIỆM VI ĐIỀU KHIỂN (KDD-2007) 27
2.5. MÔ HÌNH THÍ NGHIỆM VI ĐIỀU KHIỂN HỌ AVR
28
Phần 3: KẾT QUẢ VÀ THẢO LUẬN
Chương 1: BỘ KIT AVR HOÀN CHỈNH 30
1.1. GIỚI THIỆU BỘ KIT AVR 30
1.2. CÁC CÔNG CỤ LÀM VIỆC VỚI VI ĐIỀU KHIỂN AVR 30
1.3. CÁC YÊU CẦU TRƯỚC KHI SỬ DỤNG KIT 32
1.4. GHÉP NỐI GIỮ MÁY TÍNH VỚI KIT AVR 32
1.5. CÁC BÀI THỰC HÀNH ĐI KÈM THEO KIT AVR 34
Chương 2: MÔ HÌNH XE ĐUA TỰ HÀNH SỬ DỤNG VI ĐIỀU KHIỂN AVR
2.1. GIỚI THIỆU XE ĐUA TỰ HÀNH 37
2.2. NGUYÊN TẮC HOẠT ĐỘNG CỦA XE ĐUA TỰ
HÀNH 38
KẾT LUẬN VÀ ĐỀ NGHỊ 40
TÀI LIỆU THAM KHẢO
vii
DANH SÁCH CÁC CHỮ VIẾT TẮT
PCB Print Circuit Board
RISC Reduced Intruction Set Computer
CPU Central Processing Unit
RTC Real Time Clock
HLL Hight Level Language
ALU Arithmetic Logic Unit
PC Program Counter
PWM Pulse Width Modulator
LPM Load Program Memory
ISR Interrupt Service Routine
ISP In-System Programmer
LCD Liquid Crystal Display
T/C Timer/Counter
MSB Most Significant Bit
USART Universal Synchronous & Asynchronous serial Reveiver and
Transmitter
DANH SÁCH BẢNG
Bảng P2_1.1: Các vector ngắt của ATmega32 12
Bảng P2_1.2: Các chế độ sleep của AVR 16
Bảng P2_1.3: Chọn chế độ hoạt động của timer 20
Bảng P2_1.4: Chọn chế độ so sánh đầu ra của timer 21
Bảng P2_1.5: Chế độ xung clock cho timer 21
Bảng P3_1.1: Bảng các phụ kiện đi kèm theo KIT 32
Bảng P3_1.2: Bảng cấu hình máy tính 32
DANH SÁCH HÌNH
Hình P2_1.1: Kiến trúc cơ bản bên trong của vi điều khiển AVR 8
Hình P2_1.2: Sơ đồ khối của Atmega32 đã được đơn giản hóa 9
Hình P2_1.3: Tổ chức bộ nhớ chương trình của ATmega32 12
Hình P2_1.4: Tổ chức bộ nhớ dữ liệu 13
Hình P2_1.5: Tập thanh ghi 14
Hình P2_1.6: Bộ nhớ dữ liệu EEPROM 15
Hình P2_1.7: Sơ đồ thực hiện ngắt của AVR 17
Hình P2_2.1: Kit thực tập vi điều khi
ển LD1 23
Hình P2_2.2: EasyPIC-PRO Development KIT 24
Hình P2_2.3: EasyAVR Devlopment KIT 25
Hình P2_2.4: KIT DE PIC 27
Hình P2_2.5: Bộ mô hình thí nghiệm vi điều khiển (KDD-2007) 28
Hình P2_2.6: Mô hình thí nghiệm vi điều khiển họ AVR 28
Hình P3_1.1: Bộ Kit AVR hoàn chỉnh 30
Hình P3_1.2: Đầu nối ISP 32
Hình P3_1.3: Cáp chuyển từ 6-PIN sang 10-PIN 33
viii
Hình P3_1.4:Cổng COM ảo kết nối giữ máy tính với STK500 33
Hình P3_1.5: Chọn cấu hình STK500 trong CodeVision 34
Hình P3_1.6: Kết nối giữa KIT AVR với máy tính 34
Hình P3_2.1: Mô hình xe đua tự hành 37
Hình P3_2.2: Mô hình đường đua 38
iii
GIỚI THIỆU
Hiện nay vi điều khiển đã rất phổ biến ở Việt Nam. Việc thiết kế những Kit
phát triển cho vi điều khiển là vấn đề ngày càng được quan tâm của nhiều nhóm tác
giả. Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng. Nó xuất hiện
khá nhiều trong các ứng dụng như: các dây chuyền tự động loại nhỏ, các robot có
chức năng đơn giản, trong máy giặt, ôtô, lò vi sóng, điện thoại, các máy tính bỏ túi
v.v Việc nghiên cứu học tập kỹ thuật vi xử lý nói chung, các họ vi điều khiển nói
riêng, trong đó điển hình là họ AVR là rất cần thiết cho sinh viên chuyên ngành kỹ
thuật. Để có thể học tập, nghiên cứu, thiết kế tốt về các họ vi điều khiển rất cần các
thiết bị thí nghiệm thực hành cũng như các công cụ trợ giúp thiết kế hệ vi điều khiển.
Trước nhu cầu thực tế trên chúng tôi tiến hành nghiên cứu và thiết kế kit phát triển
đa năng sử dụng vi điều khiển AVR với mục tiêu:
- Nhằm phục vụ hiệu quả cho việc giảng dạy ở trường đại học đồng thời giúp
cho sinh viên có cơ hội vừa học vừa thực hành môn học Vi Điều Khiển
(V
ĐK).
- Tạo cơ hội khám phá và học hỏi cho các sinh viên, giúp sinh viên nắm bắt
bài học một cách hiệu quả nhất.
- Mong ước đem đến cho sinh viên một kiến thức vững chắc có thể sử dụng
trong công việc hoặc trong quá trình nghiên cứu sau này.
iv
INTRODUCTION
Currently microcontroller was very popular in Vietnam. The design
development KIT for the microcontroller is a matter of growing concern of many
authors. Microcontroller is often used to build embedded systems. It appears quite a
lot of applications such as small automated production lines , the robot has a simple
function, in washing machines, cars, microwave, phone, pocket PC, etc. The study
engineering microprocessor in general, microcontroller families in particular, where
typically AVR is necessary for students whose major related to engineering. To be
able to study, research, and have good design of the microcontroller, we need
laboratory equipment as well as practical tools to support design microcontroller.
Based on actual demand, we conduct research and design development Kit which
use AVR microcontroller with the aim of:
- In order for effective teaching at the university also helps students with
learning opportunities both practical subjects microcontroller .
- Opportunity to explore and learn for students, help students grasp the lesson
most effectively.
- Wish to give students a solid knowledge can use at work or during the study
later.
1
Phần 1:
TỔNG QUAN VỀ ĐỀ TÀI
1.Tổng quan tình hình nghiên cứu
Hầu hết các sản phẩm điện tử thương mại và công nghiệp trên Thế giới hiện nay
đều ứng dụng vi điều khiển có kiến trúc RISC. Ở Việt Nam, nhu cầu nghiên cứu, đào
tạo về vi điều khiển RISC cũng đang được quan tâm trong thời gian gần đây.
Các trường đại học, trong đó các trường đầu ngành như Bách Khoa, Khoa học Tự
nhiên, và mộ
t số trường kỹ thuật khác đang có khuynh hướng thành lập các phòng thí
nghiệm về hệ thống nhúng mà trong đó một phần tập trung vào nghiên cứu sử dụng và
lập trình ứng dụng cho vi điều khiển có kiến trúc RISC. Chẳng hạn :
- Khoa Điện-Điện tử, Trường Đại học Bách Khoa-TP.HCM xây dựng dự án phòng
thí nghiệm hệ thống nhúng và thiết kế vi mạch. Trong đó một phần dự án sẽ trang b
ị
các thiết bị và kit thí nghiệm về các họ vi điều khiển PIC và ARM.
- Trường Đại học Khoa học Tự nhiên cũng đã thành lập Phòng thí nghiệm Thiết kế
vi mạch và hệ thống nhúng cũng đã trang bị một số Kit H8SX (Renesas), ARM nhằm
phục vụ cho nhu cầu nghiên cứu của cán bộ và sinh viên năm cuối. Bên cạnh đó Phòng
thí nghiệm Selab (thuộc Khoa công Nghệ thông tin) cũng có một nhóm chuyên nghiên
cứu lập trình cho vi điề
u khiển H8SX (Renesas), ARM, PIC.
- Trung tâm Nghiên cứu và Đào tạo Thiết kế Vi mạch (ICDREC) thuộc Khu công
nghệ Phần mềm (ITP), Đại học Quốc gia-TP.HCM là trung tâm đầu tiên của Việt Nam
nghiên cứu, thiết kế chế tạo lõi IP RISC 8 bit. Ngoài việc thiết kế ra chính chip vi điều
khiển RISC, một hướng đi cũng được ICDREC rất quan tâm là xây dựng các ứng dụng
trên RISC 8/32 bit.
- Dự án sản xuất thử nghiệm các bộ Kit Vi điều khiển phục vụ
cho giảng dạy tại các
Trường Đại học, Cao đẳng chuyên ngành Cơ điện tử, Tự động hoá, . . . Dự án này đang
được thực hiện do TS. Trần Thu Hà Trường Đại học Sư Phạm Kỹ Thuật TP.HCM chủ
trì.
- Các trung tâm đào tạo như Trung tâm Điện tử và Máy tính thuộc Trường Đại học
Khoa học Tự nhiên, Trung tâm đào tạo Công nghệ thông tin thuộc Sở Bưu chính Viễn
thông, . . . cũng đề
u có các khoá giảng dạy về vi điều khiển.
2
- Theo điều tra sơ bộ của chúng tôi, nhiều trường đại học đào tạo theo hướng điện
tử, kỹ thuật và một số trung tâm đào tạo đang có nhu cầu xây dựng phòng thí nghiệm và
các khoá đào tạo về vi điều khiển. Điều này xuất phát từ nhu cầu ngày càng tăng của xã
hội.
Ý tưởng của nhóm nghiên cứu là thiết kế kit phát triển đa năng hỗ tr
ợ việc học tập,
nghiên cứu, thiết kế ứng dụng vi xử lý nói chung, và các họ vi điều khiển nói riêng đạt
hiệu quả cao. Hoàn chỉnh các tài liệu hướng dẫn thực hành cho môn học vi xử lý, vi
điều khiển, đây là công cụ hữu hiệu để nghiên cứu, giảng dạy chuyên ngành về vi điều
khiển và đồng thời hỗ trợ tốt cho sinh viên trong quá trình học tập, nghiên cứu về các
họ
vi điều khiển nói chung, họ vi điều khiển AVR nói riêng. Kết quả đạt được từ công
trình nghiên cứu này có ý nghĩa thực tiễn cao trong việc học tập, nghiên cứu về lĩnh vực
vi điều khiển.
2. Nội dung thực hiện
Trong đề tài này chúng tôi thực hiện một số nội dung nghiên cứu như sau:
2.1. Tìm hiểu kiến trúc, tập lệnh và các công cụ dùng của họ vi điều khiển AVR. Bên
c
ạnh đó nghiên cứu các Kit thí nghiệm giảng dạy thông dụng trên thị trường. Phân tích
thiết kế phần cứng, phần mềm và các bài thí nghiệm.
2.2. Giao tiếp với AVR
- Bằng phần cứng: kết nối truyền thông với vi điều khiển AVR thông qua cổng
RS-232.
- Bằng phần mềm: lập trình nhúng cho vi điều khiển (sử dụng ngôn ngữ lập trình
truyền thống như: hợp ngữ hay lập trình C).
2.3. Thiết k
ế kit phát triển đa năng và các môđun ứng dụng trên vi điều khiển AVR
- Môđun chính: Đơn vị xử lý trung tâm (CENTRAL PROCESSING UNIT)
- Môđun giao tiếp vào/ra (I/O) gồm: các port của vi điều khiển Atmega32, màn hình
hiển thị-LCD 16x2, Led đơn, Led 7 đoạn, công tắc gạt DIP 8x2, và ma trận LED 5x7.
- Môđun giao tiếp theo chuẩn UART
- Môđun điều khiển động cơ DC và động cơ bước (STEP MOTOR)
- Môđun giao tiếp theo chuẩn I
2
C
- Môđun bàn phím (Key pad)
- Môđun cấp nguồn
- Môđun debugger
- Môđun ISP Programer
3
2.4. Viết chương trình kiểm tra Kit.
2.5. Viết chương trình thí nghiệm mẫu.
2.6. Xây dựng Tài liệu hướng dẫn thực hành trên bộ KIT thiết kế cho sinh viên đại học.
Dựa trên bộ KIT đã thiết kế chúng tôi sẽ đi xây dựng các tài liệu hướng dẫn thực hành
theo từng môđun thực hành như sau:
- Môđun 1
: GIỚI THIỆU KIT AVR VÀ TRÌNH BIÊN DỊCH CODEVISIONAVR.
Trong môđun này chúng tôi dự kiến giới thiệu tổng quát các thành phần và cấu trúc của
KIT thực tập là KIT chính mà sinh viên sẽ thực tập trong suốt quá trình học môn này.
Giới thiệu vi điều khiển AVR, ngôn ngữ lập trình nhúng C, và sử dụng các trình mô
phỏng, biên dịch trên vi điều khiển AVR. Sử dụng phần mềm CodeVisionAVR để soạn
thảo, tổ chức một project cho bất kỳ chip họ AVR nào.
- Môđ
un 2: ĐIỀU KHIỂN VÀO RA (I/O) VỚI LED ĐƠN
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: Cách cấu hình khởi tạo cho CPU hoạt động, cấu hình Port, đọc dữ liệu và
xuất dữ liệu ra Port, điều khiển các LED đơn trên KIT theo ý muốn thông qua các port
vào/ra của AVR.
‐ Môđun 3
: ĐIỀU KHIỂN LED 7 ĐOẠN
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: cấu hình được các thanh ghi của một port dữ liệu, khởi tạo được CPU hoạt
động với cấu hình tối thiểu nhất, phương pháp quét LED 7 đoạn và điều khiển các LED
7 đoạn trên KIT theo ý muốn thông qua các port vào/ra của AVR.
- Môđun 4
: ĐIỀU KHIỂN LED MA TRẬN 5x7
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: giải mã và phương pháp hiển thị trên LED ma trận, điều khiển các LED ma
trận trên KIT theo ý muốn thông qua các port vào/ra của AVR.
- Môđun 5
: HIỂN THỊ LCD 16x2
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: giao tiếp được với LCD 16x2 để có thể ứng dụng cho những mục đích hiển
thị cụ thể. Từ module LCD 16x2 có thể mở rộng sang những module tương tự, ví dụ
như module LCD 16x4, 40x2, …
4
- Môđun 6:HOẠT ĐỘNG NGẮT VÀ ĐỊNH THỜI CỦA AVR
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: vận dụng được hoạt động ngắt trong AVR là một tính năng quan trọng và
cần thiết nhất trong mọi ứng dụng. Những hoạt động và tính năng của timer trong AVR.
Cấu hình và truy xuất được các thanh ghi trong timer và các thanh ghi liên quan đến
hoạt động ngắt của timer.
- Môđun 7
: HOẠT ĐỘNG NỐI TIẾP CỦA AVR,TRUYỀN THÔNG VỚI MÁY TÍNH
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: ứng dụng được tính năng cơ bản, cần thiết và quan trọng nhất của truyền
thông nối tiếp.Giao tiếp để trao đổi dữ liệu giữa AVR với bên ngoài thông qua một máy
tính và một chương trình truyền thông cho máy tính Hyper Terminal.
- Môđun 8
: GIAO TIẾP VỚI BÀN PHÍM (KEY PAD)
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: cấu trúc của Keypad 4x4, quá trình đọc Keypad, Kỹ thuật quét Keypad cơ
bản, cách đọc và hiển thị giá trị từ keypad 4x4 lên LCD.
- Môđun 9: ĐIỀU KHIỂN ĐỘNG CƠ DC MOTOR VÀ STEP MOTOR
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: điều khiển động cơ DC quay theo chiều kim đòng hồ và ngược lại. Điều
khiển step motor quay theo chiều kim đồng hồ ở chế độ half step và full step và điều
khiển step quay đúng một vòng 360
o
.
- Môđun 10
: GIAO TIẾP I2C
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: Giới thiệu chuẩn I
2
C, lập trình giao tiếp với Real Time Clock(RTC) và
EEPROM.
2.7. Phát triển ứng dụng: dựa trên những môđun đã thiết kế ở trên chúng tôi hướng đến
việc phát triển ứng dụng trên vi điều khiển AVR đó là thiết kế bộ điều khiển sử dụng
AVR cho xe đua tự hành. Bên cạnh đó, chúng tôi thiết kế bộ tài liệu hướng dẫn lập trình
cho xe đua tự vận hành. Ứng dụng mô hình xe này
để giảng dạy cho sinh viên về vi
điều khiển và lập trình nhúng.
5
Việc thiết kế kit phát triển đa năng này có thể xem như là một công cụ hữu hiệu
hỗ trợ cho thiết kế ứng dụng nhúng trên vi điều khiển. Để phát triển các ứng dụng cụ
thể thì còn phụ thuộc rất nhiều vào kinh nghiệm làm việc của các kỹ sư thiết kế. Do đó
chúng tôi chọn cách tiếp cận sát thực tế nhất để thiết kế kit phù hợ
p với việc học tập,
nghiên cứu, thiết kế ứng dụng vi xử lý nói chung, và các họ vi điều khiển nói riêng. Kit
được thiết kế theo cấu trúc mở cho phép mở rộng thêm nhiều ứng dụng khác nữa mà
không phải thiết kế lại khối CPU.
6
Phần 2:
NỘI DUNG NGHIÊN CỨU
Chương 1:
HỌ VI ĐIỀU KHIỂN AVR
1.1. TỔNG QUAN VỀ VI ĐIỀU KHIỂN AVR
Vi điều khiển AVR thuộc họ vi điều khiển do Atmel sản xuất (Atmel cũng là nhà sản
xuất các vi điều khiển họ 89C51). Đây là họ vi điều khiển được chế tạo theo kiến trúc
RISC (Reduced Intruction Set Computer) có cấu trúc tập lệnh rút gọn. Ngoài các tính
năng như các họ họ vi điều khiển khác, nó còn tích hợp nhiều tính năng mới rất ti
ện lợi
cho người thiết kế và lập trình. Sự ra đời của AVR bắt nguồn từ yêu cầu thực tế là hầu
hết khi cần lập trình cho vi điều khiển, chúng ta thường dùng những ngôn ngữ bậc cao
HLL (Hight Level Language) để lập trình ngay cả với loại chip xử lí 8 bit trong đó ngôn
ngữ C là ngôn ngữ phổ biến nhất. Tuy nhiên khi biên dịch thì kích thước đoạn mã sẽ
tăng nhiều so với dùng ngôn ngữ Assembly. Hãng Atmel nhận th
ấy rằng cần phải phát
triển một cấu trúc đặc biệt cho ngôn ngữ C để giảm thiểu sự chênh lệch kích thước mã
đã nói trên. Và kết quả là họ vi điều khiển AVR ra đời với việc làm giảm kích thước
đoạn mã khi biên dịch và thêm vào đó là thực hiện lệnh đúng đơn chu kỳ máy với 32
thanh ghi tích lũy và đạt tốc độ nhanh hơn các họ vi điều khiển khác từ 4 đế
n 12 lần.
1.2. ĐẶC ĐIỂM CỦA VI ĐIỀU KHIỂN AVR
Vi điều khiển AVR được thiết kế theo kiểu kiến trúc RISC: Kiến trúc RISC với hầu hết
các lệnh có chiều dài cố định, truy nhập bộ nhớ nạp lưu trữ (load-store) và 32 thanh ghi
đa năng.
1.2.1. Kiến trúc RISC (viết tắt của Reduced Instructions Set Computer – máy tính
với tập lệnh đơn giản hoá) là một phương pháp thiết k
ế các bộ vi xử lý hoặc vi điều
khiển theo hướng đơn giản hoá tập lệnh, trong đó thời gian thực thi của hầu hết các lệnh
đều như nhau. Hiện nay các bộ vi xử lý RISC phổ biến là PIC, ARM. DEC Alpha, AVR
của Atmel, . . .
Triết lý cho phát triển RISC đó là cắt giảm bộ vi xử lý để chỉ còn lại những bộ phận
thiết yếu của nó. Những gì không thực sự cần thiết s
ẽ bị vứt bỏ. Với các nhà lập trình
thì đó có nghĩa là các chíp RISC thường không thể thực hiện một phép nhân đơn giản.
Lý thuyết của phép nhân là thực hiện liên tiếp nhiều phép cộng, do đó lệnh ADD là đủ.
7
Một ý khác của RISC đó là các chức năng phức tạp thích hợp thực hiện bằng phần mềm
hơn là bằng phần cứng. Phần mềm thì dễ thay đổi, dễ cập nhật, và tạo ra nhanh hơn.
Viết mã mới nhanh hơn là thiết kế và xây dựng một chíp mới. Do đó các máy tính dựa
trên RISC có thể được nâng cấp nhanh hơn. Các chương trình và các thuật toán có thể
điều chỉnh và cải tiến. Tố
t nhất là phần cứng RISC phải được đơn giản hóa, tối ưu hóa
sao cho nó chạy nhanh hơn. Các tạp chí kỹ thuật và các xuất bản thương mại đã quảng
cáo sâu rộng RISC như là một lĩnh vực mới cho máy tính.
- So với các chip vi điều khiển khác, AVR có nhiều đặc tính hơn hẳn, hơn cả trong tính
ứng dụng (dễ sử dụng) và đặc biệt là về chức năng.
- Gần như
chúng ta không cần lắp thêm bất kỳ linh kiện phụ nào khi sử dụng AVR,
thậm chí không cần nguồn tạo xung clock cho chip (thường là các khối thạch anh).
- Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần vài điện
trở là có thể làm được. Một số AVR còn hỗ trợ lập trình on-chip bằng bootloader không
cần mạch nạp.
- Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiế
t kế tương thích với C
1.2.2. Một số chip AVR
- AT90S8535: Không có lệnh nhân hoặc chia trên thanh ghi.
- ATmega 8, 16, 32, 64, 128 (AVR loại 8 bit, 16 bit, 32 bit): Là loại AVR tốc độ cao,
tích hợp sẵn ADC 10 bit.
- Atmega169, 329: AVR tích hợp sẵn LCD driver
- AT90PWM: Là loại AVR có tích hợp SC (power stage controller), thường dùng trong
các ứng dụng điều khiển động cơ hay chiếu sáng nên còn gọi là lighting AVR.
- Attiny11, 12, 15: AVR loại nhỏ.
1.3. KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR
Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và bộ nh
ớ chương
trình tách biệt nhau. Bus dữ liệu dùng cho bộ nhớ dữ liệu và một bus 8bit, cho phép nối
hầu hết các bộ phận ngoại vi với tập thanh ghi. Bus dữ liệu dùng cho bộ nhớ chương
trình có độ rộng 16 bit và chỉ nối với thanh ghi lệnh.
1.3.1. Hoạt động của AVR
Với 32 thanh ghi trong tệp thanh ghi được kết nối trực tiếp với ALU (Arithmetic Logic
Unit) – đơn vị luận lý số học và nó cũng được xem như
là CPU(Central Processing Unit
– đơn vị xử lý trung tâm) của AVR bằng hai đường. Vì thế ALU có thể truy xuất cùng
8
lúc hai thanh ghi trong tệp thanh ghi chỉ trong một chu kỳ xung clock. Còn các lệnh
được chứa trong bộ nhớ chương trình dưới dạng các thanh ghi 16 bit và được truy cập
trong mỗi chu kỳ xung clock. Một lệnh sẽ được nạp vào thanh ghi lệnh, thanh ghi lệnh
sẽ tác động và lựa chọn các thanh ghi trong tệp thanh ghi cũng như lựa chọn RAM cho
ALU thực thi. Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi
được quyết định bởi bộ đếm chương trình- PC (program counter).
Đó chính là cách
thức hoạt động cơ bản của các chip AVR.
1.3.2. Kiến trúc cơ bản bên trong của vi điều khiển AVR
Hình P2_1.1: Kiến trúc cơ bản bên trong của vi điều khiển AVR
9
Hình P2_1.2: Sơ đồ khối của Atmega32 đã được đơn giản hóa
Các bộ phận ngoại vi được tích hợp ngay trên chip, bao gồm cổng I/O số, bộ biến đổi
ADC, bộ nhớ EFPROM, bộ định thời, UART, bộ định thời RTC, bộ điều chế độ rộng
xung (PWM), . . . Đặc điểm này được xem là nổi bật so với nhiều vi điều khiển khác vì
trong khi nhiều bộ xử lý khác phả
i tạo bộ truyền nhận UART hoặc giao diện SPI bằng
phần mềm hay “máy ảo” thì trên vi điều khiển AVR lại được thực hiện bằng phần cứng.
1.4. LỰA CHỌN VI ĐIỀU KHIỂN AVR
Có rất nhiều họ vi điều khiển của các hãng nổi tiếng trên Thế giới như: 8048 và 8051
của Intel, 68HC11 của Motorola, Z8 của Zilog, PIC của Microchip, H8 của Hitachi, . . .
Ở đây chúng tôi lựa chọn họ vi đi
ều khiển AVR của hãng Atmel vì các lý do sau:
- Được chế tạo theo kiến trúc RISC, hiệu suất cao và điện năng tiêu thụ thấp.
- Có kiến trúc đơn giản và hợp lý.
- Bộ nhớ chương trình, dữ liệu và nhiều bộ phận ngoại vi được tích hợp ngay
trên chip.
- Tốc độ xử lý lớn hơn đến 12 lần so với các vi điều khiển thông thường, vi điều
10
khiển AVR có khả năng đạt đến tốc độ xử lý 12MPIS(triệu lệnh trong một giây)
- Khả năng lập trình được và hỗ trợ cho việc lập trình bằng ngôn ngữ cấp cao.
- Có trên thị trường ở Việt Nam.
- Chi phí thấp.
1.5. KIẾN TRÚC VI ĐIỀU KHIỂN ATMEGA32
Cũng giống như các loại chip AVR khác, chip ATmega32 cũng được thiết kế
dựa trên kiến trúc RISC( viết tắt của Reduced Instructions Set
Computer- dịch là máy
tính với tập lệnh đơn giản hóa), khác với kiến trúc CISC(viết tắt của Complex
Instructions Set Computer- dịch là máy tính với tập lệnh phức tạp) kiến trúc RISC với
tập lệnh ngắn gọn và đơn giản hơn, thời gian thực thi nhanh hơn. Hiện nay các bộ vi xử
lý và vi điều khiển có kiến trúc RISC phổ biến là PIC, ARM. DEC Alpha, AVR của
Atmel . . .
Kiến trúc RISC có những chức năng thích hợ
p cho việc sử dụng phần mềm hơn là phần
cứng vì phần mềm dễ thay đổi, dễ cập nhật và tạo ra nhanh hơn so với phần cứng. Do
đó các máy tính dựa trên kiến trúc RISC có thể được nâng cấp nhanh hơn,
các chương trình và các thuật toán có thể điều chỉnh và cải tiến một cách hiệu quả.
1.5.1. Một số đặc tính của ATmega32
• Vi điều khiển 8 bit công suất thấ
p, hiệu năng cao.
• Kiến trúc RISC mở rộng
- Tập lệnh với 131 lệnh, hầu hết mỗi lệnh đều được thực thi trong một chu
kỳ xung clock.
- Một tập thanh ghi với 32 thanh ghi 8 bit, tất cả các chip thuộc họ AVR
đều có tập thanh ghi này.
- Tần số tối đa có thể lên tới 16Mhz.
• Bộ nhớ chương trình và bộ nhớ dữ liệ
u
- 32 Kbyte bộ nhớ lập trình được(flash), có thể nạp lại 10.000 lần.
- 1024 Byte EEPROM, có thể nạp lai 100.000 lần.
- 2 Kbyte SRAM nội
• Giao tiếp chuẩn JTAG(IEEE)
- Hỗ trợ chế độ Debug mở rộng trên chip
- Lập trình cho Flash, EEPROM, set Fuse bit và lock bit thông qua chuẩn
giao tiếp JTAG
11
• Đặc điểm thiết bị ngoại vi
- 2 bộ Timer/Counter 8 bit hoat động riêng biệt
- 1 bộ Timer/Counter 16 bit với Compare mode và Capture mode
- Bộ đếm thời gian thực với bộ tạo dao động riêng biệt
- 4 kênh PWM (Pulse Width Modulator)
- 8 kênh 10 bit ADC
- Giao tiếp chuẩn nối tiếp 2 dây
- Lập trình truyền thông nối tiếp USART
- Bộ WatchDog Timer khả trình với bộ t
ạo dao động riêng biệt trên chip
• Những điểm đặc biệt của vi điều khiển
- Bao gồm cả ngắt nội lẫn ngắt ngoại
- 6 chế độ Sleep: Idle, ADC noise reduction, Power-save, Power-down,
Standby, Extended Standby
• I/O và hình thức đóng gói
- 32 đường I/O lập trình được
- 40 pin –PDIP, 44 lead-TQFP, 44 pad MLF
• Điện thế hoạt động
- 2.7 – 5.5V cho ATmega32L
- 4.5- 5.5V cho ATmega32
1.5.2. Tổ chức bộ nhớ trong AVR
1.5.2.1. Bộ nhớ chương trình (Program Memory): là bộ nhớ Flash lập trình được có
chứa Application Flash Section, phần này lại bao gồm hai phần nhỏ: phần chứa mã lệnh
lập trình cho chip, phần còn lại chứa các vector ngắt. Các vector ngắt nằm ở phần đầu
của Application Flash Section (từ địa chỉ 0x0000) và dài đến bao nhiêu thì tuỳ loại chip,
riêng chip Atmega32 thì các vector ngắt từ địa chỉ 0x0000 đến 0x0028, phần chứa lệnh
lập trình cho chip nằ
m ngay sau đó, chương trình viết cho chip bắt buộc phải nạp vào
phần này.
12
Hình P2_1.3: Tổ chức bộ nhớ chương trình của ATmega32
Bảng P2_1.1:
Các vector ngắt của ATmega32
1.5.2.2. Bộ nhớ dữ liệu (Data Memory): Đây là phần chứa các thanh ghi quan trọng
của chip, việc lập trình cho chip phần lớn truy cập vào bộ nhớ này. Bộ nhớ dữ liệu với
2144 vị trí dùng để định địa chỉ cho tập thanh ghi, bộ nhớ vào ra và bộ nhớ SRAM nội
96 vị trí đầu tiên định địa chỉ cho tập thanh ghi và bộ nhớ vào ra (32 cho tập thanh ghi
và 64 cho bộ nhớ vào ra) và 2048 vị trí còn lại dùng để đị
nh địa chỉ SRAM nội.
13
Hình P2_1.4: Tổ chức bộ nhớ dữ liệu
Bộ nhớ dữ liệu của các chip AVR thường bao gồm 5 phần :
- Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu gồm 32 tệp thanh ghi, mỗi thanh ghi
gồm 8 bit
Tất cả các chip của AVR đều bao gồm 32 tệp thanh ghi có địa chỉ tuyệt đối từ 0x0000
đến 0x001F , chứa các giá trị dương từ 0 đến 255 hoặc trị có dấu từ -128 đến 127 hay
mã ASCII của một ký tự nào đó…Các thanh ghi này được đặt tên theo thứ tự từ R0 đến
R31 và được chia thành hai phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 còn
phần 2 bao gồm các thanh ghi R16 đến R32.
14
Hình P2_1.5: Tập thanh ghi
Tất cả các lệnh thao tác trên các thanh ghi đều có thể truy nhập trực tiếp và truy nhập
trong một chu trình đơn đến tất cả các thanh ghi. Nhưng cũng có một số ngoại lệ là các
lệnh SBCI, SUBI, CPI, ADNI, và ORI cũng như lệnh WI, các lệnh này chỉ tác động đến
thanh ghi R16 đến R31. Các thanh ghi R0 và R26 đến R31 có các chức năng bổ sung.
Thanh ghi R0 sử dụng trong các lệnh nạp bộ nhớ chương trình LPM(Load Program
Memory), trong khi các thanh ghi R26 đến R31 được sử dụng làm thanh ghi con trỏ,
các thanh ghi con trỏ này được s
ử dụng trong nhiều lệnh gián tiếp dùng cho thanh ghi.
- Phần 2: sau tệp thanh ghi là 64 thanh ghi nhập/xuất (64 I/O register) hay còn gọi là
vùng nhớ I/O (I/O memory) vùng nhớ này là cửa ngõ giao tiếp giữa CPU và các thiết bị
ngoại vi. Tất cả các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở
đây. Điển hình là đối với mỗi PORT đều có liên quan đến 3 thanh ghi, đó là DDRx,
PORTx và PINx tất cả 3 thanh ghi này đều nằm trong vùng nhớ I/O. Vì ATmega32 có 4
PORT(A,B,C,D) nên x = A,B,C,D.
- Phầ
n 3: SRAM nội (internal SRAM), là vùng không gian cho chứa các biến (toàn cục
hoặc cục bộ) trong lúc thực thi chương trình, vùng này tương tự RAM trong máy tính
nhưng có dung lượng khá nhỏ, chip ATmega32 có dung lượng 2Kbytes.
- Phần 4: SRAM ngoại (external SRAM) vùng này chỉ tồn tại khi người sử dụng gắn
thêm bộ nhớ ngoài vào chip.
15
- Phần 5: EEPROM (Electrical Ereasable Programmable ROM) là một phần quan trọng
của các chip AVR, vì là ROM nên bộ nhớ này không bị xóa ngay cả khi không có
nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu. Bộ nhớ này
thường được tách riêng với bộ nhớ dữ liệu nhưng vẫn là một phần trong bộ nhớ dữ liệu.
Hình P2_1.6: Bộ nhớ dữ liệu EEPROM
1.5.3. Các thanh ghi chức năng
a.Thanh ghi trạng thái- SREG (Status Register)
Đây là một trong những thanh ghi quan trọng nhất của chip AVR, có 8 bit cờ báo hiệu
trạng thái hiện tại của vi điều khiển, tất cả các bit này sẽ bị xóa khi
reset.
Bit 7 – I: Global Interrupt Enable: cho phép ngắt toàn cục hoặc cấm tất cả các ngắt
Bit 6–T : Bit Copy Storage : dùng nạp bit BLD (bit load) và lưu trữ bit BST (bit store)
để nạp và lưu trữ các bit từ một thanh ghi này vào thanh ghi khác
Bit 5 – H: Half Carry Flag: báo cho thấy sự nhớ một nửa trong một số lệnh số học
Bit 4- S: Sing Flag: cờ dấu, bit này là kết quả EX-OR giữa cờ phủ định N và cờ tràn
(overflow)
Bit 3- V: cờ tràn lấy bù nhị phân
Bit 2 – N:Negative Flag: cờ phủ định
Bit 1 – Z: Zero Flag: cờ s
ố không, chỉ báo một kết quả bằng 0 sau khi thực hiện một
phép tính số học hoặc logic
Bit 0 – C: Carry Flag: cờ nhớ, chỉ cho sự nhớ trong trong phép tính số học hoặc logic
b.Thanh ghi con trỏ ngăn xếp- SP (Stack Pointer)
Có độ rộng 2 byte, được dùng để chỉ đến vùng trong bộ nhớ SRAM ở đỉnh ngăn
xếp và lưu trữ địa chỉ mà bộ xử lý trả trở lại sau khi gọi ngắt hoặc gọi thủ tục hoặc có
16
thể lưu các biến cục bộ. Khi sử dụng SP cần tạo giá trị hợp lý vì địa chỉ bắt đầu của
SRAM là 0x0060 chứ không phải là 0x0000. Các giá trị khởi tạo thường là 0
c.Thanh ghi điều khiển toàn bộ vi điều khiển – MCUCR (MCU Control Register)
Bit 7- SE: Cho phép ngủ(sleep enable), việc đặt bit này thành “1” cho phép bộ xử lý
chuyển sang chế độ ngủ. Sau khi đặt bit này thành “1” chương trình cần phải thực thi
lệnh SLEEP.
Bit 6…4- SM2…0: Đây là những bit chọn chế độ ngủ, có 6 chế độ sleep được thể hiện
trong hình 1.14
Bit 3,2- ISC11,ISC10: Bit điều khiển nhạy cảm ngắt dùng cho INT1
Bit 1,0- ISC01,ISC00: Bit điều khiển nhạy cảm ngắt dùng cho INT0
Bảng P2_1.2:
Các chế độ sleep của AVR
d.Thanh ghi các PORT
Đối với mỗi cổng (PORT) của vi điều khiển đều chứa 3 thanh ghi chức năng liên quan
đến các cổng
- Thanh ghi DDRx( thanh ghi hướng dữ liệu ): là thanh ghi 8 bit có tác dụng điều
khiển hướng của cổng (cổng ra hay cổng vào). Nếu có 1 bit nào đó trong thanh
17
ghi này bật lên 1 thì cổng này được định nghĩa là cổng ra, ngược lại nếu không
có bit nào được bật lên 1 thì quy định đó là cổng vào.
VD: DDRA=0xFF có nghĩa là PORTA được định nghĩa là PORT xuất
DDRA=0x00 có nghĩa là PORTA được định nghĩa là PORT nhập
- Thanh ghi PORTx(thanh ghi dữ liệu cổng): là một thanh ghi 8 bit, nếu bit nào
trong thanh ghi mà được set lên 1 thì giá trị đưa ra tại bit đó là mức logic 1
VD: PORTA = 0x01 có nghĩa là giá trị xuất ra PORTA.0 là 1
- Thanh ghi PINx(thanh ghi địa chỉ chân vào): cho phép truy nhập trực tiếp đế
n
các chân của vi điều khiển, chỉ cho phép đọc dữ liệu mà không thể ghi.
1.5.4. Hoạt động ngắt-Interrrupt
Ngắt là một cơ cấu điều khiển dòng lệnh, khi có một hoạt động ngắt xảy ra, tín hiệu
khẩn cấp sẽ được gởi đến bộ xử lý để yêu cầu bộ xử lý tạm ngừng các hoạt động hiện
tại ngay lập tức để nhả
y đến nơi khác thực hiện một nhiệm vụ khẩn cấp nào đó, nhiệm
vụ này là trình phục vụ ngắt – isr (interrupt service routine ). Chương trình ngắt chỉ đơn
giản giống hệt như một chương trình con, ngoại trừ một đặc điểm là việc thực thi của
đoạn chương trình ngắt này không bị bộ xử lý đoán trước là sẽ xuất hiện ở thời đi
ểm cũ
thể nào. Sau khi kết thúc nhiệm vụ trong isr, bộ đếm chương trình PC sẽ được trả về
giá trị trước đó để bộ xử lý quay về thực hiện các nhiệm vụ còn dang dở. Như vậy ngắt
có mức độ ưu tiên xử lý cao nhất, được dùng để xử lý các sự kiện bất ngờ nhưng không
quá tốn thời gian.
Hình P2_1.7: Sơ đồ thực hiện ng
ắt của AVR
18
Bộ vi điều khiển AVR có rất nhiều cấu trúc ngắt, khả năng ngắt đã được chu cấp cho
hầu hết các thiết bị ngoại vi sao cho chương trình chính không cần phải thường xuyên
kiểm tra các thiết bị này.
Một loạt các sự kiện có thể kể ra khi có một ngắt xuất hiện là:
1. Thiết bị ngoại vi ngắt bộ xử lý
2. Việc thực thi lệnh đượ
c hoàn thành
3. Địa chỉ của lệnh tiếp theo được lưu trữ trên ngăn xếp (một ngăn xếp phần
cứng hoặc một ngăn xếp phần mềm)
4. Địa chỉ ISR(đoạn chương trình ngắt) được nạp vào bộ đếm chương trình
5. Bộ xử lý thực thi ISR
6. Việc hoàn thành các thao tác thực thi ISR được chỉ báo bằng lệnh
RETI(trả lại từ ng
ắt)
7. Bộ xử lý nạp bộ đếm chương trình với giá trị được lưu trữ trên ngăn xếp
và việc thực thi chương trình bình thường lại tiếp tục.
Các thanh ghi dùng cho ngắt của ATmega32
a.Thanh ghi điều khiển ngắt chung- GICR(General Interrupt Control Register)
Bit 7…5: Bit lựa chọn ngắt, nếu bit nào được set lên 1 thì ngắt tương ứng được sử dụng
b.Thanh ghi cờ ngắt chung- GIFR (General Interrupt Flag Register)
Các bit trong thanh ghi GIFR báo hiệu cho ta biết nếu một ngắt đã xuất hiện. Nếu có sự
thay đổi về cạnh hoặc mức logic ở ngắt nào thì cờ INTFx set thành 1. Nếu bit I trong
thanh ghi SREG và INTx trong thanh ghi GICR được set 1 thì vi điều khiển sẽ nhảy đến
vector ngắt đó. Cờ được xóa khi mà chương trình con ngắt được thực thi. Cờ có thể
được đặt lại bằng cách ghi giá trị 1 vào nó.
Khi sử dụng ngắt nên cẩn thận việ
c hai hay nhiều ngắt xảy ra cùng lúc, vì khi đó CPU
thực hiện xong một ngắt rồi sau đó bỏ qua tất cả các ngắt khác cho dù các ngắt khác
chưa thực hiện. Do vậy chúng ta nên hạn chế việc dùng ngắt trong việc lập trình cho
AVR.