ời mở đầu. Trang 1
Chương 1: CƠ SỞLÝ THUYẾT . Trang 2
1.1 Giới thiệu sơlược vềvi điều khiển AVR . .Trang 2
1.1.1 Giới thiệu . Trang 2
1.1.2 ATmega32. Trang 3
1.1.3 Đặc tính của ATmega32. Trang 4
1.1.3.1 Cổng vào ra . Trang 7
1.1.3.2 Cấu trúc bộnhớ.Trang 10
1.2 Ngôn ngữlập trình cho AVR. Trang 13
1.3 Giới thiệu BasCom AVR. Trang 14
1.4 Giới thiệu sơlược vềVisual Basic . Trang 15
1.2.1 Giới thiệu . Trang 15
1.2.2 Các bước xây dựng một chương trình . Trang 23
1.5 Cảm biến áp lực . Trang 24
1.6 Giới thiệu GPRS Modem G2403R . Trang 26
Chương 2: THỰC TRẠNG TẠI CÔNG TY . Trang 29
Chương 3: GIẢI PHÁP VÀ HOÀN THIỆN. Trang 30
3.1 Bộphận phát .Trang 31
3.1.1 Nguyên lý hoạt động. Tang 31
3.1.2 Thiết kếphần cứng. Trang 31
3.1.2.1 Mạch nguồn ổn áp . Trang 31
3.1.2.2 Mạch RCV420 chuyển đổi dòng sang áp. Trang 36
3.1.2.3 Mạch nạp AVR. Trang 37
3.1.2.4 Mạch ứng dụng AVR ATmega32 . Trang 38
3.1.3 Thiết kếphần mềm . Trang 42
3.2 Bộphận thu .Trang 59
3.2.1 Nguyên lý hoạt động. Trang 59
3.2.2 Giao diện với máy tính . Trang 60
PHẦN KẾT LUẬN VÀ KIẾN NGHỊVỀNỘI DUNG NGHIÊN CỨU TIẾP
THEO . Trang 75
Ý NGHĨA KHOA HỌC. Trang 76
ỨNG DỤNG THỰC TIỄN . Trang 77
DANH MỤC TÀI LIỆU THAM KHẢO. Trang 78
PHỤLỤC. Trang 79
90 trang |
Chia sẻ: lethao | Lượt xem: 2643 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đề tài Truyền dữ liệu lưu lượng và áp lực nước qua tin nhắn SMS, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lay nhiều controls hơn bằng cách chọn Components... Từ context menu (chọn
Toolbox rồi bấm nút phải của mouse để display context menu) hay dùng menu
command Project | Components. Ngoài việc trình bày Toolbox mặc định, bạn có thể
tạo cách trình bày khác bằng cách chọn Add Tab... từ context menu và bổ sung các
control cho tab từ kết quả.
Hình 1.11 Toolbox
• Project Explorer
Sẽ liệt kê các forms và các modules trong project hiện hành của bạn. Một
project là sự tập hợp các files mà bạn sử dụng để tạo một trình ứng dụng. Tức là,
trong VB6, khi nói viết một program có nghĩa là triển khai một project.
• Properties window
Liệt kê các đặc tính của các forms hoặc controls được chọn. Một property là
một đặc tính của một object chẳng hạn như size, caption, hoặc color. Khi bạn sửa
đổi một property bạn sẽ thấy hiệu quả ngay lập tức, thí dụ thay đổi property Font
của một Label sẽ thấy Label ấy được display bằng Font chữ mới. Khi bạn chọn
một Property của control hay form trong Properties window, phía bên phải ở chỗ
value của property có thể display ba chấm (. . .) hay một tam giác chỉa xuống.
Bấm vào đó để display một dialog cho bạn chọn value. Thí dụ dưới đây là dialog
để chọn màu cho property ForeColor của control Label1.
Hình 1.12 Properties
• Form Layout
Bạn dùng form Layout để chỉnh vị trí của các forms khi form hiện ra lần đầu
lúc chương trình chạy. Dùng context command Resolution Guides để thấy nếu
dùng một màn ảnh với độ mịn (resolution) tệ hơn, thí dụ như 640 X 480, thì nó sẽ
nhỏ như thế nào.
Hình 1.13 Form layout
• Form Designer
Dùng để thiết kế giao diện lập trình. Bạn bổ sung các controls, các đồ họa
(graphics), các hình ảnh và một form để tạo sự ma sát mà bạn muốn. Mỗi form
trong trình ứng dụng của bạn có designer form riêng của nó. Khi bạn maximise
một form designer, nó chiếm cả khu làm việc. Muốn làm cho nó trở lại cở bình
thường và đồng thời để thấy các form designers khác, click nút Restore Window ở
góc bên phải, phía trên.
Hình 1.14 Designer
• Immediate Window
Dùng để gở rối (debug) trình ứng dụng của bạn. Bạn có thể display dữ kiện
trong khi chạy chương trình ứng dụng. Khi chương trình đang tạm ngừng ở một
break point, bạn có thể thay đổi giá trị các variables hay chạy một dòng chương
trình.
• View Code button
Click đôi vào form để xem code của một form mà bạn đã chọn. Window của
code giống như dưới đây:
Hình 1.15 Giao diện viết code
Trong Code window bạn có thể chọn display tất cả Sub của code cùng một
lúc như trong hình hay display mỗi lần chỉ một Sub bằng cách click button nằm ở
góc bên trái phía dưới.
• View form button
Click đôi vào form muốn xem để xem form mà bạn đã chọn.
Trong hình dưới đây, Properties Window và Form Layout đã được kéo ra
ngoài cho floating.
Hình 1.16 Properties Window và Form Layout.
Ưu điểm:
- Tiết kiệm được thời gian và công sức so với một số ngôn ngữ lập trình có
cấu trúc khác vì bạn có thể thiết lập các hoạt động trên từng đối tượng được VB
cung cấp.
- Khi thiết kế chương trình có thể thấy ngay kết quả qua từng thao tác và giao
diện khi thi hành chương trình.
- Cho phép chỉnh sửa dễ dàng, đơn giản.
- Làm việc với các điều khiển mới (ngày tháng với điều khiển MonthView và
DataTimePicker, các thanh công cụ có thể di chuyển được CoolBar, sử dụng đồ
họa với ImageCombo, thanh cuộn FlatScrollBar,…).
- Làm việc với cơ sở dữ liệu.
- Các bổ sung về lập trình hướng đối tượng.
- Khả năng kết hợp với các thư viện liên kết động DLL.
• Nhược điểm:
- Yêu cầu cấu hình máy khá cao.
- Chỉ chạy được trên môi trường Win95 trở lên.
1.4.2. Các bước xây dựng một chương trình:
Để xây dựng một chương trình ứng dụng cần thực hiện theo các bước sau
đây:
• Bước 1: Phân tích bài toán
Là quá trình tìm hiểu bài toán, xác định các dữ kiện nhập, dữ kiện xuất và
đi tìm một giải thuật thích hợp nhất. Bước này cần thực hiện trên giấy cho rõ ràng
để tạo thói quen lập trình tốt.
• Bước 2: Thiết kế giao diện
Người lập trình phải thiết kế giao diện thích hợp cho việc nhập, xuất dữ liệu,
cần chú ý đến cách trang trí, cách bố trí, thứ tự, màu sắc, …
• Bước 3: Thiết kế chương trình
Là bước viết chương trình dựa trên giải thuật đã xây dựng ở bước 1, chạy
thử chương trình để kiểm tra, phát hiện các lỗi đặc biệt và sửa chữa.
• Bước 4: Cải tiến
Đây là bước hoàn thiện chương trình ở mức độ cao hơn.
1.5. Cảm biến áp lực
.
Hình1.17 Cảm biến áp lực
Thiết kế để sử dụng trong công nghiệp nặng.
• Áp lực trong phạm vi đo (tương đối) hay tuyệt đối từ 0 đến 600 bar
• Tất cả các tín hiệu đầu ra tiêu chuẩn: 4-20 mA, 0-5 V,1-5 V, 1-6 V, 0-10
V, 1-10 V.
Mô tả Áp lực nhỏ gọn truyền MBS 3000 được thiết kế để sử dụng trong hầu
hết tất cả công nghiệp ứng dụng, và là một áp lực đáng tin cậy đo lường, ngay cả
trong môi trường khắc nghiệt điều kiện.
Áp lực có các dạng tín hiệu đầu ra khác nhau, tuyệt đối và gauge (tương
đối) phiên bản, đo khoảng từ 0-1 tới 000-600 bar và nhiều áp lực và kết nối điện.
Độ rung động ổn định, mạnh mẽ xây dựng,và một mức độ cao của EMC /
EMI trang bị bảo hộ các bộ truyền áp lực để đáp ứng nhất nghiêm ngặt các yêu
cầu công nghiệp.
Ngõ ra tín hiệu: 4-20 mA
Độ chính xác (bao gồm cả phi linearity, hysteresis và lặp)
± 0.5% FS (typ.)
± 1% FS (tối đa)
Non-linearity BFSL (phù hợp) ≤ ± 0.5% FS
Từ trễ và lặp ≤ ± 0.1% FS
Nhiệt điểm số không thay đổi
≤ ± 0,1% FS/10K (typ.)
≤ ± 0,2% FS/10K (tối đa)
Nhiệt độ nhạy (span) chuyển dịch
≤ ± 0,1% FS/10K (typ.)
≤ ± 0,2% FS/10K (tối đa)
Thời gian đáp ứng <4 ms
Áp lực quá tải (tĩnh) 6 × FS (tối đa 1500 bar)
Burst áp lực> 6 × FS (tối đa 2000 bar).
Hình 1.18 Sơ đồ kết nối điện
1.6. Giới thiệu GPRS Modem G2403R
Hình1.19 GPRS Modem G2403R
Giao tiếp với máy tính: Kết nối thông qua cổng RS232 (COM)
Để test ta có thể dùng các chương trình cổng COM như HyperTerminal,
Terminal… Hoặc dùng các chương trình lập trình Visual Basic, Visuall C để lập
trình.
Giao tiếp với vi điều khiển: Dùng các chân TX (truyền) và RX (nhận). Sử
dụng chức năng uart của vi điều khiển để giao tiếp với module.
Quá trình trao đổi dữ liệu giữa máy tính và Modem được thực hiện theo cơ
chế bắt tay phần cứng hay phần mềm.
Quy tắc truyền lệnh trên Modem:
- Mỗi dòng lệnh của modem bắt đầu bằng ký tự AT.
- Dòng lệnh có thể chứa nhiều lệnh.
- Kết thúc lệnh bằng ký tự Enter (mã ASCII là 13).
- Dòng lệnh cuối cùng được lưu trong modem. Có thể dùng lệnh A/ để thực
hiện lại lệnh này.
- Thông báo kết quả thực hiện lệnh của modem có thể ở dạng từ chữ hay số
(giá trị mặc định là chữ). Có thể sử dụng lệnh V để lựa chọn dạng thông báo là chữ
hay số.
- Để hoạt động đúng, modem cần có các thông số xác định. Nếu không có
sự thay đổi cần thiết, modem hoạt động theo giá trị mặc định(default). Nếu thông
số trong lệnh bị bỏ qua, giá trị thông số mặc định là 0.
Các lệnh AT dùng để gởi và nhận tin nhắn:
Một dòng lệnh cho phép bạn phát hành một số các lệnh tại một thời gian
chứ không phải là ban hành và phải chờ đợi cho modem để phản ứng với mỗi lệnh
riêng rẽ. Dưới đây là một số nguyên tắc mà bạn phải tuân theo khi phát hành một
dòng lệnh vào modem.
• Mỗi dòng lệnh phải bắt đầu bằng các chữ AT.
• Bởi vì tất cả các không gian được bỏ qua trong các dòng lệnh, bạn
có thể để lại dấu cách giữa mỗi lệnh, và giữa mỗi ký tự của tất cả các lệnh. Bạn
cũng có thể bao gồm các dấu chấm câu trong số điện thoại, và gõ lệnh, hoặc trong
UPPER-hay chữ thườngVí dụ, lệnh sau đây là giống nhau:
ATDT8005551234 hay atdt (800) 876-5555
• Để hủy bỏ một lệnh thọai trong tiến trình, bấm phím bất kỳ trên bàn
phím.
• Nếu bạn thực hiện một lỗi, Backspace để xoá nó, và Nhập lại các ký
Để thực hiện các dòng lệnh, bấm hoặc trên bàn phím
của bạn.
• AT + CMGR: Đọc Tin nhắn
• AT + CMGS: Gửi tin nhắn
• AT + CMGD: Xóa tin nhắn.
• AT + CMGW: Viết tin nhắn vào bộ nhớ
• AT + CMSS: Gửi tin nhắn từ bộ nhớ
• AT + CMGF = 1 : kiểm tra modem hỗ trợ chế độ văn bản
• AT + CPIN = "0000" : Nếu modem chứa một thẻ SIM có
được bảo đảm bằng một mã PIN, chúng ta nhập vào mã pin bằng lệnh này.
Chương 2: THỰC TRẠNG TẠI CÔNG TY
Nước từ trạm bơm nước thô được bơm lên bể trộn Æ bể lắng Æ bể lọc Æ
bể chứa Æ bơm ra mạng.
Hiện nay, hầu hết các thiết bị đều được bán tự động và xu hướng trong
tương lai sẽ là tự động hóa, các quá trình được điều khiển và xử lý bởi hệ thống vi
tính. Điều này giúp cho việc quản lý chất lượng nước xử lý và phát hiện các sự cố
được chính xác hơn.
Tất cả các tín hiệu dừng máy, chạy máy, thông báo sự cố của thiết bị , tín
hiệu của thiết bị đo… đều được hiển thị trên màn hình SCADA. SCADA
(Supervisory Control and Data Acquisition) là hệ thống điều khiển, kiểm soát thu
thập dữ liệu.
Khi nhân viên ở các bộ phận khác cần xác định giá trị của dữ liệu lưu
lượng, áp… lực thì phải liên hệ đến phòng SCADA.
Nhưng nếu khi cần biết thì phải gọi điện đến phòng SCADA thì sẽ mất thời
gian, và khi gọi điện đến phòng SCADA mà không có nhân viên trực tại phòng thì
sao?
Hiện tại bộ truyền dữ liệu lưu lượng và áp lực của công ty được nhập từ
Đan Mạch với gía thành cao.
Chương 3: GIẢI PHÁP VÀ HOÀN THIỆN
Để giải quyết vấn để trên em xin đưa ra giải pháp của mình là ta có thể
dùng một hệ thống truyền dữ liệu qua tin nhắn SMS, sẽ khắc phục được những
khó khăn gặp phải khi cần dữ liệu.
Với ưu điểm :
Nhận được tín hiệu và các dữ liệu của lưu lượng, áp lực tại phòng SCADA.
Lấy giá trị tức thời, theo giờ, theo ngày.
Gía thành hợp lý.
Hình 3.1: Sơ đồ
khối hệ thống
3.1. Bộ phận phát:
3.1.1. Nguyên lý hoạt động:
Tín hiệu được lấy từ đồng hồ lưu lượng và cảm biến áp lực vào dưới
dạng dòng từ 4 – 20 mA sẽ được chuyển thành tín hiệu áp từ 0 – 5V thông qua
mạch chuyển đổi RCV420. Sau đó tín hiệu áp sẽ được đưa vào mạch vi điều khiển
AVR xử lí và chuyển tới modem phát để truyền tín hiệu về bộ thu.
3.1.2. Thiết kế phần cứng:
3.1.2.1. Mạch nguồn ổn áp:
Mạch điều khiển AVR
Modem thu
Modem phát
Giao tiếp với máy tính Giao tiếp với ĐTDĐ
Cảm biến áp lực Đồng hồ lưu lượng
Nguồn điện là thành phần không thể thiếu được trong các mạch điện tử và
nó đóng thành phần quan trọng ảnh hưởng tới hoạt động của mạch. Việc cung cấp
nguồn điện 1 chiều có điện áp 5V, 6V, 9V, 12V, 15V,18V, 24V để cung cấp cho
các thiết bị điện tử thông dụng chạy điện 1 chiều. Do ngoài thực tế nguồn điện
chúng ta không ổn định so với giá trị yêu cầu ở lý thuyết nên ổn áp lại 1 giá trị
điện áp đầu ra không thay đổi để cho mạch điện chúng ta hoạt động ổn định và
chính xác.
Thông thường có 2 phương pháp ổn áp :Ổn áp dùng IC số và ổn áp dùng
transitor kết hợn với zenner ổn áp. Ở đây chúng ta làm mạch ổn áp đơn giản dùng
họ 78xx với dòng điện >=1A.
• Sơ đồ mạch điện đơn giản
C1
J1
CON2
1
2
C2
T3
TRANSFORMER
1 5
4 8 D2
R1
+-
~
~
D1
VCC
LM 7805
1 2
3
in outgn
d
+ C4+ C3
Hình 3.2 Mạch nguồn 5V
• Các linh kiện:
LM 7805: IC ổn áp ra 5V.
J1: 220VAC
T3: biến thế
D1: diode cầu
D2: led
C1: 2200uF 16V
C2: tụ 104
C3:1000uF 10V
C4: tụ 104
R1: 303Ω
+15V
+
-
~ ~
D1
R1
7915
2
1
3IN G
N
D
OUT
1
2
3in
gn
d out
R2 -15V
C4
0V
15V
C3
15V C5
OV
J1
CON3
1
2
3
C6
C2
J2
CON3
1
2
3
7815
C1
Hình 3.3 Mạch nguồn ± 15V
• Các linh kiện:
J1: con 3: input
J2: con 3: output
D1: diode cầu.
C1:1000μF
C2: 1000μF
C3: 1000μFb
C4: 1000μF
C5: tụ 104
C6: tụ 104
R1: 6 Ω 5W
R2: 6 Ω 5W
7815: IC ổn áp 15V
7915: IC ổn áp 15V
• Phân tích mạch điện
Mạch điện gồm những phần sau : Hạ áp, chỉnh lưu, lọc, biến đổi (78xx).
Nguồn điện xoạy chiều 220VAC-50Hz qua biến áp là hạ áp xuống còn 24VAC -
1A và được qua bộ chỉnh lưu nhằm biến đổi điện xoay chiều thành điện 1 chiều.
Thành phần 1 chiều này có độ gợn nên phải qua bộ lọc C để san phảng điện áp
gợn đó cho ra điện áp 1 chiều. Sau đó điện áp 1 chiều này qua bộ ổn áp 78xx cho
ra điện áp ổn áp mà mình cần.
Hạ áp : Ở đây chúng ta biến đổi điện áp lưới 220VAC-50Hz xuống còn
24VAC - 1A. Mục đích là cấp đầy vào cho bộ biến đổi và bộ lọc để có điện áp một
chiều mong muốn.
Chỉnh lưu: Thành phần chỉnh lưu là biến đổi tín hiệu xoay chiều thành tín
hiệu 1 chiều thông qua 4 con diode chỉnh lưu. Đây là sơ đồ chỉnh lưu cả chu kì với
dạng sóng đầu vào và đầu ra sau chỉnh lưu như sau:
Hình 3.4 Sơ đồ chỉnh lưu
+ Điện áp đầu vào của bộ chỉnh lưu: Uv = 24sqrt2 = 34VDC.
+ Điện áp sụt áp trên cầu là : 34VDC - 1.5VDC = 32.5VDC (Do đi qua 2
diode nên mỗi diode bị sụt áp mất 0.7V).
+ Điện áp sau chỉnh lưu là : Ucl = 32.5 * 0.9 = 29VDC ( 0.9 là hệ số chỉnh
lưu của chỉnh luu cầu).
Dạng điện áp sau chỉnh lưu vẫn còn các sóng nhấp nhô như ngọn núi và dạng
điện áp này vẫn được coi là điện áp 1 chiều nhưng chưa ổn định.
Thành phần lọc :
Mạch này dùng lọc C cho đơn giản. Chúng ta có thể dùng mạch lọc RC,
CRC. Và ần phải quấn thêm cuộn cảm.
+ Tụ C1 và C3 lọc các thành phần điện áp nhấp nhô sau chỉnh lưu cho nó
bằng phẳng.
+ Tụ C2 và C4 lọc các thành phần cao tần.
Hình 3.5 Dạng điện áp sau khi qua bộ lọc.
Dựa vào nguyên tắc phóng nạp của tụ điện mà nó cho ra dòng điện 1 chiều
thằng như trên hình vẽ. Tụ càng lớn thì độ gợn điện áp càng giảm.
Những sóng có tần số cao tần phải được lọc đi nhờ 2 tụ kẹo C2 và C4 vì
trong mạch dùng IC nếu tồn tại những thành phần này thì sẽ gây ra những sai sót
khó phát hiện làm cho mạch hoạt động không bình thường.
Qua bộ lọc là ta đã tạo được điện áp 1 chiều cấp vào cho bộ biến đổi đổi
hay là bộ ổn áp.
Bộ ổn áp :
Hình 3.6 LM78xx
+ Dòng họ 78xx cho ra nhiều loại ổn áp điện khác nhau : như 7805 nó ổn
áp 5V, 7806 cho ổn áp 6V...
+ Điện áp đầu vào của họ 78xx là điện áp 1 chiều và max <=40V. Dòng
điện không vượt quá 1A
+ Đảm bảo thông số là : Vi - V0 = 2V đến 3V ( lúc đó mạch mới hoạt động
ổn áp được)
+ Tản nhiệt tốt cho 78xx. Khi hoạt động với tải thì 78xx rất nóng. Đối với
cấp điện áp là 29V thì 78xx nóng khi có tải và chúng ta chú ý tản nhiệt tốt cho nó.
3.1.2.2. Mạch RCV420 chuyển đổi dòng sang áp:
J1
1
2
3
C2-15V
J3
CON2
1
2
+15V
C4
OV
C3
J2
CON2
1
2
RCV 420
1
2
3
6
7
8 9
10
11
12
13
14
15
16
5
4
-IN
Ct
+IN
NC
RNR
Ref Trim NC
Ref Fb
Ref Out
Ref In
Rcv Com
Rcv Out
Rcv Fb
V+
Ref Com
V-
C1
Hình 3.7 Sơ đồ nguyên lý mạch RCV420.
Hình 3.8 Mạch RCV420.
• Các linh kiện:
J1: Con 3 :cấp nguồn ± 15V
J2: Con 2: đưa vào tín hiệu 4-20 mA
J3: Con 2: đưa ra tín hiệu 0-5V
C1: tụ 104
C2: tụ 10μF
C3: tụ 104
C4: tụ 10μF
RCV420: IC chuyên dụng chuyển dòng sang áp.
• Phân tích mạch điện
RCV420 là IC chuyên dụng, mạch RCV420 nhận tín hiệu ngõ vào từ 4 đến
20 mA sau đó chuyển đổi thành nguồn áp từ 0-5V. Các tụ C1, C2, C3 và C4 trong
mạch có nhiệm vụ lọc nguồn và chống nhiễu tín hiệu vào và ra cho mạch.
3.1.2.3. Mạch nạp AVR:
Hình 3.9 Sơ đồ nguyên lý mạch nạp AVR
Hình 3.10 Mạch nạp AVR.
3.1.2.4. Mạch ứng dụng AVR ATmega32:
VCC
J3
LC
D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
VCC
A
Tm
eg
a3
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PB0[T0]
PB1[T1 ]
PB2[AIN0]
PB3[AIN1]
PB4[SS]
PB5[MOSI]
PB6[MISO]
PB7[SCK]
/RST
VCC
GND
XTAL2
XTAL1
PD0[RXD]
PD1[TXD]
PD2[INT0]
PD3[INT1]
PD4[OC1B]
PD5[OC1A]
PD6[ICP] PD7
PC0
PC1
PC2
PC3
PC4
PC5
PC6[TOSC1]
PC7[TOSC2]
AVCC
AGND
AREF
PA7[ADC7]
PA6[ADC6]
PA5[ADC5]
PA4[ADC4]
PA3[ADC2]
PA2[ADC2]
PA1[ADC1]
PA0[ADC0]
+
C2
VCC
C8
VR
J1
1
2
3
4
5
Y2
DU
ON
G
NA
P
pin
R4
MAX232
16
1
3
14
13
7
8 9
10
11
12
5
4
26
15
V
C
C
C1+
C1-
/T1OUT
R1IN
/T2OUT
R2IN /R2OUT
T2IN
T1IN
/R1OUT
C2-
C2+
V+V-
G
N
D
R3
R5
J2
0-5V
1
2
R6
VCC
R2
DS1307
8
7
6
54
3
2
1
VCC
SQW/OUT
SCL
SDAGND
Vbat
X2
X1
VCC
C6
VCC
C7
+ C1
VCC
R7
D1
LED
+
C4
+C3
R8
Y1
+ C5
VCC
U1
C
O
N
G
C
O
M 2
3
5
RXD
TXD
GND
R1
Hình 3.11 Sơ đồ nguyên lý mạch ứng dụng AVR.
Hình 3.12 Mạch AVR.
• Các linh kiện:
J1: con 5 đường nạp chương trình cho AVR.
J2: con 2 đưa vào tín hiệu 0-5V.
J3: con 16 kết nối hiện thị ra LCD.
Y1: thạch anh 11MHz.
Y2: thạch anh
D1: led
R1: điện trở 10K
R2: điện trở 10K
R3: điện trở 10K
R4: điện trở 10K
R5: điện trở 10K
R6: điện trở 100Ω
R7: điện trở 10K
R8: điện trở 330Ω
VR: biến trở
C1: 10 uF
C2: 10uF
C3: 10uF
C4: 10uF
C5: 10uF
C6: tụ 104
C7: tụ 22
C8: tụ 22
U1: cổng com
DS1307: dalad
MAX232: IC
ATmega32: IC vi điều khiển.
• Phân tích mạch điện
Các chân nguồn cho chip: bạn cần cấp nguồn và mass cho chip, bạn phải
nối chân VCC (chân 10 của chip ATmega32), và AVCC (chân 30) với nguồn
VCC, nối các chân GND và AGND với mass.
- Các đường nạp chip: chúng ta dành sẵn các đường này để có thể kết nói với
các mạch nạp mà không cần tháo chip khỏi mạch ứng dụng. Bạn nên bố trí các
đường này theo thứ tự mà mạch nạp của bạn được bố trí (ví dụ GND, VCC,
RESET, SCK, MISO, MOSI).
- Bộ tạo dao động - Thạch anh (Crystal): đây là nguồn xung giữ nhịp "nuôi"
chip, không có xung giữ nhịp chip sẽ không hoạt động. Tuy nhiên, đa số các chip
AVR đều hỗ trợ nguồn xung giữ nhịp bên trong với tần số tối ta 8MHz. Nếu bạn
thấy không cần thiết đến tần số hoạt động cao bạn có thể dùng nguồn xung giữ
nhịp trong chip, khi đó bạn có thể bỏ qua bộ tạo xung (gồm thạch anh và 2 tụ điện
như trong hình). Việc chọn nguồn xung "nuôi" chip được xác lập bởi các Fuse
bits. Một chú ý khác là trên dòng chip ATmega, fuse bits được set mặc định để sử
dụng nguồn xung nội 1MHz, vì thế với các chip này, khi mới mua về bạn có thể
không cần dùng thạch anh ngoài. Nhưng một khi bạn đã set fuse bits để chọn
nguồn xung ngoài thì không được bỏ qua mạch thạch anh này. (Các chip
AT90S..mặc định lấy nguồn xung ngoài).
- Chân AREF là chân điện áp tham chiếu cho các bộ ADC.
Đối với các chip AVR khác, bạn có thể tạo mạch ứng dụng theo cách tương tự
như mạch điện này.
• UART viết tắt của Universal Asynchronous Receiver – Transmitter
– thường là một mạch tích hợp được sử dụng trong việc truyền dẫn dữ
liệu nối tiếp giữa máy tính và thiết bị ngoại vi thông qua cổng nối tiếp.
Rất nhiều vi điều khiển hiện nay đã tích hợp UART. Để bắt đầu việc
truyền dữ liệu bằng UART, một start bit được gửi đi, sau đó là 5-8 bit
dữ liệu, sau đó là stop bit. Start bit có trạng thái ngược với trạng thái
bình thường của đường truyền dữ liệu. Stop bit có cùng trạng thái với
trạng thái bình thường của đường truyền dữ liệu. Tốc độ của UART
được quy định bởi tốc độ baud. Một số interface chuẩn của UART là
EIA, RS 232, RS 422 và RS 485.
• Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry
Associations). Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ -
3V đến -25V (mark), mức logic 0 ứng với điện áp từ 3V đến 25V
(space) và có khả năng cung cấp dòng từ 10 mA đến 20 mA. Ngoài ra,
tất cả các ngõ ra đều có đặc tính chống chập mạch. Chuẩn RS-232 cho
phép truyền tín hiệu với tốc độ đến 20.000 bps nhưng nếu cáp truyền đủ
ngắn có thể lên đến 115.200 bps.
• Truyền nhận nối tiếp theo chuẩn UART, các đường truyền TXD và
RXD luôn ở bit 1 (5V theo chuẩn TTL). Đến khi có tín hiệu được truyền
thì đường truyền được hạ xuống bit 0 ( 0V theo chuẩn TTL) để bắt đầu
bit START. Chuẩn RS-232 qui định bit 1 là mức áp thấp từ -3V đến -
12V, bit 0 là mức áp cao từ +3V đến +12V. Chuẩn TTL lại qui định
ngược lại, bit 1 là mức áp cao ( tối đa +5V), bit 0 là mức áp thấp (thấp
nhất là 0V). Do đó ở đây ta qui ước mức cao là áp dương +5V hay
+12V, mức thấp là áp âm -12V hay 0V.
3.1.3. Thiết kế phần mềm:
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
'some subroutines
Declare Sub Getline(s As String)
Declare Sub Getline1(s As String)
Declare Sub Flushbuf()
Declare Sub Showsms(s As String )
$lib "ds1307clock.lib" ' modified lib
'used variables
Dim Bit_tang_ngay As Bit
Dim I As Byte , B As Byte , Weekday As Byte , Addr As Byte , Value As
Byte , K As Byte , Num_sms As Word
Dim W0 As Word , W1 As Word
Dim Kenh0(24) As Word , Kenh1(24) As Word
Dim Sret As String * 6 , Stemp As String * 16
Dim S_data As String * 16 , S_number As String * 5
Dim Number_phone As String * 30 , Number_tong_dai As String * 15
‘we use a serial input buffer
'Config Serialin = Buffered , Size = 12 ' buffer is small a
bigger chip would allow a bigger buffer
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7
= Portc.3 , E = Portc.4 , Rs = Portc.5
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Sda = Portc.7
Config Scl = Portc.6
Config Clock = User ' this will dim the bytes
automatic
Config Int0 = Falling
'define a constant to enable LCD feedback
Const Pincode = "AT+CPIN=1234" ' pincode change it
into yours!
Const So_Thoa = "AT+CMGS=+84907039071"
Const Khau_lenh = "SENDDATA"
Const Khau_lenh1 = "SENDALLDATA"
Const Ma_gui_sms = "AT+CMGS="
Const Baudrate_115200 = 51
Const Baudrate_19200 = 350
Const Baudrate_9600 = 22
Const Ds1307w = &HEF ' Addresses of Ds1307
clock
Const Ds1307r = &HD4
On Int0 Isr_int0
'enable the interrupts because the serial input buffer works interrupts driven
Ddrd.3 = 0
Ddra.0 = 0
Ddra.1 = 0 ' input adc
Cls
Start Adc
'wait until the mode is ready after power up
'Wait 15
Ubrrl = Baudrate_115200
Do
Wait 1
Print Chr(27) ' ma thoat ra khoi bi treo
Waitms 200
Print "ATE0"
Getline Stemp
Loop Until Stemp = "OK"
Lcd "SMS READY"
'Gosub Khoi_tao_ds1307
For I = 1 To 24
K = I * 2
Readeeprom Kenh0(i) , K
If Kenh0(i) > 999 Then
Kenh0(i) = 0
End If
K = K + 48
Readeeprom Kenh1(i) , K
If Kenh1(i) > 999 Then
Kenh1(i) = 0
End If
Next I
Gosub Getdatetime
Enable Interrupts
Enable Int0
Main:
Do
Main1:
Getline Sret ' wait for a modem response
Cls
Lcd "Msg from modem"
Home Lower : Lcd Sret
Waitms 500
If Sret = "RING" Then
Goto Main1
End If
I = Instr(sret , ":") ' look for :
If I > 0 Then 'found it
Stemp = Left(sret , I)
Select Case Stemp
Case "+CMTI:" : Showsms Sret ' we received an SMS
' hanle other cases here
End Select
End If
Loop ' for ever
End
'end program
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ht_time
Ht_time:
Bit_tang_ngay = 0
Locate 2 , 1
Lcd " "
Locate 2 , 3
Lcd _hour ; ":" ; _min ; ":" ; _sec
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXX CHUONG TRINH
TEST SO PHONE GUI TOI
Lay_num_phone:
I = Instr(s_number , ",")
I = I + 2
Number_phone = Mid(s_number , I)
I = Instr(number_phone , ",")
I = I - 2
Number_phone = Left(number_phone , I)
S_data = Ucase(s_data) ' chuyen thanh chu hoa het
If S_data = Khau_lenh Then
W0 = Getadc(0) : W1 = Getadc(1)
Print "AT+CMGS=" ; Number_phone
Cls
Wait 2
S_data = "MODEM GUI VE: LUU LUONG: "
Sret = Str(w0)
S_data = S_data + Sret
S_data = S_data + " AP LUC: "
Sret = Str(w1)
S_data = S_data + Sret
S_data = S_data + " TIME: "
S_data = S_data + Time$
S_data = S_data + " DATE: "
S_data = S_data + Date$
Print S_data
Elseif S_data = Khau_lenh1 Then
Bit_tang_ngay = 1
Locate 2 , 1
Lcd "yeu cau alldata"
Gosub Thu_data
Else
I = Instr(s_data , " ")
Decr I
Number_phone = Left(s_data , I)
If Number_phone = "DOISO" Then
I = I + 2
Number_tong_dai = Mid(s_data , I)
Writeeeprom Number_tong_dai , 300
Cls
Lcd "DOI SO MOI"
Locate 2 , 1
Lcd Number_tong_dai
End If
End If
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Doi_baudrate:
Print "AT+IPR?"
Getline Stemp
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd Stemp
'Do
'Loop Until Stemp = "OK"
Print "ATE0"
Waitms 100
Print "AT+IPR=9600"
Waitms 500
Ubrr = Baudrate_9600
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Delete_sms:
Cls
Lcd "DANG XOA SMS"
For I = 1 To 100
Print "AT+CMGD=" ; I
Getline Sret
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd Sret ; " " ; I
Next I
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Getdatetime
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte _sec , Ack
I2crbyte _min , Ack ' MINUTES
I2crbyte _hour , Ack ' Hours
I2crbyte Weekday , Ack ' Day of Week
I2crbyte _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour =
Makedec(_hour)
Weekday = Makedec(weekday) : _day = Makedec(_day) : _month =
Makedec(_month) : _year = Makedec(_year)
Return
'XXXXXXX
Các file đính kèm theo tài liệu này:
- bao_cao_NCKH.pdf
- bai_bao.pdf