Quản lý thiết bị sử dụng công nghệ GSM

TÓM TẮT LUẬN VĂN Mục tiêu chính của đề tài luận văn là thiết kế mạch giao tiếp với GSM modem nhằm quản lý thiết bị bằng tin nhắn SMS. Khối giao tiếp này phải được thiết kế một cách linh hoạt nhằm truyền tải thông tin từ người sử dụng tới các thiết bị quản lý. Lý thuyết về GSM modem đã được tìm hiểu trong đồ án hai, trong phần luận văn này tập trung xây dựng hệ thống gồm phần giao tiếp với GSM modem (node trung tâm) và thiết bị giám sát nhiệt độ (node ngoại vi). Node ngoại vi và node trung tâm sử dụng giao tiếp không dây nhằm đảm bảo tính thẩm mỹ,tiện lợi cho người dùng.Mạch cảm biến nhiệt độ là một thí dụ điển hình cho thiết bị giám sát.Với thiết kế, lập trình linh hoạt người dùng có thể thêm nhiều thiết bị giám sát khác vào hệ thống mà không cần thay đổi gì node trung tâm. MỤC LỤC Đề mục Trang Trang bìa i Nhiệm vụ luận văn Lời cảm ơn ii Tóm tắt luận văn iii Mục lục iv Danh sách hình vẽ vii Danh sách bảng biểu xi Nội dung luận văn Phần 0 – GIỚI THIỆU CHUNG Phần I – CƠ SỞ LÝ THUYẾT Chương 1: Giới thiệu vi xử lý ATmega16 1.1 Giới thiệu chung 05 1.2 Cấu trúc AVR 06 1.2.1 Cấu trúc tổng quát 06 1.2.2 ALU. 07 1.2.3 Thanh ghi trạng thái 07 1.2.4 Các thanh ghi chức năng 08 1.2.5 Con trỏ ngăn xếp (SP) 08 1.2.6 Quản lý ngắt 09 1.3 Cấu trúc bộ nhớ 10 1.4 Các cổng ngoài ra (I/O) 12 1.5 Bộ định thời 14 1.5.1 Các thanh ghi 15 1.5.2 Đơn vị đếm 15 1.5.3 Đơn vị so sánh ngõ ra 16 1.5.4 Mô tả các thanh ghi 17 1.6 USART 19 1.6.1 Tạo xung clock 20 1.6.2 Định dạng khung truyền 21 1.6.3 Khởi tạo USART 22 1.6.4 Truyền thông dữ liệu –bộ truyền USART 23 1.6.5 Nhận dữ liệu –bộ phận USART 24 1.7 Bộ biến đổi A/D 26 Chương 2: GIỚI THIỆU CẢM BIẾN DS18B20 2.1 Sơ đồ chân cảm biến nhiệt độ DS18B20 34 2.2 Các đặc tính cơ bản của DS18B20 35 2.3 Lệnh ROM và các lệnh chức năng 37 2.3.1 Lệnh ROM 37 2.3.2 Lệnh chức năng bộ nhớ 38 2.4 Các cách kết nối DS18B20 với vi điều khiển 39 Chương 3: KHÁI QUÁT MODULE RF 3.1 Các đặc tính của RF module 42 3.2 Chức năng các chân module 43 Chương 4: GIỚI THIỆU GSM MODEM VÀ TẬP LỆNH AT 4.1 Giới thiệu về kết nối GSM modem và RS232 46 4.1.1 Sơ đồ nhân của GSM modem 46 4.1.2 Kết nối anten 47 4.1.3 Nguồn cung cấp cho kết nối 47 4.1.4 Các chân kết nối của GSM modem 48 4.2 Giới thiệu vế tập lệnh ATcommand 50 Phần II – THIẾT KẾ VÀ THI CÔNG Chương 5: CƠ SỞ THIẾT KẾ 5.1 Sơ đồ nguyên lý và sơ đồ khối 55 5.1.1 Sơ đồ khối 55 5.1.2 Sơ đồ nguyên lý 60 5.2 Giới thiệu IC max232 62 Chương 6: LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH 6.1 Cách sử dụng codevisionAVR 65 6.2 Lưu đồ giải thuật khối trung tâm 74 6.3 Lưu đồ giải thuật khối ngoại vi 78 6.4 Chương trình chính 80 6.4.1 Chương trình khối trung tâm 80 6.4.2 Chương trình khối ngoại vi 81 Chương 7: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 7.1 Kết quả thi công 86 7.1.1 Mạch in trung tâm 86 7.1.2 Mạch in ngoại vi 86 7.1.3 Mạch thực tế 87 7.2 Kết luận và hướng phát triển 87 TÀI LIỆU THAM KHẢO Ngày nay với sự phát triển của hệ thống thông tin di động GSM và hệ thống định vị GPS, nhu cầu của việc giám sát, quản lý ngày càng tăng. Song song với nhu cầu định vị, chỉ đường dùng công nghệ GPS, nhu cầu giám sát thiết bị trên xe cũng ngày càng cấp thiết. Module Wavecom Fastrack Supreme được tích hợp nhiều cổng giao tiếp mở rộng cho những chức năng khác nhau như GPS, Bluetooth, Wifi, cùng các chuẩn giao tiếp chuẩn thông dụng như USB,RS232, đã đáp ứng được hai nhu cầu định vị và giám sát trên. Trong đề tài luận văn này, chúng em thiết kế hệ thống để cụ thể mô hình trên. Thiết bị gắn trên xe tải sẽ làm nhiệm vụ chính là thu sóng GPS xác định tọa độ của nó và gửi tọa độ đó cùng các thông số đo được trên xe gửi về trung tâm quản lý. Cụ thể như sau: - Thiết kế khối trung giao tiếp với GSM modem - Thiết kế khối ngoại vi kiểm tra nhiệt độ - Giao tiếp khối ngoại vi và khối trung tâm dùng RF module giao tiếp không dây - Kết hợp hệ thống GPS để giám sát xe tải PHẦN 1: CƠ SỞ LÝ THUYẾT Chương 1: Giới thiệu vi xử lý ATmega16 Chương 2: Giới thiệu cảm biến DS18B20 Chương 3: Khái quát module RF Chương 4: Giới thiệu GSM modem và tập lệnh AT PHẦN 2: THIẾT KẾ VÀ THI CÔNG Chương 5: Cơ sở thiết kế Chương 6: Lưu đồ giải thuật và chương trình Chương 7: Kết quả thi công và hướng phát triển triển

doc103 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2932 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Quản lý thiết bị sử dụng công nghệ GSM, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hi chương trình phục vụ ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lớn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi. Ví dụ: char cSREG; cSREG = SREG; /* store SREG value */ /* disable interrupts during timed sequence */ CLI(); EECR |= (1<<EEMWE); /* start EEPROM write */ EECR |= (1<<EEWE); SREG = cSREG; /* restore SREG value (I-bit) */ Cấu trúc bộ nhớ AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu và bộ nhớ chương trình. Ngoài ra ATmega16 còn có thêm bộ nhớ EEPROM để lưu trữ dữ liệu. Bộ nhớ chương trình (Bộ nhớ Flash) Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình. Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16. Bộ nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trình ứng dụng. Hình 1.6: Bản đồ bộ nhớ chương trình Bộ nhớ dữ liệu SRAM 1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội. Hình 1.7: Bản đồ bộ nhớ dữ liệu SRAM Bộ nhớ dữ liệu EEPROM ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một. Các cổng vào ra (I/O) Vi điều khiểnATmega16 có 32 đường vào ra chia làm bốn nhóm 8 bit một. Các đường vào ra này có rất nhiều tính năng và có thể lập trình được. Ở đây ta sẽ xét chúng là các cổng vào ra số. Nếu xét trên mặt này thì các cổng vào ra này là cổng vào ra hai chiều có thể định hướng theo từng bit. Và chứa cả điện trở pull-up (có thể lập trình được). Mặc dù mỗi port có các đặc điểm riêng nhưng khi xét chúng là các cổng vào ra số thì dường như điều khiển vào ra dữ liệu thì hoàn toàn như nhau. Chúng ta có thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là : thanh ghi dữ liệu cổng (PORTA, PORTB, PORTC, PORTD), thanh ghi dữ liệu điều khiển cổng (DDRA, DDRB, DDRC, DDRD) và cuối cùng là địa chỉ chân vào của cổng (PINA, PINB, PINC, PIND). Thanh ghi DDRx Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều khiển hướng cổng PORTx (tức là cổng ra hay cổng vào). Nếu như một bit trong thanh ghi này được set thì bit tương ứng đó trên PORTx được định nghĩa như một cổng ra. Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORTx được định nghĩa là cổng vào. Thanh ghi PORTx Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi được) nó là thanh ghi dữ liệu của cổng PORTx và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi ta ghi một bit lên thanh ghi này thì chân tương ứng trên port đó cũng có cùng mức logic. Trong trường hợp mà cổng được định nghĩa là cổng vào thì thanh ghi này lại mang dữ liệu điều khiển cổng. Cụ thể nếu bit nào đó của thanh ghi này được set (đưa lên mức 1) thì điện trở kéo lên (pull-up) của chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái hi-Z. Thanh ghi này sau khi khởi động Vi điều khiểnsẽ có giá trị là 0x00. Thanh ghi PINx Đây là thanh ghi 8 bit chứa dữ liệu vào của PORTx (trong trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi vào được. Tóm lại: 1. Để đọc dữ liệu từ ngoài thì ta phải thực hiện các bước sau: Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx (hoặc bit n trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit). Sau đó kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit). Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit). 2. Để đưa dữ liệu từ vi điều khiển ra các cổng cũng có các bước hoàn toàn tương tự. Ban đầu ta cũng phải định nghĩa đó là cổng ra bằng cách set bit tương ứng của cổng đó…và sau đó là ghi dữ liệu ra bit tương ứng của thanh ghi PORTx. Ví dụ: unsigned char i; ... /* Define pull-ups and set outputs high */ /* Define directions for port pins */ PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0); DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Insert nop for synchronization*/ _NOP(); /* Read port pins */ i = PINB; Bộ định thời Bộ định thời (timer/counter0) là một module định thời/đếm 8 bit, có các đặc điểm sau: Bộ đếm một kênh Xóa bộ định thời khi trong mode so sánh (tự động nạp) PWM Tạo tần số Bộ đếm sự kiện ngoài Bộ chia tần 10 bit Nguồn ngắt tràn bộ đếm và so sánh Sơ đồ cấu trúc của bộ định thời: Hình 1.8: Sơ đồ cấu trúc bộ định thời Các thanh ghi TCNT0 và OCR0 là các thanh ghi 8 bit. Các tín hiệu yêu cầu ngắt đều nằm trong thanh ghi TIFR. Các ngắt có thể được che bởi thanh ghi TIMSK. Bộ định thời có thể sử dụng xung clock nội thông qua bộ chia hoặc xung clock ngoài trên chân T0. Khối chọn xung clock điều khiển việc bộ định thời/bộ đếm sẽ dùng nguồn xung nào để tăng giá trị của nó. Ngõ ra của khối chọn xung clock được xem là xung clock của bộ định thời (clkT0). Thanh ghi OCR0 luôn được so sánh với giá trị của bộ định thời/bộ đếm. Kết quả so sánh có thể được sử dụng để tạo ra PWM hoặc biến đổi tần số ngõ ra tại chân OC0. Đơn vị đếm Phần chính của bộ định thời 8 bit là một đơn vị đếm song hướng có thể lập trình được. Cấu trúc của nó như hình dưới đây: Hình 1.9: Đơn vị đếm count: tăng hay giảm TCNT0 1 direction: lựa chọn giữa đếm lên và đếm xuống clear: xóa thanh ghi TCNT0 clkT0: xung clock của bộ định thời TOP: báo hiệu bộ định thời đã tăng đến giá trị lớn nhất BOTTOM: báo hiệu bộ định thời đã giảm đến giá trị nhỏ nhất (0) Đơn vị so sánh ngõ ra Hình 1.10: Sơ đồ đơn vị so sánh ngõ ra Bộ so sánh 8 bit liên tục so sánh giá trị TCNT0 với giá trị trong thanh ghi so sánh ngõ ra (OCR0). Khi giá trị TCNT0 bằng với OCR0, bộ so sánh sẽ tạo một báo hiệu. Báo hiệu này sẽ đặt giá trị cờ so sánh ngõ ra (OCF0) lên 1 vào chu kỳ xung clock tiếp theo. Nếu được kích hoạt (OCIE0=1), cờ OCF0 sẽ tạo ra một ngắt so sánh ngõ ra và sẽ tự động được xóa khi ngắt được thực thi. Cờ OCF0 cũng có thể được xóa bằng phần mềm. Mô tả các thanh ghi Thanh ghi điều khiển bộ định thời/bộ đếm TCCR0 Hình 1.11: Thanh ghi điều khiển bộ định thời Bit 7-FOC0: So sánh ngõ ra bắt buộc:Bit này chỉ tích cực khi bit WGM00 chỉ định chế độ làm việc không có PWM. Khi đặt bit này lên 1, một báo hiệu so sánh bắt buộc xuất hiện tại đơn vị tạo dạng sóng. Bit 6, 3-WGM01:0: Chế độ tạo dạng sóng:Các bit này điều khiển đếm thứ tự của bộ đếm, nguồn cho giá trị lớn nhất của bộ đếm (TOP) và kiểu tạo dạng sóng sẽ được sử dụng. Bit 5:4-COM01:0: Chế độ báo hiệu so sánh ngõ ra:Các bit này điều khiển hoạt động của chân OC0. Nếu một hoặc cả hai bit COM01:0 được đặt lên 1, ngõ ra OC0 sẽ hoạt động. Bit 2:0: CS02:0: Chọn xung đồng hồ:Ba bit này dùng để lựa chọn nguồn xung cho bộ định thời/bộ đếm. Báng 1.1:Bảng 3 bít chọn xung đồng hồ Thanh ghi bộ định thời/bộ đếm Hình 1.12: Thanh ghi bộ định thời Thanh ghi bộ định thời/bộ đếm cho phép truy cập trực tiếp (cả đọc và ghi) vào bộ đếm 8 bit. Thanh ghi so sánh ngõ ra-OCR0 Hình 1.13: Thanh ghi so sánh ngõ ra Thanh ghi này chứa một giá trị 8 bit và liên tục được so sánh với giá trị của bộ đếm. Thanh ghi mặt nạ ngắt Hình 1.14: Thanh ghi mặt nạ ngắt TIMSK Bit 1-OCIE0: Cho phép ngắt báo hiệu so sánh Bit 0-TOIE0: Cho phép ngắt tràn bộ đếm Thanh ghi cờ ngắt bộ định thời Hình 1.15:Thanh ghi cờ ngắt bộ định thời Bit 1-OCF0: Cờ so sánh ngõ ra 0 Bit 0-TOV0: Cờ tràn bộ đếm Bit TOV0 được đặt lên 1 khi bộ đếm bị tràn và được xóa bởi phần cứng khi vector ngắt tương ứng được thực hiện. Bit này cũng có thể được xóa bằng phần mềm. USART Bộ truyền nhận nối tiếp đồng bộ và bất đồng bộ là một thiết truyền thông nối tiếp có các chức năng chính như sau: Hoạt động song công (các thanh ghi truyền và nhận nối tiếp độc lập với nhau). Hoạt động đồng bộ hoặc bất đồng bộ Bộ tạo tốc độ baud có độ chính xác cao Hỗ trợ khung truyền nối tiếp với 5, 6, 7, 8, hoặc 9 bit dữ liệu và 1 hoặc 2 bit stop Kiểm tra chẵn lẻ Phát hiện tràn dữ liệu Phát hiện lỗi khung Lọc nhiễu, bao gồm phát hiện bit start lỗi và bộ lọc thông thấp số Ngắt khi kết thúc truyền, thanh ghi truyền hết dữ liệu và kết thúc nhận Chế độ truyền thông đa vi xử lý Chế độ truyền đồng bộ tốc độ cao Sơ đồ khối của bộ USART như sau: Hình 1.16: Sơ đồ khối bộ USART USART bao gồm 3 phần chính: bộ tạo xung clock, bộ truyền và bộ nhận. Các thanh ghi điều khiển được sử dụng chung giữa các phần này. 1.6.1 Tạo xung clock Bộ tạo xung clock tạo ra xung đồng hồ căn bản cho bộ truyền và bộ nhận. USART hỗ trợ 4 chế độ hoạt động xung clock: bất đồng bộ, bất đồng bộ tốc độ cao, truyền đồng bộ master và truyền đồng bộ slave. Sơ đồ khối của bộ tạo xung clock như sau: Hình 1.17: Đơn vị tạo xung clock . txclk: xung đồng hồ bộ truyền rxclk: xung đồng hồ bộ nhận xcki: tín hiệu vào từ chân XCK, sử dụng cho hoạt động truyền đồng bộ master xcko: tín hiệu xung clock ngõ ra tới chân XCK, sử dụng cho hoạt động truyền đồng bộ slave fosc: tần số từ chân XTAL 1.6.2 Định dạng khung truyền USART chấp nhận tất cả 30 tổ hợp của các định dạng khung truyền sau đây: 1 bit start 5, 6, 7, 8, hoặc 9 bit dữ liệu Có hoặc không có bit chẵn, lẻ 1 hoặc 2 bit stop Một khung truyền bắt đầu với một bit start, theo sau đó là bit có trọng số thấp nhất (LSB) của dữ liệu (có thể lên tới 9 bit), kết thúc bằng bit có trọng số lớn nhất (MSB) và bit stop. Hình 1.18: Định dạng khung truyền St: bit start (mức thấp) (n): bit dữ liệu (0 đến 8) P: bit chẵn lẻ Sp: bit stop (mức cao) IDLE: không có dữ liệu truyền (mức cao trong suốt thời gian idle) 1.6.3 Khởi tạo USART Quá trình khởi tạo USART bao gồm việc thiết lập tốc độ baud, thiết lập định dạng khung và kích hoạt bộ truyền và bộ nhận. Ví dụ dưới đây thiết lập hoạt động truyền bất động bộ sử dụng polling (không dùng ngắt) và định dạng khung truyền là cố định. Tốc độ baud là một tham số của hàm. void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)} 1.6.4 Truyền thông dữ liệu-bộ truyền USART Bộ truyền USART được kích hoạt bằng cách thiết lập bit TXEN trong thanh ghi UCSRB. Khi bộ truyền được kích hoạt, chân TxD hoạt động như ngõ ra của bộ truyền nối tiếp. Tốc độ baud, chế độ hoạt động và định dạng khung truyền phải được thiết lập trước khi thực hiện truyền dữ liệu. Truyền khung 5 đến 8 bit dữ liệu Việc truyền dữ liệu được thiết lập bằng cách nạp dữ liệu truyền vào bộ đệm truyền. Dữ liệu trong bộ đệm sẽ được đưa vào thanh ghi dịch khi thanh ghi dịch đã sẵn sàng gửi một khung mới. Ví dụ dưới đây là một hàm truyền USART dựa trên việc kiểm tra cờ UDRE. void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Put data into buffer, sends the data */ UDR = data; } Truyền khung 9 bit dữ liệu Nếu sử dụng 9 bit dữ liệu, bit thứ 9 phải được ghi vào bit TXB8 trong thanh ghi UCSRB trước khi byte còn lại được ghi vào UDR. Ví dụ: void USART_Transmit( unsigned int data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE))) ) ; /* Copy 9th bit to TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) UCSRB |= (1<<TXB8); /* Put data into buffer, sends the data */ UDR = data; } 1.6.5 Nhận dữ liệu-bộ nhận USART Bộ nhận USART được kích hoạt bằng cách đặt bit RXEN trong thanh ghi UCRSB lên 1. Khi bộ nhận được kích hoạt, chân RxD hoạt động như ngõ vào của bộ nhận nối tiếp. Tốc độ baud, chế độ hoạt động và định dạng khung truyền phải được thiết lập trước khi thực hiện truyền dữ liệu. Nhận khung với 5 đến 8 bit dữ liệu Bộ nhận bắt đầu nhận dữ liệu khi nó phát hiện một bit start hợp lệ. Mỗi bit theo sau bit start sẽ được lấy mẫu tại tốc độ baud hoặc tốc độ đồng hồ XCK, và được dịch vào trong thanh ghi dịch của bộ nhận cho đến khi phát hiện một bit stop đầu tiên. Nội dung của thanh ghi dịch sau đó được đưa vào bộ đệm. Bộ đệm của bộ nhận có thể được đọc bằng cách đọc UDR. Ví dụ sau đây là một hàm nhận USART dựa trên việc kiểm tra cờ kết thúc truyền (RXC). unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSRA & (1<<RXC)) ) ; /* Get and return received data from buffer */ return UDR; } Nhận khung với 9 bit dữ liệu Nếu nhận dữ liệu 9 bit, bit thứ 9 phải được đọc từ bit RXB8 trong thanh ghi UCSRB trước khi đọc các bit thấp trong UDR. Ví dụ sau đây là một hàm nhận dữ liệu 9 bit. unsigned int USART_Receive( void ) { unsigned char status, resh, resl; /* Wait for data to be received */ while ( !(UCSRA & (1<<RXC)) ) ; /* Get status and 9th bit, then data */ /* from buffer */ status = UCSRA; resh = UCSRB; resl = UDR; /* If error, return -1 */ if ( status & (1<<FE)|(1<<DOR)|(1<<PE) ) return -1; /* Filter the 9th bit, then return */ resh = (resh >> 1) & 0x01; return ((resh << 8) | resl); } Bộ biến đổi A/D Vi điều khiểnATmega16 có một bộ biến đổi ADC tích hợp trong chip với các đặc điểm: Độ phân giải 10 bit Sai số tuyến tính: 0.5LSB Độ chính xác +/-2LSB Thời gian chuyển đổi:65-260μs 8 Kênh đầu vào có thể được lựa chọn Có hai chế độ chuyển đổi free running và single conversion Có nguồn báo ngắt khi hoàn thành chuyển đổi Loại bỏ nhiễu trong chế độ ngủ Hình 1.19: Sơ đồ bộ biến đổi A/D Tám đầu vào của ADC là tám chân của PORTA và chúng được chọn thông qua một MUX. Để điều khiển hoạt động vào ra dữ liệu của ADC và CPU chúng ta có 3 thanh ghi: ADMUX là thanh ghi điều khiển lựa chọn kênh đầu vào cho ADC, ADCSRA là thanh ghi điều khiển và thanh ghi trạng thái của ADC, ADCH và ADCL là 2 thanh ghi dữ liệu. ADMUX: Multiplexer select register Đây là thanh ghi điều khiển 8 bit. Hình 1.20: Thanh ghi ADMUX Với 4 bit được định nghĩa là MUX3, MUX2, MUX1,và MUX0, ứng với các tổ hợp logic ta có thể chọn kênh đầu vào. Cụ thể: Các bit REFS1 và REFS0 dùng để chọn giá trị điện áp tham khảo cho ADC, như sau: Bảng 1.2: chọn điện áp tham khảo ADC Chú ý: Nếu như ta thay đổi kênh trong thời điểm mà ADC đang chuyển đổi thì khi quá trình chuyển đổi đã hoàn thành thì kênh vào mới được thay đổi. ADCSR-ADC control and status register Đây là thanh ghi điều khiển và lưu trạng thái của ADC. Hình 1.21: Thanh ghi điều khiển và trạng thái ADC Bit 7-ADEN:ADC enable Đây là bit điều khiển hoạt động của ADC.Khi bit này được set 1 thì ADC có thể hoạt động và ngược lại.Nếu như ta ngừng hoạt động của ADC trong khi nó đang chuyển đổi thì nó sẽ kết thúc quá trình chuyển đổi.Mặc dù chưa chuyển đổi xong. Bit 6-ADSC: ADC start conversion Trong chế độ chuyển đổi đơn thì bit này phải được set lên 1 để bắt đầu chuyển đổi.Trong chế độ chuyển đổi tự do thì bit này cần được set lên 1 để bắt đầu lần chuyển đổi đầu tiên.Bit này được giữ sốt trong quá trình chuyển đổi và được xóa khi mà chuyển đổi xong. Bit 5-ADATE :ADC Auto Trigger enable Khi bit này được set thì ADC sẽ bắt đầu chuyển đổi mỗi khi có một nguồn kích hoạt xuất hiện. Việc lựa chọn nguồn kích hoạt được thực hiện bằng cách set các bit trong thanh ghi SFIOR. Bit 4-ADIF: ADC interrupt Flag Bit này được set lên 1 bởi phần cứng khi quá trình chuyển đổi đã hoàn thành và thanh ghi dữ liệu đã được cập nhật. Bit này được xóa bằng phần cứng nếu như ngắt này được phép và được phục vụ. Hoặc nó có thể được xóa bằng cách ghi giá trị logic “0”vào cờ này. Cụ thể khi ngắt bị cấm ta có thể sử dụng các lệnh sbi và cbi để tác dụng lên bit này. Bit 3-ADIE:ACD interrupt Enable Nếu bit này set 1 và ngắt toàn cục được cho phép thì ngắt này được phép phục vụ (khi chuyển đổi xong dữ liệu) và nếu bị xóa thì ngược lại. Bit 2.1.0-ADPS2…ADPS0: Bit lựa chọn xung nhịp(Tốc độ) Nguồn xung được lấy từ nguồn xung của Vi điều khiển(XTAL) và được chia tần thông qua bộ chia tần. Các bit ADPS có nhiệm vụ chọn số chia cho bộ chia tần theo bảng sau: Thanh ghi dữ liệu ACDH và ADCL Thanh ghi này chứa dữ liệu chuyển đổi từ tương tự sang số, được sắp xếp như hình dưới đây. Hình 1.22: Thanh ghi dữ liệu ADC Nguyên tắc hoạt động và lập trình điều khiển ADC có nhiệm vụ chuyển đổi tín hiệu điện áp tương tự thành tín hiệu số có độ phân giải 10 bit.Với giá trị nhỏ nhất của điện áp đặt ở chân AGND và giá trị cực đại của điện áp tương tự được mắc vào chân AREF. Tám kênh tương tự đầu vào được chọn lựa thông qua ADMUX và ADMUX này được điều khiển bởi thanh ghi ADMUX. ADC này có thể hoạt động được ở hai chế độ. Đó là chuyển đổi đơn: chỉ chuyển đổi một lần khi có lệnh chuyển đổi và chế độ tự chuyển đổi (Free running mode) đây là chế độ mà ADC tự động chuyển đổi khi được hoạt động và công việc chuyển đổi có tính tuần hoàn (chỉ cần khởi động một lần). ADC được phép hoạt động nhờ thiết lập bit ADEN. Quá trình chuyển đổi được bắt đầu bằng việc ghi vào bit ADSC mức logic 1 và trong suốt quá trình chuyển đổi bit này luôn được giữ ở mức cao. Khi quá trình chuyển đổi hoàn thành thì bit này được xóa bằng phần cứng và cờ AIDF được bật lên. Dữ liệu sau khi chuyển đổi được đưa ra thanh ghi dữ liệu ADCL và ADCH, nhưng chú ý khi đọc dữ liệu từ hai thanh ghi này thì đọc ADCL trước rồi mới đọc ADCH. Nếu đọc ADCH trước thì dữ liệu cập nhật có thể ghi đè lên ADCL (Vi điều khiển nghĩ rằng đã đọc xong dữ liệu). Để điều khiển vào ra dữ liệu với ADC, các bước thực hiện như sau: Bước 1: Định nghĩa các cổng vào cho tín hiệu tương tự Xóa bit tương ứng với chân đó trong thanh ghi DDRA. Sau đó loại bỏ điện trở treo bằng cách xóa bit tương ứng ở thanh ghi PORTA. Bước 2: Chọn kênh tương tự vào (chọn chân vào cho ADC) thông qua thanh ghi ADMUX (có thể thay đổi trong quá trình hoạt động). Bước 3: Thiết lập các thông số cho ADC Tốc độ chuyển đổi thông qua xung nhip chuyển đổi. Chế độ chuyển đổi : đơn hoặc tự động. Sử dụng ngắt hoặc không. Bước 4: Bắt đầu chuyển đổi và đọc dữ liệu. Ví dụ: (biến đổi ADC, ngõ vào analog PA2, hiển thị dữ liệu trên led ở PORTB) #include #include //ADC interrupt function ISR(ADC_vect) {PORTB=ADCH; } int main(void) { outp(0xFF, DDRB); //PORTB is output outp(0xFF, PORTB); //all PIN’s high (LED’s off) outp(0x22, ADMUX); //PINA2 as analog input (MUX0..2) //left adjusted (ADLAR=1) //AREF as reference voltage (connected to VCC 5V) (REFS0..1) outp(0xA5, ADCSR); //ADC enable, ADC auto trigger, ADC prescaler= 32 outp((inp(SFIOR)&0x1F),SFIOR); //Trigger source = Free Running Mode sbi(ADCSR,6); for(;;) { } return 1; Chương 2 GIỚI THIỆU CẢM BIẾN DS18B20 Nội dung chính Sơ đồ chân cảm biến nhiệt độ DS18B20 Các đặc tính kỹ thuật cơ bản của DS18B20 Lệnh ROM và các lệnh chức năng Lệnh ROM Lệnh chức năng bộ nhớ Các cách kết nối DS18B20 với vi điều khiển Sơ đồ chân cảm biến nhiệt độ DS18B20 Cảm biến nhiệt độ DS18B20 là một sản phẩm của công ty Dallas (Mỹ), đây cũng là công ty đóng góp nhiều vào việc cho ra đời bus một dây và các cảm biến một dây. Hình dạng bề ngoài của cảm biến một dây DS18B20 được miêu tả trong hình vẽ, trong đó dạng vỏ TO-92 với 3 chân là dạng thường gặp và được sử dụng trong nhiều ứng dụng, cảm biến dạng vỏ SOIC với 8 chân được dùng để đo nhiệt độ bề mặt, kể cả da người. Hình 2.1 : Sơ đồ chân DS18B20 Điện áp hoạt động từ 3 đến 5VDC. Chân 1:GND Chân 2: DQ (truyền tín hiệu) Chân 3: Nguồn VCC Có thể đo nhiệt độ từ -55 đến +1250C. Khi lắp vào mạch phải nối chân 2 và chân 3 với điện trở 4k7. Các đặc tính kỹ thuật cơ bản của DS18B20 Sử dụng giao diện một dây nên chỉ cần có một chân ra để truyền thông. Độ phân giải khi đo nhiệt độ là 9 - 12bit. Dải đo nhiệt độ -550C đến 1250 C, từng bậc 0,50 C, có thể đạt độ chính xác đến 0,10 C bằng việc hiệu chỉnh qua phần mềm. Rất thích hợp với các ứng dụng đo lường đa điểm vì nhiều đầu đo có thể được nối trên một bus, bus này được gọi là bus một dây (1-wire bus) giống hình dưới đây : Hình 2.2 phương pháp nối dây của DS18B20 (hình vẽ trên là phương pháp nối của DS18S20,tuy nhiên cũng có thể áp dụng được cho DS18B20) Không cần thêm linh kiện bên ngoài. Điện áp nguồn nuôi có thể thay đổi trong khoảng rộng, từ 3,0 V đến 5,5 V một chiều và có thể được cấp thông qua đường dẫn dữ liệu. Dòng tiêu thụ ở chế độ nghỉ cực nhỏ. Thời gian lấy mẫu và biến đổi thành số tương đối nhanh, không quá 200 ms. Mỗi cảm biến có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip (on chip), giá trị nhị phân được khắc bằng tia lazer. Đầu đo nhiệt độ số DS18B20 đưa ra số liệu để biểu thị nhiệt độ đo được dưới dạng mã nhị phân 9 bit. Các thông tin được gửi đến và nhận về từ DS18B20 trên giao diện 1-wire, do đó chỉ cần hai đường dẫn gồm một đường cho tín hiệu và một đường làm dây đất là đủ để kết nối vi điều khiển đến điểm đo. Nguồn nuôi cho các thao tác ghi/đọc/chuyển đổi có thể được trích từ đường tín hiệu, không cần có thêm đường dây riêng để cấp điện áp nguồn. Mỗi vi mạch đo nhiệt độ DS18B20 có một mã số định danh duy nhất, được khắc bằng laser trong quá trình chế tạo vi mạch nên nhiều vi mạch DS1820 có thể cùng kết nối vào một bus 1-wire mà không có sự nhầm lẫn. Đặc điểm này làm cho việc lắp đặt nhiều cảm biến nhiệt độ tại nhiều vị trí khác nhau trở nên dễ dàng và với chi phí thấp. Theo chuẩn 1-wire độ dài tối đa cho phép của bus là 300 m. Số lượng các cảm biến nối vào bus không hạn chế. Để nâng cao độ phân giải lên trên 12 bit ta phải tính toán thêm bằng phần mềm dựa trên các số liệu lưu trữ trên các thanh ghi nhiệt độ, COUNT REMAIN và COUNT PER C trong nhóm các thanh ghi nháp (scratchpad). Bộ nhớ ROM 64–Bit Của DS18B20: Mỗi cảm biến nhiệt độ DS1820 có một dãy mã 64 bit duy nhất được lưu trữ trong bộ nhớ ROM từ khi sản xuất bằng kỹ thuật lazer. Hình 2.3: Nội dung giải mã 64 bit trên bộ nhớ ROM Nội dung dãy mã 64-bit trên bộ nhớ ROM:Như vậy dãy mã được chia ra thành 3 nhóm, trong đó: 8 bit đầu tiên là mã định danh họ một dây, mã của DS1820 là 10h. 48 bit tiếp theo là mã số xuất xưởng duy nhất, nghĩa là mỗi cảm biến DS1820 chỉ có một số mã. 8 bit có ý nghĩa nhất là byte mã kiểm tra CRC (cyclic redundancy check), byte này được tính toán từ 56 bit đầu tiên của dãy mã trên ROM .Để truy cập lên cảm biến một dây DS1820 ta phải sử dụng hai nhóm lệnh: các lệnh ROM và các lệnh chức năng (function commands) bộ nhớ, các lệnh này có thể được mô tả ngắn gọn như sau: Sau khi thiết bị chủ (thường là một vi điều khiển) phát hiện ra một xung presence pulse, nó có thể xuất ra một lệnh ROM. Có 5 loại lệnh ROM, mỗi lệnh dài 8 bit. Thiết bị chủ phải đưa ra lệnh ROM thích hợp trước khi đưa ra một lệnh chức năng để giao tiếp với cảm biến DS18S20. Lệnh ROM và các lệnh chức năng Lệnh ROM READ ROM (33h) :Cho phép đọc ra 8 byte mã đã khắc bằng laser trên ROM, bao gồm: 8 bit mã định tên linh kiện (10h), 48 bit số xuất xưởng, 8 bit kiểm tra CRC. Lệnh này chỉ dùng khi trên bus có 1 cảm biến DS1820, nếu không sẽ xảy ra xung đột trên bus do tất cả các thiết bị slave cùng đáp ứng. MATCH ROM (55h) :Lệnh này được gửi đi cùng với 64 bit ROM tiếp theo, cho phép bộ điều khiển bus chọn ra chỉ một cảm biến DS1820 cụ thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào. Chỉ có DS1820 nào có 64 bit trên ROM trùng khớp với chuỗi 64 bit vừa được gửi tới mới đáp ứng lại các lệnh về bộ nhớ tiếp theo. Còn các cảm biến DS1820 có 64 bit ROM không trùng khớp sẽ tiếp tục chờ một xung reset. Lệnh này được sử dụng cả trong trường hợp có một cảm biến một dây, cả trong trường hợp có nhiều cảm biến một dây. SKIP ROM (CCh) : Lệnh này cho phép thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của DS1820 mà không cần gửi chuỗi mã 64 bit ROM. Như vậy sẽ tiết kiệm được thời gian chờ đợi nhưng chỉ mang hiệu quả khi trên bus chỉ có một cảm biến. SEARCH ROM (F0h) : Lệnh này cho phép bộ điều khiển bus có thể dò tìm được số lượng thành viên slave đang được đấu vào bus và các giá trị cụ thể trong 64 bit ROM của chúng bằng một chu trình dò tìm. ALARM SEARCH (ECh) : Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cảm biến DS1820 chỉ đáp ứng lệnh này khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng. Điều kiện cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH và nhỏ hơn giá trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã được đặt trên thanh ghi trong bộ nhớ của cảm biến. Lệnh chức năng bộ nhớ: Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM để định địa chỉ cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức năng DS1820. Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ nháp (scratchpath) của cảm biến DS1820. Khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo được và xác định chế độ cung cấp điện áp nguồn. Các lệnh chức năng có thể được mô tả ngắn gọn như sau: WRITE SCRATCHPAD (4Eh) : Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên được ghi vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi TL (byte 3 của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhất và kế tiếp là những bit có ý nghĩa giảm dần. Cả hai byte này phải được ghi trước khi thiết bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất hiện. READ SCRATCHPAD (BEh) :Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit có ý nghĩa nhất của byte 0 và tiếp tục cho đến byte thứ 9 (byte 8 - CRC). Thiết bị chủ có thể xuất ra một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có một phần của dữ liệu trên bộ nhớ nháp cần được đọc. COPYSCRATCHPAD (48h) : Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ EEPROM. Nếu cảm biến được sử dụng trong chế độ cấp nguồn l bắt đầu việc đo. CONVERT T (44h) : Lệnh này khởi động một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị phân). Sau khi chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte trong bộ nhớ nháp. Thời gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển đổi nếu thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0. READ POWER SUPPLY (B4h) : Một lệnh đọc tiếp sau lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấp nguồn như thế nào, giá trị đọc được bằng 0 nếu cấp nguồn bằng chính đường dẫn dữ liệu và bằng 1 nếu cấp nguồn qua một đường dẫn riêng. Các cách kết nối DS18B20 với vi điều khiển Hình 2.4 : kết nối “1 dây” Hình 2.5: kết nối dùng nguồn ngoài Chương 3 KHÁI QUÁT MODULE RF Nội dung chính Các đặc tính của RF module Chức năng các chân RF module Các đặc tính của RF module Bộ thu phát HM-TR được thiết kế cho các ứng dụng cần truyền dữ liệu không dây. Nó có đặc tính là tốc độ dữ liệu cao, khoảng cách truyền xa, tần số có thể lập trình được, cấu trúc khung USART có thể cấu hình được và dòng ở chế độ sleep thấp. Giao thức giao tiếp được tự động điều khiển và hoàn toàn trong suốt với người dùng. Module này có thể thêm vào các hệ thống đã tồn tại sẵn với giá thành thấp,hiệu suất cao và giao tiếp dữ liệu không dây dễ dàng. 1.Điều chế dịch tần số FSK 2.Giao tiếp hai chiều half-duplex 3.Tần số hoạt động 315/433/868/915 Mhz 4.Tần số có thể lập trình được,đươc phép sử dụng các ứng dụng FDMA 5.Tự động điều khiển RF sang USART,tin cậy và dễ dàng sử dụng 6.Cấu trúc khung USART có thể cấu hình được với tốc độ dữ liệu từ 300-19200bps 7.Sử dụng chân ENABLE để điều khiển chu kỳ lặp lại theo những yêu cầu khác nhau của ứng dụng. 8.Hiệu suất cao,khoảng cách truyền xa 300m ở những khu vực trống 9.Giao thức UART với chuẩn TTL /RS232 10.Không cần bộ cộng hưởng RF trong mạch ứng dụng Hình 3.1: module giao tiếp RF Chức năng các chân RF module Cấu trúc chân của RF module như sau: Hình 3.2:Cấu trúc chân RF module Chân 1: cung cấp nguồn VDD 5V Chân 2: xuất dữ liệu (DTX) ra khỏi module, được nối với chân thu RX của vi xử lý Chân 3: nối đất GND Chân 4: nhận dữ liệu (DRX) tới module,được nối với chân phát TX của vi xử lý Chân 5: cấu hình các thông số cho RF module (CONFIG). Khi bật nguồn nếu chân này ở mức cao thì nó sẽ chuyển vào mode config. Khi giao tiếp thì chân này được đặt ở mức thấp. Chân 6: Khi RF module đang hoạt động bình thường, nếu chân này được đặt mức thấp thì nó sẽ chuyển sang chế độ sleep ngay lập tức. Khi nó được đặt mức cao (ENABLE) thì RF module hoạt động lại bình thường. Để cấu hình cho RF module ta nối mạch theo sơ đồ sau: Hình 3.3:Kết nối RF Ta dùng phần mềm HM-TR parameter setup để cấu hình cho RF module: Hình 3.4: Setup cấu hình cho RF Write: lưu cấu hình mới cho RF module Read: đọc cấu hình hiện tại trong RF module Default: khôi phục lại cài đặt gốc cho RF module Chương 4 GIỚI THIỆU GSM MODEM VÀ TẬP LỆNH AT Nội dung chính Giới thiệu về tập lệnh ATcommand 4.1.1 Sơ đồ nhân của GSM modem 4.1.2 Kết nối anten 4.1.3 Nguồn cung cấp cho kết nối 4.1.4 Các chân kết nối của GSM modem Giới thiệu về kết nối GSM modem và RS232 Giới thiệu về kết nối GSM modem và RS232 Sơ đồ nhân của GSM modem Hình 4.1: Sơ đồ khối bên trong GSM modem. Đặc tính kỹ thuật của GSM modem Kết nối anten Hình 4.2: kết nối SMA cho anten Kết nối anten là một loại kết nối SMA với một điện trở RF là 50Ω Nguồn cung cấp cho kết nối Hình 4.3 Nguồn cung cấp kết nối Bảng 4.1: chân nguồn và ngoại vi Chú ý: Cả hai pin 3 và pin 4 được sử dụng giao diện của GPIO. Chúng đều bị nghiêm cấm kết nối chúng vào bất kỳ nguồn cung cấp nào Các chân kết nối của GSM modem Hình 4.4 15 chân kết nối Bảng 4.2:Các chân kết nối GSM modem Chức năng các chân DB9: Giới thiệu về tập lệnh ATcommand Tập lệnh này là cơ sở lập trình và điều khiển dùng để tương tác giữa thiết bị GSM modem với bộ VXL. Thông qua tập lệnh, VXL có thể gọi các tác vụ đơn giản như đọc tin nhắn, xóa tin nhắn, gửi tin nhắn . Một số lệnh có liên quan đến SMS: 1. AT+CMGF= : chọn chế độ tin nhắn. =0 : định dạng PDU. =1 : định dạng Text. 2. AT+CSCA=”number” : chọn số trung tâm . Với “number” : số trung tâm. AT+CSCA? : kiểm tra số trung tâm. Với các mạng di động của Việt Nam thì số trung tâm thường là “+084980200030”. 3. Lựa chọn thủ tục nhận tin nhắn từ mạng. Cú pháp: AT+CNMI=,,,,. Ý nghĩa các thông số: :điều khiển việc chế biến các đoạn code được cấp gửi.Có các giá trị 0,1,2,3. : định tuyến cho phía phát SMS.Có các giá trị 0,1,2,3 (mặc định là 0). :thiết lập luật lệ cho việc thu và lưu trữ các tin nhắn kiểu CBM(Cell Broadcast Message). Có các giá trị 0,1,2,3 (mặc định là 0). :cho biết trạng thái SMS.Có các giá trị 0,1,2(mặc định là 0). :bằng 0 hay 1(mặc định là 0). 4. AT+CMGR=”index” : đọc tin nhắn. Với “index” là vị trí tin nhắn trong bộ nhớ, thường từ 0 đến 75. 5. AT+CMGL= : liệt kê tin nhắn, cho phép gửi toàn bộ tin nhắn từ bộ nhớ tới thiết bị ngoài. =0 :chỉ liệt kê các tin nhắn mới. =1 :liệt kê các tin nhắn đã đọc. =2 :liệt kê các tin nhắn đã gửi. =3 :liệt kê các tin nhắn chưa gửi . =4 :liệt kê tất cả các tin nhắn. 6. AT+CMGW : lệnh ghi tin nhắn xuống bộ nhớ modem. Cú pháp : AT+CMGW=”số di động” {Enter} >Gõ nội dung tin nhắn và bấm Ctrl+Z. 7. AT+CMSS= : lệnh gửi tin nhắn đã được lưu trong bộ nhớ. Với là vị trí tin nhắn được lưu trong bộ nhớ. Trường hợp muốn gửi tin nhắn đến một số khác (không phải số lưu trong bộ nhớ bằng lệnh AT+CMGW) , ta thêm vào số điện thoại đằng sau . Cú pháp: AT+CMSS=,”số di động” . 8. AT+CMGS : Lệnh gửi tin nhắn. Cú pháp : AT+CMGS=”số di động “ {Enter} >Gõ nội dung tin nhắn rồi nhấn Ctrl+Z. 9. AT+CMGD= : lệnh xóa tin nhắn trong bộ nhớ tại vị trí . AT+CMGD=, : xóa tin nhắn dựa vào . Với : - 0 : xóa tin nhắn tại vị trí . - 1 : xóa mọi tin nhắn đã đọc. - 2 : xóa mọi tin nhắn đã đọc và đã gửi. - 3 : xóa mọi tin nhắn đã đọc, đã gửi hay chưa gửi. - 4 : xóa tất cả tin nhắn. 10. AT+CPMS=(hay ) : lựa chọn bộ nhớ để lưu tin nhắn. ● : bộ nhớ dùng để đọc và xóa tin nhắn. Nó có thể là: - “SM” : kho lưu trữ tin nhắn SMS trong Sim(mặc định). - “BM” : kho lưu trữ tin nhắn CBM(Cell Broadcast Message) (trong các bộ nhớ không ổn định-volatile memory). - “SR” : báo cáo trạng thái lưu trữ tin nhắn (trong sim hay những nơi khác(trừ volatile memory) trong thiết bị di động ). ● :bộ nhớ dùng để viết và gửi tin nhắn.Nó có thể là - “SM” : kho lưu trữ tin nhắn trong Sim. THIẾT KẾ VÀ THI CÔNG Phần II Chương 5: Cơ sở thiết kế Chương 6: Lưu đồ giải thuật và chương trình Chương 7: Kết quả thi công và hướng phát triển Chương 5 CƠ SỞ THIẾT KẾ Nội dung chính Sơ đồ nguyên lý và sơ đồ khối 5.1.1 Sơ đồ khối Sơ đồ nguyên lý 5.2 Giới thiệu về IC MAX232 Sơ đồ nguyên lý và sơ đồ khối 5.1.1 Sơ đồ khối Sơ đồ khối tổng quát Hệ thống gồm 3 khối chính: server, khối trung tâm và thiết bị ngoại vi. Server chính là hệ thống tương tác với người dùng, nó có thể là một chiếc điện, hay một GSM modem gắn với máy tính. Khối trung tâm là thiết bị trung gian điều phối giao tiếp giữa server và ngoại vi. Thiết bị ngoại vi bao gồm các thiết bị giám sát, quản lý như: thiết bị đo nhiệt độ, ẩm độ,thiết bị đếm số người... Hình 5.1: Sơ đồ khối tổng quát Nguyên lý hoạt động như sau: Hoạt động của node trung tâm chia làm hai phần chính: giao tiếp với modem GSM và giao tiếp node ngoại vi. Khối trung tâm có nhiệm vụ là phân tích, truyền đạt thông tin từ server (user) tới thiết bị ngoại vi. Trong quá trình hoạt động, các thiết bị ngoại vi chỉ tương tác với node trung tâm khi có yêu cầu của server hoặc trong trường hợp node trung tâm cấp quyền ưu tiên cho nó. Giao tiếp node trung tâm: bất kỳ lệnh nào từ server gửi tới node trung tâm đều được đặt trong cặp dấu sao(*) với hai mục đích chính: điều khiển node trung tâm hay node ngoại vi. Điều khiển node trung tâm: thay đổi password node trung tâm hay thay đổi số phone server. Password node trung tâm chính là mật mã đễ truy cập vào node này. Khi password sai thì không thể truy cập node trung tâm. Phone sever là số điện thoại mà node trung tâm sẽ gửi cảnh báo về. Điều khiển node ngoại vi: ta dùng một ký tự để định nghĩa node ngoại vi. Node trung tâm không hiểu nội dung lệnh điều khiển mà server gửi tới node ngoại vi mà chỉ biết tên của node ngoại vi. Trong trường hợp server muốn đăng ký node ngoại vi mới hay thiết lặp các thông số mới cho node ngoại vi. Node trung tâm sẽ kiễm tra là node ngoại vi mới hay node ngoại vi đã tồn tại chỉ cần thiết lập lại thông số. Sau đó nó gửi toàn bộ nội dung điều khiển tới node ngoại vi. Nếu node ngoại vi tồn tại thì nó sẽ đáp ứng lại lệnh từ node trung tâm. Node trung tâm sẽ gửi đáp ứng về lai server để chứng thực node này tồn tại hay không, đồng thời mang theo nội dung mà node trung tâm muốn gửi cho sever. Các node ngoại vi hoạt động dựa vào quyền ưu tiên node trung tâm cấp pháp. Tên của node ngoại vi được qui định bởi Server và chính node ngoại vi đó, không phụ thuộc vào Node trung tâm. Và node trung tâm cấp quyền ưu tiên cho ngoại vi dựa vào tên của từng node. Điều này có nghĩa là ngoại vi chỉ có thể gửi tin tức về trung tâm khi có đang được quyền ưu tiên hay khi trung tâm yêu cầu. Hình 5.2: Quá trình truyền tin(1) Quá trình đăng ký cho thiết bị ngoại vi bắt đầu từ việc Server gửi lệnh đăng ký tới node trung tâm. Nội dung tin nhắn đăng ký bao gồm : Serial Option Device Parameter 1/ Serial: đây là một dãy 6 ký tự dùng để phân biệt các nhánh với nhau, đồng thời được biết đến như password của node trung tâm, server có thể thay đổi serial này. Mặc định lần đầu truy cập Serial là 6 số 021187. Nếu message từ server tới node trung tâm có số serial sai thì node trung tâm sẽ gửi tin nhắn sai password về user 2/ Option: mang nội dung thông tin từ server tới node trung tâm: “R”: đăng ký node ngoại vi mới hoặc thiết lập thông số mới cho node ngoại vi. “C”: kiểm tra trạng thái của các node ngoại vi. “S”: thay đổi số serial cho node trung tâm. Theo sau sẽ là 6 số serial mới và kết thúc bằng dấu *. “P”: thay đổi số phone ma node trung tâm sẽ gửi cảnh báo về trong trường hợp khẩn. Theo sau sẽ là số phone mới và kết thúc bằng dấu *. 3/ Device: gồm 8 bit đặc trưng cho các ngoại vi. Trong trường hợp thay đổi số serial thì 8 bit này bằng 0. Trường hợp kiểm tra hết thì 8 bit bằng 1. 4/ Parameter: các thông số cài đặt từ server đến node ngoại vi. Thành phần này chỉ có trong trường hợp đăng ký thiết bị. Khi tin nhắn điều khiển từ server tới Trung Tâm, sever sẽ xử lý nội dung tin nhắn. Khi yêu cầu của chỉ thay đổi số serial hay số phone thì Trung Tâm sẽ xử lý và gửi đáp ứng về về server. Trong trường hợp lệnh điều khiển liên quan tới node ngoại vi thì Trung tâm sẽ gửi lệnh tới node ngoại vi. Hình 5.3: Quá trình truyền tin(2) Nội dung lệnh điều khiển từ Trung Tâm đến ngoại vi do Server và ngoại vi quy định. Trung tâm chỉ kiểm soát ngoại vi qua tên của nó. Và thông qua các lệnh gửi tới và lệnh phản hồi nó biết được là ngoại vi còn hoạt động hay không. Thông số Device đầu tiên chính là tên thiết bị. Khi ngoại vi nhận được tên Device này, nó so sánh xem có phải tên của chính nó hay không. Nếu như đúng, nó sẽ nhận tiếp các thông số theo sau và bắt đầu xử lý. Trong trường hợp không có thiết bị nào tồn tài thì sau một thời gian, Trung Tâm sẽ gửi lại phản hồi về Server, đồng thời xóa tên của thiết bị ra khỏi bộ nhớ. Trong trường hợp tồn tại thiết bị thì ngoại vi sẽ xử lý các command và gửi về các respone về trung tâm. Hình 5.4: Quá trình truyền tin(3) Khi respone được chuyển tới trung tâm, trung tâm sẽ xử lý, gắn thêm số serial của node trung tâm và gửi về server.Tại node trung tâm ta sử dụng vi xử lý ATmega 162 với lưu đồ giải thuật như sau: Sơ đồ khối trung tâm Trong phạm vi của đề tài này chúng em thiết kế mạch giao tiếp với GSM modem và giao tiếp với thiết bị ngoại vi đo nhiệt độ thông qua RF module. Các kết quả đo đạc của thiết bị ngoại vi hay các lệnh từ người dùng điện thoại sẽ được xử lý tại phần trung tâm này. Hình 5.5: sơ đồ khối trung tâm Sơ đồ khối ngoại vi Hình 5.6: sơ đồ khối ngoại vi Trong phần ngoại vi này, chúng em xin thiết kế một mạch đo nhiệt độ để minh họa. Mạch này gồm phần chính là vi xử lý ATmega16L giao tiếp với RF module và cảm biến nhiệt độ DS18B20. Mục đích chính của phần này là thiết kế phần node trung tâm một cách linh hoạt sao cho khi ta them vào các node ngoại vi khác mà không cần thay đổi node trung tâm. 5.1.2 Sơ đồ nguyên lý Sơ đồ phần cứng gồm hai khối chính là khối trung tâm và khối ngoại vi. Khối trung tâm gồm phần chính là vi xử lý ATmega162 với hai USART. USART0 giao tiếp với modem qua max232,USART1 để giao tiếp với RF module theo chuẩn TTL. Ngoài ra còn một số đèn led báo hiệu, giao tiếp SPI được mở rộng để giao tiếp với thẻ nhớ. Hình 5.7: Sơ đồ nguyên lý trung tâm Khối ngoại vi với nhiệm vụ đo nhiệt độ môi trường xung quanh. Nó sử dụng ATmega16L làm vi xử lý trung tâm giao tiếp với RFmodule qua USART theo chuẩn TTL và cảm biến nhiệt độ DS18B20 theo giao thức 1Wire. Hình 5.8: Sơ đồ nguyên lý ngoại vi Giới thiệu về IC MAX232 Khi kết nối GSM modem(slave) đến mạch để tương tác xử lý các lệnh được gửi từ cellphone master, ta phải dùng trung gian đường truyền bằng IC MAX232. Do cellphone có cổng nối tiếp là cổng COM 9 chân, ta phải chuyển tín hiệu này để có thể truyền đến chân RXD và TXD của IC ATmega8535. Đây cũng là chức năng chính của IC MAX232. Họ IC MAX220 đến MAX249 là bộ nhận/lái tín hiệu dùng cho các chuẩn giao tiếp truyền thông EIA/TIA-232E và V.28/V.24. Điểm vượt trội của họ MAX232: Vận hành từ nguồn đơn 5V. Khi tắt, vận hành ở chế độ nhận công suất thấp. Thỏa tất cả các chuẩn EIA/TIA-232E và V.28. Nhiều bộ lái và bộ thu. Ngõ ra của bộ lái và bộ thu ở 3 trạng thái. Sơ đồ chân của IC Max232 và sơ đồ các khối bên trong của nó: Hình 5.9: Sơ đồ chân MAX232. Hình 5.10: Sơ đồ khối bên trong MAX232. Chương 6 LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH Nội dung chính Cách sử dụng codevisionAVR Lưu đồ giải thuật khối trung tâm Lưu đồ giải thuật khối ngoại vi Chương trình chính 6.4.1 Chương trình khối trung tâm 6.4.2 Chương trình khối ngoại vi Cách sử dụng codevisionAVR Trong đề tài này, ta sử dụng Codevision AVR để biên dịch chương trình C ra file hex. Khởi động AVR ta sẽ có màn hình như sau: Hình 6.1: cách sử dụng codevisionAVR(1) Tạo môt project mới để viết chương trình: Hình 6.2: cách sử dụng codevisionAVR(2) Chọn source nếu muốn chương trình tạo ra một cửa sổ trắng để bạn tự tạo ra mã Chọn Project nếu muốn sử dụng “codewizardAVR” CodewizardAVR giúp chúng ta khởi tạo các thông số ban đầu cho việc cho việc lập trình, điều này giúp chúng ta tiết kiệm được rất nhiều thời gian, tránh được những sai lầm đáng tiếc do không tìm hiểu kỹ cấu trúc vi xử lý. Hình 6.3: cách sử dụng codevisionAVR(3) Giao diện codewizard sẽ có hình như sau: Hình 6.4: cách sử dụng codevisionAVR(4) Trong đề tài này ta chọn chip ATmega 162 và tần số dao động thạch anh là 7.3728 Mhz. Đồng thời ta khởi tạo USART0 và USART1, cấu hình input/output cho các PORT, enable giao thức truyền dữ liệu SPI. Hình 6.5: cách sử dụng codevisionAVR(5) USART0: tốc độ 115200bps,cấu trúc khung là 8 Data, 1 Stop, No Parity, mode Asynchronous. USART1: tốc độ 9600bps, cấu trúc khung là 8 Data, 1 Stop, No Parity, mode Asynchronous, sử dụng ngắt nhận. Hình 6.6: cách sử dụng codevisionAVR(6) Hình 6.7: cách sử dụng codevisionAVR(7) Ta cấu hình SPI cho chip ở chế độ Master, Mode 0. Ngoài ra ta cấu hình PORTC.0,1,2 ở chế độ output để điều khiền các led. Hình 6.8: cách sử dụng codevisionAVR(8) Sau khi thiết lập các thông số ban đầu, ta lưu các thiết lập này: File => Generate, Save and Exit Hình 6.9: cách sử dụng codevisionAVR(9) Ta đặt chọn thư mục để lưu tập tin,tên project, và tên đoạn code để hoàn thành quá trình khởi tạo. Sau khi hoàn thành đoạn code, ta lưu lại toàn bộ (Save all) và biên dịch ra mã Hex: Project =>Built All (Ctrl + F9) hoặc ta có thể nhấp trực tiếp vào biểu tượng trên thanh công cụ. Nếu đoạn mã C không có lỗi thì chương trình sẽ hiện ra bảng thông báo no error và các thông số ước đoán về dung lượng file HEX Hình 6.10: cách sử dụng codevisionAVR(10) Trong trường hợp chương trình C có lỗi, CodeVision sẽ hiện bảng thông báo chỉ rõ số lỗi. Hình 6.11: cách sử dụng codevisionAVR(11) Sau khi đã hoàn thành quá trình tạo file HEX, ta bắt đầu quá trình nạp chip. Ở đây ta sử dụng mạch nạp USB AVR910. Sau khi cài driver cho mạch nạp, ta thiết lập các thông số của mạch nạp để tương thích với Codevision. Click chuột phải vào Computer chọn Manage => Device Manager=>Ports(COM &LPT) =>AVR910USB Programer (double click) ta thiết lập các thông số như hình bên dưới Hình 6.12: cách sử dụng codevisionAVR(12) Đồng thời ta thiết lập các thông số cho Codevision: Settings => Programmer Hình 6.13: cách sử dụng codevisionAVR(13) Ta chọn các loại mạch nạp là AVR910, tốc độ Baud la 119200bps, cổng giao tiếp là COM3 (phải giống với các thông số đã thiết lập cho mạch nạp) . Để nạp cho vi xử lý ta chọn Tool => Chip Programer (shift+ F4). Hình 6.14: cách sử dụng codevisionAVR(14) Ta chọn File =>load Flash ,trỏ đến file Hex đã biên dịch. Sau đó chọn Program => Flash để nạp cho vi xử lý, hoàn tất quá trình. Lưu đồ giải thuật khối trung tâm Với yêu cầu của đề tài, ta có thể hình dung khái quát lưu đồ giải thuật như sau: Hình 6.15:lưu đồ node trung tâm 1 Hình 6.16:lưu đồ node trung tâm 2 Sau khi thiết lập các thông số ban đầu cho vi xử lý. ATmega162 sẽ gửi command tới GSM modem để xem có tin nhắn hay không. Nếu có, ATmega162 sẽ xử lý nội dung tin nhắn,còn không thì sẽ giao tiếp với ngoại vi. Nó sẽ lần lượt cấp phát quyền ưu tiên cho thiết bị. Nếu thiết bị nào có tin tức gì cần báo hiệu thì sẽ gửi khi nó có được quyền ưu tiên. Quá trình xử lý tin nhắn bắt đầu với việc lưu số điện thoại gửi tới, sau đó bắt gói tin nhắn bắt đầu bằng ký tự ‘*’. 6 ký tự theo sau chính là số serial, ATmega162 sẽ so sánh số serial đó với 6 số serial của nó (được lưu trong eeprom). Nếu sai thì nó sẽ gửi tin nhắn trở lại số điện thoại mà nó đã lưu để thông báo sai password. Vì số serial dùng để phân biệt với các node trung tâm khác. Vì vậy ta xem nó như password để truy cập vào node trung tâm đó. Nếu đúng số serial thì nó tiếp tục đọc ký tự tiếp theo. 1.Nếu nhận được ký tự ‘S’ thì nó sẽ thay đổi số serial(lưu vào eeprom),đồng thời thông báo đã thay đổi password về server. 2.Nếu nhận được ký tự ‘P’ thì nó sẽ thay đổi số phone server. Và gửi thông báo đã thay đổi phone_server về server. 3.Nếu nhận được ký tự ‘C’ thì nó sẽ tiếp tục nhận tên thiết bị ngoại vi. Sau đó sẽ gửi tin nhắn kiểm tra thiết bị ra ngoại vi. Nếu nhận được respone thì nó sẽ gửi respone đó về server. Trong trường hợp không nhận được phản hồi nào từ ngoại vi. Nó sẽ gửi thông báo thiết bị không còn hoạt động về server. 4.Nếu nhận được ký tự ‘R’ thì nó sẽ tiếp tục nhận các thông số thiết lập, sau đó gửi lệnh đăng ký thiết bị ra ngoại vi. Tương tự nếu nhận respone thì nó gửi respone đó về server, ngược lại nó thông báo thiết bị không còn hoạt động về server. 5.Các trường hợp còn lại, ATmega gửi thông báo sai cấu trúc lệnh về server. Giao tiếp với node ngoại vi: ATmega sẽ lần lượt đọc tên thiết bị lưu trong eeprom và gửi tới thiết bị ngoại vi cùng ký tự P(priority) để cấp quyền ưu tiên. Nếu thiết bị nào có thông báo nào về server thì sẽ gửi khi nó được cấp quyền ưu tiên. Lưu đồ giải thuật khối ngoại vi Hình 6.17: lưu đồ giải thuật khối ngoại vi Chương trình con đọc giá trị nhiệt độ Hình 6.18:Lưu đồ chương trình đọc giá trị nhiệt độ Chương trình chính chương trình khối trung tâm Chương trình đọc tinh nhắn từ modem: #pragma used+ void read_message(void) { char data[9]={'A','T','+','C','M','G','R','=','1'}; array_send0(data,9); putchar(0x0D); } #pragma used- Chương trình xóa tin nhắn: #pragma used+ void del_message(void) { char data[9]={'A','T','+','C','M','G','D','=','1'}; array_send0(data,9); putchar(0x0D); delay_ms(5000); } Bắt đầu gửi tin nhắn tới số phone Server: #pragma used+ void start_send_server(void) { unsigned char i=0; char data[8]={'A','T','+','C','M','G','S','='}; array_send0(data,8); do { putchar(phone_server[i]); i++; } while (phone_user[i] != '"' ); putchar(0x0D); delay_ms(4000); } #pragma used- Chương trình kết thúc quá trình gửi tinh nhắn #pragma used+ void end_send(void) { putchar(0x1A); delay_ms(5000); } #pragma used- chương trình khối ngoại vi Chương trình lọc số: Vì DS18B20 xuất ra biến dạng số float nên khi xuất ra LCD, máy tính, module RF cần phải tách ra hàng trăm, chục, đơn vị, thập phân. void locso(float so) { float temp1,temp2; // t=so/100; // lay fan tram c=so/10; // lay fan chuc d=(so-10*c); // lay hang don vi if(so<0) //Neu ®Çu vao ©m -> ®æi sang d-¬ng temp2=so*-1; else temp2=so; temp1=temp2-(c*10+d); tp1 = (unsigned char)(temp1*10); tp2 = (unsigned char)(temp1*100-tp1*10); tp3 = (unsigned char)(temp1*1000-tp1*100-tp2*10); tp4 = (unsigned char)(temp1*10000-tp1*1000-tp2*100- tp3*10); } Giao tiếp với máy tính hoặc RF: Mạch giao tiếp với máy tính qua cổng com hoặc giao tiep với RF có các thông số sau: Baud Rate 9600. 8 bit datas. 1 bit stop. Non parity. Non Flow control. Xác lập chế độ vi điều khiển (dùng codevisionAVR). // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x2F; UBRR : USART Baud Rate Register. Đây là thanh ghi 12 bit chứa tốc độ BAUD của USART, UBRRH chứa 4 bit cao nhất và UBRRL chứa 8 bit thap còn lại. Trong mạch sử dụng thạch anh 7.3728Mhz. nên cách tính UBRR như sau: UBRR =( Tần số thạch anh /9600*16) -1 =47. Đưa ký tự lên máy tính hoặc RF: Để đưa giá trị lên máy tính hoặc qua RF cần xuất từng ký tự một dựa vào các số đã lọc ở trên . Hàm như sau: void putnum(int a) { switch(a){ case 0: putchar('0'); break; case 1: putchar('1'); break; case 2: putchar('2'); break; case 3: putchar('3'); break; case 4: putchar('4'); break; case 5: putchar('5'); break; case 6: putchar('6'); break; case 7: putchar('7'); break; case 8: putchar('8'); break; case 9: putchar('9'); break; }; } Chương 7 KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Nội dung chính Kết quả thi công 7.1.1 Mạch in trung tâm Mạch in ngoại vi Mạch thực tế 7.2 Kết luận và hướng phát triển Kết quả thi công Ta sử dụng phần mềm orcad 9.2 để thiết kế mạch nguyên lý và mạch layout 7.1.1 Mạch in trung tâm Hình 7.1: mạch in trung tâm Mạch in ngoại vi Hình 7.2: mạch in ngoại vi Mạch thực tế Kết luận và hướng phát triển KẾT LUẬN Từ những yêu cầu đề ra ở phần đầu luận văn, chúng em đã hoàn thành một số yêu cầu sau: Hoàn thành thiết kế mạch giao tiếp trung tâm và mạch kiểm tra nhiệt độ ngoại vi Lập trình giao tiếp giữa node trung tâm và GSM modem để nhận lênh của người dùng Lập trình giao tiếp giữa khối ngoại vi và trung tâm thông qua RF module Tuy nhiên, luận văn cũng còn nhiều thiếu xót và hạn chế: Chưa lưu được dữ liệu giám sát ngay tại node trung tâm Truyền nhận dữ liệu giữa node ngoại vi và node trung tâm với giao thức đơn giản trong khi sử dụng dãy tần số miễn phí nên không đảm bảo được độ chính xác cao HƯỚNG PHÁT TRIỂN Hoàn thiện giao tiếp giữa node ngoại vi và node trung tâm với giao thức truyền Zigbee, lưu giữ liệu giám sát ngay tại thẻ nhớ SD card gắn trên node trung tâm để phục vụ cho việc kiểm tra sau này. TÀI LIỆU THAM KHẢO [1] Sách lập trình C của Đặng Thành Tín [2] Tài liệu codevisionAVR 1986-2006 HP info Tech S.R.L [3] Datasheet ATmega16L và ATmega162 [4] Các trang web

Các file đính kèm theo tài liệu này:

  • docQuản lý thiết bị sử dụng công nghệ gsm.doc