Tài liệu Đề tài Nhiệt kế điện tử điều khiển tự động: môn : vi xử lý
Linhdt1
1
Lời nói đầu
Trong công nghệ điện tử ,Vi Xử Lý là một thành phần quan trọng không thể thiếu,nó
mang nhiều tính −u việt : có thể thay thế một mạch điện phức tạp bằng một vi mạch nhỏ gọn
với chi phí thấp hơn , nh−ng ứng dụng lại đa dạng và linh hoạt hơn.Khả năng điều khiển thông
minh hơn ,tiết kiệm năng l−ợng hơn ,tốc độ xử lý nhanh hơn,ứng dụng nhiều trong hệ thống
nhúng...
Để học tập tốt môn học Vi Xử Lý ngoài những kiến thức trên sách vở cần có sự thực hành
ứng dụng vào thực tế. Trên cơ sở đó chúng em đã áp dụng những kiến thức có đ−ợc trong quá
trình học tập để chế tạo sản phẩm NHIệT Kế ĐIệN Tử Điều khiển tự động dùng vi điều
khiển AVR của ATMEL ,có khả năng đo và tự động điều khiển nhiệt độ. áp dụng Vi Xử Lý
trong lĩnh vực này đã đ−ơc nghiên cứu và phát triển nhiều với những loại vi điều khiển ,cảm
biến và ngôn ngữ lập trình khác nhau ví dụ:dùng cảm biến nhiệt độ LM35 kết hợp với
AT89S52và IC biến đổi A/D và hiển thị bằng LED...
55 trang |
Chia sẻ: haohao | Lượt xem: 1231 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Nhiệt kế điện tử điều khiển tự động, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
m«n : vi xö lý
Linhdt1
1
Lêi nãi ®Çu
Trong c«ng nghÖ ®iÖn tö ,Vi Xö Lý lµ mét thµnh phÇn quan träng kh«ng thÓ thiÕu,nã
mang nhiÒu tÝnh −u viÖt : cã thÓ thay thÕ mét m¹ch ®iÖn phøc t¹p b»ng mét vi m¹ch nhá gän
víi chi phÝ thÊp h¬n , nh−ng øng dông l¹i ®a d¹ng vµ linh ho¹t h¬n.Kh¶ n¨ng ®iÒu khiÓn th«ng
minh h¬n ,tiÕt kiÖm n¨ng l−îng h¬n ,tèc ®é xö lý nhanh h¬n,øng dông nhiÒu trong hÖ thèng
nhóng...
§Ó häc tËp tèt m«n häc Vi Xö Lý ngoµi nh÷ng kiÕn thøc trªn s¸ch vë cÇn cã sù thùc hµnh
øng dông vµo thùc tÕ. Trªn c¬ së ®ã chóng em ®· ¸p dông nh÷ng kiÕn thøc cã ®−îc trong qu¸
tr×nh häc tËp ®Ó chÕ t¹o s¶n phÈm NHIÖT KÕ §IÖN Tö §iÒu khiÓn tù ®éng dïng vi ®iÒu
khiÓn AVR cña ATMEL ,cã kh¶ n¨ng ®o vµ tù ®éng ®iÒu khiÓn nhiÖt ®é. ¸p dông Vi Xö Lý
trong lÜnh vùc nµy ®· ®−¬c nghiªn cøu vµ ph¸t triÓn nhiÒu víi nh÷ng lo¹i vi ®iÒu khiÓn ,c¶m
biÕn vµ ng«n ng÷ lËp tr×nh kh¸c nhau vÝ dô:dïng c¶m biÕn nhiÖt ®é LM35 kÕt hîp víi
AT89S52vµ IC biÕn ®æi A/D vµ hiÓn thÞ b»ng LED7 thanh ®o ®−îc nhiÖt ®é tõ -55 ®Õn
+150˚C,dïng LM34C vµ 16F88 thuéc vi ®iÒu khiÓn PIC dïng ng«n ng÷ lËp tr×nh BASIC
hiÓn thÞ nhiÖt ®é b»ng LCD, chØ ®o ®−îc nhiÖt ®é tõ -55 ®Õn +125˚C. Nãi chung nh÷ng lo¹i
c¶m biÕn nhiÖt ®é hä LM so víi hä DS th× ®é chÝnh x¸c kh«ng cao vµ tèc ®é truyÒn tÝn hiÖu
chËm 2˚C - 150˚C víi tÇn sè (20 -1500Hz) nh−ng gi¸ thµnh chÕ t¹o rÎ. Cßn ë lo¹i c¶m biÕn hä
DS ®é chÝnh x¸c rÊt cao do tÝn hiÖu ®−îc truyÒn cã ®é ph©n d¶i lªn ®Õn 12bit trong 750ms ë
lo¹i c¶m biÕn nµy cã tÝch hîp ROM 64bit,bé nhí Logic, m¹ch æn ®Þnh tÝn hiÖu ®Çu ra ,chÝnh
v× vËy mµ nã kh¾c phôc ®−îc nh÷ng nh−îc ®iÓm cña c¶m biÕn hä LM .So víi nh÷ng lo¹i
nhiÖt kÕ dïng hä vi ®iÒu khiÓn 8051 vµ PIC nhiÖt kÕ dïng vi ®iÒu khiÓn ATMEGA16L thuéc
hä vi ®iÒu khiÓn AVR cã nhiÒu −u ®iÓm h¬n,so víi vi ®iÒu khiÓn PIC lËp tr×nh b»ng ng«n
ng÷ lËp tr×nh BASIC th× dïng AVR lËp tr×nh b»ng C th× phÇn mÒm sÏ ng¾n gän h¬n, cßn so
víi 8051 th× tèc ®é xö lý tÝn hiÖu nhanh h¬n kh«ng cÇn l¾p thªm bé biÕn ®æi A/D do
ATMEGA16 ®· tÝch hîp s½n bé biÕn ®æi A/D vµ viÖc lËp tr×nh sÏ ®¬n gi¶n h¬n.
S¶n phÈm nµy cã thÓ ph¸t triÓn ®−îc mét sè øng dông vµo ®êi sèng . Cã thÓ l¾p ®−îc
nhiÒu c¶m biÕn DS18B20 vµo Bus-1wire víi ®é dµi lªn tíi 300m vµ ®iÒu kiÓm so¸t ®−îc gi¸ trÞ
nhiÖt ®é cña tõng c¶m biÕn .Mét øng dông ®¬n gi¶n lµ tù ®éng ®iÒu khiÓn nhiÖt ®é phßng b¶o
qu¶n ho¸ chÊt b»ng c¸ch kÕt hîp víi Transistor ®Ó ®ãng më Role ®iÒu khiÓn m¸y ®iÒu hoµ
,nh− vËy sÏ tiÕt kiÖm ®−îc l−îng ®iÖn n¨ng tiªu hao v« Ých trong lóc nhiÖt ®é ®· ®¹t møc yªu
cÇu .
Do h¹n chÕ vÒ tr×nh ®é vµ thêi gian nªn ®Ò tµi cßn rÊt nhiÒu nh÷ng khuyÕt ®iÓm , chóng
em rÊt mong ®−îc sù d¹y b¶o cña c¸c thÇy, c« vµ nh÷ng ý kiÕn ®ãng gãp cña c¸c b¹n,®Ó cã
nh÷ng hiÓu biÕt râ h¬n vÒ ®Ò tµi nµy.
Hµ Néi , ngµy 5 th¸ng 12 n¨m 2007
Nhãm thùc hiÖn ®Ò tµi
Linhdt1
2
Néi dung : Trang
Ch−¬ng I : S¬ §å Nguyªn Lý 3
+ I.1 : PhÇn Cøng 4
+ I.2 : PhÇn MÒm 7
Ch−¬ng II : Nguyªn Lý Ho¹t §éng
+ II.1 : Tæng Quan Hä Vi §iÒu KhiÓn AVR 9
+ II.2 : Vi §iÒu KhiÓn ATMEGA16L 20
+ II.3 : C¶m BiÕn NhiÖt §é DS18B20 43
+ II.4 : Ho¹t §éng Cña M¹ch §iÖn 47
Ch−¬ng III : M¹ch N¹p 48
Ch−¬ng IV : PhÇn MÒm ThiÕt KÕ Vµ LËp Tr×nh
+ IV.1 : Proteus7.1SP2 49
+ IV.2 : CodeVisionAVR 53
Linhdt1
3
CH¦¥NG I : S¥ §å NGUY£N Lý
Linhdt1
4
S¬ ®å nguyªn lý trªn nguån cÊp cho m¹ch ®iÖn lµ nguån AC tõ 7 ®Õn 24V
+ 3 ch©n cÊp nguån cho Chip ATMEGA16L lµ nh÷ng ch©n 10,11,31 kh«ng vÏ trªn
s¬ ®å (ch©n 10 ®−îc nèi víi ch©n 30, ch©n 11®−îc n«Ý víi ch©n 31).
+ ®iÖn trë PULLUP cã gi¸ trÞ 4,7K
+ Tô C3 cã thÓ thay b»ng tô ho¸ 10uf
+ Cã thÓ dïng th¹ch anh 4MHz thay cho lo¹i 8MHz
I.1 : phÇn cøng
PhÇn cøng ®−îc sö dông ®Ó l¾p m¹ch gåm :
1. Chip ATMEGA16L
+ §iÖn ¸p ho¹t ®éng : tõ 2.7 ®Õn 5.5VDC
+ S¬ ®å ch©n :
- VCC : CÊp nguån +
- GND : Nèi ®Êt
- AVCC : Lµ ch©n cÊp ®iÖn cho cæng A(Port A ) vµ bé biÕn ®æi A/D,PC3,PC0,ADC7,ADC6
Nã ®−îc nèi néi bé ®Õn VCC ngay c¶ trong tr−êng hîp ADC kh«ng ®−îc sö dông. NÕu ADC
Linhdt1
5
Kh«ng ®−îc sö dông , nã ph¶i ®−îc nèi víi VCC qua bé läc th«ng thÊp.C¶ PC6 vµ PC4 còng
sö dông ®−îc ®iÖn ¸p AVCC.
- AREF : Lµ ch©n tÝn hiÖu tham chiÕu Analog ( t−¬ng tù ) nèi vµo bé biÕn ®æi A/D.
- PORT B : Tõ PB7 ®Õn PB0 lµ cæng I/O 8-bit hai chiÒu víi c¸c ®iÖn trë Pull-up bªn trong
(®−îc lùa chän cho mçi bit ) . Bé ®Öm ®Çu ra cña Port B cã ®Æc tÝnh ®iÒu khiÓn c©n ®èi víi c¶
tÝn hiÖu Source( nguån ) vµ Sink (bªn trong).Khi lµ tÝn hiÖu ®Çu vµo , c¸c ch©n cña cæng B sÏ
Tiªu thô dßng nÕu c¸c ®iÖn trë Pull-Up bªn trong ®−îc kÝch ho¹t. C¸c ch©n cña Port B lµ 3
tr¹ng th¸i khi cã tÝn hiÖu Reset ®−îc kÝch ho¹t, thËm chÝ ®ång hå kh«ng ch¹y.Tuú thuéc viÖc
®Æt c¸c cÇu ch× lùa chän xung nhÞp, ch©n PB6 cã thÓ ®−îc sö dông nh− lµ bé khuÕch ®¹i dao
déng ®¶o.
Tuú thuéc viÖc ®Æt cÇu ch× lùa chän xung nhÞp ,ch©n PB7 cã thÓ ®−îc sö dông nh− lµ ®Çu ra
tõ bé khuÕch ®¹i dao ®éng ®¶o. NÕu nh− bé dao ®éng RC ®Þnh cì bªn trong ®−îc sö dông nh−
lµ nguån xung nhÞp cña chip bªn trong th× PB7-PB6 ®−îc sö dông nh− lµ ®Çu vµo TOSC2 vµ
TOSC1 cho Timer/Counter2 nÕu nh− Bit AS2 trong thanh ghi ASSR ®−îc ®Æt.
- PORT C : Port C lµ cæng I/O 7-bit hai chiÒu víi c¸c ®iÖn trë Pull-up bªn trong (d−îc lùa chän
cho mçi bit) . Bé nhí ®Öm ®Çu ra cña Port C cã tÝnh ®iÒu khiÓn c©n ®èi víi c¶ tÝn hiÖu Source
vµ sink .Khi lµ c¸c tÝn hiÖu ®Çu vµo , c¸c ch©n cña Port C lµ 3 tr¹ng th¸i khi cã tÝn hiÖu reset
®−îc kÝch ho¹t ,thËm chÝ ®ång hå kh«ng ch¹y.
§èi voi ch©n PC6 NÕu cÇu ch× RSTDISBL ®−îc lËp tr×nh , PC6 ®−îc sö dông nh− lµ mét
ch©n ®Çu vµo Reset . Khi tÝn hiÖu ë møc thÊp dµi h¬n ®é d¸I cña xung nhá nhÊt sÏ g©y ra
Reset ngay c¶ khi c¸c xung nhÞp kh«ng cßn.
- PORT D : Port D lµ cæng I/O 8-bit hai chiÒuvíi c¸c ®iÖn trë Pull-Up bªn trong (®−îc lùa
chän cho mçi bit). Bé ®Öm ®Çu ra cña Port D cã ®Æc tÝnh gièng Port C.
- PORT A : §Çu ra cña bé biÕn ®æi A/D
- XTAL1 & XTAL2 : Ch©n vµo ra cña th¹ch anh t¹o dao ®éng
2. LCD 2 dßng 16 ký tù
+§iÖn ¸p ho¹t ®éng tõ 2.7 – 5VDC
+TÇn sè hiÓn thÞ 2MHZ ë møc ®iÖn ¸p 5V
3. C¶m BiÕn NhiÖt §é DS18B20
Linhdt1
6
+ §iÖn ¸p ho¹t ®éng tõ 3.0 – 5VDC
- Ch©n 1 : GND
- Ch©n 2 : DQ (truyÒn tÝn hiÖu)
- Ch©n 3 : Nguån Vcc
+ Cã thÓ ®o nhiÖt ®é tõ -55 ®Õn +125˚C
(-67˚F ®Õn +257˚F) GND DQ VCC
- Khi l¾p vµo m¹ch ph¶i nèi ch©n 2 vµ ch©n 3
víi mét ®iÖn trë 4K7
4. Nh÷ng linh kiÖn kh¸c
2 tô 2200uf 16V 7805
- §Ó läc nguån
1 IC æn ¸p 5V
- T¹o ®iÖn ¸p 5V cÊp cho m¹ch 33
1 tô 47uf 16V 104
- Lµm m¹ch reset
2 tô gèm 33pf
- æn ®Þnh lµm viÖc cho th¹ch anh 20V – 0.5A
1 tô gèm 104pf
- b¶o vÖ m¹ch tr¸nh nh÷ng thµnh phÇn tÇn sè cao
1 ®iÖn trë 4,7K vµ 1 ®iÖn trë 10K
- Nèi ch©n 2 va ch©n 3 cña DS18B20 va nèi víi m¹ch 8.000
Rese
BiÕn ¸p 20V- 0.5A
Thach anh 8.000MHz
CÇu Diod
Linhdt1
7
I.2 : PHÇN MÒM PhÇn mÒm viÕt b»ng ng«n ng÷ C
/* Nhiet ke dien tu v1.0 by Linh
*/
#asm
.equ __w1_port=0x1b //§Æt cæng nhiÖt ®é
.equ __w1_bit=6 //§Æt bit nèi c¶m biÕn
#endasm
#asm
.equ __lcd_port=0x15 //§Æt cæng LCD
#endasm
#include // Khëi t¹o LCD
#include
#include
#include
#include
char lcd_buffer[33];
/* Sè l−îng tèi ®a chip DS18B20 nèi vµo hÖ thèng */
#define MAX_DEVICES 8
/* Vïng m· DS18B20 ROM */
unsigned char rom_code[MAX_DEVICES][9];
main()
{
unsigned char i,j,t1,devices;
PORTD=0x00;
lcd_init(16);
lcd_putsf("Truong CDCN \n Thanh Do");
delay_ms(1000);thêi gian hiÖn ch÷ trªn LCD
lcd_clear();
lcd_putsf("Lop DTVT1-K3");
delay_ms(1000);
lcd_clear();
lcd_putsf("Desined by \n LINH");
delay_ms(1000);
lcd_clear();
lcd_putsf("GVHD:NGUYEN DINH\nTHUAN");
delay_ms(1000);
lcd_clear();
/* KiÓm tra sè l−îng DS18B20 nèi vµo hÖ thèng */
devices=w1_search(0xf0,rom_code);
Linhdt1
8
sprintf(lcd_buffer,"So luong: \n %u DS18B20",devices);
lcd_puts(lcd_buffer);
delay_ms(2000);
/* HiÓn thÞ m· ROM */
if (devices)
{
for (i=0;i<devices;i++)
{
sprintf(lcd_buffer,"Ma ROM\nchip #%u la:",i+1);HiÓn thÞ m· ROM chip
lcd_clear(); Xo¸ ký tù
lcd_puts(lcd_buffer);
delay_ms(1000);
lcd_clear();
for (j=0;j<8;j++)
{
sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
lcd_puts(lcd_buffer);
if (j==3) lcd_gotoxy(0,1);
};
delay_ms(1000);
};
}
else
while (1); /* Dõng l¹i khi cã lçi */
/* §Æt chÕ ®é lµm viÖc ë ®é chÝnh x¸c 12 bit */
for (i=0;i<devices;)
if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
{
sprintf(lcd_buffer,"Thiet bi\nloi #%u",i);
lcd_clear();
lcd_puts(lcd_buffer);
while (1); /* Dõng l¹i khi cã lçi */
};
/* §äc nhiÖt ®é vµ kiÓm tra ®iÒu kiÖn */
while (1)
{
j=1;
for (i=0;i<devices;i++)
{
Linhdt1
9
sprintf(lcd_buffer,"t%u=%+.0f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
lcd_clear();
lcd_puts(lcd_buffer);
t1 = ds18b20_temperature(0);
if (t113)
{
PORTD=0x00; // T¾t thiÕt bÞ lµm nãng vµ lµm l¹nh trong ®iÒu kiÖn kh¸c
}
if (t1 >= 35) ; §Æt ®iÒu kiÖn lµm l¹nh
{
PORTD=0x01; //BËt thiÕt bÞ lµm l¹nh
}
if (t1 <= 13) ; §Æt ®iÒu kiÖn lµm nãng
{
PORTD=0x02; //BËt thiÕt bÞ lµm nãng
}
delay_ms(500); Thêi gian khëi ®éng
};
};
}
CH¦¥NG II : NGUY£N Lý HO¹T §éNG
II.1 : Tæng Quan Hä Vi §iÒu KhiÓn AVR
Vi điều khiển AVR (Atmel Norway design) thuộc họ vi điều khiển Atmel, nó là họ Vi
điều khiển mới trên thị trường cũng như đối với người sử dụng. Đâ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 khá phức
tạp. Ngoài các tính năng như các họ VĐK 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. Vì thế nghiên cứu AVR là một đề tài khá lý thú và giúp
cho häc sinh, sinh viên biết thêm một họ vi điều khiển vào loại mạnh hiện nay.
Linhdt1
10
PHÂN LOẠI AVR
+ AT90S8535: Không có lệnh nhân hoặc chia trên thanh ghi.
+ ATMEGA 8, 16, 32 (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.
+ AVR tích hợp sẵn LCD driver : Atmega169,329
+ AVR có tích hợp SC (power stage controller): AT90PWM 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ỏ.
C¸c ®Æc ®iÓm chÝnh
1-Kiến trúc RISC(Cã nghÜa lµ m¸y tÝnh dïng tËp lÖnh rót gän,bé vi xö lý kiÓu nµy thùc
hiÖn Ýt lÖnh h¬n nh÷ng bé vi xö lý kh¸c) 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ữ và 32 thanh ghi đa năng.
2- Có nhiều bộ phận ngoại vi ngay trên chip, bao gồm: Cổng vào/ra số, bộ biến đổi ADC,
bộ nhớ EEFROM, bộ định thời, bộ điều chế độ rộng xung (PWM), …
3- Hầu hết các lệnh đều thực hiện trong một chu kỳ xung nhịp.
4- Hoạt động với chu kỳ xung nhịp cao, có thể lên đến 20 MHz tuỳ thuộc từng loại chip cụ
thể.
5- Bộ nhớ chương trình vµ bộ nhớ dữ liệu được tích hợp ngay trên chip.
6- Khả năng lập trình được trong hệ thống, có thể lập trình được ngay khi đang được cấp
nguồn trên bản mạch không cần phải nhấc chip ra khỏi bản mạch.
7- Hỗ trợ cho việc lập trình bằng ngôn ngữ bậc cao – ngôn ngữ C.
Cốt lõi của AVR là sự kết hợp tập lệnh đầy đủ với các thanh ghi đa năng 32 bit. Tất cả các
thanh ghi 32 bit này liên kết trực tiếp với khối xử lý số học và logic (ALU) cho phép 2 thanh
ghi độc lập được truy cập trong một lệnh đơn trong 1 chu kỳ đồng hồ. Kết quả là tốc độ nhanh
gấp 10 lần các bộ vi điều khiển CISC(Complex Instruction Set Computer : máy tính với tập
lệnh phức tạp . Một loại kiến trúc của bộ xử lí được đặc trưng bởi tính chất là các lệnh có độ
dài khác nhau (không cố định) , thường là một số nhỏ các chế độ đa địa chỉ và thanh ghi) .
Với các tính năng đã nêu, chế độ nghỉ (Idle) CPU trong khi cho phép bộ truyền tin nối tiếp
đồng bộ USART, giao tiếp 2 dây, chuyển đổi A/D, SRAM, bộ đếm, bộ định thời, cổng SPI và
hệ thống các ngắt vẫn hoạt động. Chế độ Power-down lưu giữ nội dung của các thanh ghi
nhưng làm đông lạnh bộ tạo dao động, thoát khỏi các chức năng của chip cho đến khi có ngắt
ngoài hoặc là reset phần cứng. Chế độ Power-save đồng hồ đồng bộ tiếp tục chạy cho phép
chương trình sử dụng giữ được đồng bộ thời gian nhưng các thiết bị còn lại là ngủ. Chế độ
Linhdt1
11
ADC Noise Reduction dừng CPU và tất cả các thiết bị còn lại ngoại trừ đồng hồ đồng bộ và
ADC, tối thiểu hoá switching noise trong khi ADC đang hoạt động. Trong chế độ standby, bộ
tạo dao động (thuỷ tinh thể/bộ cộng hưởng) chạy trong khi các thiết bị còn lại ngủ. Các điều
này cho phép bộ vi điều khiển khởi động rất nhanh trong chế độ tiêu thụ công suất thấp. Thiết
bị được sản xuất sử dụng công nghệ bộ nhớ cố định mật độ cao của Atmel. Bộ nhớ On-chip
ISP Flash cho phép lập trình lại vào hệ thống qua giao diện SPI bởi bộ lập trình bộ nhớ cố
đinh truyền thống hoặc bởi chương trình On-chip Boot chạy trên lõi AVR. Chương trình boot
có thể sử dụng bất cứ giao điện nào để download chương trình ứng dụng trong bộ nhớ Flash
ứng dụng. Phần mềm trong vùng Boot Flash sẽ tiếp tục chạy trong khi vùng Application Flash
được cập nhật, cung cấp thao tác Read-While-Write thực sự.
Để tối đa hoá hiệu năng tính năng và song song, AVR sử dụng kiến trúc Harvard với bộ
nhớ riêng biệt và các BUS cho chương trình và dữ liệu. Các câu lệnh trong bộ nhớ chương
trình được hoạt với một đường ống lệnh mức đơn. Trong khi một lênh đang thực hiện, lệnh
tiếp theo sẽ được nạp trước vào từ bộ nhớ chương trình. Điều này làm cho các lệnh được thực
hiện trong mọi chu kỳ đồng hồ. Bộ nhớ chương trình là bộ nhớ In-System Reprogrammable
Flash. Tập thanh ghi truy cập nhanh bao gồm 32 thanh ghi đa năng 8 bit với thời gian truy cập
là 1 chu kỳ đơn. Điều này cho phép ALU hoạt động trong một chu kỳ đơn. Một thao tác điển
hình với 2 toán hạng được của ALU, 2 toán hạng được lấy ra từ tệp thanh ghi để thực hiện, và
và kết quả được lưu trữ lại trong tệp thanh ghi trong một chu kỳ đồng hồ. 6 trong số 32 thanh
ghi có thể sử dụng như là 3 thanh ghi con trỏ địa chỉ gián tiếp 16 bit để chỉ vào vùng dữ liệu
phục vụ cho tính toán địa chỉ hiệu dụng. Một trong các con trỏ địa chỉ này cũng có thể được
sử dụng làm con trỏ địa chỉ trỏ vào bảng dữ liệu trong bộ nhớ chương trình Flash. Các thanh
ghi này là X, Y và Z.ALU thực hiện các phép toán logíc và số học giữa các thanh ghi hoặc
giữa thanh ghi với một hằng số. Cũng có thể thao tác với các thanh thanh ghi đơn trong ALU.
Sau khi thực hiện phép toán số học, các thanh ghi trạng thái được cập nhật các thông tin về kết
quả thực hiện. Dòng chương trình được điều khiển bởi các phép nhảy có điều kiện hoặc không
điều kiện đến các lệnh được gọi, và chỉ đến các địa chỉ trực tiếp trong không gian địa chỉ. Hầu
hết các lệnh AVR đều thực hiện với dữ liệu 16 bit. Mỗi địa chỉ bộ nhớ chương trình đều chứa
1 lệnh 32 bit hoặc 16 bit. Không gian bộ nhớ chương trình Flash được chia thành 2 vùng, vùng
chương trình boot và vùng chương trình ứng dụng, cả hai vùng này đều có bit khoá chuyên
dụng để bảo vệ cho việc ghi và đọc/ghi. Lệnh SPM dùng để ghi vào vùng bộ nhớ ứng dụng
phải có trong vùng chương trình boot. Trong khi thực hiện các ngắt và các thường trình, địa
Linhdt1
12
chỉ trở về của bộ đếm chương trình (PC) được lưu trữ trong stack. Nhìn chung stack được định
vị trong SRAM, và do vậy kích cỡ stack được giới hạn bởi kích cỡ toàn bộ của SRAM, và
cách sử dụng của SRAM. Tất cả các chương trình của người sử dụng phải khởi tạo SP trong
thường trình reset (trước khi thường trình hoặc ngắt được thược hiện). SP có thể trỏ được vào
không gian I/O. SRAM có thể được truy cập một cách dễ dàng thông qua 5 chế độ địa chỉ
khác nhau hỗ trợ bởi kiến trúc AVR.Không gian bộ nhớ trong kiến trúc AVR là bản đồ bộ
nhớ thông thường và tuyến tính. Một module ngắt linh động có các thanh ghi điều khiển của
nó trong không gian I/O cùng với thêm vào bit khởi tạo ngắt toàn cục trong thanh ghi trạng
thái. Tất cả các ngắt có vector ngắt riêng biệt trong bảng vector ngắt. Các ngắt này có mức độ
ưu tiên theo vị trí của vector ngắt tương ứng. Mức có địa chỉ càng thấp thì có quyền ưu tiên
càng cao. Không gian bộ nhớ I/O có 64 địa chỉ cho các chức năng ngoại vi của CPU như là
các thanh ghi điều khiển, SPI, và các chức năng I/O khác. Bộ nhớ I/O có thể truy cập trực tiếp,
hoặc như là vị trí không gian dữ liệu theo chúng của tệp thanh ghi, $20-$5F. Thêm vào đó, nó
có không gian I/O mở rộng từ $60 đến $FF trong SRAM, các không gian này chỉ có các lệnh
ST/STS/STD và LD/LDS/LĐ có thể sử dụng.
S¬ §å KiÕn Tróc AVR
Linhdt1
13
ALU – Arithmetic Logic Unit - Đơn vị xử lý số học và logicAVR ALU hiệu năng cao tác
động trựuc tiếp tới 32 thanh ghi đa năng. Trong vòng 1 chu kỳ, các toán hạng số học thực hiện
giữa các thanh ghi đa năng hoặc giữa một thanh ghi và một toán hạng tức thời. Các toán tử
của ALU được chia làm 3 loại chính: Số học, logic, và xử lý bit. Một số phép xử lý của kiến
trúc này cũng cung cấp bộ nhân số có dấu và không có dấu và dạng phân số.
DATA SRAM : Bé nhí d÷ liÖu
EEPROM : (Electrically Erasable Programmable Read-Only Memory): Lµ lo¹i ROM cã thÓ
xo¸ ®−îc bằng điện sau đó ghi lại mà không cần lấy ra.
DATA BUS – 8Bit : §−êng truyÒn d÷ liÖu 8Bit
I/O Lines : §−êng vµo ra tÝn hiÖu
32 x 8 Gneral Purpose Registers : 32 thanh ghi ®a n¨ng 8 Bit
Status and control : Khèi nhËn biÕt tr¹ng th¸i vµ ®iÒu khiÓn
PRograme counter : Bé ®Õm ch−¬ng tr×nh
Flash program memory : Bé nhí flash, lµ mét lo¹i bé nhí sử dụng các chíp NAND (tích
hợp nhiều transitor lên một tấm bán dẫn), các chíp này có kích thước nhỏ, tốc độ đọc/ghi cao,
dung lượng lớn
Intruction register : thanh ghi lÖnh
Intruction decoder : Gi¶i m· lÖnh
Control lines : Nh÷ng ®−êng ®iÒu khiÓn
IntErrupt unit: Bé xö lý ng¾t
Linhdt1
14
SPI unit: (Serial Peripheral Interface) mạch ghép nối ngoại vi nối tiếp, là mạch liªn kết dữ
liệu nối tiếp đồng bộ cho phép bộ điều khiển truyền thông với các thiết bị ngoại vi.
Watchdog timer : là một bộ đếm có chức năng reset lại vi điều khiển khi xảy ra sự kiện
tràn (overflow)
ANALOG COMPARATOR : Bé so s¸nh tÝn hiÖu t−¬ng tù
I/O MODULE1 -> I/O MODULE n :Module vµo ra tÝn hiÖu
Direct addressing : §−êng ®Þa chØ truyÒn trùc tiÕp
Indirect addressing : §−êng ®Þa chØ truyÒn gi¸n tiÕp
Status Register – Thanh ghi trạng thái
Thanh ghi trạng thái chứa thông tin về kết quả thưc hiện của hầu hết các lệnh số học.
Các thông tin này có thể được sử dụng để điều khiển chương trình. Chú ý rằng các thanh ghi
trạng thái được cập nhật sau tất cả các hoạt động của ALU. Trong nhiều trường hợp, điều này
sẽ bỏ đi những cần thiết khi sử dụng câu lệnh so sánh chuyên dụng, kết quả nhanh hơn và
đoạn chương trình ngắn gọn hơn.
Thanh ghi trạng thái không tự động lưu trữ khi đang nhập vào môt thường trình ngắt và lưu
trữ khi trở về tự một ngắt. Điều này phải được quản lý bằng phần mềm. Thanh ghi trạng thái
AVR – SREG - được định nghĩa như sau:
Global Interrupt Enable- bit cho phép ngắt toàn cục
Bit cho phép ngắt toàn cục phải được đặt để cho các ngắt có thể hoạt động. Điều khiển
hoạt động của các ngắt riêng biệt được thực hiện trong các thanh ghi điều khiển riêng biệt.
Nếu thanh ghi cho phép ngắt toàn cục được xóa, không có một ngắt riêng biệt nào được hoạt
động. Bit I được xóa bởi phần cứng sau khi một ngắt xảy ra và được đặt bởi lệnh RETI để cho
Linhdt1
15
các phép các ngắt tiếp theo hoạt động. Bit I cũng có thể được đặt và xóa bởi câu lệnh
SEI và CLI trong các ứng dụng.
Bit 6 – T: Bit Copy Storage
Các câu lệnh copy bit BLD (Bit LoaD) và BST (Bit STore) sử dụng bit T như là đích
hoặc nguồn cho bit hoạt động. 1 bit từ một thanh ghi trong tệp thanh ghi có thể được copy vào
bit T bằng lệnh BST và một bit trong T có thể được copy vào 1 bit trong thanh ghi trong tệp
thanh ghi bằng lệng BLD.
+ Bit 5 – H: Half Carry Flag
Cờ nhớ một nửa dùng cho các toàn hạng hạng một nửa byte trong các phép toán số học.
Cờ H sử dụng phép toán số học với số BDC .
+ Bit 4 – S: Sign Bit, S = N ⊕ V – bit dấu
Bit S là phép XOR giữa cờ âm và cờ tràn V .
+ Bit 3 – V: Two’s Complement Overflow Flag – cờ tràn mã bù 2
Cờ tràn V hỗ trợ phép toán số bù 2.
+ Bit 2 – N: Negative Flag – cờ âm
Cờ âm N hiển thị kết quả âm của phép toán logic hoặc số học.
+ Bit 1 – Z: Zero Flag
Cờ Zero Z hiển thị kết quả bằng 0 của phép toán logic hoặc số học.
+ Bit 0 – C: Carry Flag Cờ nhớ C hiển thị số nhớ trong phép toán logic hoặc số học.
Linhdt1
16
General Purpose Register File – tệp các thanh ghi đa năng
Hình 1.4 Tệp thanh ghi đa năng của AVR CPU
Hầu hết các lệnh thực hiện với tệp thanh ghi có truy cập trực tiếp tới tất cả các thanh ghi,
và hầu hết chúng là lệnh đơn chu kỳ. Mỗi một thanh ghi được chỉ định bởi một địa chỉ bộ nhớ
dữ liệu, bố trí chúng trực tiếp vào 32 vị trí đầu tiên của không gian dữ liệu người sử dụng.
Mặc dù không phải là thực hiện theo luật như các vị trí của SRAM, tổ chức bộ nhớ này
cho phép linh động cao khi truy cập các thanh ghi, như là thanh ghi con trỏ X,Y,Z có thể được
đặt vào danh mục của mọi thanh ghi trong tệp.
The X-register, Y-register and Z-register
Các thanh ghi R26..R31 có thêm các chức năng ngoài việc sử dụng như là một thanh
ghi đa năng. Các thanh ghi này là các con trỏ địa chỉ 16 bit cho chế độ địa chỉ gián tiếp của
không gian dữ liệu. 3 thanh ghi địa chỉ gián tiếp X, Y, Z được mô tả như như hình 3.5.
Trong các chế độ địa chỉ khác, các thanh ghi địa chỉ này có các chức năng như là độ
lệch cố định, tự động tăng và tự động giảm.
Linhdt1
17
Các thanh ghi X, Y và Z
Stack Pointer – ngăn xếp
Stack thường được sử dụng để chứa dữ liệu tạm thời, cho việc lưu trữ các biến địa
phương và cho việc lưu trữ địa chỉ trở về sau khi gọi các thường trình và các ngắt. Thanh ghi
con trỏ thường trỏ tới đỉnh của stack. Chú ý rằng stack được thực hiện khi tăng thêm từ địa chỉ
cao đến địa chỉ thấp, điều này nói lên rằng khi thực hiện lệnh PUSH thì con trỏ sẽ tự động
giảm. Con trỏ trỏ đến vùng ngăn xếp dữ liệu SRAM .
Không gian ngăn xếp trong SRAM phải được định nghĩa bằng chương trình trước khi
bất cứ thường trình hoặc ngắt được thực hiện. Con trỏ ngăn xếp phải được set để trỏ tới địa
chỉ trên $0100. Con trỏ ngăn xếp được giảm đi 1 khi dữ liệu được cất vào ngăn xếp và được
giảm đi 2 khi cất địa chỉ trở về của thường trình hoặc ngắt. SP được tăng lên khi dữ liệu được
lấy ra.
AVR SP được thực hiện với 2 thanh ghi 8 bit trong không gian I/O. Số các bit thực tế
sử dụng là tuỳ thuộc. Chú ý rằng không gian dữ liệu trong một số thực thi của kiến trúc AVR
rất nhỏ, chỉ SPL là cần. Trong trường hợp này SPH không sử dụng.
Sơ đồ các thanh ghi của con trỏ
Linhdt1
18
Reset and Interrupt Handling - điều khiển ngắt và reset
AVR cung cấp 1 vài nguồn ngắt khác nhau. Các ngắt này và vector reset riêng biệt có
vector chương trình riêng biệt nằm trong không gian nhớ chương trình. Tất cả các ngắt được
chỉ định bởi các bit cho phép riêng biệt mà các bit này phải được ghi mức logic 1 cùng với bit
cho phép ngắt toàn cục trong thanh ghi trạng thái để cho phép ngắt. Phụ thuộc vào giá trị PC,
các ngắt này phải được tự động loại bỏ khi các bit Boot Lock - BLB02 or BLB12 - được lập
trình. Yếu tố này cải thiện độ an toàn phần mềm.
Địa chỉ thấp nhất trong không gian bộ nhớ chương trình được mặc định là Reset và
Interrupt Vectors. Bảng vector ngắt
Bảng vector ngắt và reset
Linhdt1
19
Khi địa chỉ càng nhỏ thì thứ tự ưu tiên càng cao.Các vector ngắt có thể được chuyển sang
đầu của vùng Boot Flash bằng cách đặt bit IVSEL trong thanh ghi điều khiển ngắt (MCUCR).
Reset Vector có thể được chuyển sang đầu của vùng Boot Flash bằng cách lập trình
BOOTRST fuse.
Khi một ngắt xảy ra, bit I (bit cho phép ngắt toàn cục) được xóa và tất cả các ngắt được
loại bỏ. Phần mềm sử dụng có thể ghi mức logic 1 vào bit I để cho phép các ngắt tiếp theo. Tất
cả các ngắt được kích hoạt có thể ngắt những thường trình ngắt hiện tại. Bit I được đặt tự động
khi trở về từ lệnh RETI của ngắt.
Có 2 loại ngắt cơ bản.
+ Loại thứ nhất được gây ra bởi sự kiện mà đặt cờ ngắt. Đối với loại ngắt này, PC được
hướng tới Interrupt Vector tương ứng để thực hiện thường trình phục vụ ngắt và phần cứng
xoá cờ ngắt tương ứng. Các cờ ngắt cũng có thể được ghi mức logic 1 vào vị trí bit cờ để được
xoá. Nếu một điều kiện ngắt xảy ra trong khi bit cho phép ngắt tương ứng bị xoá, thì cờ ngắt
sẽ được đặt và được nhớ cho đến khi ngắt được thực hiện, hoặc là cờ ngắt được xoá bởi phần
mềm. Tương tự nếu 1 hoặc nhiều điều kiện ngắt xảy ra trong
khi cờ cho phép ngắt toàn cục bị xoá thì các cờ ngắt tương ứng sẽ được đặt và nhớ cho
đến khi cờ cho phép ngắt toàn cục được đặt và nó sẽ được thực hiện theo thứ tự ưu tiên.
+ Loại ngắt thứ 2 sẽ kích hoạt kéo dài trong thời gian điều kiện ngắt tồn tại. Các ngắt
này không cần thiết phải có cờ ngắt. Nếu điều kiện ngắt mất đi trước khi ngắt được cho phép,
thì ngắt sẽ không xảy ra.
Khi AVR thoát khỏi từ một ngắt, nó sẽ luôn trở về chương trình chính và thực hiện một
hoặc nhiều lệnh trước khi một ngắt nào đó còn đợi đó được phục vụ.
Chú ý rằng các thanh ghi trạng thái không tự động lưu trữ khi nhập vào một thường
trình ngắt, và cũng không lưu trữ lại khi trở về từ một thường trình ngắt. Điều này phải được
thực hiện bởi phần mềm.
Linhdt1
20
Khi sử dụng câu lệnh CLI để cấm ngắt, các ngắt sẽ không được tác động ngay lập tức.
Không có ngắt nào được thực hiện sau khi thực hiện lệnh CLI, thậm chí nó xảy ra cùng lúc với
lệnh CLI.
Thời gian đáp ứng của 1 ngắt
Việc thực hiện ngắt trong ít nhất 4 chu kỳ đồng hồ với tất cả các ngắt. Sau 4 chu kỳ
đồng hồ, địa chỉ vector chương trình tương ứng với thường trình điều khiển ngắt thực sự được
khởi tạo.
Trong thời gian 4 chu kỳ này, PC được cất vào trong ngăn xếp. Vector thường là lệnh
nhảy đến thường trình ngắt và lệnh nhảy này mất 3 chu kỳ đồng hồ.
Nếu một ngắt xảy ra trong khi thực hiện một lệnh nhiều chu kỳ thì lệnh được hoàn
thành trước khi ngắt được phục vụ.
Nếu một ngắt xảy ra khi MCU đang trong chế độ ngủ thì thời gian đáp ứng ngắt sẽ tăng
thêm 4 chu kỳ. Thời gian tăng thêm này là thời gian để khởi động lại từ chế độ ngủ.
Sự trở về từ một thường trình điều khiển ngắt mất 4 chu kỳ xung nhịp. Trong thời gian
4 chu kỳ này, PC (2 bytes) được lấy ra từ ngăn xếp, SP được tăng lên 2, và bit I trong SREG
được đặt.
II.2 : §Æc §iÓm Cña ATMEGA16L
+ S¬ ®å nguyªn lý :
Linhdt1
21
Linhdt1
22
C¸c ®Æc TÝnh Cña Vi §iÒu KhiÓn ATMEGA16L
- Hiệu năng cao, tiêu thụ năng lượng ít
- Kiến trúc RISC - Reduce Instruction Set Computer (Cã nghÜa lµ m¸y tÝnh dïng tËp lÖnh
rót gän,bé vi xö lý kiÓu nµy thùc hiÖn Ýt lÖnh h¬n nh÷ng bé vi xö lý kh¸c)
- 131 lệnh mạnh, hầu hết các lênh thực hiện trong một chu kỳ
- 32 Thanh ghi 8-bit đa năng
- Tốc độc thực hiện lên tới 16 triệu lệnh trong 1 giây với tần số 16MHz
- Có 2 bộ nhân, mỗi bộ thực hiện trong thời gian 2 chu kỳ
- Các bộ nhớ chương trình và dữ liệu cố định
- 16 Kb bộ nhớ flash có khả năng tự lập trình trong hệ thống
- Có thể thực hiện được 10.000 lần ghi/xoá
- Vùng mã Boot tuỳ chọn với những bit khoá độc lập
- Lập trình trên trong hệ thống bởi chương trình on-chip Boot
- Thao tác đọc trong khi nghi thực sự
- 512 bytes EEFROM
Có thể thực hiện 100.000 lần ghi /xoá
- 1Kb SRAM bên trong
- Lập trình Khoá an ninh phần mềm
+ Giao diÖn nèi tiÕp ®ång bé ( chuÈn IEEE std.1149.1).Khi thùc hiÖn trao ®æi d÷ liÖu víi c¸c
thiÕt bÞ t−¬ng thÝch th× khung d÷ liÖu 8Bit gi÷a 2 thiÕt bÞ ®−îc truyÒn ®ång bé (cïng xung nhÞp
®ång hå)
- Ýt x¶y ra lçi
- LËp tr×nh bé nhí Flash ,EEPROM ,ng¾t ,kho¸ Bit th«ng qua giao diÖn jTAG
+ Ghép nối ngoại vi
- 2 bộ định thời/ bộ đếm 8 bit với các chế độ tỷ lệ định trước và chế độ so sánh.
- 1 bộ định thời/ bộ đếm 16 bit với các chế độ tỷ lệ định trước riêng biệt, chế độ so sánh và
chế độ bắt giữ
- Bộ thời gian thực với bộ tạo dao động riêng biệt
- 4 kênh PWM
- 8 kênh, ADC 10 bit
- Giao điện nối tiếp 2 dây hướng tới byte
Linhdt1
23
- Bộ truyền tin nối tiếp USART khả trình
- Giao diện SPI chủ / tớ
- Watchdog Timer khả trình với bộ tạo dao động bên trong riêng biệt
- Máy so mẫu tương tự bên trong
+ Các đặc điểm đặc biệt khác.
- Power-on Reset và dò Brown-out khả trình.
- Bộ tạo dao động được định cỡ bên trong.
- Các nguồn ngắt bên trong và bên ngoài.
- 6 chế độ ngủ: Nhàn rỗi, giảm ồn ADC, tiết kiệm năng lượng, giảm năng lượng tiêu thụ,
chờ ,®ãng b¨ng tr¹ng th¸i
- I/O và các loại.
- 32 đường I/O khả trình.
- Điện áp hoạt động.
2.7 – 5.5V
- Nhiệt độ hoạt động: -40oC-85oC
+ Các tốc độ.
- 0-8 MHz khi điện áp 2.7 – 5.5V, 0 - 16MHz khi điện áp 4.5 – 5V
- Tiêu thụ năng lượng tại 1 MHz, 3V, 25oC đối với ATmega16L.
- Hoạt động tích cực: 1.1mA
- ChÕ ®é nghØ ë 0.35mA
- Chế độ năng lượng thấp: <1 μA khi điện áp 2.7V
+ Bằng việc kết hợp 1 bộ 8-bit RISC CPU với In-System Self-Programmable Flash trong chỉ
nguyên vẹn 1 chip Atmel Atmega16L là một bộ vi điều khiển mạnh có thể cung cấp giải pháp
có tính linh động cao, giá thành rẻ cho nhiều ứng dụng điều khiển nhúng(Theo định nghĩa của
IEEE - Institute of Electrical and Electronics Engineers - ViÖn kü thuËt vµ ®iÖn tö cña Mü, thì
hệ thống nhúng là một hệ tính toán nằm trong sản phẩm, tạo thành một phần của hệ thống lớn
hơn và thực hiện một số chức năng của hệ thống ) Atmega16L AVR được hỗ trợ bởi bộ
chương trình đầy đủ và các tool(tiÖn Ých) để phát triển hệ thống, báo gồm: Bộ biên dịch
C,macro assemblers, program debugger/simulators(ch−¬ng tr×nh m« pháng), in-circuit
emulators(m¹ch m« pháng) và evaluation kits(kit ph¸t triÓn).
Linhdt1
24
Memories – bộ nhớ cña ATMEGA16L
Kiến trúc AVR có 2 không gian bộ nhớ chính bao gồm bộ nhớ chương trình và bộ nhớ dữ
liệu. Thêm vào đó, Atmega16L có một bộ nhớ EEPROM để lưu trữ dữ liệu. Tất cả 3 không
gian này là tuyến tính và như thường lệ.
1.3.6.1 In-System Reprogrammable Flash Program Memory – bộ nhớ chương trình Flash có
thể lập trình lại nằm bên trong vi xử lý.
Atmega16L chứa 16K bytes bộ nhớ Flash có thể lập trình lại được nằm trong chip để
chứa chương trình. Từ khi tất cả các lệnh của AVR là 16 hoặc 32 bit thì Flash được tổ chức
thành 8Kx16. Vì lý do an toàn phần mềm nên bộ nhớ chương trình Flash được chia thành 2
vùng: Vùng nạp chương trình boot(ch−¬ng tr×nh khëi ®éng) và vùng chương trình ứng dụng.
Bộ nhớ Flash có thể thực hiện ghi/xoá ít nhất 10.000 lần. Bộ đếm chương trình (PC) là
12 bit , nó có thể địa chỉ hoá được 4K bộ nhớ chương trình.
Bảng hằng số có thể được đặt trong không gian bộ nhớ chương trình.
Bản đồ bộ nhớ chương trình như hình vÏ
Bản đồ bộ nhớ chương trình
Linhdt1
25
SRAM Data Memory – bộ nhớ dữ liệu SRAM
Bản đồ bộ nhớ dữ liệu SRAM được chỉ ra trên hình vÏ
Bản đồ bộ nhớ dữ liệu SRAM
ATmega16L là bộ vi điều khiển hoàn chỉnh hỗ trợ nhiều thiết bị ngoại vi trong 64 vị trí
được đặt trước trong mã lệnh IN/OUT. Đối với các không gian vào ra mở rộng từ 0x60 đến
0xFF trong SRAM thì chỉ có các lệnh ST/STS/STD và LD/LDS/LDD mới được sử dụng.
5 chế độ địa chỉ khác nhau cho bộ nhớ dữ liệu bao gồm: Trực tiếp, gián tiếp với độ lệch,
gián tiếp, gián tiếp với độ lệch giảm, và gián tiếp với độ lệch tăng lên. Trong tệp thanh ghi,
các thanh ghi từ R26 đến R31 dùng để làm các thanh ghi con trỏ địa chỉ gián tiếp.
Địa chỉ trực tiếp chỉ tới toàn bộ không gian dữ liệu.
Chế độ gián tiếp với độ lệch chỉ đến 63 vị trí từ địa chỉ cơ sở được đưa ra bởi thanh ghi
Y hoặc Z.
Khi sử dụng các chế độ địa chỉ gián tiếp thanh ghi với độ giảm hay tăng tự động, thanh
ghi địa chỉ X, Y và Z được giảm hoặc được tăng.
EEPROM Data Memory – bộ nhớ dữ liệu EEPROM
ATmega16L chứa 512 byte bộ nhớ dữ liệu EEPROM. Nó được tổ chức thành không
gian dữ liệu riêng biệt, trong chúng các byte đơn có thể được đọc và ghi. EEPROM có thể đọc
ghi được ít nhất 100.000 lần.
EEPROM Read/Write Access – đọc/ghi vào EEPROMass
Các thanh ghi truy nhập EEPROM có thể được thực hiện trong không gian I/O.
Linhdt1
26
Thanh ghi địa chỉ EEPROM – EEARH và EEARL
+ Bits 15..9 – Res: Các bit dự phòng
Các bit này được đặt dự phòng trong Atmega16L và sẽ luôn là 0.
+ Bits 8..0 – EEAR9..0: Địa chỉ EEPROM
Giá trị khởi tạo của EEAR là không xác định. Giá trị thích hợp phải được ghi trước khi
EEPROM có thể được truy cập.
Thanh ghi dữ liệu EEPROM – EEDR
+ Bits 7.0 – EEDR7.0: Dữ liệu EEPROM
Để ghi EEPROM, thanh ghi dữ EEDR chứa dữ liệu được ghi vào trong EEPROM với địa chỉ
được chỉ ra trong thanh ghi EEAR. Khi đọc EEPROM, thanh ghi EEDR chứa dữ liệu đọc ra từ
EEPROM tại địa chỉ chỉ ra tại EEAR.
Thanh ghi trạng thái EEPROM – EECR
+ Bits 7..6 – Res: Các bit dự phòng
Linhdt1
27
Các bit này được đặt dự phòng trong Atmega16L và sẽ luôn là 0.
+ Bit 5..4 – EEPM1 và EEPM0: Các bit chế độ lập trình EEPROM
+ Bit 3 – EERIE: EEPROM Ready Interrupt Enable
+ Bit 2 – EEMWE: EEPROM Master Write Enable
+ Bit 1 – EEWE: EEPROM Write Enable
+ Bit 0 – EERE: EEPROM Read Enable
Phòng ngừa sai lệch dữ liệu EEPROM
Trong thời gian nguồn điện VCC bị sụt dữ liệu của EEPROM có thể bị sai bởi vì điện
áp cung cấp quá thấp cho CPU và EEPROM làm việc đúng. Điều này cũng tương tự đối với
các hệ thống bản mạch sử dụng EEPROM, và các giải pháp thiết kế tương tự nên được ứng
dụng.
Một sự sai khác dữ liệu của EEPROM có thể bi gây ra bởi 2 yếu tố khi mà điện áp quá
thấp: Đầu tiên là sự liên tiếp ghi vào EEPROM đòi hỏi một điện áp tối thiểu để hoạt động một
cách đúng đắn. Thứ 2 là CPU có thể tự thực hiện sai câu lệnh nếu điện áp cung cấp qua thấp.
Bộ nhớ I/O
Tất cả các I/O và thiết bị ngoại vi được đặt vào không gian I/O. Vị trí I/O được truy truy
nhập bởi lệnh LD/LDS/LDD và lệnh ST/STS/STD, chuyển đổi dữ liệu giữa 32 thanh ghi đa
năng và không gian I/O. Các thanh ghi I/O trong vùng địa chỉ $00-$1F có thể truy cập trực
tiếp các bit bằng cách sử dụng câu lệnh SBI và CBI. Trong các thanh ghi này, giá trị của các
bit đơn có thể được kiểm tra bằng cách sử dụng các câu lệnh SBIS và SBIC. Khi sử dụng các
lệnh xác định I/O IN và OUT, địa chỉ I/O $00 - $3F phải được sử dụng. Khi đánh địa chỉ I/O
các thanh ghi như là vùng dữ liệu sử dụng lệnh LD và ST,và phải thêm $20 vào các địa chỉ
này.
Để tương thích với các thiết bị trong tương lai, các bit dự phòng được đặt là 0 nếu
được truy cập. Các địa chỉ bộ nhớ I/O dự phòng không nên ghi.
Một vài cờ trạng thái được xoá bằng việc ghi 1 vào chúng.
Linhdt1
28
Các thanh ghi I/O đa năng
ATmega16L có 3 thanh ghi I/O đa năng, các thanh ghi này có thể sử dụng để chứa mọi
thông tin, đặc biệt có thể hiệu dụng để chứa các biến toàn cục và các cờ trạng thái. Các thnah
ghi này có địa chỉ từ 0x1F có thể truy nhập trực tiếp đến các bit bằng cách sử dụng các câu
lệnh SBI, CBI và SBIC.
Bao gồm các thanh ghi: GPIOR2, GPIOR1, GPIOR0
Xung Nhịp Hệ Thống Và Các Lựa Chọn Xung Nhịp.
Hệ thống xung nhịp và c¸ch sử dụng chúng.
Tất cả các xung nhịp cần phải không được kích hoạt tại một thời điểm. Để giảm tiêu thụ
năng lượng, các xung nhịp dùng cho các modul không được sử dụng có thể bị treo bởi các chế
độ ngủ khác nhau.
Hình 1.9 Sơ đồ phân phối xung nhịp
Linhdt1
29
Xung nhịp cho CPU – CLKCPU
Xung nhịp CPU được gửi đến các vùng các nhau của hệ thống có liên quan tới các hoạt
động của các bộ phận chính của AVR. Ví dụ như tệp thanh ghi, thanh ghi trạng thái và các
vùng nhớ để chứa con trỏ stack.
Xung nhịp I/O – clkI/O
Xung nhịp I/O được sử dụng cho đa số các module I/O, như là các bộ đếm / bộ định
thời, SPI, và USART. xung nhịp I/O cũng được sử dụng cho module ngắt ngoài, nhưng chú ý
rằng một số ngắt ngoài được tìm thấy bằng logic đồng bộ, cho phép các ngắt này được tìm
thấy ngay cả khi đồng hồ I/O bị treo. Cũng phải chú ý rằng việc tìm ra điều kiện khởi động
trong modul úI được thực hiện không đồng bộ khi clkI/O bị treo, địa chỉ TWI cũng được nhận
ra trong tất cả các chế độ ngủ.
Xung nhịp Flash – CLKFLASH
clkFLASH điều khiển hoạt động giao diện Flash. clkFLASH thường xuyên đồng thời
với xung nhịp CPU.
Asynchronous Timer Clock – CLKASY
Asynchronous Timer clock cho phép Asynchronous Timer/Counter được chạy trực tiếp
từ xung nhịp bên ngoài hoặc thạch anh tạo xung 32 kHz bên ngoài. Xung nhịp cho phép sử
dụng Timer/Counter như là bộ đếm thời gian thực, thậm chí khi thiết bị trong chế độ ngủ.
Xung Nhịp ADC – clkADC
Bộ chuyển đổi ADC được cung cấp với xung nhịp khác. Điều này cho phép treo xung
nhịp CPU và xung nhịp I/O để giảm nhiễu gây ra bởi mạch số. Điều này cho kết quả chuyển
đổi ADC chính xác hơn.
Linhdt1
30
Các Nguồn Tạo Xung Nhịp
Bộ vi điều khiển có các nguồn đồng hồ tuỳ chọn sau đây, được lựa chọn bằng các bit
Flash Fuse như chỉ ra trong bảng 3.2.Tín hiệu xung nhịp từ các nguồn được chọn được lấy từ
các bộ phát xung nhịp của AVR, và đi đến các module thích hợp.
Bảng 1.2 Các nguồn tạo xung nhịp và cách lựa chọn
Nguồn xung nhịp mặc định
Bộ tạo dao động RC bên trong với tần số 8.0MHz cùng với cầu chì CKDIV8 đã được
đặt cho ta xung nhịp 1.0MHz. Thời gian khởi động được đặt tối đa và chu kỳ time-out được
kích hoạt (CKSEL = “0010”, SUT = “10” và CKDIV8=”0”). Sự cài đặt mặc định này đảm bảo
rằng tất cả các sử dụng có thể tạo nên nguồn đồng hồ mong muốn khi sử dụng bất cứ giao diện
lập trình hiện có nào.
1.3.8 Quản lý năng lượng và các chế độ ngủ
Các chế độ ngủ kích họat ứng dụng để tắt những module không sử dụng trong MCU, do
đó năng lượng được tiết kiệm. AVR cung cấp các chế độ ngủ khác nhau cho phép sử dụng hợp
lý tiêu thụ năng lượng ứng với các yêu cầu ứng dụng.
Để nhập vào 1 trong 6 chế độ ngủ, bit SE trong MCUCR phải được ghi là 1 và câu lệnh
SLEEP phải được chạy. Các bit SM2, SM1, và SM0 trong thanh ghi MCUCR lựa chọn chế
độ ngủ (nhàn rỗi, giảm nhiễu ADC, giảm năng lượng, tiết kiệm năng lượng, chờ). Xem tổng
kết ở bảng d−íi
Linhdt1
31
Bảng 1.3 Lựa chọn chế độ ngủ
Nếu xảy ra ngắt trong khi MCU đang ngủ thì MCU thức dậy. MCU treo thêm trong
vòng 4 chu kỳ để khởi động, nó thực hiện thường trình ngắt, và dành lại việc thực hiện lệnh
SLEEP tiếp theo. Nội dung của tệp thanh ghi và SRAM là còn nguyên khi thiết bị tỉnh dậy từ
trạng thái ngủ. Nếu Reset xảy ra trong khi ngủ, thì MCU tỉnh dậy và thực hiện từ vector reset.
Thanh ghi điều khiển MCU –MCUCR
Thanh ghi trạng thái điều khiển MCU chứa các bit điều khiển để quản lý năng lượng.
+ Bit 7..4 – Res: Dự phòng
+ Bits 6...4 – SM2..0: Lựa chọn chế độ ngủ
Điều khiển hê thống và Reset
Linhdt1
32
Resetting AVR
Trong khi reset, tất cả các thanh ghi I/O được đặt giá trị khởi tạo của nó, và chương trình
bắt đầu hoạt động từ vectơ reset. Câu lệnh được đặt trong vectơ reset phải là RJMP – nhảy
liên quan - tới thường trình kiểm soát reset. Nếu chương trình không bao giờ kích hoạt 1
nguồn ngắt, vectơ ngắt không được sử dụng, mã chương trình bình thường có thể được đặt tại
các vị trí này. Điều này cũng là trường hợp nếu vector reset nằm trong vùng ứng dụng trong
khi các vector ngắt nằm trong vùng boot hoặc vice versa. S
H1 chỉ ra logic reset. H2 mô tả thông số về điện của mạch reset.
H1 Đặc tính của Reset
Các nguồn Reset
ATmega16L có 4 nguồn Reset:
- Power-on Reset: MCU được reset khi nguồn điện áp cung cấp ở dưới mức ngưỡng Power-
on Reset.
- Reset bên ngoài: MCU được reset khi 1 mức thấp hiện diện tại chân RESET trong thời gian
dài hơn xung nhỏ nhất.
- Watchdog Reset: MCU được reset khi giai đoạn Watchdog Timer kết thúc và chế độ
Watchdog system reset được cho phép.
Linhdt1
33
- Brown-out Reset: MCU được reset khi nguồn điện áp VCC ở mức dưới ngưỡng Brown-out
Reset (VBOT) và đầu dò Brown-out được cho phép.
H2 Logic reset
Thanh ghi trạng thái và điều khiển MCU – MCUCSR
Thanh ghi trạng thái và điều khiển MCU cung cấp thông tin mà dựa vào nó nguồn reset
gây ra 1 reset MCU.
Linhdt1
34
+ Bit 7..4 – Res: Dự phòng
+ Bit 3 – WDRF: Cờ reset hệ thống Watchdog
+ Bit 2 – BORF: Cờ reset Brown-out(kho¶ng thêi gian dßng ®iÖn bÞ sôt ¸p do qu¸ t¶i)
+ Bit 1 – EXTRF: Cờ reset từ bên ngoài
+ Bit 0 – PORF: Cờ reset Power-on
Internal Voltage Reference- tham chiếu điện áp bên trong
Sự tham chiếu được sử dụng cho việc thăm dò Brown-out, và nó có thể được sử dụng
như là một đầu vào của bộ so sánh tương tự hoặc ADC.
Watchdog Timer
Có những đặc điểm chính như sau:
+ Được cung cấp xung nhịp từ một bộ tạo dao động trên chip.
+ Có 3 chế độ hoạt động.
- Ngắt
- Reset hệ thống
- Ngắt và reset hệ thống
+ Chu kỳ time-out được lựa chon từ 6ms đến 8s.
+ Cầu chì phần cứng Watchdog luôn được bật.
Watchdog Timer
Linhdt1
35
Thanh ghi điều khiển Watchdog Timer
+ Bits 7-WDIF: Cờ ngắt Watchdog
+ Bit 6 – WDIE: Kích hoạt Watchdog
+ Bit 4 – WDCE: Kích hoạt thay đổi Watchdog
+ Bits 5,2..0 – WDP3..0, WDP1, WDP0: Chọn Watchdog Timer với tỷ lệ 2, 1 và 0
1.3.10 Interrupt Vectors trong ATmega16L
Địa chỉ vector ngắt và Reset – h×nh 3
Bảng vector ngắt – h×nh 4
H3 Địa chỉ của vector ngắt và Reset
Di chuyển các ngắt giữa vùng chương trình ưng dụng và Boot
- Thanh ghi điều khiển MCU điều khiển vị trí của bảng vector ngắt.
Linhdt1
36
Thanh ghi điều khiển ngắt – MCUCR
+ Bit 1 – IVSEL: Lựa chọn vector ngắt
+ Bit 0 – IVCE: Cho phép thay đổi vector ngắt
H 4 Các vector ngắt và Reset
Linhdt1
37
Các ngắt ngoài
Các ngắt ngoài được kích hoạt bởi chân INT0 và INT1 hoặc bởi các chân PCINT23..0 .
Cần phải chú ý rằng, khi được cho phép, các ngắt này sẽ kích hoạt thậm chí nếu các chân
INT0, INT1 và INT23..0 được cấu hình như các chân ra. Yếu tố này cung cấp cho chúng ta
một cách để sinh ra ngắt phần mềm. Ngắt PC12 sẽ kích hoạt nếu một trong số các chân được
phép PCINT23..16 chốt. Ngắt PC11 sẽ kích hoạt nếu một trong số các chân được phép
PCINT14..8 chốt. Ngắt PC10 sẽ được kích hoạt nếu một trong số các chân được phép
PCINT7..0 chốt. Các thanh ghi PCMSK0, PCMSK1 PCMSK3 điều khiển các chân góp phần
tạo nên các ngắt thay đổi chân. Các ngắt thay đổi chân từ PCINT23..0 được nhận ra một cách
đồng bộ. Điều này gợi ý rằng các ngắt cũng có thể được sử dụng cho việc đánh thức các phần
đang trong chế độ ngủ sâu hơn chế độ nhàn dỗi.
Các ngắt INT1, INT0 có thể được kích hoạt bằng xườn lên hoặc xườn xuống hoặc mức
thấp. Điều này được điều khiển trong thanh ghi A-EICRA. Khi các ngắt này được phép hoàt
động và được cấu hình để kích hoạt theo mức, thì các ngắt này sé kích trong thời gian chừng
nào chân còn giữ ở mức thấp.
Sơ đồ thời gian ngắt do thay đổi trên chân.
Linhdt1
38
Giản đồ thời gian của các ngắt do thay đổi trên chân
Thanh ghi điều khiển ngắt ngoài A - EICRA
Thanh ghi mặt nạ ngắt ngoài - EIMSK
Thanh ghi cờ ngắt ngoài - EIFR
Thanh ghi điều khiển ngắt thay đổi trên chân - PCICR
Thanh ghi mặt nạ ngắt thay đổi trên chân 2 – PCMSK2
Thanh ghi mặt nạ ngắt thay đổi trên chân 1 – PCMSK1
Thanh ghi mặt nạ ngắt thay đổi trên chân 0 – PCMSK0
Linhdt1
39
Các cổng I/O
Tất cả các cổng AVR đều có chức năng Read-Modify-Write thực sự, khi sử dụng chúng
như cổng I/O số. Điều này có nghĩa là hướng của chân của một cổng có thể được thay đổi
không cần phải thay đổi hướng của bất kỳ chân nào với câu lệnh SBI và CBI.
Điều tương tự cũng được ứng dụng khi thay đổi giá trị điều khiển (nếu cấu hình như là đầu
vào) loạt kích hoạt hoặc loại bỏ các điện trở pull_up (Nếu được cấu hình như đầu vào). Mỗi
một bộ đệm đầu ra có đặc tính điều khiển đối xứng với cả khả năng sink và source cao
.
Chân điều khiển đủ khoẻ để điều khiển hiển thị các LED trực tiếp. Tất cả các chân I/O đều
có diot bảo vệ cở cả đầu VCC và đất như trên hình 3.13.
Sơ đồ chân I/O
Linhdt1
40
Các cổng là cổng I/O 2 chiều với sự lựa chọn các pull-ups bên trong. Hình 3.14 chỉ ra 1 mô tả
các khối chức năng của 1 chân cổng I/O, ta gọi chung là Pxn.
Sơ đồ các khối chức năng của 1 chân I/O
Đặt cấu hình cho mỗi châncổng bao gồm 3 bit thanh ghi: DDxn, PORTxn, và PINxn. Các bit
DDxn trong thanh ghi DDRx lựa chọn hướng của chân. Nếu các bit DDRx là 1 thì Pxn là chân
ra, ngược lại là 0 thì là chân vào.
Nếu các bit PORTxn là 1 khi chân được cầu hình là chân vào thì các điệc trở pull-up
được kích hoạt. Để tắt các điện trở này các bit PORTxn phải đặt lại là 0 hoặc chân ra phải
được đặt là chân ra. Khi có reset các chân cổng trở về dạng 3 trạng thái ngay cả khi không có
xung nhịp.
Linhdt1
41
Nếu các bit PORTxn là 1 khi chân được đặt là chân ra thì chân cổng được đặt ở mức
cao. Nếu các bit PORTxn là 0 khi chân cổng được đặt là chân ra thì chân cổng được đặt ở mức
0. Đặt cấu hình cho chân cổng theo h×nh 6
H6 Đặt cấu hình cho chân cổng
1.3.13 8-bit Timer/Counter0 với PWM
Bộ Timer/Counter0 nhìn cung được sử dụng như Timer/Counter 8 bit đa năng với 2 đơn
vị so sánh đầu ra độc lập cùng với hỗ trợ PWM. Nó cho phép định thời một cách chính xác và
phát sóng, với các chức năng chính sau đây:
+ 2 bộ so sánh đầu ra độc lập
+ Các thanh ghi bộ so sánh đầu ra đệm đôi
+ Xoá bộ đếm khi đạt đến mức so sánh (tự động nạp lại)
+ Điều chế độ rộng xung
+ Máy phát tần số
+ 3 nguồn ngắt độc lập (TOV0, OCF0A, và OCF0B)
1.3.14 16-bit Timer/Counter0 với PWM
16-bit Timer/Counter cho phép định thời thực hiện chương trình chính xác (quản lý sự
kiện), phát sóng, và đo lường định thời tín hiệu. Các yếu tố chính là:
+ Thiết lËp với 16 bit (ví dụ cho phép điều chế độ rộng xung 16 bit)
Linhdt1
42
+ 2 bộ so sánh đầu ra độc lập
+ Các thanh ghi bộ so sánh đầu ra đệm đôi
+ Xoá bộ đếm khi đạt đến mức so sánh (tự động nạp lại)
+ Điều chế độ rộng xung
+ Máy phát tần số
+ 4 nguồn ngắt độc lập (TOV1, OCF1A, OCF1B và ICF1)
+ 1 bộ Capture đầu vào
+ Lọc nhiễu
+ Đếm sự kiện ngoài
Serial Peripheral Interface (SPI) – giao diện kết nối ngoại vi nối tiếp
SPI Cho phép truyền dữ liệu đồng bộ tốc độ cao giữa ATmega16L và các thiết bị ngoại
vi hoặc giữa các thiết bị AVR. Bao gồm các đặc trưng sau:
• Song công, dữ liệu đồng bộ 3 dây
• Hoạt động chủ hoặc tớ
• Truyền LSB trước hoặc MSB trước
• 7 tốc độ bit có thể lập trình được
• Cờ ngắt khi truyền xong
• Bảo vệ xung đột ghi
• Đánh thức từ chế độ nhàn dỗi
• Chế độ SPI chủ tốc độ đôi
+ Sơ đồ khối SPI
Linhdt1
43
USART
Bộ truyền và nhận tín hiệu nối tiếp đồng bộ và không đồng bộ vạn năng là thiết bị kết
nối nối tiếp có độ linh động cao. Các đặc trưng chính sau:
+ Hoạt động song công (cã thÓ nhËn vµ truyÒn d÷ liÖu cïng mét lóc)
+ Hoạt động đồng bộ hoặc không đồng bộ
+ Hoạt động đồng bộ theo xung nhịp chế độ chủ hoặc tớ
+ Bộ phát tốc độ truyền có độ phân giải cao
+ Hỗ trợ khung truyền với 5, 6, 7, 8, hoặc 9 Bit dữ liệu và 1 hoặc 2 Stop Bits
+ Phát và kiểm tra chẵn lẻ được hỗ trợ bởi phần cứng
+ Phát hiện OverRun dữ liệu
+ Phát hiện lỗi khung truyền
+ Läc nhiễu bao gồm phát hiện bit start sai và bộ lọc thông thấp số.
+ 3 ngắt riêng biệt khi TX hoàn thành, thanh ghi dữ liệu TX rỗng, và RX hoàn thành.
+ Chế độ Multi-processor kết nối
+ Chế độ kết nối không đồng bộ víi 2 tốc độ
II.3 C¶M BIÕN NHIÖT §é DS18B20
DS18B20 là một sản phẩm của công ty Dallas (Mü), đây cũng là công ty đóng góp nhiều
vào việc cho ra đời bus một dây và các cảm biến một dây. Hình dạng bên ngoài của cảm biến
một dây DS18B20 được mô tả trên hình vÏ, trong đó dạng vỏ TO-92 với 3 chân là dạng
thường gặp và được dùng trong nhiều ứng dụng, còn dạng vỏ SOIC với 8 chân được dùng để
đo nhiệt độ bề mặt, kể cả da người
Các đặc điểm kỹ thuật của cảm biến DS18B20 có thể
kể ra một cách tóm tắt như sau:
Sử dụng giao diện một dây nên chỉ cần có một chân ra
để truyền thông. Độ phân giải khi đo nhiệt độ là 9 - 12bit.
Dải đo nhiệt độ -55oC đến 125oC, từng bậc 0,5oC, có
thể đạt độ chính xác đến 0,1oC bằng việc hiệu chỉnh
qua phần mềm. Rất thích hợp với các ứng dụng đo lường
Linhdt1
44
đa điểm vì nhiều đầu đo có thể được nối trên một bus, bus này được gọi là bus một dây (1-
wire bus) gièng h×nh d−íi đây :
(h×nh vÏ trªn lµ ph−¬ng ph¸p nèi cña DS18S20,tuy nhiªn còng cã thÓ ¸p dông ®−îc cho
DS18B20)
Không cần thêm linh kiện bên ngoài. Điện áp nguồn nuôi có thể thay đổi trong khoảng rộng,
từ 3,0 V đến 5,5 V một chiều và có thể được cấp thông qua đường dẫn dữ liệu. Dòng tiêu thụ
tại chế độ nghỉ cực nhỏ. Thời gian lấy mẫu và biến đổi thành số tương đối nhanh, không quá
200 ms. Mỗi cảm biến có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip
(on chip), giá trị nhị phân được khắc bằng tia laze. Đầu đo nhiệt độ số DS18B20 đưa ra số liệu
để biểu thị nhiệt độ đo được dưới dạng mã nhị phân 9 bit. Các thông tin được gửi đến và nhận
về từ DS18B20 trên giao diện 1-wire, do đó chỉ cần hai đường dẫn gồm một đường cho tín
hiệu và một đường làm dây đất là đủ để kết nối vi điều khiển đến điểm đo. Nguồn nuôi cho
các thao tác ghi/đọc/chuyển đổi có thể được trích từ đường tín hiệu, không cần có thêm đường
dây riêng để cấp điện áp nguồn. Mỗi vi mạch đo nhiệt độ DS18B20 có một mã số định danh
duy nhất, được khắc bằng laser trong quá trình chế tạo vi mạch nên nhiều vi mạch DS1820 có
thể cùng kết nối vào một bus 1-wire mà không có sự nhầm lẫn. Đặc điểm này làm cho việc lắp
đặt nhiều cảm biến nhiệt độ tại nhiều vị trí khác nhau trở nên dễ dàng và với chi phí thấp.
Theo chuẩn 1-wire độ dài tối đa cho phép của bus là 300 m. Số lượng các cảm biến nối vào
bus không hạn chế. Để nâng cao độ phân giải lên trên 12 bit ta phải tính toán thêm bằng phần
mềm dựa trên các số liệu lưu trữ trên các thanh ghi nhiệt độ, COUNT REMAIN và COUNT
PER C trong nhóm các thanh ghi nháp (scratchpad).
Linhdt1
45
Bộ nhớ ROM 64–Bit Cña DS18B20
Mỗi cảm biến nhiệt độ DS1820 có một dãy mã 64 bit duy nhất được lưu trữ trong bộ nhớ
ROM từ khi sản xuất bằng kỹ thuật laze
Nội dung dãy mã 64-bit trên bộ nhớ ROM
Như vậy dãy mã được chia ra thành 3 nhóm, trong đó:
8 bit đầu tiên là mã định danh họ một dây, mã của DS1820 là 10h.
48 bit tiếp theo là mã số xuất xưởng duy nhất, nghĩa là mỗi cảm biến DS1820 chỉ có một số
mã. 8 bit có ý nghĩa nhất là byte mã kiểm tra CRC (cyclic redundancy check), byte này được
tính toán từ 56 bit đầu tiên của dãy mã trên ROM .Để truy cập lên cảm biến một dây DS1820
ta phải sử dụng hai nhóm lệnh: các lệnh ROM và các lệnh chức năng (function commands) bộ
nhớ, các lệnh này có thể được mô tả ngắn gọn như sau: Sau khi thiết bị chủ (thường là một vi
điều khiển) phát hiện ra một xung presence pulse, nó có thể xuất ra một lệnh ROM. Có 5 loại
lệnh ROM, mỗi lệnh dài 8 bit. Thiết bị chủ phải đưa ra lệnh ROM thích hợp trước khi đưa ra
một lệnh chức năng để giao tiếp với cảm biến DS18S20.
Lệnh ROM
- READ ROM (33h)
Cho phép đọc ra 8 byte mã đã khắc bằng laser trên ROM, bao gồm: 8 bit mã định tên linh
kiện (10h), 48 bit số xuất xưởng, 8 bit kiểm tra CRC. Lệnh này chỉ dùng khi trên bus có 1 cảm
biến DS1820, nếu không sẽ xảy ra xung đột trên bus do tất cả các thiết bị tớ cùng đáp ứng.
- MATCH ROM (55h)
Lệnh này được gửi đi cùng với 64 bit ROM tiếp theo, cho phép bộ điều khiển bus chọn ra
chỉ một cảm biến DS1820 cụ thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào. Chỉ có
DS1820 nào có 64 bit trên ROM trung khớp với chuỗi 64 bit vừa được gửi tới mới đáp ứng lại
các lệnh về bộ nhớ tiếp theo. Còn các cảm biến DS1820 có 64 bit ROM không trùng khớp sẽ
tiếp tục chờ một xung reset. Lệnh này được sử dụng cả trong trường hợp có một cảm biến một
dây, cả trong trường hợp có nhiều cảm biến một dây.
- SKIP ROM (CCh)
Lệnh này cho phép thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của DS1820 mà
Linhdt1
46
không cần gửi chuỗi mã 64 bit ROM. Như vậy sẽ tiết kiệm được thời gian chờ đợi nhưng chỉ
mang hiệu quả khi trên bú chỉ có một cảm biến.
- SEARCH ROM (F0h) Lệnh này cho phép bộ điều khiển bus có thể dò tìm được số lượng
thành viên tớ đang được đấu vào bus và các giá trị cụ thể trong 64 bit ROM của chúng bằng
một chu trình dò tìm.
- ALARM SEARCH (ECh)
Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cảm biến DS1820 chỉ đáp
ứng lệnh này khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng. Điều kiện
cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH và nhỏ hơn giá
trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã được đặt trên thanh ghi trong bộ
nhớ của cảm biến.
- Lệnh Chức Năng Bộ Nhớ
Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM để định địa chỉ
cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức năng
DS1820. Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ nháp
(scratchpath) của cảm biến DS1820. khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo được và
xác định chế độ cung cấp điện áp nguồn. Các lệnh chức năng có thể được mô tả ngắn gọn như
sau:
- WRITE SCRATCHPAD (4Eh)
Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên được ghi
vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi TL (byte
3 của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhất và kế tiếp là
những bit có ý nghĩa giảm dần. Cả hai byte này phải được ghi trước khi thiết bị chủ xuất ra
một xung reset hoặc khi có dữ liệu khác xuất hiện.
- READ SCRATCHPAD (BEh)
Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit có ý
nghĩa nhất của byte 0 và tiếp tục cho đến byte rhứ 9 (byte 8 - CRC). Thiết bị chủ có thể xuất ra
một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có một phần của dữ liệu
trên bộ nhớ nháp cần được đọc.
- COPYSCRATCHPAD (48h)
Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ
Linhdt1
47
EEPROM. Nếu cảm biến được sử dụng trong chế dộ cấp nguồn l bắt đầu việc đo.
- CONVERT T (44h)
Lệnh này khởi động một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị phân).
Sau khi chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte trong
bộ nhớ nháp Thời gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển đổi nếu
thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0.
- READ POWER SUPPLY (B4h)
Một lệnh đọc tiếp sau lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấp nguồn như thế
nào, giá trị đọc được bằng 0 nếu cấp nguồn bằng chính đường dẫn dữ liệu và bằng 1 nếu cấp
nguồn qua một đường dẫn riêng.
II.4 : ho¹t ®éng cña m¹ch ®iÖn
+ T¸c dông c¸c linh kiÖn :
- DS18B20 c¶m biÕn nhiÖt ®é tõ m«i tr−êng bªn ngoµi ®Ó lÊy tÝn hiÖu nhiÖt ®é ®−a vµo vi
xö lý
- LCD gi¶i m· vµ hiÓn thÞ nhiÖt ®é
- ATMEGA16L ®iÒu khiÓn t¾t më thiÕt bÞ theo ®iÒu kiÖn nhiÖt ®é ®· mÆc ®Þnh,®iÒu khiÓn
hiÓn thÞ LCD
- th¹ch anh t¹o dao ®éng cho ATMEGA16
- m¹ch æn ¸p ,t¹o ®iÖn ¸p 5VDC æn ®Þnh cÊp cho vi m¹ch
- Led ®á gi¶ lËp m¸y lµm t¨ng nhiÖt ®é
- Led xanh lam gi¶ lËp m¸y lµm gi¶m nhiÖt ®é
C¶m biÕn nhiÖt ®é truyÒn tÝn hiÖu nhiÖt ®é ®äc ®−îc qua ch©n DQ(2) vµo ch©n 34 cña
ATMEGA16L (ADC6) ch©n nµy lµ 1 trong 8 ®Çu vµo cña hÖ thèng biÕn ®æi A/D cña
ATMEGA16L , nh−ng kh«ng cÇn biÕn ®æi mµ ®−a th¼ng vµo khèi xö lý trung t©m (v× tÝn hiÖu
truyÒn cña c¶m biÕn nhiÖt ®é ë ch©n DQ lµ tÝn hiÖu sè) ,tÝn hiÖu khi ®−a vµo ®©y sÏ ®−îc CPU
xö lý víi c¸c ®iÒu kiÖn ®É ®−îc lËp tr×nh s½n (nÕu nhiÖt ®é ≤18ºC th× LED ®á s¸ng,≥35ºC th×
LED xanh s¸ng) ,sau ®ã tÝn hiÖu sau khi ®−îc xö lý tiÕp tôc ®−a ra 4 ch©n 26(TDO - Test Data
Out – kiÓm tra d÷ liÖu ra),27(TDI – KiÓm tra d÷ liÖu vµo),28(TOSC1 – Test ocsilltor – kiÓm tra
®Çu vµo cña bé t¹o dao ®éng),29(TOSC2 – kiÓm tra ®Çu ra cña bé t¹o dao ®éng2) vµo
D4,D5,D6,D7 cña LCD ®Ó gi¶i m·
LCD nhËn xung nhÞp nèi tiÕp(SCL – Serial Clock ) ë ch©n 22 cña ATMEGA16 ®Ó Reset,
Linhdt1
48
d÷ liÖu nèi tiÕp (SDA – Serial Data) cña ch©n 23 ®Ó ghi ®äc ký tù,xung nhÞp ®· qua kiÓm
tra(TCK – Test Clock) ®Ó xo¸ ký tù.
ch−¬ng iii : m¹ch n¹p
+ M¹ch n¹p ISP(Interface Serial Peripheral – Giao tiÕp ngo¹i vi nèi tiÕp)
+ §iÖn ¸p ho¹t ®éng : 4.5 – 5 V,kh«ng cÇn cÊp nguån cho m¹ch n¹p chØ cÇn cÊp nguån
cho m¹ch chñ.
+ PhÇn mÒm sö dông CodeVisionAVR
hoÆc PonyProg nh−ng CodeVisionAVR
dÔ sö dông h¬n
+ Cã thÓ n¹p ®−îc 25 lo¹i vi ®iÒu khiÓn
cña AVR:
+ Cã 6 ch©n ra nèi víi chip AVR
- Vcc : §Ó cÊp nguån (+) cho m¹ch n¹p tõ chip chñ,nèi víi ch©n Vcc(10,30) cña
ATMEGA16
- GND : CÊp nguån (-) cho m¹ch n¹p tõ chip chñ,nèi víi ch©n GND(11,31) cña
ATMEGA16
- MOSI : Master Output, Slave Input ( xuất ra từ tầng chủ),nèi víi ch©n MOSI(6)
Linhdt1
49
- MISO : Master Input, Slaver Output( xuất ra từ tầng tớ),nèi víi ch©n MISO(7)
- SCK : Serial Clock (xung nhÞp nèi tiÕp),nèi víi ch©n SCK cña chip (8)
- RST : Ch©n Reset,t−¬ng tù nèi víi ch©n(9)
+ KÕt nèi víi m¸y tÝnh b»ng cæng m¸y in (LPT)
+ ¦u ®iÓm : m¹ch ®¬n gi¶n dÔ chÕ t¹o,gi¸ thµnh rÎ,cã thÓ n¹p ®−îc nhiÒu vi ®iÒu khiÓn
AVR.kh«ng ph¶i th¸o chip khái m¹ch chñ,kh«ng cÇn cÊp nguån riªng cho m¹ch n¹p
+ Nh−îc®iÓm : V× kh«ng cã ®iÖn trë h¹n dßng cho cæng LPT nªn dÔ g©y h¹i cho m¸y tÝnh.
CH¦¥NG IV : phÇn mÒm thiÕt kÕ vµ lËp tr×nh
IV.I : PhÇn MÒm ThiÕt KÕ,M« Pháng M¹ch §iÖn Proteus7.1
+ Proteus lµ phÇn mÒm cña h·ng Labcenter dïng ®Ó vÏ s¬ ®å nguyªn lý ,m« pháng vµ thiÕt kÕ
m¹ch ®iÖn. Gãi phÇn mÒm gåm cã phÇn mÒm chÝnh :
- ISIS dïng ®Ó vÏ s¬ ®å nguyªn lý vµ m« pháng
- ARES dïng ®Ó thiÕt kÕ m¹ch in
- PhÇn mÒm download(b¶n dïng thö) tõ website cña nhµ s¶n xuÊt :
,vµ h−íng dÉn sö dông download trªn dientuvietnam.net
do c¸c b¹n líp 04DT2-§H B¸ch Khoa §µ N½ng biªn so¹n
- ¦u ®iÓm : TÝnh n¨ng m« pháng m¹nh,c¶ analog vµ digital,dÔ sö dông,viÖc thiÕt kÕ m¹ch
in rÊt ®¬n gi¶n
- Nh−îc ®iÓm : Th− viÖn linh kiÖn ch−a phong phó,®Æc biÖt lµ BJT
A- ThiÕt KÕ S¬ §å Nguyªn Lý
Linhdt1
50
- S¬ ®å d−íi ®· lo¹i bá m¹ch nguån v× nguån cÊp ®· cã s½n
B – M« Pháng : Tr−êng hîp nhiÖt ®é ≤ 13°C(®Ó tiÖn cho viÖc b¶o vÖ ®å ¸n ,®iÒu kiÖn lµm LED
®á s¸ng ngoµi m¹ch thùc tÕ ®· ®−îc n©ng nªn 5ºC ),D1 s¸ng,D2 t¾t
Linhdt1
51
+ NhiÖt ®é ≥35°C D2 s¸ng,D1 t¾t
C – M¹ch In
Linhdt1
52
D - §å ho¹ 3D : MÆt tr−íc ( LCD chØ mang tÝnh minh ho¹ v× phÇn mÒm ch−a cã LCD)
Linhdt1
53
+ MÆt sau
IV.2 PhÇn MÒm LËp Tr×nh CodeVisonAVR
Linhdt1
54
- Khi lËp tr×nh xong click vµo Project -> Compile(F9) ®Ó dÞch sang file.hex
- Sau ®ã click tiÕp vµo Tool -> Chip Programer
- Vµo Read -> ChipSignalture nÕu m¹ch n¹p nhËn chip th× tªn chip vµ tÇn sè chip sÏ hiÖn
trªn «
- NÕu m¹ch n¹p nhËn chip th× tªn chip vµ tÇn sè chip sÏ hiÖn trªn «
- Click vµo Program All ch−¬ng tr×nh sÏ ®−îc n¹p
Các file đính kèm theo tài liệu này:
- Nhiet ke dien tu dieu khien tu dong.pdf