MỤC LỤC
I. Mở đầu……………………………………………………………………
1. Giới thiệu chung về vi điều khiển……………………………………
2. Phạm vi và Tính khả thi của project ………
II. Chi tiết các linh kiện trong mạch ………………………………………
1. Khối tạo nguồn điện áp chuẩn 5v ( phục vụ cho mạch chính )………
1.1 Biến áp 1A……………………………………………………………….
1.2 IC ổn áp LM137…………………………………………………………
2. Khối mạch chính……………………………………………………………
2.1 Vi điều khiển Pic16F877A………………………………………………
2.2 Sensor cảm biến nhiệt độ LM35……………………………………….
2.3 Led 7 thanh……………………………………………………………
III. Sơ đồ mạch hoàn chỉnh…………………………………………………
1. Sơ đồ mạch nguyên lý……………………………………………………
IV. Chương trình phần mềm nạp cho vi điều khiển…………………
1. Code chương trình nạp cho Pic16F877A…………………………………
V. Kết luận………………………………………………………
I. Mở đầu
1. Giới thiệu chung về vi điều khiển
Ngày nay cùng với sự phát triển không ngừng của khoa học kĩ thuật đã đem đến cho
cuộc sống của con người tiện nghi hơn đầy đủ hơn.Sức người được giải phóng, những
công việc nặng nhọc trước kia đã dần được thay thế bởi máy móc.
1
Hòa vào dòng chảy đó sự bùng nổ về điện tử cùng các công nghệ về xử lý số đã đem
lại cho con người những thành tuu to lớn, giúp con người có thể dễ dàng đạt được mục
đích của mình trong mọi thiết kế.Các quá trình tính toán phức tạp đòi hỏi tốn kém về thời
gian, công sức và sự tỉ mỉ tưởng như khó có thể thực hiện lại được hóa dải một cách dễ
dàng bằng các khối điều khiển.
Không chỉ bó hẹp ứng dụng trong phạm vi công nghiệp, vi điều khiển đã thực sự
khẳng định được chỗ đứng vững chắc của mình trong mọi lĩnh vực, mọi công việc ,nó trở
lên gần gữi với con người như là một thứ không thể thiếu được trong cuộc sống. Bạn có
1000u
VI
3
VO
2
ADJ
1
U1
LM317L
R1
470
RV1
0.21k
+88.8
Volts
TR2
TRAN-2P2S
1.1 Biến áp 1A
Biến áp 1A được sử dụng trong project biến nguồn xoay chiều 220V thành các nguồn
12V, 9V,6v với dòng xoay chiều là 1A.
1.2 IC ổn áp LM317
IC ổn áp LM317 có chức năng là cung cấp điện áp ổn định 5V cho mạch ngoài.
3
2. Khối mạch chính
Trong khối mạch chính ta sử dụng vi điều khiển PIC16F877A ,LM35 và led7 thanh.Ta
sẽ xét cụ thể chức năng của từng linh kiện ngay sau đây :
2.1 Vi điều khiển PIC16F877A
Đặc tính kĩ thuật của Pic16F877A
- Vi điều khiển PIC16F877A là loại CPU có đặc tính cao được tích hợp trên công nghệ
giải 10 bit.
- 8 kênh ADC 10 bit.
- Truyền nhận đa năng đồng bộ và bất đồng bộ với 9 bit địa chỉ.
- giao tiếp dữ liệu song song 8 bit.
Sơ đồ chân:
Tổ chức bộ nhớ - các cổng vào ra và 1 số chân đặc biệt:
PIC 16F877A có 3 khối bộ nhớ: bộ nhớ chương trình, bộ nhớ dữ liệu và bộ nhớ
EEPROM. Bộ nhớ chương trình và bộ nhớ dữ liệu có đường bus riêng vì vậy có thể truy
cập vào từng bộ nhớ một cách riêng rẽ.
Bộ nhớ chương trình có 13 bit vì vậy không gian địa chỉ sẽ là 8k word x 8bit. Truy cập
ngoài vùng không gian trên sẽ gây lỗi.
5
Bộ nhớ dữ liệu được chia thành 4 bank, trong các bank chứa thanh ghi thường và các
thanh ghi chức năng đặc biệt. Bank được chọn phụ thuộc vào bit RP1 và RP0 (bit thứ 6 và
bit thứ 5) của thanh ghi trạng thái status.
Các thanh ghi chức năng đặc biệt được CPU và bộ ngoại vi sử dụng để điều khiển các
thiết bị. Các thanh ghi này hoạt động như một thanh RAM tĩnh.
Thanh ghi trạng thái chứa trạng thái số học của ALU, trạng thái Reset và các bít chọn
bank ở bộ nhớ dữ liệu.
Các cổng vào ra của PIC: các Port A, B, C, D, E hoạt động bình thường như cổng vào
ra hai chiều.
- Port A: có 6 bit (tương ứng với 6 chân RA0÷RA5). Các chân của cổng A có tích
hợp một số chức năng ngoại vi, nếu một thiết bị ngoại vi được enable thì cổng này sẽ
không hoạt động như một cổng vào ra. Thanh ghi xác định chiều tương ứng của các chân
port A là thanh ghi TrisA. Các bít ở thanh ghi TrisA bằng 1 sẽ xác định các chân ở port A
là đầu vào và ngược lại sẽ là đầu ra.
- Port B: rộng 8 bit( RB0÷RB7). Thanh ghi quy định chiều của port B là thanh ghi
TrisB. Thiết lập các bit ở Tris B bằng 1 sẽ làm cho cổng B là cổng vào, ngược lại sẽ là
cổng ra.
- Để sensor hoạt động thì ta chỉ cần cấp một nguồn duy nhất trong dải từ 4 đến
20V.Để cho thuận tiện nhóm đã dùng nguồn 5V cấp cho vi điều khiển làm nguồn đẻ nuôi
IC LM35 hoạt động.
- Dải nhiệt độ đo là từ -55 đến 150
0
C.
- Nhiệt độ tăng 1
0
C thì đầu ra của cảm biến tăng 10 mV.
- Độ nhạy là 0,5
o
C ở 25
o
C.
- Sai số đo là ¼
o
C.
II.3. LED 7 thanh x 4
LED 7 đoạn là một công cụ thông dụng được dùng để hiển thị các thông số dưới dạng các
số từ 0 đến 9. Mặc dù công cụ LCD giúp ta thể hiện các thông số một cách linh động hơn
7
Cảm biến LM35 có 3 chân 1 chân cấp nguồn cho IC hoạt
động.1 chân nối đất, 1 chân xuất tín hiệu analog.Theo
khuyến cáo của nhà sản xuất thì nên mắc 1 điện trở 1K
giữa chân output với đất.
nhưng LED 7 đoạn vẫn được sử dụng nhiều trong công nghiệp do các ưu thế của nó như:
ít chịu ảnh hưởng của nhiệt độ, dễ tạo sự chú ý và góc nhìn rộng.
LED 7 đoạn bao gồm 7 đoạn LED được đánh dấu là các kí tự a, b, c, d, e, f, g và một dấu
chấm thập phân kí hiệu là dp. Ta có thể xem LED 7 đoạn là một tổ hợp gồm 8 LED. 8
LED này có một đầu (Anode hoặc Cathode) được nối chung và được bố trí theo một qui
#define LED7 PORTB
int8 Num_Char[10] = {0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
float value;
float x;//y;
int8 chuc,dv;
int16 adc;
int16 i;
int8 led = 0;
byte mode;
void read_time();
void tg();
void keyscan();
void ndo();
BYTE sec,min,hour,day,month,year,j;
int get_bcd(BYTE data) // ham chuyen doi tu he hexa sang he 10, cai nay ko can
phai tim hieu ki
{
int nibh;
int nibl;
nibh=data/10;
nibl=data-(nibh*10);
return((nibh<<4)|nibl);
}
int rm_bcd(BYTE data) //ham chuyen doi tu he so 10 sang he hexa, cai này ko can
phai tim hieu ki dau
10
{
int i;
i=data;
data=(i>>4)*10;
{
output_e(led+0x01);
output_b(Num_Char[chuc]);
delay_ms(1);
clear_led();
delay_us(100);
}
// Led hàng ??n v? sáng các led khác t?t
11
output_e(led+0x02);
output_b(Num_Char[dvi]);
delay_ms(1);
clear_led();
delay_us(100);
}
void main(){
lcd_init();
init_DS1307();
mode=0;
// Thi?t l?p các c?ng vào ra và b? bi?n ??i ADC
// Set_TRIS_D (0x00);
// Set_TRIS_C (0x00);
set_TRIS_B (0x00);
set_TRIS_A (0x00);
set_TRIS_E (0x00);
setup_adc_ports(ALL_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel(0);
delay_us(10);
SW1=1;
if(SW1!=1){
while(SW1!=1){};
write_DS1307(0,0);
}
}
if(mode==2) { //khi bam lan 2 thi xuat hien phut
printf(lcd_putc,"Phut :%02d ",min);
j=min;
{
up_time();
if(j>0x59)j=0x00;
}
{
down_time();
if(j<0x00)j=0x59;
}
write_DS1307(1,get_bcd(j));
}
if(mode==3) { //khi bam nut 3 thi xuat hien gio
printf(lcd_putc,"Gio :%02d ",hour);
j=hour;
{
up_time();
if(j>0x23)j=0x00;
}
{
down_time();
if(j<0x00)j=0x23;
printf(lcd_putc,"nam :%02d ",year);
j=year;
{
up_time();
if(j>0x99)j=0x00;
}
{
down_time();
if(j<0x01)j=0x99;}
write_DS1307(6,get_bcd(j));
}
}
void keyscan(){// day la ham dung de thuc hien viec bam nut
SW=1;
if(SW!=1){
while(SW!=1){};
mode++;
}
if(mode>6)mode=0;
}
14
void ndo(){// day la ham nhiet do
int8 temp;
set_adc_channel(0);
delay_us(10);
adc=read_adc();
chuc=(adc*0.48828125)/10;
dv=(adc*0.48828125)-chuc*10;
temp=chuc<<4;
LED7=temp+dv;
Trong quá trình thực hiện nhóm đã gặp không ít khó khăn nhưng được sự hướng dẫn
chỉ bảo tận tình của thầy.Chúng em xin cảm ơn thầy đồng thời rất mong thầy sẽ có những
ý kiến nhận xét để giúp project của chúng em hoàn thiện hơn.
15
16