Vì 7 thanh ghi đầu tiên là quan trọng nhất trong hoạt động của DS1307 nên chúng ta sẽ khảo sát các thanh ghi này một cách chi tiết. Tổ chức theo từng bit của các thanh ghi nhƣ sau:
Hình 35: Cấu trúc thanh ghi DS1307.
Thanh ghi giây (SECONDS): Thanh ghi này là thanh ghi đầu tiên trong bộ nhớ của DS1307, địa chỉ của nó là 0x00. 4 bits thấp của thanh ghi này chứa mã BCD 4 bits của chữ số hàng đơn vị của giá trị giây. Do giá trị cao nhất của chữ số chàng chục là 5 nên chỉ cần 3 bit(SECONDS6…4) là có thể mã hóa đƣợc(5=101). Bit cao nhất, bit 7 trong thanh ghi này là 1bit điều khiển có tên CH (Clock halt-treo đồng hồ), nếu bit này đƣợc set bằng 1 thì bộ dao động trong chip bị vô hiệu hóa, đồng hồ không hoạt động. Vì vậy, nhất thiết phải reset bit này xuống 0 ngay từ đầu.
Thanh ghi phút (MINUTES): Có địa chỉ 0x01, chứa giá trị phút của đồng hồ.Tƣơng tự nhƣ thanh ghi SECONDS, chỉ có 7 bit của thanh ghi này đƣợc dùng lƣu
Thanh ghi giờ (HOURS): Có thể nói đây là thanh ghi phức tạp nhất trong DS1307.Thanh ghi này có địa chỉ 0x02. Bốn bit thấp của thanh ghi này dùng cho chữ số hàng đơn vị của giờ. Do DS1307 hỗ trợ 2 loại mode hiển thị giờ là 12h và 24h, bit thứ 6 trong thanh ghi giờ dùng để xác lập mode giờ. Nếu bit 6=0 thì hệ thống 24h đƣợc chọn, khi đó 2 bit cao 5 và 4 dùng để mã hóa chữ số hàng chục của giá trị giờ, do giá trị giờ lớn nhất trong mode này là 2 (bằng 10 hệ nhị phân). Nếu bit 6=1, thì mode 12h đƣợc lựa chọn, trong trƣờng hợp này chỉ có bit 4 dùng để mã hóa chữ số hàng chục của giá trị giờ, bit 5 dùng để chỉ buổi trong ngày AM hoặc PM. Bit 5=0 là AM và ngƣợc lại. Bit 7 luôn =0.
Thanh ghi thứ (DAY): Nằm ở địa chỉ 0x03. Thanh ghi DAY chỉ mang giá trị
từ 1 đến 7 tƣơng ứng từ chủ nhật đến thứ 7 trong 1 tuần. Vì thế chỉ có 3 bit thấp có nghĩa.
Các thanh ghi còn lại có cấu trúc tƣơng tự, DATE chứa ngày trong tháng (1 đến 31), MONTH chứa tháng (1 đến 12) và YEAR chứa năm(từ 0 đến 99). Chú ý, DS1307 chỉ dùng cho 100 năm, nên giá trị năm chỉ có 2 chữ số còn phần đầu của năm do ngƣời dùng tự thêm vào(20xx).
Ngoài ra, các thanh ghi trong bộ nhớ, DS1307 còn có một thanh ghi khác nằm riêng gọi là con trỏ địa chỉ hay thanh ghi địa chỉ (Address Register). Giá trị của thanh ghi này là địa chỉ của thanh ghi trong bộ nhớ mà ngƣời dùng muốn truy cập. Giá trị của thanh ghi địa chỉ đƣợc set trong lệnh Write.
Vì DS1307 là một Slave I2C nên chỉ có 2 mode hoạt động giao tiếp với chip này. 2 mode của DS1307 bao gồm Data Write và Data Read. Mode Data Write đƣợc dùng khi xác lập giá trị ban đầu cho các thanh ghi thời gian hoặc dùng để canh chỉnh thời gian. Trong chế độ này, AVR là một Master truyền dữ liệu đến DS1307 (Slave nhận dữ liệu). Mode Data Read đƣợc sử dụng khi đọc thời gian từ đồng hồ DS1307 vào AVR để hiển thị hoặc so sánh. Trong chế độ này, AVR là 1 Master nhận dữ liệu và DS1307 là Slave truyền dữ liệu.
Hình sau đây mô tả cấu trúc dữ liệu trong chế độ Data Write:
CHƢƠNG IV
THIẾT KẾ VÀ THI CÔNG
4.1. Phƣơng án thiết kế.
Hệ thống đƣợc thiết kế gồm 2 khối chính:
Khối xử lý tại trung tâm: Sử dụng module GSM Sim900 kết nối với máy tính để nhận dữ liệu và hiển thị trên phần mềm quản lý, truyền dữ liệu điều khiển.
Khối xử lý gắn trên phƣơng tiện: Sử dụng module Sim908 kết hợp với vi điều khiển để xác định vị trí, vận tốc và trạng thái của phƣơng tiện, gửi dữ liệu về mạch trung tâm, đồng thời nhận và xử lý dữ liệu trung tâm gửi đến.
Thiết kế giao diện quản lý trên phần mềm C#.
4.2. Sơ đồ khối tổng quát của toàn hệ thống và chức năng từng khối. 4.2.1. Sơ đồ tổng quát hệ thống.
4.2.2. Chức năng từng khối.
Khối giao tiếp SMS
Có chức năng gửi nhận tin nhắn SMS cho việc điều khiển các thiết bị. Khối này cần hai thiết bị truyền nhận thông tin :
Thiết bị truyền nhận dữ liệu GSM Sim900: dành cho mạch xử lý trung tâm. Đƣợc kết nối với máy tính qua cổng truyền thông RS232. Nhận dữ liệu từ mạch gắn trên thiết bị, hiển thị thông tin trên giao diện quản lý, đồng thời điều khiển mạch gắn trên thiết bị.
Thiết bị truyền nhận dữ liệu GPS/GSM Sim908: Gắn trên mạch lắp trên phƣơng tiện. Liên tục cập nhật dữ liệu GPS và kiểm tra thông tin điều khiển để thực hiện các chức năng quy định. Gửi dữ liệu về mạch trung tâm khi phát hiện yêu cầu hoặc có sự cố xảy ra.
Khối xử lý phần mềm và giao tiếp.
Có chức năng đọc tin nhắn SMS từ module GSM. Khối này có nhiệm vụ trung tâm và quan trọng trong việc xử lí và điều khiển phần mềm. Việc xử lí sẽ do phần mềm đƣợc tạo ra bởi phần mềm Visual Basic.Net của Microsoft . Phần mềm này có nhiệm vụ giao tiếp với module GSM và giao tiếp với Khối xử lý phần cứng thông qua cổng RS232.
Khi model nhận đƣợc tin nhắn điều khiển thì phần mềm sẽ đọc tin nhắn thông qua việc gửi tập lệnh AT đọc tin nhắn. Sau đó sẽ xử lý lệnh điều khiển và truyền dữ liệu bật tắt thiết bị thông qua việc truyền tin nhắn SMS. Trong phần mềm giao tiếp cần đặt thuộc tính cho việc chọn cổng kết nối với Modem Sim900 và RS232 . Phần mềm còn cho phép hiển thị vị trí thiết bị trên bản đồ, tốc độ của thiết bị. Khi ngƣời dùng muốn giám sát thiết bị thông qua điện thoại thì phần mềm cũng cho phép gửi tin nhắn SMS đến ngƣời dùng để thông báo các trạng thái thiết bị. Nếu xảy ra sự cố thì phần mềm sẽ tự động gửi tin nhắn đến các cơ quan có thẩm quyền.
Khối xử lý phần cứng.
Khối xử lí phần cứng là khối trung tâm trong việc xử lý và điều khiển phần cứng. Khối chỉ do một vi điều khiển ATmega128 đảm nhận và có nhiệm vụ gửi nhận dữ liệu với khối xử lý phần mềm một cách liên tục. Khi Khối xử lí phần mềm gửi thông tin điều khiển thì Khối xử lí phần cứng sẽ đƣợc lập trình để thực thi thông qua điều khiển các chân cổng. Vi điều khiển có nhiệm vụ đọc thông tin từ cảm biến, giao tiếp với khối LCD- Keypad và Khối công suất.
Khối cảm biến.
Sử dụng cảm biến chuyển động PIR để phát hiện sự dịch chuyển của thiết bị. Là tín hiệu để khối xử lý phát tín hiệu cảnh báo tới trung tâm.
Khối giao tiếp LCD và bàn phím.
Khối này bao gồm một LCD 16x2 và một bàn phím ma trận có nhiệm vụ hiển thị dữ liệu và cài đặt thông tin thời gian.
Khối công suất.
Khối này bao gồm Moc3020 và Triac BT136 có nhiệm vụ giao tiếp giữa mức logic TTL với điện áp xoay chiều 220VAC thông qua việc đóng ngắt các role. Khối công suất với dòng thấp, đáp ứng tải tiêu thụ công suất thấp và dân dụng nhƣ bóng đèn, các thiết bị báo hiệu.
4.3. Thiết kế phần cứng. 4.3.1. Sơ đồ nguyên lý.
Sơ đồ nguyên lý khối nguồn hệ thống.
Sơ đồ nguyên lý mạch xử lý trung tâm:
Hình 38: Sơ đồ nguyên lý mạch xử lý trung tâm.
Sơ đồ nguyên lý mạch gắn trên thiết bị. Mạch sim 908.
Mạch điều khiển chính.
Hình 40: Sơ đồ nguyên lý mạch điều khiển chính. 4.3.2. Thiết kế mạch in.
Mạch xử lý trung tâm
Mạch Sim908.
Hình 42: Mạch Sim908.
Mạch điều khiển chính.
4.4. Thiết kế chƣơng trình phần mềm. 4.4.1. Lƣu đồ thuật toán chƣơng trình.
Lƣu đồ thuật toán chƣơng trình chính.
Hình 44: Lƣu đồ thuật toán chƣơng trình chính.
BEGIN
Khởi tạo dữ liệu truyền USART Nhận tin nhắn Xử lý tin nhắn và điều khiển thiết bị Kiểm tra cổng COM GPS? Kiểm tra cổng COM GSM? Nhận chuỗi dữ liệu Xử lý chuỗi dữ liệu, tách lấy thông tin
Báo có tin nhắn mới Báo nhận chuỗi dữ liệu
1 1
Lƣu đồ thuật toán xử lý tin nhắn.
Hình 45: Lƣu đồ thuật toán xử lý tin nhắn.
Để xử lý tin nhắn, trƣớc tiên vi điều khiển thực hiện tách lấy phần nội dung của tin nhắn và số điện thoại đã gửi tin nhắn tới. Sau đó vi điều khiển sẽ tiến hành phân tích nội dung lệnh điều khiển. Trƣớc tiên là kiểm tra mật khẩu, nếu mật khẩu sai vi điều khiển sẽ thực hiện gửi tin nhắn báo sai mật khẩu cho thuê bao gửi tin nhắn điều khiển. Nếu mật khẩu là đúng, sẽ kiểm tra tiếp cú pháp điều khiển, nếu cú pháp đúng, vi điều khiển sẽ tiến hành điều khiển thiết bị, nếu không sẽ thực hiện gửi tin nhắn báo sai cú pháp cho thuê bao gửi tin nhắn điều khiển.
Xử lý tin nhắn
Lấy nội dung tin nhắn và số điện thoại gửi
Kiểm tra mật khẩu?
Kiểm tra cú pháp?
Điều khiển thiết bị
Kết thúc
Báo sai mật khẩu
Báo sai cú pháp S
S Đ
Lƣu đồ chƣơng trình nhận dữ liệu.
Hình 46: Lƣu đồ thuật toán nhận dữ liệu.
Lƣu đồ chƣơng trình truyền dữ liệu.
Hình 47: Lƣu đồ thuật toán gửi dữ liệu.
NHẬN DỮ LIỆU Thiết lập bộ nhớ lƣu dữ liệu Có dữ liệu đến? Nhận ký tự Ký tự kết thúc? Kết thúc Lƣu ký tự Tăng địa chỉ lƣu S Đ S Đ Gửi dữ liệu Đang bận gửi? Kết thúc
Gửi ký tự, Tăng lên ký tự tiếp theo. Ký tự cuối? Đ Đ S S
Lƣu đồ chƣơng trình lấy dữ liệu.
Hình 48: Lƣu đồ chƣơng trình lấy dữ liệu.
Khi nhận đƣợc nội dung tin nhắn từ trung tâm. Để xử lý điều khiển, vi điều khiển phải xác định các vùng dữ liệu có ích cho mục đích điều khiển, gồm vùng dữ liệu chứa số điện thoại đã gửi tin nhắn điều khiển và vùng nhớ chứa nội dung điều khiển. Chƣơng trình con lấy địa chỉ làm nhiệm vụ lấy các địa chỉ bắt đầu của vùng nhớ lƣu số điện thoại, địa chỉ bắt đầu và kết thúc của vùng nhớ lƣu nội dung điều khiển.
Lƣu đồ chƣơng trình điều khiển thiết bị.
Hình 49: Lƣu đồ chƣơng trình con điều khiển mở thiết bị.
Lấy dữ liệu
Ký tự đầu số điện thoại?
Lấy ký tự đầu số điện thoại.
Tăng biến đếm ký tự tiếp theo
Lấy địa chỉ đầu dữ liệu
Tăng lên đến ký tự tiếp theo Địa chỉ cuối dữ liệu? Kết thúc Ký tự đầu dữ liệu? Đ Đ S S Đ S Mở thiết bị Thiết bị mở?
Mở chân điều khiển thiết bị
Kết thúc Đ
Hình 50: Lƣu đồ chƣơng trình con điều khiển tắt thiết bị.
Lƣu đồ chƣơng trình gửi tin nhắn.
Hình 51: Lƣu đồ thuật toán gửi tin nhắn.
GỬI TIN NHẮN
Gửi nội dung Gửi “Số điện thoại” Gửi chuỗi: AT+CMGS=
Gửi ký tự Ctrl+Z Chờ module sim gửi ký tự „>‟ Kết thúc Tắt thiết bị Thiết bị tắt?
Tắt chân điều khiển thiết bị
Kết thúc
S
Đ
1
4.5. Phần mềm giao diện quản lý.
4.5.1. Giới thiệu phần mềm Visual Studio của Microsoft.
Microsoft Visual Studio : là môi trƣờng phát triển tích hợp chính (Integrated
Development Environment (IDE)) đƣợc phát triển từ Microsoft. Đây là một loại phần mềm máy tính có công dụng giúp đỡ các lập trình viên trong việc phát triển phần mềm.
Các môi trƣờng phát triển hợp nhất thƣờng bao gồm:
Một trình soạn thảo mã (source code editor) : dùng để viết mã. Trình biên dịch (Compiler) và/ hoặc trình thông dịch (Interpreter).
Công cụ xây dựng tự động: khi sử dụng sẽ biên dịch(hoặc thông dịch) mã nguồn, thực hiện liên kết (linking) , và có thể chạy chƣơng trình một cách tự động.
Trình gỡ lỗi (debugger) : hỗ trợ dò tìm lỗi.
Ngoài ra, còn có thể bao gồm hệ thống quản lý phiên bản và các công cụ nhằm đơn giản hóa công việc xây dựng giao diện ngƣời dùng đồ họa (GUI).
Nhiều môi trƣờng phát triển hợp nhất hiện đại còn tích hợp trình duyệt lớp (class browser), trình quản lý đối tƣợng (object inspector), lƣợc đồ phân cấp lớp (class hierarchy diagram),… để sử dụng trong việc phát triển phần mềm theo hƣớng đối tƣợng.
Nhƣ vậy, Microsoft Visual Studio đƣợc dùng để phát triển Console (thiết bị đầu cuối- bàn giao tiếp ngƣời máy) và GUI (giao diện ngƣời dùng đồ họa) cùng với các trình ứng dụng Window Forms, các website, cũng nhƣ ứng dụng, dịch vụ web (web applications and web services) . Chúng đƣợc phát triển dựa trên mã ngôn ngữ gốc (native code) cũng nhƣ mã đƣợc quản lý (managed code) cho các nền tảng đƣợc hỗ trợ Microsoft Windows, Windows Mobile, .Net Framework, .Net Compact Framework và Microsoft Silverlight. Visual Studio hỗ trợ rất nhiều ngôn ngữ lập trình, có thể kể tên nhƣ sau: C/C++ ( Visual C++), VB.NET (Visual Basic .NET), và C# (Visual C#)… cũng nhƣ hỗ trợ các ngôn ngữ khác nhƣ F#, Python, và Ruby; ngoài ra còn hỗ trợ cả XML/XSLT, HTML/XHTML, JavaScript và CSS…
4.5.2.Xây dựng giao diện truyền thông nối tiếp RS232 dùng Visual Studio.
Vấn đề truyền thông giao tiếp giữa vi điều khiển với máy tính không còn xa lạ trong các ứng dụng quản lý và giám sát đƣợc thực hiện bởi vi điều khiển. Nó giúp cho ngƣời quản lý dễ dàng biết đƣợc những thông tin cần thiết chỉ thông qua màn
hình máy tính. Ngoài một số chƣơng trình đƣợc tích hợp sẵn trên windows nhƣ hyperterminal, Terminal… thì ngƣời dùng còn có thể tự tạo cho mình một giao diện truyền thông nối tiếp để giao tiếp với vi điều khiển thông qua chƣơng trình Microsoft Visual Studio. Các bƣớc để xây dựng chƣơng trình nhƣ sau:
Tạo 1 project mới. Vào File/New/Project.
Hình 52: Tạo project mới trên C#.
Chọn Windows Forms Application và đặt tên cho project tại khung Name. Sau đó một màn hình giao diện lập trình Form xuất hiện.
Hình 53: Lựa chọn khuôn mẫu cho project.
Tiếp đến xây dựng giao diện nhƣ hình dƣới:
Hình 54: Thiết kế giao diện.
Cấu trúc form bao gồm: Các button (Kết Nối, Ngắt, Xóa, Thoát), các TextBox, và các ComboBox (COM, BaudRate, Data Bits, Parity, Stop Bit).
Toolbox chứa các Controls. Ở đây sử dụng Common Controls.
Các Button để tạo nút nhấn.
Tạo danh sách chứa các Texbox.
Textbox chứa các văn bản, dùng để hiển thị dữ liệu truyền và nhận.
Đặt tên cho các thuộc tính.
Phần tiếp theo là viết code cho project.
Sau khi hoàn thành việc thiết kế giao diện và đặt tên cho các thuộc tính, ta tiến hành viết code cho project. Để vào môi trƣờng viết code kích phải vào giao diện, chọn ViewCode.
Ngoài các thƣ viện sẵn có, ta thêm các thƣ viện sau để thực hiện các chức năng SerialPost.
Using System.IO. Using System.IO.Ports. Using System.xml.
Trong namespace ta viết đoạn code sau:
Thay đổi các thuộc tính của đối tƣợng.
Đặt tên cho đối tƣợng (thuận tiện cho việc lập trình).
namespace Truyen_Thong_RS232 {
public partial class Form1 : Form {
SerialPort P = new SerialPort(); // Khai báo 1 Object SerialPort mới.
string InputData = String.Empty; // Khai báo string buff dùng cho hiển thị dữ liệu sau này.
delegate void SetTextCallback(string text); // Khai báo delegate SetTextCallBack với tham số string.
public Form1() {
InitializeComponent();
// Cài đặt các thông số cho COM
// Mảng string port để chứa tất cả các cổng COM đang có trên máy tính. string[] ports = SerialPort.GetPortNames();
// Thêm toàn bộ các COM đã tìm đƣợc vào combobox cbCom.
cbCom.Items.AddRange(ports); // Sử dụng AddRange thay vì dùng foreach. P.ReadTimeout = 1000;
// Khai báo hàm delegate bằng phƣơng thức DataReceived của Object SerialPort; // Cái này khi có sự kiện nhận dữ liệu sẽ nhảy đến phƣơng thức DataReceive P.DataReceived += new SerialDataReceivedEventHandler(DataReceive); // Cài đặt cho BaudRate
string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };