trong phòng…Chương trình giao diện và điều khiển truyền số liệu dùng ngôn ngữ lập trình Visual Basic 6.0Kit vi xử lý trong phòng 1 và phòng có cùng sơ đồ khối như sau RS-485 RS-485RS-485
Trang 1PHẦN II THIẾT KẾ MẠCH ĐIỀU KHIỂN GIÁM SÁT NHÀ CAO TẦNG DÙNG VI XỬ
LÝ 89C51
A Thiết kế mạch :
I Tổng quan về đề tài:
1 Sơ lược về đề tài:
Trên cơ sở thiết kế một thiết bị bằng cơ điện tử để có thể tạo thành ngôi nhà thông minh khi gắn thiết bị này vào Nhờ vào bộ xử lý trung tâm mà thiết bị này có thể hoạt động một cách chính xác theo chương trình đã lập sẵn Trong ngôi nhà càng có nhiều thiết bị thông minh thì càng làm cho cuộc sống tiện nghi hơn Do tính mềm dẻo của bộ xử lý trung tâm nên ta có thể nạp lại chương trình điều khiển cho nó tùy theo từng nhu cầu ứng dụng riêng biệt, cũng như có thể cho phép 1 hay nhiều thiết bị cùng hoạt động khi đến giờ định sẵn
Đèn, quạt gió và máy lạnh sẽ tự động bật lên khi có người vào phòng Máy đun nước nóng, máy giặt sẽ tự động hoạt động khi đến giờ quy định Hệ thống tưới cây trong vườn cũng được điều khiển từ thiết bị này Cửa gara sẽ tự mở ra khi xe vừa đến trước cổng và cũng tự đóng lại khi xe ra khỏi gara
Do sự hạn chế về thời gian cho nên em chỉ thiết kế mạch có một số tính năng nêu trên:
_ Đèn và quạt gió bật lên khi có người vào nhà
_ Đèn và quạt gió tắt khi người trong nhà đi ra ngoài hết
_ Phát hiện nguy cơ gây ra hỏa hoạn và phát tín hiệu chuông báo động
_ Đo nhiệt độ hiện tại trong phòng và hiển thị lên panel
_ Có khả năng phát hiện trộm xâm nhập và phát tín hiệu chuông báo động.Như theo yêu cầu của đề tài: tất cả các kit vi xử lý sẽ được giám sát và có thể
ra lệnh từ máy tính Máy tính truyền lệnh cần vi xử lý thi hành đến đúng kit vi xử lý mà nó cần tác động Có thể là lệnh yêu cầu tắt đèn , quạt, hay là yêu cầu gởi dữ liệu từ phòng, nhiệt độ, đèn tắt hay mở, bao nhiêu người trong phòng Theo lý thuyết, thì các thành viên trong một hệ thống mạng đều có thể liên kết dữ liệu với nhau bằng cách thông qua Master là PC Nhưng do mạng trong đề tài em thiết kế không cần tốc độ cao và cũng không có nhu cầu trao đổi dữ liệu giữa các kit vi xử lý riêng lẻ, cho nên em dùng phương pháp hỏi vòng từ PC Qua đó, PC sẽ lần lượt hỏi vòng tuần tự qua từng kit vi xử lý Dữ liệu từ PC gửi về kit vi xử lý gồm có các byte yêu cầu cộng thêm hai byte thêm vào: một byte đầu tiên xác định địa chỉ nơi đến, byte tiếp theo sẽ xác định nội dung giao tiếp giữa vi xử lý và PC, chẳng hạn gởi nhiệt độ, số người
Trang 2trong phòng…Chương trình giao diện và điều khiển truyền số liệu dùng ngôn ngữ lập trình Visual Basic 6.0
Kit vi xử lý trong phòng 1 và phòng có cùng sơ đồ khối như sau
RS-485
RS-485RS-485
BUS
Sơ đồ khối toàn bộ hệ thống điều khiển và giám sát ngôi nhà
Vi xử líAtmel89C51
Mạch động lực
đóng cắt các thiết
bị
Mạch hồi tiếp
trạng thái thiết bị
Mạch gia công tín
hiệu đo
Mạch hiển thị nhiệt độCảm biến quang
IC đo nhiệt độ
Mạch nguồn
Sơ đồ khối kit vi xử lý
Trang 32 Chức năng của từng khối:
a Vi xử lý 89C51:
Đây là bộ xứ lý trung tâm của mạch đặt tại từng phòng trong ngôi nhà 89C51 là loại IC có khả xử lý và điều khiển theo một chương trình đã lập sẵn và có khả năng thực hiện các yêu cầu gởi đến từ máy tính Vi xử lý 89C51 trong mạch thiết kế có thể thực hiện các chức năng như sau:
_ Phát tín hiệu báo động bằng chuông khi phát hiện có trộm xâm nhập
_ Đo nhiệt độ trong phòng và hiển thị lên một panel đặt trong phòng, khi nhiệt độ trong phòng khá cao thì nó sẽ ra lệnh bật máy điều hòa nhiệt độ hay quạt gió hoạt động
_ Khi phát hiện có nguy cơ hỏa hoạn nó sẽ báo động bằng chuông, sau đó nó sẽ ngắt CB của nguồn điện
_ Bật đèn lên khi có người vào phòng
_ Tắt đèn khi người trong phòng ra ngoài hết
b Khối cảm biến quang:
Dùng đề tạo một tín hiệu đưa về vi xử lý, tùy theo mức của tín hiệu này mà thiết bị sẽ biết được có trômg xâm nhập hay không
c Khối hiển thị nhiệt độ:
Khối này có dạng một panel hình chữ nhật được gắn trên từng phòng, nhiệt độ trong phòng sẽ được hiển thị trên panel này
d Mạch động lực:
Dùng để đóng các thiết bị, nhận tín hiệu kích đóng từ vi xử lý
e Mạch hồi tiếp trạng thái các thiết bị:
Dựa vào mức của tín hiệu hồi tiếp về mà vi xử lý sẽ biết đươc thiết bị nào đang bật, thiết bị nào đang tắt
II Thiết kế phần cứng
1 Mạch cảm biến quang:
Sơ đồ mạch như sau:
R6 1k
INT0 +
R4 100
Z ENER 5.1V
Trang 4Bình thường không có gì che chắn giữa LED phát và LED thu thì áp ra sẽ là 5V Khi có vật che chắn giữa LED phát và LED thu thì mạch sẽ cho ra áp là 0V.
Do khi LED thu dẫn thì áp rơi trên R4, chỉ từ 1V – 1,5V nên ta phải đệm thêm mạch khuếch đại dùng OPAMP Tùy theo đặc tính của từng con LED phát và LED thu mà áp đặt trên trở 100 ohm sẽ khác nhau Bình thường áp đặt trên điện trở 100 ohm là 1V, dùng mạch khuếch đại OPAMP để áp đủ 5V đưa vào vi xử lý
Để đảm bảo rằng áp đưa trở về vi xử lí sẽ không lớn hơn 5V( tránh hư vi xử lí khi ta đặt áp vào lớn hơn áp hoạt động cuả nó), ta mắc thêm một Diode Zenner ổn áp 5.1V vào ngõ ra của mạch khuếch đại
Tính toán mạch khuếch đại:
Dòng qua LED: 10 mA – 20 mA để giúp cho LED hoạt động được lâu dài Dòng cực đại mà ta có thể đưa vào chạy qua LED là 20 mA Thông thường trong tính toán mạch để đơn giản ta cứ cho dòng chạy qua LED là 15 mA
Khi LED dẫn, áp trên LED sẽ nằm trong khoảng từ 1,7-2V Cho nên dòng qua LED:
Vin = I LED thu x100 = 1 V
Để áp ra LM 741 đúng 5V khi LED thu dẫn ta chọn hệ số khuếch đại như sau:
Trang 5Bình thường, LED phát phátliên tục, khi không có vật che chắn giữa LED phát và LED thu thì áp ra mạch khuếch đại sẽ đúng 5 V Vi xử lý sẽ nhận biết đây là trạng thái mức cao (tích cực) Nếu có vật che chắn giữa LED phát và LED thu thì áp ra sẽ không phải chính xác là 0 V, mà có thể từ 0 V – 2V Nằm trong tầm điện áp này thì vi xử lý sẽ phát hiện ra đây là mức không tích cực (mức thấp ) Tín hiệu này đưa vào chân INT0 của vi xử lý Ta sẽ thiết lập chế độ hoạt động ngắt ở cạnh xuống Nghĩa là có sự chuyển đổi từ 5V sang 0V thì mạch sẽ xãy ra 1 ngắt
Để thiết lập chế độ này ta dùng lệnh sau gán cho vi xử lý:
SETB IT0Lệnh này sẽ cho phép vi xử lí đáp ứng ngắt theo cạnh xuống của tín hiệu áp đưa vào chân INT0
2 Mạch mô phỏng cảm biến quang phát hiện người:
Thông thường để phát hiện người đi vào hay đi ra ta dùng một cảm biến quang Cách này thông dụng dễ lắp đặt nhưng nó không phân biệt được người vào người ra Nó chỉ có thể nhận biết có người thông qua sự thay đổi trạng thái đầu vào là mức cao hay mức thấp Bên cạnh đó, còn có một nhược điểm nữa là sẽ gây cho chương trình chạy sai khi có người vô hình đứng chắn ngang cảm biến quang trong khoảng thời gian tương đối lâu Lúc đó vi xử lý sẽ hiểu rằng có rất nhiều người ra vào nó sẽ bị đếm lầm Để khắc phục tình trạng này ta dùng cùng lúc hai cảm biến quang đặt cách nhau ở một khoảng cách xác định Dựa vào sự thay đổi trạng thái của cảm biến quang nào trước, cảm biến quang nào sau ta sẽ nhận biết được người ra hay vào phòng Phương pháp này rất hiệu quả, nhưng cũng có thể không nhận ra số người một cách chính xác như ta mong muốn Giả sử khi có hai người cùng sóng bước thì cảm biến quang chỉ phát hiện ra một người mà thôi Ta cũng có thể khắc phục tình trạng này bằng cách thiết kế cửa sao cho chỉ cho một người qua lọt mà thôi
Trang 6Chức năng mạch đếm người được em thiết kế như sau: khi có một cảm biến quang tác động sẽ làm cho áp trên chân INT1 chuyển từ 1 sang 0 Vi xử lý sẽ nhảy đến chương trình ngắt kiểm tra giữa hai chân P1.0 và P1.1 xem chân nào xuống mức 0 trước: Nếu P 1.0 tác động trước, P1.1 tác động sau thì ta sẽ nhận biết có người vào Nếu P1.1 tác động trước thì ta nhận biết có người ra
Bình thường khi không nhấn các SW1 và SW2 thì INT1 ở trạng thái tích cực Khi một trong hai nút nhấn SW1 và SW2 được nhấn tức là có một chân đưa vào IC
7408 xuống mức 0 Cho nên áp sau khi qua 7408 sẽ là mức 0 (do IC 7408 là IC thực hiện chức năng logic AND) Tùy thuộc vào ta nhấn nút nhấn nào trước, nút nhấn nào sau, vi xử lý sẽ phát hiện người ra hay vào mà xử lý chương trình điều khiển
3 Mạch động lực đóng cắt thiết bị:
Sơ đồ nguyên lý mạch động lực như sau:
Nguyên lý hoạt động của mạch như sau:
Khi cần đóng đèn thì vi xử lý sẽ đặt chân điều khiển đèn lên mức tích cực Khi đó Opto sẽ dẫn làm cho Phototransistor dẫn bão hòa, áp VC1 ≈ 0.2V, sẽ kéo theo Q1 dẫn Khi Q1 dẫn sẽ cho phép rơ le đóng Khi Relay đóng thì đèn sẽ được cấp nguồn: đèn sáng Do mạch thiết kế dựa trên nguyên tắc kiểm tra áp trên đèn sẽ biết đèn
+ -
U2
AD741
3
2 6
R5 22k
R1 330
U1
4N26
1 6
2
5 4
Trang 7đóng hay mở Khi đèn được đóng bằng Relay điện trở công suất RW sẽ chia áp trên đèn, do điện trở công suất mắc nối tiếp đèn nên đèn sáng thì trên điện trở công suất sẽ có áp Aùp này sau khi qua cầu Diode chỉnh lưu sẽ được đưa trở về vi xử lý.
Tính toán mạnh như sau:
R1 = 330 Ω : đảm bảo dòng qua Opto đủ nhỏ để Opto hoạt động tốt.R2 = 2.2 k để giảm dòng giúp cho Phototransistor được hoạt động bình thường, không rơi vào tình trạng quá dòng
Diode D5 dùng để xả dòng điện cảm ứng trong cuộn dây Relay khi ta kick ngắt Relay
Điện trở công suất RW, do đèn dùng để thiết kế cho mạch có các thông số định mức như sau:
1000µ để cho áp ra được thẳng Qua bộ đệm LM741 để cho áp ra ổn định thì tín hiệu nối tiếp về được đưa vào một chân của vi xử lý
Nguyên nhân tại sao khi thiết kế mạch động lực đóng ngắt nguồn ta dùng nguồn +12V riêng và dùng Opto để kích Do khi relay đóng ngắt sẽ gây ra nhiễu điện từ, nhiễu này sẽ ảnh hưởng trực tiếp lên nguồn cung cấp cho vi xử lý Nó sẽ làm cho áp cấp cho vi xử lý có dạng gai áp Nếu không truyền số liệu về máy tính thì điều này không quan trọng Nhưng ta thiết kế mạch có truyền dữ liệu nên cần phải dùng nguồn riêng và Opto để tránh gây nhiễu sẽ ảnh hưởng đến việc truyền dữ liệu Đồng thời Opto cũng thực hiện việc cách ly mạch giữa 2 kit cho nên mạch sẽ hoạt động tốt hơn
Mạch khuếch đại Opamp dùng để ổn định áp hồi tiếp về khi có nhiều thiết bị mắc trên cùng đường dây Khi đó dòng sẽ giảm và áp đặt vào điện trở công suất cũng giảm theo Để đảm bảo mạch hoạt động tốt ta dùng mạch khuếch đại áp sau đó dùng Diode Zenner để ổn áp ở mức +5V đưa vào vi xử lý
4 Mạch nguồn cung cấp:
Mạch nguồn thiết kế trên nguyên tắc tạo ra nguồn đôi: +/-12V, +/-5V Để có thể được như vậy ta dùng biến áp loại 6 đầu ra: 0V, 6V, 9V, 15V, 18V và 24V Ta sẽ dùng điểm chuẩn 12V là mass Cho điện xoay chiều đi qua 2 cầu Diode chỉnh lưu
Trang 8Sơ đồ khối nguồn cung cấp cho các kit vi xử lý
Mạch dùng áp lưới chỉnh lưu thành dòng một chiều biến áp chọn loại 3A Cầu Diode sẽ chỉnh lưu áp xoay chiều thành dòng một chiều Bộ phận nắm dòng là tụ 220
µF (25V), nó sẽ làm cho dòng DC được thẳng hơn
Lọc áp giúp giảm đi các gợn sóng cao tần
IC ổn áp là các họ IC: 7805 ( ổn áp +5V), 7905 (ổn áp –5), 7912 (ổn áp –12V), và 7812 ( ổn áp +12)
Do mạch không dùng đến công suất lớn nên không cần dùng đến transistor bổ trợ dòng cho mạch Với các Diode chỉnh lưu chọn loại 3A, thì các IC ổn áp sẽ hoạt động tốt Ta nên gắng thêm tấm tỏa nhiệt cho 4 IC ổn áp này Vì khi IC càng nóng thì áp ra sẽ không ổn định và có nguy cơ chết IC
5 Mạch hiển thị nhiệt độ bằng LED 7 đoạn:
Để hiển thị nhiệt độ đo được ta dùng các LED 7 đoạn để hiển thị Dùng IC
74247 để giải mã sang LED 7 đoạn Mạch hiển thị được nối với Port 2 của vi xử lý 4 bit thấp của Port2 dùng cho giải mã LED, 4 bit dùng để tạo tín hiệu chọn LED Ta dùng phương pháp quét để hiển thị LED Thời gian giữa hai lần quét cách nhau 1ms để đảm bảo cho LED đủ sáng LED được chọn để dùng LED Anode chung.Sơ đồ mạch kích như sau:
Khi tín hiệu chọn LED = 0, Transistor Q1sẽ dẫn đến VC ≈ Vcc =5V, tương ứng với áp để LED sáng Tín hiệu chọn LED =1 (+5 V) thì transistor sẽ ngưng dẫn, các LED sẽ tắt vì không có áp
6 Công tắc đóng ngắt thiết bị theo yêu cầu:
Nắn
Lọc bỏ Các gợn Sóng
5 V -5V +12 V -12V220V
R1 10k TIN HIEU CHON LED
IC giải mã LED
74247
Trang 9Mạch này mô phỏng chức năng của 1 công tắc đóng ngắt thiết bị Khi SW3 không được nhấn thì P2.7 ở mức cao Vi xử lý sẽ kiểm tra chân P2.7=0 nghĩa là ta đã nhấn nút SW thì nó sẽ thực hiện một chương trình con có nhiệm vụ đóng đèn khi đèn đang tắt, và tắt đèn khi đèn đang đóng Đây là phần thiết kế thêm giúp cho mạch phần cứng và ngay cả chương trình phần mềm điều khiển một cách linh động không quá cứng Nếu để cho vi xử lý làm nhiệm vụ đếm người và đóng mở đèn hay thiết bị khác thì người dùng không thể can thiệp và cũng không thể thay đổi gì được chương trình điều khiển đã lập trình sẵn trong ROM vi xử lý.
Mạch phần cứng thiết kế có phần hồi tiếp trạng thái của các thiết bị Cho nên chương trình điều khiển cũng không có gì gây ra phức tạm lắm Thiết bị đóng, tín hiệu hồi tiếp về mức 1 (+5V), thiết bị ngắt tín hiệu hồi tiếp về là mức 0(0V) Nếu ta nhấn nút SW3, và tín hiệu hồi tiếp về đang là mức 0 thì vi xử lý hiểu rằng đó là yêu cầu
đóng thiết bị Nó sẽ xuất tín hiệu đóng Relay cấp nguồn cho thiết bị Ngược lại, nếu
tín hiệu hồi tiếp về đang là mức 1 thì vi xử lý sẽ hiểu là yêu cầu ngắt thiết bị và nó sẽ kích ngắt relay
Ta cũng có thể thiết kế phần cứng để thực hiện phần này để cho vi xử lý thực hiện ít công việc nó phải làm Nếu chỉ dùng một nút nhấn để yêu cầu đóng hay ngắt thiết bị thì vi xử lý sẽ phải xử lý chương trình Ta thiết kế hai nút nhấn tương tự như thế và quy định nút nào nhấn là đóng, ngắt thiết bị
7 Mạch chuông
Chuông dùng để phát tín hiệu báo động khi có sự cố: cảm biến nhiệt phát hiện xảy ra hỏa hoạn hay có trộm chẳng hạn Tùy theo từng sự kiện mà vi xử lý sẽ kích chuông kêu dài ngắn khác nhau:
- Phát hiện trộm: reo liên tục
- Nếu nhiệt độ lên gần 100oC: chuông reo 3 hồi, mỗi hồi 5 giây và cách nhau giữa 2 lần là 1 giây
- Nhiệt độ nằm trong tầm báo động 2: chuông reo 2 hồi, mỗi lần cách nhau 1 giây và dài 5 giây mỗi hồi
Do mạch chuông tiêu thụ dòng khá lớn, nên ta phải dùng một relay để kích đóng ngắt mạch chuông Dòng lớn sẽ gây chết transistor khi ta dùng transistor để lái mạch chuông mà không phải dùng relay
8 Mạch giao tiếp máy tính qua mạng RS-485
Thông thường các họ vi xử lý có ngõ truyền thông theo mức TTL Và các thiết bị đầu cuối khác (DTE ) có cổng truyền thông là RS_232 Để có thể nối mạng các thiết bị này ta phải chuyển từ TTL ,RS_232 sang RS_485 Để thực hiện
Trang 10việc chuyển đổi này có rất nhiều vi mạch trên thị trường , nhưng họ vi mạch của hãng MAXIM là phổ biến nhất hiện nay Đó là MAX 481 , MAX 483, MAX 485 , MAX 487 ,MAX 488, MAX 489 , MAX 490, MAX 1487 Tiêu biểu là vi mạch MAX 485 , nó chuyển từ mức TTL sang RS_485 , truyền theo phương pháp Half_Duplex
Bên trong mỗi vi mạch chứa một bộ phát (Driver) và một bộ thu
Đặc điểm :
RS _485 là chuẩn giao tiếp nối tiếp bất đồng bộ cân bằng, sự truyền thông tin trên dây xoắn đôi bán song công ( Half _ duplex) , nghĩa là tại một thời điểm bất kì trên dây truyền chỉ có thể là một thiết bị hoặc là truyền hoặc là nhận
• RS_485 cho phép 32 bộ truyền trên bus
• RS_485 có ngõ ra 3 trạng thái
• RS_485 cho phép tốc độ truyền tối đa là 2.5Mbps
Sơ đồ chân của MAX_485:
DIP/SO µMAX
Nếu A > B là200mV, RO là cao
Trang 11Nếu A < B là 200mV , RO là thấp.
2 4 /RE Cho phép ngõ ra bộ thu :
RO được cho phéo khi /RE là thấp
RO là trở kháng cao khi /RE là cao
Các ngõ ra lái A và B được cho phép khi DE cao
Các ngõ ra lái A và B là trở kháng cao khi
DE thấp
Nếu những ngõ ra lái được cho phép thì từng ngõ có chức năng như làcác đường lái
Khi chúng là trở kháng cao , chức năng của chúng như là các đường thu của bộ thu nếu /RE là thấp
DI thấp thì A thấp và B cao
DI cao thì Acao và B thấp
6 8 A Ngõ vào vộ thu và ngõ ra bộ lái đều không
đảo
7 1 B Ngõ vào bộ thu và ngõ ra bộ lái đều đảo
5.25V Vcc
Trang 12Sơ đồ mạng half_ duplex RS485:
Sơ đồ mạng RS485 Full_Duplex:
Để tăng chiều dài cáp truyền , ta có thể dùng bộ repeater như sau:
M A X 4 8 5
1 2
3 4 6
4 5
Y Z
Y Z
R 1
1 2 0
D A T A I N
D A T A O U T
Trang 13Bộ Repeater hay gọi là bộ tiếp sức , có chức năng làm khuếch đại tín hiệu liên lạc giữa các máy tính với nhau , khoảng cách truyền thông tin có thể đạt tới 3 km.
Mạng RS-485 em thiết kế trong đề tài này là mạng bán song công (Half- Duplex): dữ liệu chỉ đi từ Master đến các vi xử lý hay từ các vi xử lý đến Master Tại một thời điểm trên mạng chỉ có một phần tử truyền và cho phép các phần tử khác có thể nhận thông điệp đó Có điều quan trọng ta nên chú ý là với sơ đồ mạch RS-485 được thiết kế như trên thì chỉ có thể giao tiếp giữa Master (PC) và các vi xử lý nhưng giữa các vi xử lý không thể liên lạc trực tiếp với nhau Chúng giao tiếp với nhau nếu có thể đó thuộc một dạng giao tiếp khác Cách thức hoạt động của mạng như sau:
Với sơ đồ mạng như trên ta có thể giao tiếp được với 32 slave thông qua một Master là PC Đồng thời do mạng truyền dữ liệu trên hai dây xoắn đôi lại nên sẽ đỡ rắc rối trong quá trình thiết kế cũng như khi nối dây
Bộ chuyển đổi ( Converter ) từ RRL sang RS-485 thực ra chỉ cần một con IC
75176 cũng đã đảm nhận vai trò này tương đối tốt IC là 75176 ( hay tương đương
PC
Converter RS-232↔ TTLRS-232 ↔TTL
Converter
Con verterTTL↔RS-485
Vi xử
Trang 14Max-485 ) có hai chân điều khiển hoạt động là DE và /RE Chân /RE tích cực ( mức logic 0 ) sẽ cho phép vi xử lý nhận dữ liệu từ Master: chế độ thu dữ liệu Chân DE tích cực ( mức logic 1) sẽ cho phép mạch phát dữ liệu từ vi xử lý về Master Dùng một chân từ các Port của vi xử lý cũng như chân để phát Thông thường khi lập trình giao tiếp bằng phần mềm, ta thường dùng chân RTS hay CIS để điều khiển IC 71576.
Ban đầu, chân /RE của75176 sẽ ở mức thấp: chế độ thu 75176 nhận dữ liệu từ máy tính, thông thường là địa chỉ Sau đó, nghĩa là khi Master phát địa chỉ xong thì nó chuyển trạng thái chân /RE xuống mức thấp để cho phép nhận tín hiệu hồi đáp từ các slave Các slave sau khi nhận được địa chỉ từ Master nó sẽ so sánh với địa chỉ của nó Nếu đúng địa chỉ thì slave sẽ đưa chân DE lên mức một để truyền tín hiệu trả lời về Master, sau đó thì nó lại đưa chân /RE sang mức 0 để sẵn sàng nhận dữ liệu hay yêu cầu cũng như lệnh mới từ Master
Sơ đồ cụ thể như sau:
Hai điện trở 120Ω được nối vào 2 đầu đều xa nhất của mạng Chiều dài xa nhất có thể là đầu này và đầu kia là 4000 feet ( 1,2 km ) Còn gọi là điện trở đầu cuối ( Terminal Register ) Dây dẫn là loại xoắn đôi 26 AWG
Ta có 2 chân điều khiển thu phát dữ liệu, để đơn giản việc điều khiển, ta thường nối chung 2 tường điều khiển này cùng nhau Nếu tín hiệu này mức cao thì một trong hai sẽ ở mức tích cực cũng như một trong hai sẽ ở trạng thái thụ động
9 Mạch cảm biến nhiệt độ dùng IC LM335.
Nhiệt độ là một tín hiệu dạng tương tự nó hiện hữu theo thời gian và liên tục Để dễ dàng đo được những tín hiệu không phải là điện ta thường chuyển nó sang dạng tín hiệu điện để có thể đo dễ dàng hơn Có nhiều phương pháp để chuyển từ tín hiệu nhiệt độ sang tín hiệu điện, tuy nhiên có 2 phương pháp thông dụng nhất thường được sử dụng như sau:
M A X 4 8 5
1 2
3 4 6
7
R OR E
D E
D I A
Trang 15- Chuyển từ nhiệt độ sang dạng đo điện trở: để đo điện trở thì mạch gia công cũng như mạch đo đều có Cho nên ta tìm cách tạo ra một mối quan hệ giữa điện trở của một vật đến nhiệt độ cần đo Ta dùng một vật liệu thay đổi nhiệt độ sẽ gây ra thay đổi điện – còn gọi là nhiệt điện trở Từ đó ta có thể chuyển từ trở thành áp và dùng các mạch khuếch đại tương đương đo một cách dễ dàng.
- Chuyển từ nhiệt độ sang trực tiếp điện áp: cách này chỉ có thể dùng các
IC nhiệt mà thôi Các IC này có đặc tính là áp ra sẽ thay đổi theo nhiệt độ môi trường Ta dùng thêm các mạch gia công thích hợp để có thể ghi nhận được sự thay đổi điện áp hay cũng chính là sự thay đổi đầu vào Tùy vào hệ số nhiệt của chất liệu cấu thành IC nhiệt là hệ số nhiệt dương ( áp ra tăng dần như tuyến tính theo nhiệt độ ), hay hệ số nhiệt âm ( áp ra tăng dần theo nhiệt độ )
Các hàm quan hệ giữa áp và nhiệt độ thông thường là hàm mũ Cho nên khi nhiệt độ càng tăng thì nhiệt độ tuyến tính sẽ giảm đi và cũng không đo được nhiệt độ một cách chính xác ở phần phi tuyến đó Trong phạm vi của đềtài này em dùng IC nhiệt LM335 để làm mạch đo nhiệt độ
Sơ đồ nguyên lý như sau:
IC này có thể hoạt động tốt đến nhiệt độ 150oC, áp ra tuyến tính với nhiệt độ cho nên rất đơn giản cho quá trình tính toán
Đặc tính của LM335 như sau:
+ Ở 0oK thì áp ra sẽ là 0V
R1
2.2K
+ -
U15
LM741 3
U11 LM741 3
U13
LM741 3
Trang 16+ Nhiệt độ tăng 1oC thì áp ra sẽ tăng 10 mV.
Như vậy, theo cách tính nhiệt độ theo oC thì ở 0oC áp ra của LM335 sẽ là 2.73V Để dễ dàng cho việc xử lý, ta phải thiết kế mạch gia công sao cho khi ở 0oC thì áp ra của LM335 cũng là 0V
Ta thiết kế thêm mạch trừ cộng vào áp ra của LM335 Mạch trừ này có vai trò tạo ra một áp-2.73V để triệt tiêu áp trên LM335 khi nhiệt độ môi trường là 0oC ( -278oK )
Hàm biểu diễn của áp theo nhiệt độ của LM335 có thể xem gần đúng như sau:
Vout = 0.01*t (0oC)
Tín hiệu này để có thể hiển thị lên LED ta phải dùng 1 IC chuyển từ áp ra dạng tín hiệu số: ADC 0809
Đặc tính của ADC như sau:
+ Cấp nguồn đơn : + 5V+ Tần số xung clock = 12 MHz:16+ Thời gian chuyển đổi tối đa : 120 µ.+ Cần có một xung start để kích quá trình chuyển đổi Nếu ADC đang chuyển đổi mà có xung start mới thì sẽ bắt đầu lần đổi tiếp theo
+ 8 kênh Analog vào
+ 8 đường data ra hay nói chính xác hơn đây là ADC 8 bit+ Sai số tổng cộng không điều chỉnh được: +/-1 LSB + Ngõ ra phù hợp với mức điện áp TTL
Data ở ngõ ra là một số nguyên N nằm trong khoảng :
N= (Vin / VREF+)x 255±* 256 Độ chính xác tuyệt đối
Vin : tín hiệu Analog đầu vào cần chuyển đổi
VREF :tín hiệu cấp nguồn cho ADC 0809Công thức trên chỉ đúng trong trường hợp ADC được cấp nguồn đơn VREF nối mass
Trước quá trình chuyển đổi ta cần thiết lập cổng ngõ rào cho quá trình chuyển đổi ADC 0809 có 3 chân A0, A1, A2 dùng để xác lập kênh Analog vào
Trang 17⇒Số mà ADC đổi ra cực đại là:
N=1.5/5*256= 76 hay 77 ( do sai số ± 1 LSR )
Ta thấy rằng: nhiệt độ thực tế là 150oC mà đo chỉ có 77 oC hay nói cách khác : nhiệt độ đo được qua ADC từ mạch trừ 2.73V đưa trực tiếp vào sẽ bé đi 2 lần so với giá trị thực
Điện áp ngõ ra của mạch khuếch đại như sau:
Vout = Av.(V1-V2)V1 : tín hiệu chuẩn 2.73 VV2: tín hiệu ra từ LM 335 phụ thuộc vào nhiệt độ Vậy áp ngõ ra sẽ thay đổi một lượng là Av.10mV khi nhiệt độ thay đổi 1oC
Do ta cần đến 4 LED để hiển thị nhiệt độ đo được nên có 1 LED thập phân Như thế sẽ dẫn đến tình trạng để từ nhiệt độ này tăng thêm 1oC nữa thì mạch sẽ qua hai trạng thái: một số nguyên sau đó đến số thập phân hay nói một cách khác đi để đo và hiển thị LED thập phân ta phải làm sao khi nhiệt độ thay đổi 1oC thì phải bằng hai lần độ phân giải của ADC0809
Av x 10mV = 2 x19.6 mVVới 19.6 mV là độ phân giải của ADC 0809 =5/225
Av = 2 x 19,6 /10 = 3.92
Ta chọn : RI = 39 K
RI = 10KNhư vậy, áp sau khi qua bộ khuếch đại sẽ có giá trị như sau:
Trang 18Vout = 3,9 x 0,01t = 39 x t ( mV ) ; t (oC)
Với độ phân giải của ADC là 19,6 mV thì giá trị sau khi qua ADC sẽ có giá trị
là: 39 x t /19,6 = 2 x t (mV)Để thể hiện lên LED một số phần thập phân ta sẽ phải hiển thị giá trị như sau :
10 x t (mV) Cho nên giá trị sau khi qua bộ đổi ADC sẽ phải nhân thêm với 5 rồi sau
đó mới biến đổi qua mã BCD nén và hiển thị lên LED 7 đoạn.
10 Thiết kế mạch 89C51 trên sơ đồ các chân và chức năng của chúng:
10.1 Giới thiệu vi xử lý 89C51:
a Giới thiệu :
Vi xử lý AT89C51 được chế tạo bởi hãng ATMEL, về cơ bản nó có cấu tạo bên trong , sơ đồ chân cũng như sử dụng tập lệnh tương thích với họ 8031 của hãng INTEL
Các đặt điểm cơ bản của vi mạch AT89C51:
• Đơn vị xử lý trung tâm 8 bit đã được tối ưu hóa để đáp ứng các chức năng điều khiển
• Khối logic xử lý theo bit thuận tiện cho các phép toán Boole
• Bộ tạo dao động giữ nhịp bên trong (đến 12Mhz)
• Tập lệnh rất phong phú
• Giao diện nối tiếp có khả năng hoạt động song công , đồng bộ (UART)
• 16 (32) đường dẩn vào/ ra hai hướng và từng hướng có thể được định địa chỉ một cách tách biệt
• Năm nguồn ngắt vơí hai mức ưu tiên
• Có thể mở rộng bộ nhớ chương trình ( ROM ) bên ngoài lên đến 64KB
• Có thể mở rộng dung lượng bộ nhớ dữ liệu (RAM ) bên ngoài lên đến 64KB
• Hai bộ đếm / định thời 16 bit
• Bộ nhớ EEPROM nội 4KB
• Dung lượng bộ nhớ RAM nội , nhiều nhất có thể lên đến 128 byte
b Sự sắp xếp chân ra :
Port 0 : Là port hai chức năng trên các chân 32 – 39 Khi sử dụng bộ nhớ trong thì nó
như là một port I/O ( P0.0 → P0.7) Khi sử dụng bộ nhớ ngoài thì nó đóng vai trò như một bộ MUX địa chỉ/ data
Port 1 :
Trang 19Là một port I/O trên các chân 1 – 8 (P1.0→ P1.7 ) nó chỉ được dùng để giao tiếp với các thiết bị ngoài và không có các chức năng khác.
Port 2:
Là một port công dụng kép trên các chân 21 – 28 Khi sử dụng bộ nhớ trong thì nó như là một port I/O đa dụng (P2.0→P2.7), khi sử dụng bộ nhớ ngoài thì port 2 chính là byte cao của các đường địa chỉ (A8→A15)
Trong trường hợp sử dụng bộ nhớ chương trình trong thì PSEN không tích cực
ALE :(Address Latch Enable ) Chân 30 , tích cực mức cao trong nửa chu kỳ đầu chỉ báo dữ liệu trên port chính là địa chỉ byte thấp A0÷A7
EA : (External Acess) Chân 31 , cho phép chọn bộ nhớ chương trình trong hay ngoài
+ EA =0 : MCU sử dụng bộ nhớ chương trình ngoài
+ EA = 1 : MCU sử dụng bộ nhớ chương trình trong
RST (Reset ):
Ngõ vào RST trên chân 9 là ngõ Reset của 8951 , khi ngõ này lên mức cao (trong ít nhất hai chu kỳ máy ) các thanh ghi bên trong 8951 được đưa về trạng thái mặc định
c Các thanh ghi chức năng đặc biệt:
Vùng RAM nội địa chỉ từ 80H – FFH , trong vùng này bố trí khoảng 21 thanh ghi đặc biệt , phụ trách một chức năng nào đó của MCU
i Thanh ghi PSW (Program status Word):
Thanh ghi từ trạng thái chương trình ở địa chỉ D0H chứa các cờ ( các bit chức năng ) trạng thái của hệ thống :
Trang 20Bit Ký hiệu Địa chỉ Ý nghĩa
PSW.7 CY D7H Cờ nhớ
PSW.6 AC D6H Cờ nhớ phụ
PSW.5 F0 D5H Cờ 0
PSW.4 RS1 D4H Bit 1 chọn bank thanh ghi
PSW.3 RS0 D3H Bit 0 chọn bank thanh ghi
00 : bank 0
01 : bank 1
10 : bank 2
11 : bank 3PSW.2 OV D2H Cờ tràn
PSW.1 - D1H Dự trữ
PSW.0 P D0H Cờ parity chẵn
ii Thanh ghi B :Địa chỉ F0H , truy xuất bit , ngoài chức năng là thanh ghi đa dụng còn tham gia vào 2 phép toán nhân và chia
iii Thanh ghi SP (Stack Poiter):
Địa chỉ 81H , vùng ngăn xếp nằm trong RAM nội về nguyên lý dung lượng tối đa là 128 byte Trước khi cất vào stack nội dung SP tăng lên 1 rồi mới cất (nội dung SP là con trỏ địa chỉ ), khi lấy dữ liệu ra khỏi stack nội dung SP giảm đi 1 sau khi lấy data
iv Thanh ghi DPTR (Data Pointer):
Sử dụng làm con trỏ địa chỉ bộ nhớ dữ liệu ngoài
Chia làm hai thanh ghi :
DPL ( địa chỉ 82H ) chứa byte thấpDPH ( địa chỉ 83H) chứa byte cao
v Các thanh ghi cổng ngoại vi :Các lệnh liên quan đến xuất nhập ngoại vi đều thông qua các thanh ghi cổng
Port 0: Thanh ghi P0 (địa chỉ 80H)
Port 1: Thanh ghi P1 ( địa chỉ 90H)
Port 2: Thanh ghi P2 ( địa chỉ A0H)
Port 3: thanh ghi P3 (địa chỉ B0H)
vi Các thanh ghi timer : TMOD (địa chỉ 89H) : Chọn mode làm việc timer
TCON ( địa chỉ 88H) : điều khiển timer
Trang 21TL0 (địa chỉ 8AH): byte thấp timer 0 TH0 (địa chỉ 8CH): byte cao timer 0 TL1 (địa chỉ 8BH): byte thấp timer 1 TH1 ( địa chỉ 80H): byte cao của timer 1vii Các thanh ghi SIO :
SCON (98H) : khởi động mode và điều khiển SIO
SBUF ( 99H) : chuyển dữ liệu từ nối tiếp thành song song và ngược lại.viii Các thanh ghi phục vụ ngắt :
Có 5 nguồn ngắt với 2 cấp ưu tiên:
+Thao tác trên thanh ghi IE (A 8H) : cho phép / cấm ngắt
+Thao tác trên thanh ghi IP (B8H) : cấp ưu tiên ngắt
ix Thanh ghi điều khiển công suất (PCON) : Địa chỉ 87H , không truy xuất bit được, các bit của thanh ghi này được dùng trong việc tác động lên tốc độ baud (SMOD) trong truyền thông nối tiếp, đưa vi mạch vào mode tạm nghĩ hay mode hạ nguồn
d Hoạt động của timer :
89C51 có 2 bộ timer 16 bit: Timer 0 và timer 1
i Thanh ghi TMOD :Có địa chỉ 89H , là thanh ghi 8 bit, đặc các mode làm việc cho timer
Tóm tắt thanh ghi TMOD :
7 GATE 1 Bit cổng , GATE =1 timer chỉ đếm khi INT1=1
C/T=1: counter, đếm bằng xung ck ngoài ngõ vào T1
C/T=0 :timer, xung ck trong từ dao động nội
3 Gate 0 Bit cổng ( timer 0)
Chọn mode :
Trang 22ii Thanh ghi TCON : Địa chỉ 88H , truy xuất bit được, là thanh ghi 8 bit
Tóm tắt thanh ghi TCON:
TCON.7 TF1 8FH Cờ báo tràn timer 1, phần cứng đặt
TF1=1 khi timer tràn, xóa bằng mềm hoặc cứng
TCON.6 TR1 8EH Điều khiển ON/ OFF timer1,
TR1=1:chạyTR1=0 :ngừng
e Cổng nối tiếp :
Giao diện nối tiếp ở bên trong của bộ vi xử lý 8951 cho phép nối bộ vi xử lý với một vi xử lý khác hay với một máy tính một cách rất đơn giản Bởi vì giao diện được thực hiện nhờ bộ UART hoạt động độc lập, nên bộ vi xử lý hoàn toàn tự
do đối với các nhiệm vụ khác Để khởi tạo giao diện thanh ghi SCON cần phải được nạp bằng các giá trị thích hợp
Thanh ghi SCON ( địa chỉ 98h)
SM0, SM1 Chọn mode làm việc:
SM0 SM1
0 0 :Mode 0 thanh ghi dịch 8 bit, baud rate cố định (fck/12)
0 1 :Mode 1 UART 8 bit, baud rate thay đổi (đặt bằng timer 1)
1 0 :Mode 2 UART 9bit , baurate cố định (fck/32 hoặc fck /64)
1 1 :Mode 3 UART 9 bit , baud rate thay đổi (đặt bằng timer 1)
Trang 23SM2 : chế độ nhiều máy tính
REN : Cho phép bộ thu , cho phép bộ phát
TB8 : Bit phát thứ 9 trong mode 2 và 3, đặt xóa bằng mềm
Trong rất nhiều trường hợp , người ta sử dụng chế độ hoạt động loại 1 và như vậy có một UART 8 bit với việc tạo ra tốc độ baud bằng timer 1 Dòng dữ liệu
8 bit được mở đầu bằng một bit bắt đầu (startr bit ) và kết thtúc bằng một bit dừng(stop bit) Tốc độ baud bằng 1/16(SMOD=1) hoặc 1/32 (SMOD=0) của tốc độ tràn của timer 1
f Hoạt động ngắt (interrupt):
i Giới thiệu :Một ngắt là sự xảy ra một điều kiện – một sự kiện- mà nó gây ra treo tạm thời chương trình trong khi điều kiện đó được phục vụ bởi một chương trình khác
ii Tổ chức ngắt trong 8951:
8951 có 5 nguồn ngắt :
+ Ngắt bằng tín hiệu ngoài qua ngõ INT0 (ngắt ngoài INT0)
+ Ngắt bằng tín hiệu ngoài qua ngõ INT1 (ngắt ngoài INT1)
+ Ngắt khi timer 0 tràn (ngắt timer 0)
+ Ngắt khi timer1 tràn (ngắt timer 1)
+ Ngắt khi SIO phát / thu xong 1 ký tự (ngắt SIO)
Địa chỉA8H, truy xuất bit được, cho phép / cấm ngắt
Thanh ghi IE :
IE.7 EA AFH Cho phép / cấm toàn cục
Trang 24-IE.4 ES ACH Cho phép ngắt SIOIE.3 ET1 ABH Cho phép ngắt timer 1
10.2 Tổ chức và sử dụng các chân ra của 89C51:
Sơ lược về chức năng phần cứng cũng như chương trình phần mềm như sau:
- Đo nhiệt độ và hiển thị lên LED, lưu lại giá trị nhiệt độ hiện tại và gởi về máy tính
- Tùy theo giá trị của nhiệt độ đo được mà vi xử lý 89C51 sẽ nhận ra nhiệt đang nằm ở tầm báo động nào và có hành động tương ứng:
+ to < 50oC : báo động cấp 1- chỉ báo chuông+ to < 80oC : báo động cấp 2- báo chuông hai lần+ to = 100oC: báo động cấp 5 : báo chuông ba lần
- Cảm biến quang: chống trộm : phát tín hiệu kích chuông reo khi cảm biến này tác động
- Mạch mô phỏng cảm biến quang đếm số người trong phòng
• Số người trong phòng >= 1: đóng thiết bị
• Số người trong phòng < 1: tắt thiết bị
- Mạch nút nhấn dùng để yêu cầu tắt / đóng thiết bị theo ý muốn của người trong phòng
• Port 0 : đây là port xuất nhập hai chiều, nữa chu kỳ là đường data và nữa chu kỳ kế là đường địa chỉ ( byte thấp) Em đã dùng port này để đọc giá trị đổi được từ ADC0809
• Port 2: dùng để giải mã LED và tạo TH chọn LED sáng
4 bit thấp nhất của port 2: p2.0, po2.1, p2.2, p2.3 dùng để đưa vào mạch giải mã LED 74247
2 bit kế tiếp : p2.4, p2.5 đưa vào mạch giải mã 741SD để tạo TH chọn LED nào sáng Do LED thuộc loại Anod chung nên chỉ LED nào có TH chọn LED ở mức thấp thì nó sẽ sáng Nghĩa là tín hiệu chọn LED sáng tích cực ở mức 0
P2.7 dùng để tạo một nút nhấn yêu cầu đóng cắt đèn Khi nút nhấn, P2.7 đưa xuống mức 0, chương trình phần mềm sẽ kiểm tra chân này xem nút có bị nhấn hay không
Trang 25 Tạo xung start cho ADC0809 ta dùng chân WR, đầu
CT ta đặt và xóa chân này sẽ tạo ra một xung kích cho ADC 0809 đổi và đợi cho đến khi ADC đổi xong
Tần số vào ADC0809 nhỏ hơn 12 MHz nên ta phải hạ tần số từ 12 MHz xuồng mức cần thiết : 12 MHz / 16 = 750 KHz Để làm việc này ta dùng IC 74393
Để tạo tín hiệu kích đóng các Relay ta dùng các chân P1.2, P1.4, P1.5 và P1.6
+ P1.2 : điều khiển Relay đóng / ngắt quạt
+ P1.4: điều khiển Relay đóng / ngắt đèn
+ P1.5 : điều khiển Relay đóng / ngắt nguồn điện khi xảy ra tình huống khẩn cấp.+ P1.6: điều khiển chuông
Đảm bảo các tín hiệu kích này có thể kích được các Relay đóng hoàn toàn, ta cho
các tín hiệu này đi qua IC đệm 74373
Chân T0 dùng để điều khiển phần xuất nhập data của vi xử lý
+ T0 = 0 : vi xử lý nhận dữ liệu từ PC
+ T0 = 1 : vi xử lý truyền dữ liệu về PC
Trang 26B Lưu đồ giải thuật và chương trình vi xử lí:
Lưu đồ giải thuật phải thực hiện được các chức năng như sau:
_ Đo nhiệt độ trong phòng và hiển thị nhiệt độ này lên Panel
_ Nhiệt độ cao hơn 800C thì báo động bằng chuông
_ Tự phát hiện ra khi nào thì trong phòng có người thì tự bật đèn và quạt lên._ Tự phát hiện khi nào trong phòng không còn thì tắt các đèn và quạt đi
_ Khi có người đi vào phòng mà không qua cửa chính thì sẽ cho đó là trộm và báo động bằng chuông
I Lưu đồ giải thuật điều khiển :
_ Giải thuật chương trình chính
_ Giải thuật chương trình đo nhiệt độ và hiển thị lên Panel
_ Giải thuật chương trình tự phát hiện người đi vào hay ra qua cử chính
_ Giải thuật chương trình điều khiển các thiết bị trong phòng
_ Giải thuật chương trình phát hiện người vào phòng không qua cửa chính
_ Giải thuật chương trình truyền nhận dữ liệu từ máy tính
1 Giải thuật chương trình chính:
Khi nút Reset được nhấn thì chương trình sẽ nhảy đến địa chỉ 0000h Khởi động các thanh ghi điều khiển và các ô nhớ cần thiết Trong chương trình chính gồm có:
• Kích khởi ADC 0809 chuyển đổi
• Delay chờ ADC đổi xong
• Đọc dữ liệu từ ADC về, xử lí và hiển thị lên LED 7 đoạn
• Kiểm tra tiếp trạng thái các thiết bị
• Kiểm tra các nút nhấn có được nhấn hay không Khi đã thực hiện xong chu trình trên thì vi xử lí sẽ quay trở lai kích khởi ADC đổi lần tiếp theo
• Kiểm tra xem nhiệt độ trong phòng đang nằm trong tầm nào để gọi các chương trình con phục vụ tương ứng:
500C≤nhiệt độ ≤ 800C: gọi chương trình con CHUONG1
800C ≤nhiệt độ ≤ 1000C: gọi chương trình con CHUONG2
Nhiệt độ ≥ 1000C: gọi chương trình con CHUONG3
• Cấm ngắt truyền, chỉ cho phép vi xử lí nhận, chỉ được phép truyền khi PC yêu cầu
Trang 27Cho phép đổi AD
Đọc giátrị từ AD
Hiển thị nhiệt độ
So sánh với các nhiệt
Trang 28Lưu đồ giải thuật chương trình chính
Giao tiếp
Đúng địa chỉ
Bật tắt các thiết bị
Nhận lệnh
Truyền dữ liệu Bật tắt các thiết bị
MAIN
Trang 29Gọi Chuong3Tắt nguồn
So sánh
Cất dữ liệu từ ADC 0809
vào thanh ghi A
Trang 30Kiểm tra nút nhấn
Y
N
Lưu đồ giải thuật chương trình con kiểm tra nút nhấn.
Chương trình này dùng để cho phép người dùng có thể yêu cầu tắt mở các thiết bị theo ý muốn
Giải thích:
• P2.7 =0: nghĩa là nút yêu cầu tắt quạt được nhấn Lúc này vi xử lí sẽ kiểm tra tín hiệu hồi tiếp từ quạt về- chân P1.3 của Port1
P1.3=1: quạt đang ở trạng thái đóng, yêu cầu vi xử lí thực hiện việc kích ngắt quạt
P1.3=0: quạt đang ở trạng thái ngắt, yêu cầu vi xử lí thực hiện việc kích ngắt quạt
• P1.7=0 : nghĩa là nút yêu cầu tắt mở đèn được nhấn Lúc này vi xử lí kiểm tra tín hiệu hồi tiếp về từ đèn- chân P3.5 của Port3
Trang 31 P3.5=1: đèn đang đóng, yêu cầu vi xử lí tắt đèn
P3.5=0: đèn đang tắt, yêu cầu vi xử lí kích đóng đèn
Trang 32P2.7=
0P1.7=
Set cờ yêu cầu
Tắt quạtMở quạt
Lưu đồ giải thuật chương trình con Request
Trang 33Chương trình phần mềm sẽ mặc định số người trong phòng khi reset chương trình là 1 người Ta cũng dễ dàng thay đổi số người mặc định bằng cách thay đổi chương trình phần mềm.
Chính vì mặc định là số người trong phòng lớn hơn 1, nên khi reset thì vi xử lí sẽ kích đóng các thiết bị ngay Vi xử lí sẽ hoạt đông theo chương trình một cách hoàn hảo khi ta không tác động yêu cầu từ bên ngoài Có thể giải thích rõ ràng hơn điều này như sau:
Đầu tiên chương trình sẽ thực hiên việc đóng các thiết bị trong chu kỳ chạy đầu tiên Giả sử người trong phòng muốn tắt đèn, thì người ta sẽ nhấn nút yêu cầu tắt đèn, khi đó vi xử lí sẽ ra lệnh kích ngắt đèn Tín hiệu hồi tiếp về từ đèn là mức thấp,
vi xử lí sẽ hiểu là đèn đang ở trạng thái ngắt Đến chu trình quét tiếp theo, vi xử lí sẽ lại kiểm tra ô nhớ 30H- ô nhớ lưu số người trong phòng- và nhận thấy số ngươi trong phòng lớn hơn 1 nhưng đèn lại tắt, nó lại ra lệnh kích đóng đèn trở lại Điều này sẽ dẫn đến việc ta không thể có thể thiệp đóng ngắt các thiết
bị theo ý muốn
Để tránh được điều này, ta dùng một ô nhớ trong vùng RAM của 8951 làm cờ yêu cầu Khi có nút yêu cầu đóng ngắt thiết bị nào được nhấn thì cờ yêu cầu này sẽ được set để đánh dấu cho vi xử lí biết là đến chu trình chạy kế tiếp nó sẽ không cần kích đóng các thiết bị trong phòng mặc dù thiết bị đang ngắt cũng như trong phòng đang có người
2 Giải thuật chương trình phát hiện người vào ra phòng:
Để thực hiện chức năng này ta dùng ngắt ngoài 1 của vi xử lý Khi có người đi qua thì cảm biến quang sẽ tác động, gây ra một ngắt trong chương trình vi xử lý Dựa vào cảm biến quang nào tác động trước thì ta sẽ biết người vào hay ra
Đây là chương trình con mô phỏng cảm biến quang dùng để đếm số người trong phòng và dựa theo số người hiện tại trong phòng là bao nhiêu người mà vi xử lí sẽ gọi chương trình con phục vụ tương ứng Chương trình này dùng 3 cờ để nhận biết trạng thái cảm biến quang nào tác động trước, cảm biến nào tác sau
Trang 34Sơ đồ khối trên cho thấy cách hoạt động của hai cảm biến quang đếm người Tín hiệu ra từ hai cảm biến quang này được đưa vào chân P1.0 và P1.1 của vi xử lí 89C51 khi một trong hai cảm biến quang này tác động thì nó sẽ gây ra một ngắt ngoài Lí do để dùng ngắt ngoài là giúp cho vi xử lí hoạt động một cách chính xác khi có người vào hay ra Ta đưa hai tín hiệu ở ngõ ra của hai cảm biến quang này đi qua một mạch logic AND Chỉ cần một cảm biến tác động thì tín hiệu ra của mạch AND sẽ ở mức 0.
Khi ngắt ngoài một1 xảy ra thì ta không thể biết được cảm biến quang nào tác động trước, cảm biến quang naào tác động sau Thứ tự tác của hai cảm biến trên sẽ cho ta biết là người đó đi ra hay đi vào
Cảm biến quang 1 Cảm biến quang 2 Trạng thái vi xử lí hiểu
Bảng mô tả hoạt động của hai cảm biến quang phát hiện người.
Ta cần dùng đến 3 cờ để xác định thứ tự tác động của các cảm biến quang Các cờ này được đặt tên như sau:
Cờ 1: địa chỉ ô nhớ là 2BH
Cờ 2: địa chỉ ô nhớ là 2CH
Cờ 3: địa chỉ ô nhớ là 2DHCả 3 cờ này dùng để đánh dấu chân nào của vi xử lí được quét trước, chân nào chưa được quét Nguyên nhân, do ta cần kiểm tra một lúc cả hai chân của vi xử lí –P1.0 và P1.1 để phát hiện chân nào xuống mức 0 trước, mà vi xử lí thì chỉ có thể kiểm tra từ trên xuống Khi vi xử lí nhảy đến chương trình phục vụ ngắt này nó sẽ kiểm tra chân P1.0 đầu tiên, nếu chân này ở mức 1 nghĩa là cảm biến quang thứ 2 tác động
LED phát
LED thu
Đi vào
P1.0 Cảm biến quang 1
Trang 35trước Sau đó vi xử lí sẽ nhảy xuống kiêm tra chân P1.1 và lại nhạy lên kiểm tra chân P0.0 lần nữa Các cờ này còn được dùng để tránh cho các cảm biến quang tác động sai do nhiễu Giả sử xảy ra trường hợp chỉ có một trong hai cảm biến quang tác động thì chương trình sẽ dựa vào trạng thái các cờ này mà thoát khỏi chương trình phục vụ ngắt để quay về chương trình chính.
Trang 36Cờ 3=1