Tải bản đầy đủ (.pdf) (102 trang)

Tài liệu hướng dẫn thực hành trên KIT AVR

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.25 MB, 102 trang )
















































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





























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
TÀI LIỆU HƯỚNG DẪN
THỰC HÀNH TRÊN KIT AVR
(M-DE1)
v

M
M


C
C


L
L


C
C


Trang


Mục lục
Lời giới thiệu 1
Bài 1
: KIT AVR VÀ TRÌNH BIÊN DỊCH CODEVISIONAVR 2

Bài 2
: ĐIỀU KHIỂN VÀO RA (I/O) VỚI LED ĐƠN 17
Bài 3
: ĐIỀU KHIỂN LED 7 ĐOẠN 24
Bài 4
: ĐIỀU KHIỂN LED MA TRẬN 5x7 27
Bài 5
: HIỂN THỊ LCD 16x2 32
Bài 6
: HOẠT ĐỘNG NGẮT VÀ ĐỊNH THỜI CỦA AVR 38
Bài 7
: HOẠT ĐỘNG NỐI TIẾP CỦA AVR &
TRUYỀN THÔNG VỚI MÁY TÍNH 47
Bài 8
: GIAO TIẾP VỚI BÀN PHÍM (KEY PAD) 56
Bài 9
: ĐIỀU KHIỂN ĐỘNG CƠ DC MOTOR VÀ STEP MOTOR 60
Bài 10
: GIAO TIẾP I2C 66
1


Lời giới thiệu


Trên cơ sở KIT AVR (KIT M-DE1) đã thiết kế chúng tôi tiến hành xây dựng tài
liệu hướng dẫn thực hành trên bộ KIT này, nhằm phục cho 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.
Tài liệu hướng dẫn thực hành bao gồm các bài thí nghiệm được thiết kế từ cơ bản đến
nâng cao, giúp cho người sử dụng tiếp c

ận nhanh với vi điều khiển và cách lập trình
điều khiển thiết bị. Bố cục của bài thí nghiệm bao gồm các phần:
- Mục đích của bài thí nghiệm
- Yêu cầu của bài thí nghiệm
- Cơ sở lý thuyết liên quan đến nội dung của bài thí nghiệm
- Hướng dẫn thực hành
Thông qua các bài thí nghiệm này người sử dụng có thể phát triển các ứng dụng
cụ th
ể.
Cụ thể các bài thí nghiệm như sau:
Bài 1
: KIT AVR VÀ TRÌNH BIÊN DỊCH CODEVISIONAVR
Bài 2: ĐIỀU KHIỂN VÀO RA (I/O) VỚI LED ĐƠN
Bài 3
: ĐIỀU KHIỂN LED 7 ĐOẠN
Bài 4
: ĐIỀU KHIỂN LED MA TRẬN 5x7
Bài 5
: HIỂN THỊ LCD 16x2
Bài 6: HOẠT ĐỘNG NGẮT VÀ ĐỊNH THỜI CỦA AVR
Bài 7
: HOẠT ĐỘNG NỐI TIẾP CỦA AVR & TRUYỀN THÔNG VỚI MÁY TÍNH
Bài 8
: GIAO TIẾP VỚI BÀN PHÍM (KEY PAD)
Bài 9
: ĐIỀU KHIỂN ĐỘNG CƠ DC MOTOR VÀ STEP MOTOR
Bài 10
: GIAO TIẾP I2C VỚI DS1307







2

Bài 1: KIT AVR VÀ TRÌNH BIÊN DỊCH CODEVISIONAVR
I. Mục đích
Đưa ra cái nhìn 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.
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.
II. Yêu cầu
1.Nắm rõ cấu trúc của vi điều khiển Atmega32
2.Hiểu được các module trên schematic của KIT VAR.
3.Các bước để soạn thảo một project (source code) cho chip AVR.
III. Cơ sở
lý thuyết
III.1. Vi điều khiển Atmega32
Một số đặc điểm của Atmega32
• 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
• Đặ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
3


Hình 1: Sơ đồ chân của ATMega32



Hình 2: Sơ khối bên trong của ATMega32
Lưu ý
: Chi tiết về cấu trúc của vi điều khiển Atmega32 xem datasheet.

III.2. Giới thiệu KIT AVR
KIT AVR được thiết kế với mục tiêu phục vụ cho việc giảng dạy và nghiên cứu
về vi điều khiển và phát triển các ứng dụng nhúng trên vi điều khiển. KIT AVR
bao gồm các môđun sau:
III.2.1.Môđun xử lý trung tâm được thiết kế gồm:
4

- Vi điều khiển Atmega32
- Bộ tạo dao động ngoài (thạch anh 16MHz)
- Các công tắc nhấn được nối với chân của vi điều khiển như sau:
Bảng 1: Bảng sơ đồ chân của Atmega32 kết nối Switch
Số
TT
Chân của
Atmega32
Ký hiệu
thiết bị

1 RESET SW1
2 INT0 SW3
3 INT1 SW2

PC5(TDI)
PD6

PA0
PC6
PB6
PA3
PC1
TxD
16
14
19
10
30
32
21
9
20
13
17
25
12
11
31
1
2
3
4
5
6
7
8
33

40
39
38
37
36
35
34
15
18
26
27
28
29
22
23
24
(INT0)PD2
(RXD)PD0
(OC1A)PD5
VCC
AVCC
AREF
(OC2)PD7
RESET
(ICP)PD6
XT1
(INT1)PD3
(TMS)PC3
XT2
GND

GND
(XCK/T0)PB0
(T1)PB1
(INT2/AIN0)PB2
(OC0/AIN1)PB3
(SS)PB4
(MOSI)PB5
(MISO)PB6
(SCK)PB7
(ADC7)PA7
(ADC0)PA0
(ADC1)PA1
(ADC2)PA2
(ADC3)PA3
(ADC4)PA4
(ADC5)PA5
(ADC6)PA6
(TXD)PD1
(OC1B)PD4
(TDO)PC4
(TDI)PC5
(TOSC1)PC6
(TOSC2)PC7
(SCL)PC0
(SDA)PC1
(TCK)PC2
VCC
PA4
PA5
PD7

PD4
PC0
PB3
PB0
PA7
PC4(TDO)
VCC
RST
PB5
PD3
PA1
PA2
PB2
PA6
PC7
R24
10k
104
PB1
PD5
PB7
PC2(TCK)
20P2
RxD
PC3(TMS)
R22
10k
PB4
PD2
20P1


Hình 3:
Module bộ xử lý trung tâm

III.2.2. Các môđun giao tiếp vào/ra (I/O)
III.2.2.1. Các port của vi điều khiển Atmega32
Bảng 2:Bảng ký hiệu các PORT của Atmega32
Số
TT
Port của
Atmega32
Ký hiệu
thiết bị
1 PORTA (PA) J13
2 PORTB (PB) J10
3 PORTC (PC) J11
4 PORTD (PD) J12

5

PC7
PC0
PC6
PC5(TDI)
PC4(TDO)
PC3(TMS)
PC1
J11
PORTC
1

2
3
4
5
6
7
8
PC2(TCK)
PD5
PD2
PD3
RxD
PD7
PD4
PD6
J12
PORTD
1
2
3
4
5
6
7
8
TxD
J10
PORTB
1
2

3
4
5
6
7
8
PB2
PB0
PB7
PB3
PB1
PB5
PB4
PB6
PA6
PA7
PA0
PA1
PA3
PA2
PA5
J13
PORTA
1
2
3
4
5
6
7

8
PA4

Hình 4: Các port của vi điều khiển Atmega32

III.2.2.2. Màn hình hiển thị-LCD 16x2
Bảng 3:Bảng kỳ hiệu PORT của LCD
Số
TT
Port của
LCD 16x2
Ký hiệu
thiết bị
1 LCD 16x2 J2
2 LCD PORT J20
LCD2
LCD4
LCD1
J20
LCD
1
2
3
4
5
6
7
8
LCD0
LCD6

LCD2
LCD0
LCD7
VCC
LCD1
LCD5
R99
330
12
LCD6
LCD5
J2
LCD16x2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LCD4

LCD7

Hình 5:Môđun màn hình hiển thị-LCD 16x2
III.2.2.3. Led đơn: có 8 led đơn
Bảng 4: Bảng ký hiệu LED đơn
Số
TT
LED đơn Ký hiệu
thiết bị
1 LED0 D4
2 LED1 D5
3 LED2 D6
4 LED3 D7
5 LED4 D8
6 LED5 D9
7 LED6 D10
8 LED7 D11
6

R4
PA6
PB0
D5
LED
R3 R11
PA4
PA0
D4
LED
PA1

D9
LED
PA2
R5
D6
LED
D8
LED
R6
D10
LED
PA3
VCC
U11
74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9
12

15
16
19
2010
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
VCCGND
D11
LED
PA7
PA5
D7
LED
R9 R10R7


Hình 6:Môđun LED đơn
III.2.2.4. Led 7 đoạn (7-SEGMENT LED)
Bảng 5: Bảng ký hiệu LED 7 đoạn
Số
TT
LED 7 đoạn Ký hiệu
thiết bị
1 LED7SEG0 J21
2 LED7SEG1 J22
3 LED7SEG2 J23
4 LED7SEG3 J24
R59 300
G
U13
74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9

12
15
16
19
2010
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
VCCGND
C
R63 300
R61 300
A
R66 300
PB1

R60 300
PA4
Q6
PNP
Q8
PNP
C
J22
LED
1
2
3
4
5
6
7
8
9
10
D
F
J23
LED
1
2
3
4
5
6
7

8
9
10
E
D
A
Q9
PNP
DP
C
R64 300
A
DP
B
F
G
PA0
Q7
PNP
PB6
DP
G
R62 300
C
PA6
R43
1K
J21
LED
1

2
3
4
5
6
7
8
9
10
PB5
PA7
PA3
PA2
VCC
E
F
D
E
PB4
PA5
R42
1K
R41
1K
R44
1K
DP
BB
PB7
PA1

A
J24
LED
1
2
3
4
5
6
7
8
9
10
D
G
F
B
R65 300
E
VCC

Hình 7:Môđun Led 7 đoạn
III.2.2.5. Switch DIP-8: được kết nối như hình sau, có ký hiệu là SW10
7

PC6
R51
4.7K
PC4(TDO)
U16

74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9
12
15
16
19
2010
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE

Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
VCCGND
VCC
PC5(TDI)
PC2(TCK)
R40
4.7K
R50
4.7K
PC3(TMS)
R53
4.7K
R58
4.7K
VCC
PC0
R39
4.7K
R52
4.7K
PB2
R49
4.7K

PC7
SW10
SW DIP-8
PC1

Hình 8:Môđun Switch DIP-8
III.2.2.6. Ma trận LED 5x7: được kết nối như hình sau, có ký hiệu là U6
PA4PC4(TDO)
R19
R18
PC0
R13
R17
PA1
PA5
PA6
R14
PA2
PC3(TMS)
R15
PC2(TCK)
PA0
PC1
R16
U6
MATRIX 5x7 (2 COLORs)
1
2
3
4

5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

17
18
PA3

Hình 9:Môđun Ma trận LED 5x7
III.2.3. Môđun giao tiếp theo chuẩn UART
Môđun này được thiết kế để truyền thông giữa máy tính với vi điều khiển thông qua
chuẩn UART. Môđun này được kết nối như hình sau, có ký hiệu là DB9
C1
104
TxD
C4
104
13
14
15
7
6
2
8
16
12
11
1
10
3
4
9
5
R1I

T1O
GND
T2O
Vs-
Vs+
R2I
VCC
R1O
T1I
C1+
T2I
C1-
C2+
R2O
C2-
C3
104
DB9
5
9
2
7
3
6
4
1
8
C2
104
RxD

VCC

Hình 10:Môđun UART/ISP

III.2.4. Môđun điều khiển động cơ DC và động cơ bước (STEP MOTOR)
Dưới đây là sơ đồ mạch được thiết kế để ghép nối động cơ DC và động cơ bước với Vi
điều khiển.
8

VCC
DK1A
C11
104
C9
104
15
VCC
1
DK2A
DK2B
GND
DK1B
OUT1A
U6
LM7805
1
2
3
VI
GND

VO
+12V
GND
VCC
C12
100u
OUT1A
J1
L298
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VCCVCC
OUT2B
VCC
OUT1B
OUT2A
C10

100u

Hình 11:Môđun động cơ DC


J8
1
2
3
4
+12V
J9
1
2
3
4
J11
1
2
3
J7
1
2
3
4
U1
ULN2803
1
2
3

4
5
6
7
8
9 10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
GND 10
11
12
13
14
15
16
17

18
J10
1
2
3
4

Hình 12:Môđun động cơ bước
III.2.5. Môđun giao tiếp theo chuẩn I
2
C
Môđun này được thiết kế để giao tiếp giữa vi điều khiển với các chip ngoại vi như:
EEPROM, Real Time Clock(RTC), thông qua chuẩn giao tiếp I
2
C.
9

U9
DS1307
8
1
2
34
7
5
6
VCC
X1
X2
VBATGND

SQW
SDA
SCL
VCC
U7
PIN 3V
12
R12 4K7
D12
LED
Y2
U10
24C64
8
1
2
3
4
7
5
6
VCC
A0
A1
A2
GND
WP
SDA
SCL
R1

300R
R2 4K7
PC1
PC0
J4
CONG TAC
8
7
6
5
1
2
3
4

Hình 13:Môđun I2C


III.2.6. Môđun bàn phím

Hình 14:Môđun bàn phím
III.2.7. Các môđun khác
- Môđun cấp nguồn:
10

VCC
J3
POWER
1
2

D3
LED
R8
1k
C5
100uF/16V
C6
104

VCC
U8
USB_B
1
23
4
D+
GNDVCC
D-

Hình 15:Môđun cấp nguồn
-Môđun debugger dùng để chạy debugger chương trình.
VCC PC4(TDO)
J1
DEBUGGER
1
3
5
7
9
2

4
6
8
10
PC2(TCK)
PC5(TDI)
PC3(TMS)

Hình 16:Môđun debugger



-Môđun ISP Programer: dùng để nạp chương trình vào vi điều khiển
PB6
RST
PB5
VCC
PB7
J18
ISP PROGRAMER
1 2
3 4
5
7
9
6
8
10

Hình 17:Môđun ISP Programer


IV. Chương trình CodeVisionAVR
Đây là chương trình hỗ trợ lập trình cho vi điều khiển AVR bằng ngôn ngữ C, nó hỗ trợ
nhiều thư viện lập trình, thuận lợi cho việc phát triển các ứng dụng lớn trên AVR.
Khởi động chương trình CodeVisionAVR bằng cách click chuột vào ICON của
CodeVision trên Desktop hoặc vào đường dẫn sau:

11


Hình 18: Khởi động chương trình CodeVisionAVR

Xuất hiện cửa sổ chính của chương trình CodeVisionAVR như sau:

Hình 19: Cửa sổ chính của chương trình CodeVisionAVR

Tạo Project mới chọn File -> New sẽ xuất hiện cửa sổ Create New File

Sau đó chọn Project -> nhấn OK
Chương trình sẽ yêu cầu xác nhận việc tạo project mới sử dụng CodeWizardAVR

12


Kích vào Yes để xác nhận.
Tiếp theo sẽ xuất hiện cửa sổ CodeWizardAVR (Hình P3_2.20), cho phép chúng ta
khởi tạo cấu hình cho chip vi điều khiển và một số thiết bị ngoại vi như: Ports, LCD,
USART, Timers, I2C, ADC, SPI, . . .



Hình 20: Khởi tạo cấu hình cho chip và thiết bị ngoại vi

Sau khi đã khởi tạo xong cho chip và thiết bị ngoại vi chúng ta lưu lại cấu hình bằng
cách chọn File -> Generate, Save and Exit
13



Sau đó xuất hiện cửa sổ yêu cầu lưu file source của project, gồm 3 file có tên mở rộng
như sau: *.c, *.prj, *.cwp

Hình 21: Lưu file source của project
Sau khi đã lưu các file source của project sẽ xuất hiện cửa sổ quản lý project.

Hình 22: Cửa sổ quản lý project


14

Chương trình CodeVisionAVR sẽ tạo code mẫu, trong đó có đầy đủ code cần thiết mà
chúng ta đã khởi tạo trước đó. Đoạn code mẫu như sau:
















































/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.

Project :
Version :
Date : 2/21/2010
Author :
Company :
Comments:

Chip type : ATmega32
Program type : Application
Clock frequency : 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/

#include <mega32.h>


// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
15

Từ cửa sổ này chúng ta tiến hành viết code (bằng ngôn ngữ C), biên dịch và nạp vào vi
điều khiển.
-Để biên dịch code chương trình, chúng ta chọn Project -> Compile (F9)
Build (Shift+F9) và Build All (Ctrl+F9).

Hình 23: Cửa sổ biên dịch code chương trình

-Nạp vào chip: trước khi nạp vào chip chúng ta cần thiết lập một số thông số như
+Chọn loại mạch nạp: Atmel STK500/AVRISP
+Chọn Port giao tiếp: tuỳ theo máy tính nhận diện bộ STK500 ở port nào thì
chúng ta chọn đúng port giao tiếp.



Hình 24: Cấu hình thông số nạp vào chip vi điều khiển
Để nạp vào chip chúng ta chọn Tools -> Chip Programmer sẽ xuất hiện cửa sổ như hình
bên dưới. Sau đó chọn Program -> FLASH
16





Hình 25: Cửa sổ nạp vào chip vi điều khiển

























17


Bài 2: ĐIỀU KHIỂN VÀO RA (I/O) VỚI LED ĐƠN
I. Mục đích
-Hiểu rỏ và cấu hình được các thanh ghi của một port dữ liệu. Cụ thể đối với
PortA thì phải hiểu được các thanh ghi sau: DDRA, PINA, PORTA. Tương tự
đối với các port khác. Khởi tạo được CPU hoạt động với cấu hình tối thiểu nhất.
-Hiểu được schematic của các môđun I/O như: LED đơn, Switch DIP-8.
-Điều khiển được các port củ
a chip AVR hoạt động như các port vào/ra dữ liệu.
-Đ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.
II. Yêu cầu
1. Cấu hình khởi tạo cho vi điều khiển ATMega32 hoạt động với thạch anh
16Mhz.
2. Cấu hình PORT A và PORT B là xuất dữ liệu ra, PORT C là nhập dữ
liệu.
3. Sáng tất cả các LED đơn.
4. Sáng 4 LED đơn D4-D7
5. Cho các LED đơn sáng từ phải sang trái.
6. Đọc dữ liệu 8 bit trên SW10 và xuất ra 8 LED đơn (D4-D11).
III. Cơ s
ở lý thuyết
Tất cả các port của AVR đều có chức năng Read-Modify-Write (Đọc-Ghi và
Chỉnh sửa), được sử dụng như các port vào/ra. Trong AVR có sẵn mức điện áp
ra ở các chân đủ để điều khiển LED trực tiếp. Thêm vào đó ở mỗi chân của chip
AVR đều có diot phân cực nghịch và tụ điện lọc thành phần AC.
Chức năng cơ bản của các PORT là các cổng và/ra số, input hay output là dựa
vào thi
ết lập ở thanh ghi DDRx, có thể thiết lập từng chân là input hay output (0
là input, 1 là output). Các chân của các port vào/ra ngoài chức năng thông
thường là các cổng và/ra số, nó còn có thể có các chức năng khác (xem datasheet

của từng loại vi điều khiển).
III.1. Các thanh ghi dùng cho điều khiển các Port vào ra
Khi xem xét đến các cổng I/O của AVR thì ta phải xét tới 3 thanh ghi sau:





Hình 26: Các thanh ghi điều khiển các port vào/ra
Trong đó x cho biết tên port trong vi điều khiển là A, B, C, D, . . .
Các thanh ghi bất kỳ của AVR bây giờ được xem như một biến kiểu 1 byte và ta
có thể truy xuất như một biến bình thường.
a.Thanh ghi hướng dữ liệu DDRn
Định trạng thái (hướng dữ liệu) vào/ra của một PORTx bất kỳ, bit có giá trị bằng
0 là đọc dữ liệu, bit có giá trị bằng 1 là xuất dữ liệu.


-Để cấu hình một port
x bất kỳ là đọc dữ liệu: DDRx = 0x00;
-Để cấu hình một port x bất kỳ là xuất dữ liệu: DDRx = 0xFF;

Vi
điều
khiển
AVR
Port x
DDRx
PORTx
PINx
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0 1 1 0 1 0 0 1
18

Trên một port 8 bit bất kỳ cho phép chúng ta có thể cấu hình cho 3 bit là đọc dữ
liệu từ ngoài vào và 5 bit còn lại là xuất dữ liệu ra.
b. Thanh ghi nhập/xuất dữ liệu PORTx và PINx
-Để xuất dữ liệu 8 bit ra 1 port (đã được cấu hình là xuất dữ liệu):
PORTx = data; //data phải là dữ liệu kiểu 1 byte.
-Để đọc dữ liệu từ 1 port (đã được cấu hình là đọc dữ liệu vào):
data = PINx; //data phải là biến kiểu 1byte.
Trên một port bấ
t kỳ, đã được cấu hình là xuất 8 bit dữ liệu ra ngoài, như vậy có
thể trong một lệnh xuất dữ liệu ra ngoài ta có thể xuất 1 bit dữ liệu mà thôi còn 7
bit dữ liệu còn lại không bị ảnh hưởng.
Ngoài ra, chúng ta có thể sử dụng CodeWizardAVR để thiết lập cấu hình cho các
PORT .

Hình 27: Thiết lập cấu hình cho các PORT bằng CodeWizardAVR
Ví dụ như trên hình:các bit 0,1,2,4,7 của PORTA làm chân ra có trở kéo, còn các
bit còn lại làm chân vào. Khi đã thiết lập xong thì các bit 0,1,2,4,7 sẽ có thể xuất
dữ liệu ra còn các bit còn lại có thể nhận dữ liệu vào.
c.Một số ví dụ khởi tạo PORT
-Ta muốn ghi dữ liệu giá trị logic ’0’ ra PORTA.0 để bật tắt một Led thì:
PORTA.0=1;
-Ta muốn đọc dữ liệu là một bit từ chân 3 của PORTA:
Bit x;
x=PINA.3;
- Khi ta thiết l
ập PORTA làm cổng ra thì ta có thể xuất dữ liệu ra từ PORTA:
PORTA=0xAA;

19

-Nếu ta thiết lập PORTA làm cổng vào và giá trị hiện thời của PORTA là 55
thì sau câu lệnh đọc giá trị từ PORTA: x=PORTA thì x=0x55.
-Khi thiết lập PORTA làm cổng ra thì khi reset giá trị của PORTA là
PORTA=0xFF
- Khi thiết lập PORTA làm cổng vào thì khi reset giá trị của PORTA là
PORTA=0x00
Việc thiết lập cổng vào ra là một việc quan trọng vì tùy theo mục đích sử dụng
các cổng nào làm cổng vào ra, thì ta phải thiết lập đúng lúc đó mới có thể sử
dụng
được.
III.2. Cấu hình phần cứng của các PORT, LED đơn và Switch trên KIT AVR
a. Các port của vi điều khiển Atmega32
Bảng 5:Bảng ký hiệu các PORT của Atmega32
Số
TT
Port của
Atmega32
Ký hiệu
thiết bị
1 PORTA (PA) J13
2 PORTB (PB) J10
3 PORTC (PC) J11
4 PORTD (PD) J12

PC7
PC0
PC6
PC5(TDI)

PC4(TDO)
PC3(TMS)
PC1
J11
PORTC
1
2
3
4
5
6
7
8
PC2(TCK)
PD5
PD2
PD3
RxD
PD7
PD4
PD6
J12
PORTD
1
2
3
4
5
6
7

8
TxD
J10
PORTB
1
2
3
4
5
6
7
8
PB2
PB0
PB7
PB3
PB1
PB5
PB4
PB6 PA6
PA7
PA0
PA1
PA3
PA2
PA5
J13
PORTA
1
2

3
4
5
6
7
8
PA4

Hình 28: Các port của vi điều khiển Atmega32

b. Led đơn: có 8 led đơn được tích hợp trên KIT
Bảng 6: Bảng ký hiệu LED đơn
Số
TT
LED đơn Ký hiệu
thiết bị
1 LED0 D4
2 LED1 D5
3 LED2 D6
4 LED3 D7
5 LED4 D8
6 LED5 D9
7 LED6 D10
8 LED7 D11
20

R4
PA6
PB0
D5

LED
R3 R11
PA4
PA0
D4
LED
PA1
D9
LED
PA2
R5
D6
LED
D8
LED
R6
D10
LED
PA3
VCC
U11
74LS373
3
4
7
8
13
14
17
18

1
11
2
5
6
9
12
15
16
19
2010
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
VCCGND

D11
LED
PA7
PA5
D7
LED
R9 R10R7

Hình 29: Sơ đồ kết nối 8 LED đơn trên KIT
c. Switch DIP-8: được kết nối như hình sau, có ký hiệu là SW10
PC6
R51
4.7K
PC4(TDO)
U16
74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9

12
15
16
19
2010
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
VCCGND
VCC
PC5(TDI)
PC2(TCK)
R40
4.7K
R50

4.7K
PC3(TMS)
R53
4.7K
R58
4.7K
VCC
PC0
R39
4.7K
R52
4.7K
PB2
R49
4.7K
PC7
SW10
SW DIP-8
PC1

Hình 30: Môđun Switch DIP-8

IV. Thực hành
IV.1. Khởi tạo CPU
Thực hiện các bước để tạo project mới (xem hướng dẫn ở mục IV của Bài 1).Lưu ý ở
bước khởi tạo CPU, từ cửa sổ CodeWizardAVR chúng ta chọn thẻ Chip và chọn cấu
hình chip như sau:
21

-Chip: Atmega32

-Clock: 16MHz

Hình 31: Khởi tạo CPU

IV.2. Khởi tạo PORT
Từ cửa sổ CodeWizardAVR chúng ta chọn thẻ Ports và cấu hình cho Port A, Port B là
xuất dữ liệu ra, PORT C là nhập dữ liệu. Để cấu hình Port A chúng ta chọn thẻ PortA,
trong mỗi Port có 2 thông số cần cấu hình:
-Data Direction: cấu hình hướng dữ liệu (chứa trong thanh ghi DDRx)
-Pullup/Output Value: giá trị xuất mặc định (chứa trong thanh ghi PORTx).
Hình bên dưới cho biết thiết lập cấu hình của Port A với hướng dữ li
ệu là xuất (0xFF)
và giá trị xuất là 0x00. Port B được thiết lập cấu hình tương tự Port A.

(a) (b)
Hình 32: (a) Khởi tạo Port A, (b) Khởi tạo Port C
Sau khi thiết lập xong thì 2 thanh ghi chứa các giá trị đã thiết lập cấu hình như sau:
//Cấu hình Port A
PORTA=0x00;
DDRA=0xFF;
22

// Cấu hình Port B
PORTB=0x00;
DDRB=0xFF;
//Cấu hình Port C
PORTC=0x00;
DDRC=0x00;

IV.3. Viết code chương trình

Sau khi đã hoàn tất quá trình tạo project và khởi tạo CPU và Port theo yêu cầu, chúng ta
tiến hành viết code để nạp vào vi điều khiển để điều khiển những thiết bị ngoại vi theo
yêu cầu.
Gợi ý viết code như sau:
#include <mega32.h>
#include <delay.h>
// Declare your global variables here
int val = 1;
void main(void)
{
// Khởi tạo ban đầu
. . .
while (1)
{
// Place your code here
PORTB.0 = 1; //mở chốt dữ liệu
PORTA = val;
val*=2;
if (val>256)
val = 1;
delay_ms(500);
};
}
IV.4. Biên dịch code và nạp vào vi đ
iều khiển
Sau khi đã viết code xong, chúng ta tiến hành biên dịch và nạp vào vi điều khiển.
-Để biên dịch chương trình chúng ta chọn: Project -> Compile hoặc nhấn F9
Trong quá trình biên dịch nếu code bị lỗi sẽ được thông báo lỗi thông qua cửa sổ ở hình
sau nó cho biết số lỗi. Ngoài ra chương trình còn cho chúng ta biết một số thông số
khác như:

Bit variables size: 0 byte(s)
Data Stack area: 60h to 25Fh
Data Stack size: 512 byte(s)
Estimated Data Stack usage: 0 byte(s)
RAM Global variables size: 0 byte(s)
Hardware Stack area: 260h to 85Fh
Hardware Stack size: 1536 byte(s)
Heap size: 0 byte(s)

EEPROM usage: 0 byte(s), 0.0% of EEPROM
23


Hình 33: Cửa sổ thông báo lỗi khi biên dịch
-Để nạp vào chip chúng ta chọn Tools -> Chip Programmer sẽ xuất hiện cửa sổ như
hình bên dưới. Sau đó chọn Program -> FLASH


Hình 34: Cửa sổ nạp vào chip


×