BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG BÀI TẬP LỚN HỆ THỐNG NHÚNG Giảng viên Nguyễn Ngọc Minh MỤC LỤC LỜI NÓI ĐẦU 1 Phần 1 Mạch chuông báo tiết học tự động cho các trường.
Trang 1BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Trang 2MỤC LỤC
Phần 1: Mạch chuông báo tiết học tự động cho các trường học 2
Trang 3LỜI NÓI ĐẦU
Hệ thống nhúng có tên gọi tiếng Anh là embedded system Đây là một thuật ngữ để nói về một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hoặc hệ thống mẹ Đây là hệ thống tích hợp giữa phần cứng và phần mềm để giải đáp được các bài toán chuyên dụng trong công nghiệp., tự động hóa, truyền tin,…
Trang 4Phần 1: Mạch chuông báo tiết học tự động cho các trường học
1 Giới hạn của đề tài
1.1 Phân tích
Mục đích:
- Hệ thống báo chuông tại các thời điểm vào, ra của tiết học của trường.
+ Hệ thống có khả năng chỉnh lại giờ.
+ Thời gian kéo dài chuông vào tiết và nghỉ giải lao là khác nhau + Hệ thống chuông được dùng đi dây điện đồng bộ 220V
Mỗi ngày có 2 buổi học mỗi buổi kéo dài 6 tiết Thời gian của mỗi tiết là
45 phút.Thời gian nghỉ giải lao là 5 phút.Sau tiết thứ 3 của mỗi buổi nghỉ giải lao 10 phút từ đó ta xây dựng được thời khóa biểu như sau:
Trang 5+, thời gian báo là 10 giây đối với những tiết bắt đầu ,ra tiết thứ 3 vào tiết thứ tư của mỗi buổi,kết thúc của mỗi buổi
+,còn lại thời gian báo cho các thời điểm khác là 5 giây
- Cách báo : sử dụng chuông điện 220V
- Phạm vi báo: Tất cả khu vực trong trường bằng cách xây dựng hệ thống chuông đến từng khu nhà,từng giảng đường.
1.3 Phạm vi và phương hướng mở rộng
+, Thiết kế hệ thống chuông báo cho thời khóa biểu 2 mùa.mùa đông và mùa hè Trong đó giờ mùa hè buổi sáng vào sớm hơn 15 phút ,buổi chiều vào muộn hơn 30 phút so với giờ mùa đông.và thêm thời khoá biểu buổi tối cho các trường học theo hệ thống tín chỉ.
+, Thiết kế Module điều chỉnh bằng quét phím ma trận hoặc giao tiếp bàn phím máy tính có thể lập trình thời khóa biểu theo ý muốn và giờ giấc của từng trường cũng như nơi làm việc.
+ Xây dựng Hệ thống chuông báo không dây sử dụng bộ thu phát sóng.
2 Nội dung
CHƯƠNG I : SƠ ĐỒ KHỐI
1.Sơ đồ tổng quát
-Sơ đồ khối tổng quát
Hình 1: Sơ đồ khối tổng quát
Vi XỬ LÝ AT89C51
Hiển Thị LCD 16x2 Nút nhấn
Thời Gian Thực DS1307
Khối nguồn
alam
Trang 62.Chức năng các khối
2.1 Khối nguồn
-Cung cấp nguồn nuôi tất cả linh kiện trong mạch
2.2 Chức năng của khối RTC
-Khối này thực chất là một chíp thời gian thực(Real Time Clock), được sử dụng với ý nghĩa thời gian tuyệt đối mà con người đang sử dụng.Nó có pin cấp riêng , như vậy nếu như mất nguồn điện thì RTC vẫn có thể hoạt động bình thường và chính xác theo thời gian đã được thiết lập ban đầu Trong sơ đồ này
nó sẽ đảm nhiệm chức năng cấp time chính xác cho vi điều khiển xử lý các công việc mà người sử dụng yêu cầu.
2.3 Chức năng của khối điều chỉnh
-Chức năng của khối này là sử dụng ngắt của 89c51 để yêu cầu việc điều chỉnh time theo ý của người sử dụng , cài đặt time ban đầu cho đồng hồ thời gian thực RTC.Tác động bởi các phím bấm (BUTTON).
2.4 Khối âm thanh
-Khối này gồm có transistor thông dòng cho loa kêu khi có mức điện áp thay đổi liên tục ở chân ra của vi điều khiển
2.5 Khối hiển thị
- Khối này thực chất là LCD 16x2 để hiển thị time và các thông tin mà lập trình viên cần hiển thị
2.6 khối xử lý (vi điều khiển 89c51)
-Vi điều khiển 89C51 là trung tâm xử lý các thông tin của mạch
Cụ thể là :
AT89C51 đảm nhiệm việc đọc thời gian từ DS1307, chuyển đổi dữ liệu qua lại giữa RTC với LCD để có thể hiển thị lên LCD , đồng thời cập nhật time từ DS1307
Điều khiển LCD
Kiểm tra phím bấm
Điều khiển loa
- Nói tóm lại là, VĐK làm nhiệm vụ đọc time trên DS1307 sau đó nó kiểm tra xem ngắt được tác động hay không? nếu có thì điều chỉnh time, hiển thị time lên LCD , kiểm tra xem giờ hiện tại có bằng giờ báo chuông hay không ? nếu có thì gọi chương trình điều khiển chuông kêu !
Trang 7CHƯƠNG II: THIẾT KẾ HỆ THỐNG
Trang 83.1 giới thiệu cấu trúc của vi điều khiển MCS-51
-Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự như nhau Ở đây giới thiệu IC8951 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất Chúng có các đặc điểm chung như sau:
+ 4K Bytes Flash rom
+ 128 Bytes Ram
+ 4 port 8 bit
+ 2 bộ định thời 16 bit
+ Có port nối tiếp
+ Có thể mở rộng bộ nhớ chương trình ngoài 64 K Byte
+ Bộ xử lý bit
- AT89C51 là một bộ vi xử lý 8 bit, loại CMOS, có tốc độ cao và công suất thấp với bộ nhớ Flash có thể lập trình được Nó được sản xuất với công nghệ bộ nhớ không bay hơi mật độ cao của hãng Atmel, và tương thích với họ MCS-51TM về chân ra và tập lệnh.
- AT89C51 có các đặc trưng cơ bản như sau: 4 K byte Flash, 128 byte RAM, 32 đường xuất nhập, hai bộ định thời/đếm 16-bit, một cấu trúc ngắt hai mức ưu tiên
và 5 nguyên nhân ngắt, một port nối tiếp song công, mạch dao động và tạo xung
clock trên chip
3.2 Tìm hiểu IC thời gian thực DS1307
3.2.1 Giới thiệu chung về DS1307
-IC thời gian thực là họ vi điều khiển của hãng dalat
DS1307 có một số đặc trưng cơ bản sau
- DS1307 là IC thời gian thực với nguồn cung cấp nhỏ dùng để cập nhật thời gian và ngày tháng
- SRAM :56bytes
-Địa chỉ và dữ liệu được truyền nối tiệp qua 2 đường bus 2 chiều
- DS1307 có môt mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp 3v
- Cơ chế hoạt động :DS1307 hoạt động với vai trò slave trên đường bus nối tiếp.Việc truy cập được thi hành với chỉ thị start và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi.tiếp theo đó các thanh ghi sẽ được truy cập liên tụcđến khi chỉ thị stop đươc thực thi
3.2.2 Cơ chế hoạt động và chức năng của DS1307
Trang 9- SCL: dãy xung clock
- SQW/OUT: xung vuông/đầu ra driver
Hình 9: Sơ đồ DS1307
• DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian và ngày tháng với 56 bytes SRAM Địa chỉ và dữ liệu được truyền nối tiếp qua 2 đường bus 2 chiều Nó cung cấp thông tin về
giờ,phút,giây ,thứ,ngày ,tháng, năm.Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày,bao gồm cả việc tự động nhảy năm Đồng hồ có thể hoạt động ở dạng 24h hoặc 12h với chỉ thị AM/PM DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp
Trang 10I/O Chức năng
1 Vss - - Nguồn cung cấp(GND)
2 Vdd - - Nguồn cung cấp(+5V)
3 Vee - I Điện áp để điều chỉnh độ tương phản
4 RS 0/1 I Lựa chọn thanh ghi
0= thanh ghi lệnh 1=thanh ghi dữ liệu
5 R/W 0/1 I 0=ghi vào LCD module
1=đọc từ LCD module
6 E 1,1=>0 I Tín hiệu cho phép
7 DB1 0/1 I/O Data bus line 0(LSB)
8 DB2 0/1 I/O Data bus line1
9 DB3 0/1 I/O Data bus line2
10 DB4 0/1 I/O Data bus line3
11 DB5 0/1 I/O Data bus line4
12 DB6 0/1 I/O Data bus line5
13 DB7 0/1 I/O Data bus line6
14 DB8 0/1 I/O Data bus line7(MSB)
Trang 11- Khi đã đảm bảo cấp nguồn cho các mạch ổn định , mạch sẽ hoạt đông như sau:
Ban đầu khi khởi động nó sẽ thực hiện việc đọc dữ liêu trên DS1307 và hiển thị ngày giờ hiện tại lên LCD.
Kế tiếp nếu có ngắt gọi đến tức tác động vào phím KEY_TIME để điều chỉnh thời gian (Tăng-INC_KEY button, Giảm-DEC_KEY button) cho RTC , khi đó
vi điều khiển sẽ điều khiển việc tăng hay giảm time (ngày , tháng , năm , thứ , giờ , phút ), theo ý muốn của người sử dụng, bằng cách nhấn phím INC_KEY hoặc phím DEC_KEY Set xong thì LCD sẽ trở về màn hình lúc trước và hiển thị thời gian theo time đã cài đặt và hoạt động.
- Trong quá trình time hiện tại được hiển thị trên LCD mà ta thấy thì vi điều khiển luôn thực hiển kiểm tra (lặp lại việc kiểm tra ) time hiện tại xem xem có trùng với mốc thời gian vào tiết học hay kết thúc tiết học hay không ? Nếu có , thì nhảy tới chương trình báo chuông và đổ chuông báo , thời gian chuông dài hay ngắn có thể thay đổi trên code, là do người lập trình thiết lập, thiết lập mốc thời gian theo ý muốn Tức là, cứ thỏa mãn điều kiện time hiện tại bằng với time hẹn trước sẽ có chuông reo.
- Sau khi đã thiết kế sơ đồ khối của từng khối chúng ta bắt đầu đi thiết kế
sơ đồ nguyên lý cho từng khối như sau:
Trang 12- Đối với chuông ta sử dụng nguồn 220 mắc riêng rẽ
*, Chi chú ý nguồn nuôi cho mạch điều khiển cần giữ sự ổn định vì vậy ta
sử dụng ổn áp LM7805 cho nó.
3.Khối hiển thị LCD
- LCD 16x2 và giao tiếp với vi điều khiển :
VEE của LCD được nối với biến trở và nguồn 5V để diều chỉnh độ sáng của LCD
- Hiển thị time 1 ngày của RTC lên LCD
+ 3 chân điều khiển (RS,RW,E )
+ Đường dữ liệu D0 đến D7
+ Chân điều khiển độ sáng tối của LCD chân VEE ta sử dụng 1 biến trở
để điều chỉnh thích hợp
Trang 134.Khối xử lý AT89C51
- Sử dụng ic số là một bất lợi cho quá trình thiết kế từ việc thiết kế, kết nối cho tới chọn linh kiện và khắc phục nhiễu
Một lựa chọn để khắc phục nhược điễm của ic số là dùng bộ vi điều khiển
AT89C51 với dòng điện tiêu thụ thấp và có thể lập trình được
Vi điều khiển sử dụng thạch anh dao động là 12Mhz Nút ấn kết hợp với tụ C để thực hiện reset
Trang 145.Khối thời gian thực
-Ta chọn ic DS 1307 vì đây là ic chạy thời gian thực,có độ chính xác rất cao,và đặt biệt là dữ liệu thời gian cũng không bị mất khi chúng ta bị mất nguồn hoặc cúp điện.Nên đồng hồ ta chạy vẫn chính xác ngay cả khi mất điện Được nuôi bằng nguồn nuôi pin 3V
Trang 156.khối thao tác
-Sử dụng nút nhấn để tạo tín hiệu vào để điều chỉnh thời gian Nút nhấn được kết nối vối module giao tiếp để tiết kiệm chân và dơn giản khi thực hiện ,và 1 chân nút nhấn treo xuống mass để tạo sự thay đổi tín hiệu khi nhấn nút.
7.Khối chấp hành
- Có nhiều phương án để điều khiển cơ cấu chấp hành ,ở đây chúng ta sử dụng Transistor A1015 để điều khiển relay 12V/10A Điện trở R =10K để phân cực
và hạn dòng cho Transistor
- Diode 2N4148 dùng để bảo vệ Transistor khi trong mạch xuất hiện áp ngược
từ cuộn dây sinh ra Relay dùng để điều khiển chuông điện
8.Sơ đồ thuật toán
Trang 16Hình 12: Sơ đồ thuật toán
Tác Động Phím Bám
Set phút
Set giờ
Set ngay,tháng,năm,thứ
YesNo
YesYesNo
Trang 171.Chương trình cho vi điều khiển
disp_intro();//hien thi time len LCD
ENABLE_INT//cho phep ngat
wrt_cmd(0x1);//xoa man hinh LCD
wrt_cmd(0x1);
start_rtc();//dieu kien START cho RTC
send_adr(0xd0);//dia chi ghi cho RTC
send_adr(0x00);//gui dia chi bat dau
start_rtc();
send_adr(0xd1);//gui dia chi doc RTC
recv_data();//nhan du lieu tu vi dieu khien
Trang 18recv_data();
disp_rtc();
if(_testbit_(flag)) //kiem tra co ngat
{
DISABLE_INT //cam ngat
rtc_set(); //goi chuong trinh set cho rtc
ENABLE_INT //cho phep ngat
flag=0; //xoa co ngat
}
aon=1;//dieu kien de luon so sanh time hen voi time hien tai
if(aon)
check_alarm(); // kiem tra
if(aoff) //bao chuong
1.1 Mô phỏng
Trang 191.2 Linh kiện và chức năng
Mạch sử dụng 1 Module bàn phím 4x4, 2 IC 74HC595, 1 led 7 đoạn 4 số anot chung,
4 transistor npn C1815.
● Kỹ thuật quét bàn phím 4x4:
● Sử dụng thuật toán quét bàn phím, tức là tại một thời điểm chỉ có đầu vào một cột bàn phím có tín hiệu mức thấp, vi điều khiển thực hiện việc kiểm tra đầu vào ứng với 4 hàng của module bàn phím 4x4, nếu chân đầu vào nào của vi điều khiển nhận được mức trạng thái logic thấp và ứng với cột đang có mức logic thấp thì sẽ nhận được ký tự tại nút được lập trình trong phần mềm
● Kỹ thuật quét led 7 đoạn:
● tại một thời điểm chỉ có một led 7 đoạn trong led 7 đoạn được sáng nhờ
sự điều khiển đóng mở của transistor npn C1815 thông qua tín hiệu từ vi điều khiển.
● Lý do là module led 7 đoạn được nối chung các chân cùng ký hiệu và được truyền tín hiệu bằng cách dịch tín hiệu qua IC 74HC595.
● Việc sử dụng chung một IC 74HC595 sẽ giúp chúng ta giảm bớt được số chân I/O cần sử dụng cho việc xuất tín hiệu ra led 7 đoạn.
● Chỉ có 1 IC 74HC595 được lập trình theo tín hiệu đầu ra của vi điều khiển
Trang 20khiển 4 transistor bật tắt 4 led 7 đoạn thay phiên nhau, và 3 tín hiệu làm đầu vào của IC 74HC595 còn lại thực hiện việc biểu diễn ký tự hiển thị trên led 7 đoạn.
● Chức năng chính của mạch:
● Thực hiện phép tính cộng, trừ, nhân, chia trên cà số nguyên và số thực
● Do đơn vị hiển thị chỉ có 4 led 7 đoạn nên đã lược bỏ thực hiện các phép tính cho số âm
● Nếu kết quả phép tính ra âm hoặc lớn hơn 9999 sẽ hiện chữ FULL
#define chot GPIO_Pin_7
#define shift GPIO_Pin_6
#define dulieu GPIO_Pin_5
#define shift_high GPIO_SetBits(GPIOB,shift);
#define shift_low GPIO_ResetBits(GPIOB,shift);
#define dulieu_high GPIO_SetBits(GPIOB,dulieu);
#define dulieu_low GPIO_ResetBits(GPIOB,dulieu);
#define chot_high GPIO_SetBits(GPIOB,chot);
#define chot_low GPIO_ResetBits(GPIOB,chot);
Trang 21unsigned int phep[5] = {0, 0, 0, 0, 0};
unsigned int minh_data[8] = {1, 1, 1, 1, 1, 1, 1, 1};
unsigned int so_lan_bang[4] = {0, 0, 0, 0};
uint8_t so[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
uint8_t chu_full[4] = {0x8E, 0xC1, 0xC7, 0xC7};
float gia_tri_bien(unsigned int* mang);
void hien_thi_1_so(uint8_t bien_so, unsigned fulll, unsigned int so_n_sau_dot);
void xuat(unsigned int* mang_bien, unsigned int full);
void tach_math(float mathh);
void xoa_phan_tu(unsigned int* mang_xoa);
Trang 22/*luu so nhap tu ban phim vao bien*/
if( key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key =='7' || key == '8' || key == '9'){
/*nhap bien 1*/
if(so_lan_bang[0] == 0){
bien1 = gia_tri_bien(mang_bien1);
}/*nhap bien 1*/
else if(so_lan_bang[0] == 1 && so_lan_bang[1] == 1 && so_lan_bang[2] == 0){
bien2 = gia_tri_bien(mang_bien2);
}}
/*Dau dot cham phay*/
if(key == '.'){
if(mang_bien1[6] == 0 && so_lan_bang[0] == 0 && mang_bien1[5]>0){
mang_bien1[6] = 1;
}else if(mang_bien2[6] == 0 && so_lan_bang[1] == 1 && so_lan_bang[1] == 1 &&so_lan_bang[2] == 0&& mang_bien2[5]>0){
mang_bien2[6] = 1;
}}
/*luu dau can tinh toan*/
Trang 23mang_bien1[m] = 0;
mang_bien2[m] = 0;
mang_math[m] = 0;
}}
Trang 24/*Khi dang nhap bien 2*/
else if(so_lan_bang[0] == 1 && so_lan_bang[1] == 1 && so_lan_bang[2] == 0){
xoa_phan_tu(mang_bien2);
}}
/*Nut quay lai tung buoc truoc*/
else if(key == 'B'){
/*quay lai bien 2*/
if((so_lan_bang[0] == 1) && (so_lan_bang[1] == 0) && (so_lan_bang[2] == 0) &&(so_lan_bang[3] == 0)){
so_lan_bang[0] = 0;
}/*quay lai phep tinh*/
else if((so_lan_bang[1] == 1) && (so_lan_bang[2] == 0) && (so_lan_bang[3] == 0)){
so_lan_bang[1] = 0;
}/*quay lai bien 1*/
else if((so_lan_bang[2] == 1) && (so_lan_bang[3] == 1)){
so_lan_bang[2] = 0;
so_lan_bang[3] = 0;
}}
/*chuyen che do nhap ban phim */
if(key == '='){
/*nhap xong bien 1*/
if( (so_lan_bang[0] == 0) && (so_lan_bang[1] == 0) && (so_lan_bang[2] == 0)){
so_lan_bang[0] = 1;
}/*nhap xong phep tinh*/
else if( (so_lan_bang[0] == 1) && (so_lan_bang[1] == 0) && (so_lan_bang[2] == 0)){
so_lan_bang[1] = 1;
Trang 25if(phep[3] == 1){
math = bien1 + bien2;
}else if(phep[2] == 1){
math = bien1 - bien2;
}else if(phep[1] == 1){
math = bien1 * bien2;
}else if(phep[0] == 1){
math = bien1 / bien2;
}/*tach lay tung so trong ket qua vao mang_ket_qua*/
tach_math(math);
/*Kiem tra ket qua co am hoac lon hon 9999 hay ko*/
if(math>0 && math<9999){
so_lan_bang[3] = 1;
}/*neu ket qua math tinh duoc am hoac lon hon 9999*/
else so_lan_bang[3] =2;
}}
/*hien_thi_full*/
if(mang_bien1[4] == 5 || mang_bien2[4] == 5 || so_lan_bang[3] == 2){
xuat(mang_bien1,1);
}
/*hien thi bien 1*/
if(mang_bien1[4] != 5 && so_lan_bang[0] == 0 && so_lan_bang[1] == 0 &&so_lan_bang[2] == 0){
xuat(mang_bien1,0);
}
/*hien thi bien 2*/
else if(mang_bien2[4] != 5 && so_lan_bang[0] == 1 && so_lan_bang[1] == 1 &&so_lan_bang[2] == 0){
xuat(mang_bien2,0);
}