GIỚI THIỆU:
Động cơ một chiều là loại động cơ có cấu tạo và cách điều khiển đơn giản nhất, tốc độ động cơ được điều khiển thông qua điện áp cấp vào 2 đầu động cơ. Động cơ một chiều được ứng dụng rất rộng rãi trong các hệ thống tự động. Trong bài này gồm có sơ đồ và điều khiển động cơ DC bằng ATMEGA.
Mục tiêu:
Sau khi học xong bài học này người học có khả năng:
- Kiến thức: Trình bày được phương pháp kết nối điều khiển động cơ DC
- Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển động cơ DC
- Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập.
Nội dung chính:
75 trang |
Chia sẻ: Tiểu Khải Minh | Ngày: 23/02/2024 | Lượt xem: 69 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Kỹ thuật vi xử lý - Trường Cao đẳng Công nghiệp Hải Phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
switch (n)
{
case 1: printf (“một\n”) ; break ;
case 2: ;
case 3: printf (“hai hoặc ba\n”) ; break ;
case 4: printf (“bốn\n”) ; break ;
}
printf (“cuối switch\n”) ;
Sẽ cho kết quả như sau:
hai hoặc ba cuối switch
Thực ra trong case 4 không cần lệnh break
* Lệnh LÖnh For :
Có ph¸p : for ( bt1; bt2 ; bt3)
{ lenh 1;
lenh 2;
lenhn;
}
- Gi¶i thÝch :
+ bt1: lµ to¸n tö g¸n ®Ó t¹o gi¸ trÞ ban ®Çu cho biÕn ®iÒu khiÓn.
+ bt2: biÓu thøc ®iÒu kiÖn ®Ó thùc hiÖn vßng lÆp.
+ bt3: biÓu thøc t¨ng gi¸ trÞ cña biÕn ®iÒu khiÓn cña vßng lÆp.
* VÝ dô:
void tre(x)
{
int i,j;
22
for(i=0;i<x;i++)
for(j=0;j<1000;j++)
{ }
}
* C©u lÖnh while
C©u lÖnh vßng lÆp while: Cú pháp:
while( §iÒu kiÖn)
{ //C¸c c©u lÖnh }
*Gi¶i thÝch:
Thùc hiÖn lÆp c¸c c©u lÖnh khi ®iÒu kiÖn ®óng,
nÕu điều kiện sai thi tho¸t khái vßng lÆp
Đặc biệt:
Tạo vòng lặp mãi mãi, rất hay đùng trong lập trình VXL. Chương trình
chính sẽ được viết trong dấu ngoặc.
while(1) { }
1.10 Khai báo thư viện
Là nơi chứa thông tin về cấu hình cứng của loại vi điều khiển
Ví dụ: #include
Thư viện có thể thực hiện một số chức năng cụ thể và có thể sử dụng như một
chương trình con
Ví dụ: #include
1.11 Khai báo cổng vào ra
Thiết lập cổng 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
bit DDxn,PORTxn,PINxn.
-Các bit DDxn để truy cập cho địa chỉ xuất nhập DDRx. Bit DDxn
trong thanh ghi DDRx dùng để điều khiển hướng dữ liệu của các chân của
cổng này.Khi ghi giá trị logic ‘0’ vào bất kì bit nào của thanh ghi này thì nó
sẽ trở thành lối vào,còn ghi ‘1’ vào bit đó thì nó trở thành lối ra.
-Các bit PORTxn để truy cập tại địa chỉ xuất nhập PORTx. Khi
PORTx được ghi giá trị 1 khi các chân có cấu tạo như cổng ra thì điện trở
kéo là chủ động(được nối với cổng).Ngắt điện trở kéo ra, PORTx được ghi
giá trị 0 hoặc các chân có dạng như cổng ra.Các chân của cổng là 3 trạng
thái khi 1 điều kiện reset là tích cực thậm chí xung đồng hồ không hoạt
23
động.
-Các bit PINxn để truy cập tại địa chỉ xuất nhập PINx. PINx là các
cổng chỉ để đọc,các cổng này có thể đọc trạng thái logic của PORTx.PINx
không phải là thanh ghi,việc đọc PINx cho phép ta đọc giá trị logic trên các
chân của PORTx.chú ý PINx không phải là thanh ghi,việc đọc PINx cho
phép ta đọc giá trị logic trên các chân của PORTx.
Nếu PORTxn được ghi giá trị logic ‘1’ khi các chân của cổng có dạng như
chân ra ,các chân có giá trị ‘1’.Nếu PORTxn ghi giá trị ‘0’ khi các chân của
cổng có dạng như chân ra thì các chân đó có giá trị ‘0’.
Các cổng của AVR đều có thể đọc,ghi. Để thiết lập 1 cổng là cổng vào ,ra
thì ta tác động tới các bit DDxn, PORTxn,PINxn.ta có thể thiết lập để từng
bit làm cổng vào,ra cứ không chỉ với cổng,như vậy ta có thể sử lí tới từng
bit,đây chính là điểm mạnh của các dòng Vi điều khiển 8 bit.
- Các bit DDxn để truy cập cho địa chỉ xuất nhập DDRx. Bit DDxn trong thanh
ghi DDRx dùng để điều khiển hướng dữ liệu của các chân của cổng này.Khi ghi
giá trị logic ‘0’ vào bất kì bit nào của thanh ghi này thì nó sẽ trở thành lối
vào,còn ghi ‘1’ vào bit đó thì nó trở thành lối ra.
- Các bit PORTxn để truy cập tại địa chỉ xuất nhập PORTx. Khi PORTx được
ghi giá trị 1 khi các chân có cấu tạo như cổng ra thì điện trở kéo là chủ động
(được nối với cổng). Ngắt điện trở kéo ra, PORTx được ghi giá trị 0 hoặc các
chân có dạng như cổng ra.Các chân của cổng là 3 trạng thái khi 1 điều kiện reset
là tích cực thậm chí xung đồng hồ không hoạt động.
24
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.
Ví dụ :
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;
Cũng như vậy 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;
Còn nếu ta thiết lập PORTA làm cổng vào và giá trị hiện thời của PORTA:
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; PORTA
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 thì mới có thể
sử dụng được, động tác này khác với họ vi điều khiển 8051- AT8951.
2. SƠ ĐỒ ĐIỀU KHIỂN I/O VỚI LED ĐƠN
25
Sơ đồ 1:
Sơ đồ 2:
+5v
+
C15
Tu hoa
R 3
1 0 K
+5v
SW3
S W
X 2
1 2 0 0 0 0 0 0
C13
1 0 4
C16
1 0 4
DS1
LED0
R 2
3 3 0
PA2
3 8
PA3
3 7
PA4
3 6
PA5
3 5
PA6
3 4
PA7
3 3
PC0/SCL
2 2
PC1/SDA
2 3
PC2(TCK)
2 4
PC3(TMS)
2 5
PC4(TD0)
2 6
PC5(TDI)
2 7
PC6(TOSC1)
2 8
PD0/RX
1 4
PD1/TX
1 5
XTAL2
1 2
G N D
1 1
Vcc
1 0
RESET
9
PD2/SQW
1 6
PD3/IR
1 7
PD4/SPEAKER
1 8
PD5/PULSE
1 9
(XCK/T0)PB0
1
(T1)PB1
2
(INT2/AIN0)PB2
3
(OC0/AIN1)PB3
4
(SS)PB4
5
(MOSI)PB5
6
(MIS0)PB6
7
(SCK)PB7
8
XTAL1
1 3
AVCC
3 0
PC7(TOSC2)
2 9
AREF
3 2
G N D
3 1
PD6/DIR
2 0
PD7
2 1
PA1
3 9
PA0
4 0
U ?
ATMEGA16
26
*Sơ đồ chân của ATMEGA16:
AVR là theo công nghệ mới, với những tính năng rất mạnh được tích hợp trong
chip của hãng Atmel .Do ra đời muộn hơn nên họ vi điều khiển AVR có nhiều
tính năng mới đáp ứng tối đa nhu cầu của người sử dụng, khả năng tích hợp, sự
mềm dẻo trong việc lập trình và rất tiện lợi.
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U1
ATMEGA16
- Chân 1 đến 8 : Cổng nhập xuất dữ liệu song song B ( PORTB ) nó có thể đc sử
dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
D1
LED-BIBY
D2
LED-BIBY
D3
LED-BIBY
D4
LED-BIBY
D5D6
LED-BIBY
D7
LED-BIBY
D8
LED-BIBY
27
- Chân 9 : RESET để đưa chip về trạng thái ban đầu
- Chân 10 : VCC cấp nguồn nuôi cho vi điều khiển
- Chân 11,31 : GND 2 chân này được nối với nhau và nối đất
- Chân 12,13 : 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngoài
vào chip
- Chân 14 đến 21 : Cổng nhập xuất dữ liệu song song D ( PORTD ) nó có thể đc
sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
- Chân 22 đến 29 : Cổng nhập xuất dữ liệu song song C ( PORTC ) nó có thể đc
sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
- Chân 30 : AVCC cấp điện áp so sánh cho bộ ADC
- Chân 32 : AREF điện áp so sánh tín hiệu vào ADC
- Chân 33 đến 40 : Cổng vào ra dữ liệu song song A ( PORTA ) ngoài ra nó còn
đc tích hợp bộ chuyển đổi tín hiệu tương tự sang tín hiệu số ADC ( analog to
digital converter.
Kết nối phần cứng cho ATMEGA:
Kết nối nguồn
Nguồn 5V nối vào chân 30 và 10
Mass nối vào chân 11 và 31
Kết nối trên hai chân XTAL1 và XTAL2
Chân số 12 và 13
28
Kết nối chân RESET
Chân RESET khi Vi điều khiển được cấp điện, hoặc đang hoạt động mà
hệ thống bị lỗi cần tác động cho Vi điều khiển hoạt động trở lại, hoặc do người
sử dụng muốn quay về trạng thái hoạt động ban đầu.
Sơ đồ của ATMEGA128:
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
29
- Chân 44 đến 51 : PORTA
- Chân 20 : RESET để đưa chip về trạng thái ban đầu
- Chân 10 đến 17 : PORTB
- Chân 35 đến 42 : PORTC
- Chân 25 đến 32 : PORTD
- Chân 2 đến 9 : PORTE
- Chân 54 đến 61: PORTC
- Chân 23,24 : 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngoài
vào chip
3. ĐIỀU KHIỂN I/O VỚI LED ĐƠN
3.1 Hướng dẫn cài phần mềm CODE VISION AVR
Më Forder cvavr1256_ok ta thÊy cã 3 file codevisionavr1256password.exe,
codevisionavr1256password.txt vµ file setup.exe. Nh¸y ®óp vµo file setup.exe,
Window sÏ cã th«ng b¸o sau:
NhÊn OK ®Ó chän ng«n ng÷. Window sÏ th«ng b¸o tiÕp nh- sau:
NhÊn next ®Ó tiÕp tôc.
30
Chän I accept the agreement, sau ®ã nhÊn next ®Ó tiÕp tôc. Window cã th«ng
b¸o tiÕp nh- sau:
Më file codevisionavr1256password.txt copy Password
“whdf&fh&ujtro7w$hvg” . NhÊn next ®Ó tiÕp tôc.
NhÊn next ®Ó tiÕp tôc.
31
NhÊn next ®Ó tiÕp tôc.
NhÊn Install ®Ó tiÕp tôc.
NhÊn next ®Ó tiÕp tôc.
32
NhÊn Finish ®Ó kÕt thóc.
Sau khi cµi ®Æt xong ta tiÕn hµnh Crack nh- sau:
Vµo thanh c«ng cô Start / Programs / Code Vision AVR. Window sÏ cã
th«ng b¸o nh- sau:
Ghi l¹i dßng code ë môc Your Serial Number is:
Më file codevisionavr1256password.exe
33
NhËp Serial Number vµ nhÊn Make, l-u License vµo trong th- môc C:/cvavr.
NhÊn OK ®Ó hoµn tÊt.
Quay trë l¹i víi giao diÖn cña Code Vision AVR, click chuét vµo Import chän
®-êng dÉn ®Õn file License võa t¹o, nhÊn OK ®Ó hoµn tÊt viÖc Crack.
Sau khi Crack xong th× giao diÖn chÝnh cña Code Vision AVR nh- sau:
3.2 Mở phÇn mÒm lËp tr×nh Code Vision AVR
Tạo một Project trong Codevision AVR
Khi tạo một project mới ta nên tạo một thư mục lưu tất cả file liên quan vào
thư mục vì khi biên dịch cosevision sẽ tạo rất nhiều file liên quan khác nhau các
file này sẽ tự động lưu trong thư mục. Đây cũng là quy tắc chung khi làm việc
với tất cả các phần mềm lập trình.
Từ giao diện chương trình ta chọn new có thông báo:
Chọn Project, nhấn OK
34
Chọn Yes để tiếp tục, cửa sổ CodeWizardAVR hiện ra.
Khai báo các cấu hình các thư viện cần sử dụng như loại chip, tần số thạch
anh các cổng vào ra giao tiếp I2C, giao tiếp máy tính, timer sau khi khai báo
xong ta lưu lại cấu hình như sau:
Chọn file/Generate, Save and Exit
Tạo một foder mới và lưu cả 3 định dạng file vào đó test.c, test.prj, test.cwp.
35
Sau khi save xong thì trong file test.c đã có các hàm mà ta đã đặt cấu hình
trước Công việc của người lập trình là viết dòng code vào phần while{}.
3.3 Chương trình điều khiển I/O với LED đơn bằng ATMEGA:
Sơ đồ 1:
#include
#include
while (1) {
PORTC.0=1;
delay_ms(500);
PORTC.0=0;
delay_ms(500);
};
Sơ đồ 2:
#include
#include
while (1) {
PORTC.0=1;
delay_ms(500);
PORTC.0=0;
delay_ms(500);
PORTC.1=1;
delay_ms(500);
PORTC.1=0;
delay_ms(500);
PORTC.2=1;
delay_ms(500);
PORTC.2=0;
delay_ms(500);
PORTC.3=1;
delay_ms(500);
36
PORTC.3=0;
delay_ms(500);
PORTC.4=1;
delay_ms(500);
PORTC.4=0;
delay_ms(500);
PORTC.5=1;
delay_ms(500);
PORTC.5=0;
delay_ms(500);
PORTC.6=1;
delay_ms(500);
PORTC.6=0;
delay_ms(500);
PORTC.7=1;
delay_ms(500);
PORTC.7=0;
delay_ms(500);
};
3.4 Biªn dÞch vµ n¹p ch-¬ng tr×nh.
- Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng
ISP.
- Trªn thanh c«ng cô
Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo «
Program the chip, nhÊn OK ®Ó chÊp nhËn.
37
Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh.
- Window sÏ cã th«ng b¸o sau:
38
- NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y
- Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh.
- NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau.
4. BÀI TẬP:
B¸o lçi
C¶nh b¸o
39
Câu 1 : Phân tích sơ đồ chân của ATMEGA 16?
Câu 2 : Điều khiển I/O với 8 LED đơn bằng Atmega
Câu 3: Điều khiển I/O với 32 LED đơn bằng Atmega
1
2
3 4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
1
2
2
2
3
2
4
.
2
3
.2
2
.
2
1
.
2
0
.
1
9
.
1
8
.
1
7
.
2
4
D1
D3D4D5
D6
D7
D8
D16
LED-GREEN
D17
LED-GREEN
D18
LED-GREEN
D19
LED-GREEN
D20
LED-GREEN
D21
LED-GREEN
D22
LED-GREEN
D24
LED-GREEN
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U5
ATMEGA16
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
D1
LED-BIBY
D2
LED-BIBY
D3
LED-BIBY
D4
LED-BIBY
D5D6
LED-BIBY
D7
LED-BIBY
D8
LED-BIBY
40
BÀI 2: ĐIỀU KHIỂN VỚI LED 7 ĐOẠN
MÃ BÀI: MĐ25 – 02
GIỚI THIỆU:
LED 7 đoạn được ứng dụng khá phổ biến khi cần hiển thị số, ứng dụng hiển
thị tỷ giá vàng, đồng hồ, giờ lịch ga tàu, bến xe, Trong bài này gồm LED 7
đoạn, các bài điều khiển một LED 7 đoạn, hai LED 7 đoạn bằng ATMEGA
Mục tiêu:
Sau khi học xong bài học này người học có khả năng:
- Kiến thức: Trình bày được phương pháp kết nối điều khiển với LED 7
đoạn
- Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển khiển với
LED 7 đoạn
- Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập.
Nội dung chính:
1. LED 7 đoạn:
Có hai loại led 7 đoạn: Anode chung và Cathode chung
Hình trên là sơ đồ chân của hai loại led 7 đoạn. Nó có cấu tạo như sau:
3
7 6 4 2 1 10 9 5
A B C D E F G DP
8
D12A
Catot chung
3
7 6 4 2 1 10 9 5
8
D13A
Anot chung
Chỉ là 8 con led đấu chung 1 đầu: Anot hoặc Catot.
41
1.1 Các hệ đếm:
Baát cöù moät soá nguyeân döông R (R>1) ñeàu coù theå ñöôïc choïn laøm cô soá
cho moät heä thoáng soá.
Neáu heä thoáng coù cô soá R thì caùc soá töø 0 ñeán (R-1) ñöôïc söû duïng.
Ví duï: neáu R=8 thì caùc chöõ soá caàn thieát laø 0,1,2,3,4,5,6,7.
Caùc heä thoáng cô soá thoâng duïng trong kyõ thuaät soá:
• Thaäp phaân (cô soá 10).
• Nhò phaân (cô soá 2).
• Baùt phaân (cô soá 8).
• Thaäp luïc phaân (cô soá 16).
Một hệ thống với cơ số R được biểu diễn dưới dạng
(a3a2a1a0 a-1a-2a-3)R
Khai trieån theo haøm muõ cuûa R.
N =(a3a2a1a0a-1a-2a-3)R
= a3.R
3
+ a2.R
2
+ a1.R
1
+ a0.R
0
+ a-1.R
-1
+ a-2.R
-2
+ a-3.R
-3
Vôùi caùc cô soá lôùn hôn 10 thì caàn phaûi theâm caùc kyù hieäu ñeå bieåu hieän
caùc soá lôùn hôn 10. Ví duï heä thaäp luïc phaân (hex) coù cô soá 16 thì A bieåu thò
10,
B bieåu thò 11,, F bieåu thò 15.
* Đổi giữa các cơ số:
Phần nguyên và phần thập phân được đổi một cách riêng biệt
Phần nguyên được đổi bằng cách sử dụng phép chia lặp cho cơ số mới và sử
dụng chuỗi các số dư phát sinh để tạo ra số mới. Phép tính số học được thực hiện
trên các số hạng của cơ số cũ
Phần thập phân được đổi bằng cách nhân lặp lại cho cơ số mới, sử dụng các
số nguyên được tạo ra để biểu thị phân số được chuyển đổi, phép tính số học
được thực hiện trên các cơ số cũ
Ví dụ: Biến đổi phần nguyên trong hệ cơ số 10 sang hệ cơ số R
N = (anan-1a2a1a0)R = an.R
n
+ an-1.R
n-1
+ + a2.R
2
+ a1.R
1
+ a0
Neáu chia N cho R, nhaän ñöôïc soá dö laø a0
Chia Q1 cho R:
Quaù trình treân ñöôïc thöïc hieän tieáp tuïc cho ñeán khi tìm ñöôïc taát caû caùc heä soá an
Ví dụ: Biến đổi phần thập phân của hệ cơ số 10 sang hệ cơ số R
42
F = (a-1a-2a-3a-m)R
= a-1.R
-1
+ a-2.R
-2
+ a-3.R
-3
+ + a-m.R
-m
Nhaân F vôùi R
FR = a-1 + a-2.R
-1
+ a-3.R
-2
+ + a-m.R
-m+1
= a-1 + F1
Vôùi a-1 laø phaàn nguyeân, F1 laø phaàn leû cuûa pheùp nhaân Tieáp tuïc nhaân R vôùi F1
F1.R = a-2 + a-3.R
-1
+ a-4.R
-2
+ + a-m.R
-m+2
= a-2 + F2
Tieáp tuïc quaù trình cho ñeán khi xaùc ñònh heát caùc heä soá a-m
Biến đổi giữa 2 cơ số không phải là cơ số 10 có thể thực hiện dễ dàng
bằng cách đầu tiên biến đổi sang cơ số 10 rồi biến đổi tiếp từ cơ số 10 sang cơ
số mới.
*Hệ thập phân (hệ cơ số 10):
Heä thaäp phaân ñöôïc keát hôïp bôûi 10 chöõ soá: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Moät chöõ soá trong heä thaäp phaân ñöôïc bieåu dieãn theo caùc soá muõ cuûa 10.
Soá mang troïng soá lôùn nhaát goïi laø MSD (most significant digit)
Soá mang troïng soá nhoû nhaát goïi laø LSD (least significant digit)
Ví dụ: Soá 5346,72 bieåu dieãn nhö sau:
5346,72 = 5.10
3
+ 3.10
2
+ 4.10 + 6 + 7.10
-1
+ 2.10
-2
Toång quaùt vôùi N chöõ soá coù theå ñeám ñöôïc 10
N
soá khaùc nhau, bao
goàm caû soá 0. Soá thaäp phaân lôùn nhaát laø 10
N
- 1.
*Hệ nhị phân (hệ cơ số 2):
43
Heä nhò phaân duøng hai chöõ soá 0, 1.
Moät soá trong heä nhò phaân ñöôïc bieåu dieãn theo soá muõ cuûa 2.
Moät chöõ soá nhò phaân goïi laø bit.
Chuoãi 4 bit nhò phaân goïi laø nibble.
Chuoãi 8 bit goïi laø byte.
Chuoãi 16 bit goïi laø word.
Chuoãi 32 bit goïi laø double word.
Chöõ soá nhò phaân beân phaûi nhaát cuûa chuoãi bit goïi laø bit có ý nghĩa nhỏ nhất
(least significant bit - LSB)
Chöõ soá nhò phaân beân traùi nhaát cuûa chuoãi bit goïi laø bit có ý nghĩa lớn nhất (most
significant bit - MSB).
Thöôøng duøng chöõ B cuoái chuoãi bit ñeå xaùc ñònh ñoù laø soá nhò phaân.
Ví dụ: Soá 1011,101B bieåu dieãn giaù trò soá:
1011,101B = 1.2
3
+ 0.2
2
+ 1.2
1
+1.2
0
+ 1.2
-1
+ 0.2
-2
+ 1.2
-3
* Đếm trong hệ nhị phân:
Xeùt boä ñeám 4 bit, baét ñaàu vôùi taát caû caùc bit = 0
Cuõng nhö trong heä thaäp phaân, neáu duøng N bit seõ ñeám ñöôïc 2
N
laàn.
44
*Hệ bát phân (hệ cơ số 8):
Heä baùt phaân ñöôïc keát hôïp bôûi 8 chöõ soá: 0, 1, 2, 3, 4, 5, 6, 7.
Vò trí cuûa moãi chöõ soá coù troïng soá nhö sau:
* Đếm trong hệ bát phân:
Vôùi N chöõ soá baùt phaân, ta coù theå ñeám töø 0 ñeán 8
N
-1, 8
N
laàn ñeám khaùc nhau
*Hệ thập lục phân (hệ cơ số 16):
Trong heä thoáng naøy, ta duøng caùc soá 0..9 vaø caùc kí töï A..F ñeå bieåu dieãn
cho moat giaù trò soá (töông öùng vôùi 10 ñeán 15 trong heä 10). Thoâng thöôøng, ta
duøng chöõ H ôû cuoái ñeå xaùc ñònh ñoù laø soá thaäp luïc phaân.
45
Đếm trong hệ thập lục phân (hex):
Khi ñeám trong heä thaäp luïc phaân moãi chöõ soá taêng töø 0 ñeán F sau ñoù veà 0
vaø chöõ soá coù troïng soá lôùn hôn keá tieáp seõ taêng leân 1.
* Chuyển số hex sang thập phân:
Ví dụ: 35616 = 3.16
2
+ 5.16
1
+ 6.16
0
= 85410
1.2 Chuyển đổi giữa các hệ đếm:
* Chuyển số nhị phân thành số thập phân:
Phương pháp: Coäng troïng soá caùc bit 1
Ví dụ: 1011,11B = 1.23 + 0.22 + 1.21 + 1 + 1.2-1 + 1.2-2 = 11,75
* Chuyển số thập phân thành số nhị phân:
Phương pháp:
46
Phaàn nguyeân: Chia 2, nhôù laïi soá dö
Phaàn thaäp phaân: Nhaân 2, nhôù laïi phaàn nguyeân
Ví dụ: Chuyeån (25)10 ra soá nhò phaân
Ví dụ: Chuyeån (0,625)10 thaønh soá nhò phaân
0,625 × 2 = 1,25
0,25 × 2 = 0,5
0,5 × 2 = 1,0
0,625 = 0,101B
* Chuyển số hex sang thập phân:
Ví dụ: 35616 = 3.16
2
+ 5.16
1
+ 6.16
0
= 85410
* Chuyển số hex sang nhị phân:
Phương pháp: moãi chöõ soá hex ñöôïc bieán ñoåi thaønh soá nhò phaân 4 bit töông
öùng.
Ví dụ: 9F216 = 9 F 2
↓ ↓ ↓
1001 1111 0010
* Chuyển đổi số nhị phân sang số hex:
Phương pháp: caùc bit nhò phaân ñöôïc nhoùm vaøo nhoùm 4 bit töø LSB, moãi
nhoùm 4 bit ñöôïc bieán ñoåi sang soá hex töông öùng. Neáu soá bit khoâng ñuû 4, thì
coäng theâm bit 0 vaøo MSB.
47
1.3 §¹i c-¬ng vÒ c¸c phÐp tÝnh sè häc trong hÖ nhÞ ph©n.
Caùc pheùp toaøn soá hoïc treân soá nhò phaân chuû yeáu vaãn gioáng caùc pheùp toaùn
treân soá thaäp phaân, ngoaïi tröø pheùp coäng vaø pheùp nhaân thì ñôn giaûn hôn.
Baûng pheùp coäng cho soá nhò phaân
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 nhôù 1 cho soá haïng keá tieáp
Ví dụ: coäng 1310 vôùi 1110 döôùi daïng nhò phaân
* Bảng phép trừ cho số nhị phân:
0 - 0 = 0
0 - 1 = 1 möôïn 1 töø soá haïng keá tieáp
1 - 0 = 1
1 - 1 = 0
Möôïn1 töø 1 coät töông ñöông vôùi vieäc tröø 1 taïi coät ñoù
Ví dụ:
48
* Bảng phép nhân cho số nhị phân:
0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1
Ví dụ: Nhaân 1310 vôùi 1110 ôû daïng nhò phaân
Ñoái vôùi maùy tính, pheùp nhaân ñöôïc thöïc hieän baèng phöông phaùp coäng vaø dòch
traùi:
- Thaønh phaàn ñaàu tieân cuûa toång seõ chính laø soá bò nhaân neáu nhö LSB
cuûa soá nhaân laø 1. Ngöôïc laïi, LSB cuûa soá nhaân baèng 0 thì thaønh phaàn naøy baèng
0.
- Moãi thaønh phaàn thöù i keá tieáp seõ ñöôïc tính töông töï vôùi ñieàu kieän laø
phaûi dòch traùi soá bò nhaân i bit.
- Keát quaû caàn tìm chính laø toång caùc thaønh phaàn noùi treân.
* Phép chia cho số nhị phân:
Pheùp chia caùc soá nhò phaân cuõng töông töï nhö ñoái vôùi caùc soá thaäp phaân.
Ví dụ: 30/6
Töông töï nhö ñoái vôùi pheùp nhaân, ta coù theå duøng pheùp tröø vaø pheùp dòch
phaûi cho ñeán khi khoâng theå thöïc hieän pheùp tröø ñöôïc nöõa.
* Số có dấu - không dấu:
Heä thoáng soá ñöôïc chia laøm 2 loaïi: khoâng daáu vaø coù daáu.
Trong heä thoáng coù daáu: ñeå bieåu thò soá nhò phaân coù daáu thöôøng söû duïng bit
MSB ñeå chæ daáu: bit 0 chæ soá döông, bit 1 chæ soá aâm, caùc bit coøn laïi ñeå chæ ñoä
lôùn
Nhö vaäy, neáu ta duøng 8 bit ñeå bieåu dieãn thì seõ thu ñöôïc 256 toå hôïp öùng
vôùi caùc giaù trò 0..255 (soá khoâng daáu) hay –127.. –0 +0 +127 (soá coù daáu).
49
Tuy nhieân, khoâng ñôn giaûn laø cöù thay ñoåi bit MSB baèng 1 ñeå bieåu dieãn
giaù trò aâm, ví duï nhö 01000001 (+65) thaønh 11000001 (-65), caùc pheùp tính soá
hoïc seõ khoâng coøn ñuùng.
Giaù trò aâm ñöôïc moâ taû döôùi daïng soá buø 2.
* Số bù 2 (2's component)
Soá buø 2 cuûa moät soá nhò phaân xaùc ñònh baèng caùch laáy ñaûo caùc bit roài coäng theâm
1.
Ví dụ: Trong heä thoáng coù daáu 8bit
Soá +65 bieåu dieãn laø: 0100 0001
Soá buø 2 cuûa +65 laø: 1011 1110 + 1 = 1011 1111. (– 65)
Nhöng neáu ñoåi ngöôïc 1011 1111 sang thaäp phaân seõ khoâng nhaän ñöôïc -65. Ñeå
xaùc ñònh giaù trò tuyeät ñoái cuûa moät soá nhò phaân aâm, thöïc hieän laïi caùc böôùc treân
-65 10111111
ñaûo bit 01000000
coäng 1 1
+65 01000001
Thöû laïi baèng caùch laáy toång cuûa +65 vaø –65, keát quaû phaûi baèng 0
Trong pheùp coäng vôùi soá buø 2, ta boû qua bit nhôù cuoái cuøng bôûi vì coù moät bit gaùn
cho bit daáu neân keát quaû vaãn ñuùng
Khi bieåu dieãn theo soá buø 2, neáu söû duïng 8 bit ta seõ coù caùc giaù trò soá thay ñoåi töø
-128 127.
* Phép trừ thông qua số bù 2:
Ngoaøi caùch tröø nhö treân, ta cuõng coù theå thöïc hieän pheùp tröø thoâng qua soá
buø 2 cuûa soá tröø: A-B=A+(-B)
VD:
Keát quaû 0011 1100, Bit MSB = 0 cho bieát keát quaû laø soá döông.
Xeùt khoaûng thay ñoåi sau
+3 00000011
50
+2 00000010
+1 00000001
0 00000000
-1 11111111
-2 11111110
-3 11111101
Thaáy raèng caùc bit 0 ôû soá nhò phaân aâm bieåu thò giaù trò thaäp phaân cuûa noù:
tính giaù trò cuûa caùc bit 0 theo vò trí gioáng nhö vôùi bit 1, coäng caùc giaù trò laïi vaø
coäng 1.
1.4 HiÓn thÞ LED 7 thanh tr-êng hîp Anode chung
Chúng ta muốn sáng thanh nào th× chân vi điều khiển ë møc 0 nối với thanh đó
vµ cÊp nguån cho LED
1.6 HiÓn thÞ LED 7 thanh tr-êng hîp Cathot chung
Chúng ta muốn sáng thanh nào th× chân vi điều khiển ë møc 1 nối với
thanh đó vµ nèi mass cho LED.
Số dp g f e d c b a Mã HEX
0 0 0 1 1 1 1 1 1 3f
1 0 0 0 0 0 1 1 0 06
2 0 1 0 1 1 0 1 1 5b
3 0 1 0 0 1 1 1 1 4f
4 0 1 1 0 0 1 1 0 66
5 0 1 1 0 1 1 0 1 6d
6 0 1 1 1 1 1 0 1 7c
7 0 0 0 0 0 1 1 1 07
8 0 1 1 1 1 1 1 1 7f
9 0 1 1 0 1 1 1 1 6f
2. SƠ ĐỒ ĐIỀU KHIỂN VỚI LED 7 ĐOẠN
51
Sơ đô 1: Điều khiển với LED 7 đoạn đếm từ 0 đến 9 bằng Atmega
Sơ đô 2: Điều khiển với LED 7 đoạn đếm từ 00 đến 99 bằng Atmega
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
Sơ đô 3: Điều khiển với LED 7 đoạn đếm từ 0000 đến 9999 bằng Atmega
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
52
P
E
0
/R
X
D
0
/P
D
I
2
P
E
1
/T
X
D
0
/P
D
O
3
P
E
2
/X
C
K
0
/A
IN
0
4
P
E
3
/O
C
3
A
/A
IN
1
5
P
E
4
/O
C
3
B
/I
N
T
4
6
P
E
5
/O
C
3
C
/I
N
T
5
7
P
E
6
/T
3
/I
N
T
6
8
P
E
7
/I
C
P
3
/I
N
T
7
9
P
B
0
/S
S
1
0
P
B
1
/S
C
K
1
1
P
B
2
/M
O
S
I
1
2
P
B
3
/M
IS
O
1
3
P
B
4
/O
C
0
1
4
P
B
5
/O
C
1
A
1
5
P
B
6
/O
C
1
B
1
6
P
B
7
/O
C
2
/O
C
1
C
1
7
P
G
3
/T
O
S
C
2
1
8
P
G
4
/T
O
S
C
1
1
9
R
E
S
E
T
2
0
X
T
A
L
2
2
3
X
T
A
L
1
2
4
P
D
0
/S
C
L
/I
N
T
0
2
5
P
D
1
/S
D
A
/I
N
T
1
2
6
P
D
2
/R
X
D
1
/I
N
T
2
2
7
P
D
3
/T
X
D
1
/I
N
T
3
2
8
P
D
4
/I
C
P
1
2
9
P
D
5
/X
C
K
1
3
0
P
D
6
/T
1
3
1
P
D
7
/T
2
3
2
P
G
0
/W
R
3
3
P
G
1
/R
D
3
4
P
C
0
/A
8
3
5
P
C
1
/A
9
3
6
P
C
2
/A
1
0
3
7
P
C
3
/A
1
1
3
8
P
C
4
/A
1
2
3
9
P
C
5
/A
1
3
4
0
P
C
6
/A
1
4
4
1
P
C
7
/A
1
5
4
2
P
G
2
/A
L
E
4
3
P
A
7
/A
D
7
4
4
P
A
6
/A
D
6
4
5
P
A
5
/A
D
5
4
6
P
A
4
/A
D
4
4
7
P
A
3
/A
D
3
4
8
P
A
2
/A
D
2
4
9
P
A
1
/A
D
1
5
0
P
A
0
/A
D
0
5
1
P
F
7
/A
D
C
7
/T
D
I
5
4
P
F
6
/A
D
C
6
/T
D
O
5
5
P
F
5
/A
D
C
5
/T
M
S
5
6
P
F
4
/A
D
C
4
/T
C
K
5
7
P
F
3
/A
D
C
3
5
8
P
F
2
/A
D
C
2
5
9
P
F
1
/A
D
C
1
6
0
P
F
0
/A
D
C
0
6
1
A
R
E
F
6
2
A
V
C
C
6
4
P
E
N
1
U1
ATMEGA128
3. ĐIỀU KHIỂN VỚI LED 7 ĐOẠN
2.1 Mở phÇn mÒm lËp tr×nh Code Vision AVR
Tạo một Project trong Codevision AVR
Khi tạo một project mới ta nên tạo một thư mục lưu tất cả file liên quan vào
thư mục vì khi biên dịch cosevision sẽ tạo rất nhiều file liên quan khác nhau các
file này sẽ tự động lưu trong thư mục. Đây cũng là quy tắc chung khi làm việc
với tất cả các phần mềm lập trình.
Từ giao diện chương trình ta chọn new có thông báo:
Chọn Project, nhấn OK
53
Chọn Yes để tiếp tục, cửa sổ CodeWizardAVR hiện ra.
Khai báo các cấu hình các thư viện cần sử dụng như loại chip, tần số thạch
anh các cổng vào ra giao tiếp I2C, giao tiếp máy tính, timer sau khi khai báo
xong ta lưu lại cấu hình như sau:
Chọn file/Generate, Save and Exit
54
Tạo một foder mới và lưu cả 3 định dạng file vào đó test.c, test.prj, test.cwp.
Sau khi save xong thì trong file test.c đã có các hàm mà ta đã đặt cấu hình
trước Công việc của người lập trình là viết dòng code vào phần while{}.
2.2 Chương trình điều khiển
Sơ đồ 1:
#include
#include
unsigned int k;
55
unsigned char
maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(void)
{PORTC=0xff;
DDRC=0xff;
while (1)
{
for(k=0;k<10;k++)
{
PORTC=maled[k];
delay_us(10000);
} };
}
Sơ đồ 2:
#include
#include
unsigned char a,b,e,k;
unsigned char
male[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(void)
{
PORTA=0xff;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xff;
PORTD=0x00;
DDRD=0x00;
PORTE=0x00;
DDRE=0x00;
PORTF=0x00;
DDRF=0x00;
PORTG=0x00;
DDRG=0x00;
56
while (1)
{
for(k=0;k<=99;k++){
a=k/10;
b=k%10;
for(e=0;e<=3;e++){
PORTA.0=1;PORTC=male[b];delay_ms(15);
PORTA.0=0;
PORTC=0xff;
PORTA.1=1;PORTC=male[a];delay_ms(15);
PORTA.1=0;PORTC=0xff;
}}
};
}
Sơ đồ 3:
#include
#include
unsigned int a,b,e,f,g,k,i,c;
unsigned int
maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(void)
{PORTA=0xff;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xff;
PORTD=0x00;
DDRD=0x00;
PORTE=0x00;
DDRE=0x00;
PORTF=0x00;
DDRF=0x00;
PORTG=0x00;
DDRG=0x00;
while (1)
{for(k=0;k<=999999;k++)
57
{a=(k/100000)%10;
b=(k/10000)%10;
c=(k/1000)%10;
e=(k/100)%10;
f=(k/10)%10;
g=(k/1)%10;
for(i=0;i<=5;i++)
{ PORTA.0=1;PORTC=maled[a];delay_us(3);
PORTA.0=0;PORTC=0xff;
PORTA.1=1;PORTC=maled[b];delay_us(3);
PORTA.1=0;PORTC=0xff;
PORTA.2=1;PORTC=maled[c];delay_us(3);
PORTA.2=0;PORTC=0xff;
PORTA.3=1;PORTC=maled[e];delay_us(3);
PORTA.3=0;PORTC=0xff;
PORTA.4=1;PORTC=maled[f];delay_us(3);
PORTA.4=0;PORTC=0xff;
PORTA.5=1;PORTC=maled[g];delay_us(3);
PORTA.5=0;PORTC=0xff;
}}
};
}
2.3 Biªn dÞch vµ n¹p ch-¬ng tr×nh.
- Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng
ISP.
- Trªn thanh c«ng cô
Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo «
Program the chip, nhÊn OK ®Ó chÊp nhËn.
Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh.
58
- Window sÏ cã th«ng b¸o sau:
- NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y
- Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh.
- NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau.
B¸o lçi
C¶nh b¸o
59
3. BÀI TẬP
Câu 1: Lập bảng mã Hexa cho LED 7 thanh trường hợp anode chung?
Câu 2: Điều khiển với LED 7 đoạn đếm từ 0 đến 9 bằng Atmega
Câu 3: Điều khiển với LED 7 thanh bằng Atmega hiển thị đèn giao thông
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
Q3
NPN
Q4
NPN D1
LED-RED
D3
LED-YELLOW
D2
LED-BIRG
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
60
BÀI 3: ĐIỀU KHIỂN I/O SỬ DỤNG PHÍM ẤN
MÃ BÀI: MĐ25 – 03
GIỚI THIỆU:
Điều khiển I/O sử dụng phím ấn bằng ATMEGA được sử dụng trong rất
nhiều các thiết bị, để giúp người sử dụng lựa chọn các chức năng của thiết bị.
Trong bài này gồm sơ đồ kết nối và điều khiển I/O sử dụng phím ấn bằng
ATMEGA.
Mục tiêu:
Sau khi học xong bài học này người học có khả năng:
- Kiến thức: Trình bày được phương pháp kết nối điều khiển I/O sử dụng
phím ấn
- Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển I/O sử
dụng phím ấn
- Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập.
Nội dung chính:
1. Sơ đồ điều khiển I/O sử dụng phím ấn
Ấn phím STRART thì LED sáng, ấn phím STOP thì LED tắt
2. ĐIỀU KHIỂN I/O SỬ DỤNG PHÍM ẤN
2.1 Mở phÇn mÒm lËp tr×nh Code Vision AVR
Tạo một Project trong Codevision AVR
Khi tạo một project mới ta nên tạo một thư mục lưu tất cả file liên quan vào
thư mục vì khi biên dịch cosevision sẽ tạo rất nhiều file liên quan khác nhau các
file này sẽ tự động lưu trong thư mục. Đây cũng là quy tắc chung khi làm việc
với tất cả các phần mềm lập trình.
61
Từ giao diện chương trình ta chọn new có thông báo:
Chọn Project, nhấn OK
Chọn Yes để tiếp tục, cửa sổ CodeWizardAVR hiện ra.
62
Khai báo các cấu hình các thư viện cần sử dụng như loại chip, tần số thạch
anh các cổng vào ra giao tiếp I2C, giao tiếp máy tính, timer sau khi khai báo
xong ta lưu lại cấu hình như sau:
Chọn file/Generate, Save and Exit
Tạo một foder mới và lưu cả 3 định dạng file vào đó test.c, test.prj, test.cwp.
Sau khi save xong thì trong file test.c đã có các hàm mà ta đã đặt cấu hình
trước Công việc của người lập trình là viết dòng code vào phần while{}.
2.2 Chương trình điều khiển I/O sử dụng phím ấn bằng Atmega
#include
#include
void main(void)
{
PORTA=0xff;
DDRA=0x00;
PORTC=0x00;
63
DDRC=0xff;
while (1) {
if (PINA.0==0)
{PORTC.0=1; delay_us(5); }
if (PINA.1==0) { PORTC.0=0; delay_us(5); }
}
}
2.3 Biªn dÞch vµ n¹p ch-¬ng tr×nh.
- Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng
ISP.
- Trªn thanh c«ng cô
Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo «
Program the chip, nhÊn OK ®Ó chÊp nhËn.
Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh.
64
- Window sÏ cã th«ng b¸o sau:
- NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y
- Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh.
- NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau.
B¸o lçi
C¶nh b¸o
65
3. BÀI TẬP
Câu 1: Nªu cÊu tróc mét ch-¬ng tr×nh viÕt b»ng ng«n ng÷ lập trình C cho vi
®iÒu khiÓn Atmega?
Câu 2: Viết chương trình cho ATMEGA thực hiện ấn phím 0, 1, 2, 3, 4, 5, 6,
7, 8, 9 hiển thị trên LED 7 thanh Anode chung
BÀI 4: ĐIỀU KHIỂN I/O VỚI LCD
MÃ BÀI: MĐ25 – 04
GIỚI THIỆU:
LCD là một thiết bị ngoại vi dùng để giao tiếp với người dùng. LCD có ưu
điểm là hiển thị được tất cả các kí tự trong bảng mã ascci, nhưng LCD lại có
nhược điểm là giá thành cao và khoảng cách nhìn gần. LCD là từ viết tắt của
Liquid Crystal Display (màn hình tinh thể lỏng). Có nhiều loại màn hình LCD
với các kích cỡ khác nhau, LCD 16x1 (16 cột và 1 hàng), LCD 16x2 (16 cột và
2 hàng)
Mục tiêu:
Sau khi học xong bài học này người học có khả năng:
- Kiến thức: Trình bày được phương pháp kết nối điều khiển vào ra với
LCD
- Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển vào ra với
LCD
- Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập.
Nội dung chính:
1. SƠ ĐỒ ĐIỀU KHIỂN I/O VỚI LCD
66
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VS
S
1
VD
D
2
VE
E
3
LCD2
LM016L
Mét sè ®Æc ®iÓm cña LCD.
- LCD cã hai chÕ ®é lµm viÖc:
+ ChÕ ®é 8 bÝt: ChÕ ®é nµy th-êng dïng cho 8051.
+ ChÕ ®é 4 bÝt: C¸ch nµy th-êng dïng cho c¸c lo¹i vi ®iÒu khiÓn cÊp cao
nh- AVR, PIC hay dsPIC.
- LCD cã 3 ®-êng ®iÒu khiÓn.
+ §-êng E khëi t¹o qu¸ tr×nh truyÒn d÷ liÖu tõ V§K tíi LCD:
NÕu E = 1 cho phÐp
NÕu E = 0 kh«ng cho phÐp.
+ §-êng RS quy ®Þnh göi lÖnh hay göi d÷ liÖu lªn LCD:
RS = 1 d÷ liÖu (ký tù) ®ang ®-îc viÕt lªn LCD.
RS = 0 lÖnh ®ang ®-îc viÕt lªn LCD.
+ §-êng R/W quy ®Þnh h-íng truyÒn d÷ liÖu.
R/W = 0 vi ®iÒu khiÓn ®ang viÕt d÷ liÖu lªn LCD.
R/W = 1 vi ®iÒu khiÓn ®ang ®äc d÷ liÖu tõ LCD.
- §Ó viÕt d÷ liÖu lªn LCD cÇn thùc hiÖn c¸c b-íc sau:
+ §Æt R/W = 0.
+ §Æt RS = 0 hay RS = 1 tïy thuéc vµo môc ®Ých göi lÖnh hay göi d÷ liÖu.
+ §Æt d÷ liÖu vµo bus d÷ liÖu (P2) nÕu qu¸ tr×nh lµ qu¸ tr×nh viÕt.
+ §Æt E = 1.
+ §Æt E = 0.
+ §äc d÷ liÖu t¹i bus d÷ liÖu (nÕu qu¸ tr×nh lµ qu¸ tr×nh ®äc). ViÖc ®äc d÷
liÖu tõ LCD thùc hiÖn t-¬ng tù nh- trªn nh-ng tr-êng hîp nµy Ýt dïng.
- C¸c ký tù hiÓn thÞ trªn LCD ®-îc l-u trong DDRAM (Display Data
RAM).
PA
67
- ViÖc ®äc viÕt ký tù lªn LCD tèn kho¶ng 40us ®Õn 120us. Trong kho¶ng
thêi gian nµy LCD “bËn” , kh«ng giao tiÕp víi bªn ngoµi. Do vËy trong
ch-¬ng tr×nh ta cÇn thùc hiÖn delay ®Ó chê LCD thùc hiÖn c«ng viÖc cña
m×nh.
- D-íi ®©y lµ b¶ng m· lÖnh cña LCD.
M· HEXA LÖnh ®Õn thanh ghi LCD
1 Xãa mµn h×nh hiÓn thÞ
2 Trë vÒ ®Çu dßng
4 DÞch con trá sang tr¸i
6 DÞch con trá sang ph¶i
5 DÞch hiÓn thÞ sang ph¶i
7 DÞch hiÓn thÞ sang tr¸i
8 T¾t con trá, t¾t hiÓn thÞ
A T¾t hiÓn thÞ, bËt con trá.
C BËt hiÓn thÞ t¾t con trá
E BËt hiÓn thÞ nhÊp nh¸y con trá
F T¾t hiÓn thÞ nhÊp nh¸y con trá
10 DÞch vÞ trÝ con trá sang tr¸i
14 DÞch vÞ trÝ con trá sang tr¸i
18 DÞch toµn bé hiÓn thÞ sang tr¸i
1C DÞch toµn bé hiÓn thÞ sang ph¶i
80 §-a con trá vÒ ®Çu dßng thø 1
C0 §-a con trá vÒ ®Çu dßng thø 2
38 Hai dßng vµ ma trËn 5x7
2. ĐIỀU KHIỂN VÀO RA VỚI LCD
2.1 Mở phần mềm kết nối
68
Trong cửa sổ CodeWinzard, chọn tab LCD, trong list mặc định là None, các
bạn chuyển thành PORTB cho phù hợp với phần cứng của KIT( thiết kế
LCD ở PORTB). Chọn File � Generate, Save and Exit được như sau:
Code cho LCD các bạn có thể tham khảo trong Help bằng cách chọn trên menu
Help � Help Topic(hoặc ấn F1). Được cửa sổ Help như sau:
69
Trong tab Contents, click đúp chuột vào CodeVisionAVR C Compiller
Library Functions được như bên cạnh. Nhấp đúp vào LCD Functions để
tham khảo các hàm cho LCD.
Trong vòng while(1) trong hàm main ta viết các câu lệnh như sau:
while (1)
{
70
// Place your code here
lcd_gotoxy(0,0);// Dua con tro ve goc, dong 0, cot 0
lcd_putsf("DKS-MTC-JACKY");// Hien thi dong chu
lcd_gotoxy(0,1);// Dua con tro ve dong 1, cot 0
lcd_putsf("Wellcome you"); // Hien thi dong chu
delay_ms(3000); // Tre 3 s
lcd_gotoxy(0,0); // Dua con tro ve dong 0 cot 0
lcd_putsf("embestdks.com"); // Hien thi dong chu
delay_ms(3000); // Tre 3 s
};
2.2 Chương trình hiển thị LCD:
#include
#include
#include
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include
unsigned char display[16]={0};
// Declare your global variables here
void main(void)
{
PORTA=0xff;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xff;
PORTD=0x00;
DDRD=0x00;
PORTE=0x00;
DDRE=0x00;
PORTF=0x00;
71
DDRF=0x00;
PORTG=0x00;
DDRG=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
lcd_clear();
sprintf(display,"LE THANH BINH C6DT ",);
lcd_puts(display);
delay_us(10);
}
}
2.3 Biªn dÞch vµ n¹p ch-¬ng tr×nh.
- Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng
ISP.
- Trªn thanh c«ng cô
Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo «
Program the chip, nhÊn OK ®Ó chÊp nhËn.
Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh.
- Window sÏ cã th«ng b¸o sau:
72
- NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y
- Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh.
- NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau.
3. BÀI TẬP:
Câu hỏi: Giải thích chức năng của các chân LCD 16?
B¸o lçi
C¶nh b¸o
73
BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ DC
MÃ BÀI: MĐ25 – 05
GIỚI THIỆU:
Động cơ một chiều là loại động cơ có cấu tạo và cách điều khiển đơn giản
nhất, tốc độ động cơ được điều khiển thông qua điện áp cấp vào 2 đầu động cơ.
Động cơ một chiều được ứng dụng rất rộng rãi trong các hệ thống tự động.
Trong bài này gồm có sơ đồ và điều khiển động cơ DC bằng ATMEGA.
Mục tiêu:
Sau khi học xong bài học này người học có khả năng:
- Kiến thức: Trình bày được phương pháp kết nối điều khiển động cơ DC
- Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển động cơ
DC
- Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập.
Nội dung chính:
1. Sơ đồ điều khiển động cơ DC
Giới thiệu về động cơ một chiều
Động cơ một chiều là loại động cơ có cấu tạo và cách điều khiển đơn giản
nhất, tốc độ động cơ được điều khiển thông qua điện áp cấp vào 2 đầu động cơ.
Động cơ một chiều được ứng dụng rất rộng rãi trong các hệ thống tự động.
Mạch cầu H
Mạch cầu H là một trong những mạch phổ biến để điều khiển động cơ
một chiều, sở dĩ gọi là mạch cầu H vì mạch có hình chữ H. Sơ đồ nguyên lí của
mạch cầu H như sau :
Có 4 khóa chuyển 1,2,3,4. Tại một thời điểm luôn luôn có 2 khóa mở và 2
khóa đóng.
Giả sử khóa 1 và khóa 4 đóng, dòng điện chạy qua động cơ sẽ chạy từ trái
qua phải, động cơ sẽ quay theo 1 chiều.
74
Nếu khóa 2 và 3 đóng, dòng điện đi qua động cơ sẽ có chiều từ phải qua
trái, như vậy động cơ sẽ quay theo chiều ngược lại
Tránh để hai khóa 1 và 3 hoặc 2 khóa 2 và 4 cùng đóng, như vậy sẽ gây ra
hiện tượng đoản mạch.
Như vậy với việc thay đổi việc đóng mở các van, chúng ta có thể thay đổi
chiều quay của động cơ.
Trong thực tế, các khóa chuyển trong hình trên có thể dùng các transistor,
hay Mostfet, không nên dùng relay, vì relay có tốc độ đóng mở thấp.
Sơ đồ 1:
Sơ đồ 2: Thực hiện ấn phím QUAY PHAI động cơ quay phải
ấn phím QUAY TRAI động cơ quay trái
ấn phím DUNG động cơ dừng
c1
c2
c2
c1c1
c2
R1
10k
Q
U
A
Y
P
H
A
I
Q
U
A
Y
T
R
A
I
D
U
N
G
Q1
NPN
Q3
NPN
Q2
NPN
Q4
NPN
+88.8
R2
10k
R3
10k
DONG CO DC
5VDC 12VDC
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
c1
c1
PE0/RXD0/PDI
2
PE1/TXD0/PDO
3
PE2/XCK0/AIN0
4
PE3/OC3A/AIN1
5
PE4/OC3B/INT4
6
PE5/OC3C/INT5
7
PE6/T3/INT6
8
PE7/ICP3/INT7
9
PB0/SS
10
PB1/SCK
11
PB2/MOSI
12
PB3/MISO
13
PB4/OC0
14
PB5/OC1A
15
PB6/OC1B
16
PB7/OC2/OC1C
17
PG3/TOSC2
18
PG4/TOSC1
19
RESET
20
XTAL2
23
XTAL1
24
PD0/SCL/INT0
25
PD1/SDA/INT1
26
PD2/RXD1/INT2
27
PD3/TXD1/INT3
28
PD4/ICP1
29
PD5/XCK1
30
PD6/T1
31
PD7/T2
32
PG0/WR
33
PG1/RD
34
PC0/A8
35
PC1/A9
36
PC2/A10
37
PC3/A11
38
PC4/A12
39
PC5/A13
40
PC6/A14
41
PC7/A15
42
PG2/ALE
43
PA7/AD7
44
PA6/AD6
45
PA5/AD5
46
PA4/AD4
47
PA3/AD3
48
PA2/AD2
49
PA1/AD1
50
PA0/AD0
51
PF7/ADC7/TDI
54
PF6/ADC6/TDO
55
PF5/ADC5/TMS
56
PF4/ADC4/TCK
57
PF3/ADC3
58
PF2/ADC2
59
PF1/ADC1
60
PF0/ADC0
61
AREF
62
AVCC
64
PEN
1
U1
ATMEGA128
R1
10k
+88.8
Q1
NPN
75
2. Điều khiển động cơ DC
2.1 Cấu trúc điều kiện: if và else.
if (condition 1)
{
Khối lệnh 1
}
else if (codition 2)
{
Khối lệnh 2
}
else
{
Khối lệnh khác
}
2.2 Phân tích sơ đồ kết nối và đưa ra giải pháp:
M« t¶: B×nh th-êng c¸c ch©n PORT.A møc cao, khi nhÊn nót th× ®iÖn ¸p t¹i
c¸c ch©n nµy chuyÓn xuèng møc thÊp. Vµ nhiÖm vô cña ch-¬ng tr×nh lµ kiÓm
tra xem lóc nµo th× ®iÖn ¸p t¹i hai ch©n nµy xuèng møc 0.
M« t¶: B×nh th-êng c¸c ch©n PORT.C møc thấp, khi nhÊn nót th× ®iÖn ¸p t¹i
c¸c ch©n nµy chuyÓn møc cao.
2.3 Chương trình điều khiển động cơ DC bằng Atmega
Sơ đồ 1:
#include
#include
void main(void)
{
PORTA=0xff;
DDRA=0x00;
PORTC=0x00;
DDRC=0xff;
while (1) {
if (PINA.0==0)
{PORTC.0=1;
delay_us(5);
if(PINA.1==0)
{PORTC.0=0;
delay_us(5);
}
}
}
Sơ đồ 2:
#include
#include
void main(void)
76
{
PORTA=0xff;
DDRA=0x00;
PORTC=0x00;
DDRC=0xff;
while (1) {
if (PINA.0==0)
{PORTC.0=1; PORTC.1=0;
delay_us(5);
if(PINA.1==0)
{PORTC.0=0; PORTC.1=1;
delay_us(5);
if(PINA.2==0)
{PORTC.0=0; PORTC.1=0;
delay_us(5);
}
}
}
2.4 Biªn dÞch vµ n¹p ch-¬ng tr×nh.
- Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng
ISP.
- Trªn thanh c«ng cô
Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo «
Program the chip, nhÊn OK ®Ó chÊp nhËn.
Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh.
77
- Window sÏ cã th«ng b¸o sau:
- NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y
- Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh.
- NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau.
3. BÀI TẬP:
Câu hỏi: Nêu và giải thích cú pháp của lệnh If trong ngôn ngữ lập trình C
viết cho vi điều khiển?
B¸o lçi
C¶nh b¸o
78
79
TÀI LIỆU THAM KHẢO
1. PIC16F8x Data Sheet MICROCHIP Technology Inc
2. Giáo trình vi điều khiển họ PIC - Trần văn Trọng
3. 8051 Mikrocontroller erfolgreich anwenden - Jurgen Maier-Wolf
4. Kỹ thuật lập trình C - Phạm Văn Ất
5. AT90S8535 Data Sheet ATMEL
6. Kỹ thuật vi điều khiển AVR - Ngô Diên Tập
7. Giáo trình vi điều khiển 80c51 - Nguyễn Xuân Phú
Các file đính kèm theo tài liệu này:
- giao_trinh_ky_thuat_vi_xu_ly_truong_cao_dang_cong_nghiep_hai.pdf