CHƯƠNG I TỔNG QUAN VỀ VI ĐIỀU KHIỂN ATMEGAATmega 8 có công suất cao, tiêu thụ năng lượng thấp, cấu RISC tiến với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN VINH TUẤN
ĐO LƯỜNG ĐIỀU KHIỂN TỪ XA QUA MẠNG ĐIỆN THOẠI DI ĐỘNG BẰNG MODULE SIM900 KẾT NỐI
VI ĐIỀU KHIỂN ATMEGA8
LUẬN VĂN THẠC SĨ CÔNG NGHỆ ĐIỆN TỬ - VIỄN THÔNG
HÀ NỘI – 2014
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN VINH TUẤN
NGÀNH: CÔNG NGHỆ ĐIỆN TỬ – VIỄN THÔNG
CHUYÊN NGÀNH: KỸ THUẬT ĐIỆN TỬ
LUẬN VĂN THẠC SĨ CÔNG NGHỆ ĐIỆN TỬ - VIỄN THÔNG
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS TRẦN QUANG VINH
HÀ NỘI – 2014
Trang 3LỜI CẢM ƠN
Em xin gửi lời gửi cảm ơn sâu sắc đến Thầy PGS TS Trần Quang Vinh đã tạo mọi điều kiện và giúp đỡ em hoàn thành luận văn này Em cũng xin cảm ơn tới các bạn cùng khóa đã hỗ trợ và giải đáp các vướng mắc của em trong suốt quá trình nghiên cứu
Em xin gửi lời cảm ơn các Thầy cô trong Khoa Điện tử - Viễn thông, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội đã tận tình truyền đạt những kiến thức
bổ ích trong thời gian em học tập tại trường
Cuối cùng em xin gửi lời cảm ơn đến gia đình, bạn bè đã luôn bên em, cổ vũ và động viên em trong những lúc khó khăn để hoàn thành luận văn này
Em xin chân thành cảm ơn!
Trang 4LỜI CAM ĐOAN
Tôi xin cam đoan nội dung luận văn là do tôi thực hiện, cùng sự giúp đỡ định hướng của thầy giáo hướng dẫn PGS TS Trần Quang Vinh Kiến thức trình bày trong luận văn được chắt lọc qua quá trình tìm hiểu thực trạng công việc thực tế Tài liệu và bảng biểu lấy từ các nguồn khác được trích dẫn đầy đủ
Nguyễn Vinh Tuấn
Trang 5MỤC LỤC
DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT 4
DANH MỤC CÁC HÌNH VẼ 5
CHƯƠNG I TỔNG QUAN VỀ VI ĐIỀU KHIỂN ATMEGA 7
1.1 Giới thiệu chung 7
1.2 Cấu trúc nhân AVR 8
1.2.1 ALU 8
1.2.2 Thanh ghi trạng thái 8
1.2.3 Các thanh ghi chức năng chung 9
1.2.4 Con trỏ ngăn xếp (SP) 9
1.2.5 Quản lý ngắt 9
1.2.6 Cấu trúc bộ nhớ 10
1.3 Các cổng vào ra (I/O) 11
1.3.1 Thanh ghi DDRx 12
1.3.2 Thanh ghi PORTx 13
1.3.2 Thanh ghi PINx 13
1.4 Bộ định thời 13
1.4.1 Các thanh ghi 14
1.4.2 Đơn vị đếm 14
1.5 USART 17
1.5.1 Tạo xung clock 18
1.5.2Định dạng khung truyền 19
1.5.3 Khởi tạo USART 20
1.5.4 Truyền thông dữ liệu-bộ truyền USART 20
1.5.6 Nhận dữ liệu-bộ nhận USART 20
1.6 Bộ biến đổi A/D 21
CHƯƠNG II: GIỚI THIỆU MODULE SIM 900 25
2 1 Tổng quan về Module SIM900 25
2.2 Khảo sát sơ đồ chân và chức năng từng chân 26
2.3 Các chế độ hoạt động của sim900 28
2.3.1 Chế độ Hoạt động 28
2.3.2 Chế độ tắt nguồn 29
2.3 Tập lệnh AT 29
2.3.1 Cú pháp tổng quát của các lệnh AT mở rộng 30
2.3.2 Mã kết quả của lệnh AT 30
2.3.4 Các lỗi +CMS và ý nghĩa của các lỗi 30
2.3.5 Mã lỗi +CMS 31
CHƯƠNG III: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 36
3.1 Kiến trúc phần cứng 36
3.2 Tích hợp mạch phần cứng 39
3.3 Công cụ lập trình 40
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 49
TÀI LIỆU THAM KHẢO 50
PHỤ LỤC 51
Trang 6DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
RAM : Random Access Memory
ROM : Read Only Memory
RE : Read Enable signal
RISC: Reduced Instruction Set Computing
AGSI : Advanced Simulation Interface
ARM : Advanced RISC Machine
RTOS : Real Time Operating System
VCC : Voltage Connected to Collector
ISS : Instruction Set Simulator
IDE : Intergrated Development Environment
LED : Light Emitting Diode
ADSL : Asymmetric Digital Subscriber Line
AM : Amplitude Modulation
ARIB : Association of Radio Industries and Business
ASK : Amplitude Shift Keying
CFO : Carrier Frequency Offset
CIR : Channel Impulse Response
CP : Cycle Prefix
CPE : Common Phase Error
DAB : Digital Audio Broadcasting
DC : Direct Current
DFS : Dynamic Frequency Selection
DFT : Discrete Fourier Transfrom
DQPSK : Differential Quadrature Phase Shift Keying
FDM : Frequency Divition Multiplexing
FDD : Frequency Division Duplexing
FEC : Forward Error Correction
FFT : Fast Fourier Transfrom
FM : Frequency Modulation
Trang 7DANH MỤC CÁC HÌNH VẼ
Hình 1.1:Sơ đồ cấu trúc ATmega8 7
Hình 1.2 : Thanh ghi trạng thái SREG 8
Hình 1.3 Thanh ghi chức năng chung 9
Hình 1.4: Thanh ghi con trỏ ngăn xếp 9
Hình 1.5: Bản đồ bộ nhớ chương trình 11
Hình 1.6 Bản đồ bộ nhớ dữ liệu SRAM 11
Hình 1.7 Sơ đồ cấu trúc bộ định thời 14
Hình 1.8 Đơn vị đếm 14
Hình 1.9 Sơ đồ đơn vị so sánh ngõ ra 15
Hình 1.10 Thanh ghi điều khiển bộ định thời 15
Hình 1.11 Thanh ghi bộ định thời 16
Hình 1.12: Thanh ghi mặt nạ ngắt TIMSK 16
Hình 1.13 Thanh ghi cờ ngắt bộ định thời 16
Hình 1.14 Sơ đồ khối bộ USART 18
Hình 1.15 Đơn vị tạo xung clock 19
Hình 1.16 Định dạng khung truyền 19
Hình 1.17 Sơ đồ bộ biến đổi A/D 21
Hình 1.17a Thanh ghi ADMUX 22
Hình 1.18 Thanh ghi điều khiển và trạng thái ADC 22
Hình 1.19 Thanh ghi dữ liệu ADC 24
Hình 2.1: Sơ đồ chức năng Sim 900 25
Hình 2.2 Sơ đồ chân của Module Sim900 26
Hình 2.3 Ứng dụng mô hình triển khai thực tế 34
Hình 3.1 Sơ đồ khối kết nối vi điều khiển với modul sim 900 36
Hình 3 2 Sơ đồ khối của hệ thống 36
Hình 3.3 mạch nguồn cung cấp 37
Hình 3.4 Mạch ATmega8 kết nối header 37
Hình 3.5 Mạch RS232 38
Hình 3.6 Cầu phân áp biến trờ 38
Hình 3.7 mạch Rơle đóng ngắt tải công suất 39
Hình 3.8 Mạch Vi điều khiển ATmega8 39
Hình 3.9 Mạch ModulSim900 40
Giao diện kết nối giữa Mạch ATmega8 và ModulSim900 40
Hình 3.10 Tạo project 40
Hình 3.11 Chọn lọa chip 41
Hình 3.11 Chọn cấu hình ATmega8 41
Hình 3.12 Giao diện chương trình 42
Hình 3.13 Các hàm biến được định nghĩa 44
Hình 3.14 lưu đồ hoạt động, cấu trúc của chương trình 44
Hình 3.15 mô tả chu trình gọi hàm xử lý dữ liệu 45
Hình 3.16 Tạo project chương trình java 46
Hình 3.17 Sơ đồ cây các hàm biến xử lý số liệu 46
Hình 3.20 Tương tác gọi hàm xử lý giữa các khối chức năng 47
Hình 3.18 Giao diện chương trình trên điện thoại khi hoạt động 48
Trang 8MỞ ĐẦU
Hiện nay, xung quanh ta bắt gặp nhiều sản phẩm công nghệ điện – điện tử với những quy mô to, nhỏ ở tất các các lĩnh vực viễn thông, y tế, giáo dục, … Trên thế giới các nước phát triển công nghệ, ứng dụng điện tử điều khiển đo lường đã phát triển từ lâu, nhưng ở Việt Nam chúng ta đang phát triển và còn khá mới, hầu hết chúng ta mới nhập nguyên sản phẩm phục vụ cho một ứng dụng mà chưa tự tạo riêng cho mình nhiều ứng dụng mang tính công nghệ đặc biệt để đáp ứng nhu cầu thực tế của chúng ta Với những yêu cầu trên, đề tài tập trung vào việc phát triển module
“ĐO LƯỜNG ĐIỀU KHIỂN TỪ XA QUA MẠNG ĐIỆN THOẠI DI ĐỘNG BẰNG MODULE SIM 900 KẾT NỐI VI ĐIỀU KHIỂN ATMEGA8” Phạm vi đề tài và ứng dụng: Hệ thống đo lường tín hiệu đo điện áp đầu vào, đưa tín hiệu điều khiển lối ra, khi có các tác động từ đầu vào (bật nguồn, cảm biến, công tắc hành trình…) hệ thống sẽ gửi tin nhắn thông báo trạng thái tới người điều khiển, người sử dụng tương tác với hệ thống phần cứng bằng việc gửi tin nhắn theo tập lệnh được định nghĩa từ trước Hệ thống hiện được áp dụng vào việc đo giá trị điện áp biến đổi biến trở, điều khiển bật tắt đèn, các ứng dụng đơn giản tương tự
Tuy nhiên do thời gian và kiến thức có hạn nên bản luận văn này chưa thể đề cập được đầy đủ mọi vấn đề liên quan, và chắc chắn không tránh khỏi những thiếu sót
Em rất mong nhận được sự thông cảm và hy vọng nhận được nhiều ý kiến đóng góp để
em có thêm những kiến thức quý báu cho những công việc tương lai
Em xin chân thành cảm ơn !
Trang 9CHƯƠNG I TỔNG QUAN VỀ VI ĐIỀU KHIỂN ATMEGA
ATmega 8 có công suất cao, tiêu thụ năng lượng thấp, cấu RISC tiến với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích 8bit, 16 MIPA tại tấn số đặt 16MHz, bộ nhân 2 chu kỳ On-chip, Power-on Reset và Brown-out Dectectiion có thể lập trình, bộ dao động RC bên trong có thể lập trình các mức, 5 mode ngủ ( Idle, ADC Noise reduction, Power-save, power-down và Standby), có khả năng Reset khi bật nguồn, khả năng dò lỗi Brown out laapjt rình được, có nguồn ngắt trong và ngoài Thiết bị được sản xuất áp dụng công nghệ tích hợp bộ nhớ non-volatile cao của Atmel
Bộ nhớ chương trình Flash này có thể lập trình thông qua ghép nối tiếp SPI bằng chương trình lập trình boot có thể sử dụng bất kỳ một ghép nối nào để download chương trình ứng dụng trong bộ nhớ Flash Mạch gồm có Atmega8, Sim900, port mở rộng, cổng Com kết nối với máy tính, giao tiếp với Sim900
Hình 1.1:Sơ đồ cấu trúc ATmega8
ATmega8 là vi điều khiển 8 bit, 8Kbyte flash, 512byte EEPROM, 1Kbyte SRAM, có hai bộ timer/couter 8 bit và 01 bộ timer/couter 16 bit, có 3 kênh điều khiển xung, 6 kênh lối vào chuyển đổi DC độ phân giải 10 bit dựa trên kiến trúc RISC Sử dụng mạch giao động ngoài từ 0-8Mhz với Atmega8L, với atmega8 từ 0-16Mhz ATmega 8
Trang 10hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,
1.2 Cấu trúc nhân AVR
AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữ liệu Các lệnh được thực hiện chỉ trong một chu kỳ xung clock Bộ nhớ chương trình được lưu trong bộ nhớ Flash
1.2.1 ALU
ALU làm việc trực tiếp với các thanh ghi chức năng chung Các phép toán được thực hiện trong một chu kỳ xung clock Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit
1.2.2 Thanh ghi trạng thái
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic
Hình 1.2 : Thanh ghi trạng thái SREG
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)
V, For signed tests (S=N XOR V)S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong các lệnh BLD,BST)
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt Nếu bit này
ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.)
Trang 111.2.3 Các thanh ghi chức năng chung
Hình 1.3 Thanh ghi chức năng chung
1.2.4 Con trỏ ngăn xếp (SP)
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit.Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E(Trong bộ nhớ RAM
là $5E) Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp
Hình 1.4: Thanh ghi con trỏ ngăn xếp
Khi chương trình phục vu 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 hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi 1.2.5 Quản lý ngắt
Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình trạng sẵn xàng
cho đổi dữ liệu của mình.Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ
Trang 12báo cho CPU biết thông qua cờ RXC,hợc khi nó đã truyền được một byte thì cờ TX được thiết lập…
Khi có tín hiệu báo ngắtCPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trường hợp Trường hớp ngắt này có mức ưu tiên cao hơn thì nó sẽ được phục vụ.Còn nó mà có mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua
Bộ nhớ ngăn xếplà vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên Để truy nhập vào SRAM thông thường thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có địa chỉ :SPL :0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E
Khi chương trình phục vu 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
1.2.6 Cấu trúc bộ nhớ
AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chương trình.Ngoài
ra ATmega8 còn có thêm bộ nhớ EEPROM để lưu trữ dữ liệu
1.2.6.1 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
Trang 13Hình 1.5: Bản đồ bộ nhớ chương trình
1.2.6.2 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
Trang 14chú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)
Các thanh ghi Port B
Các thanh ghi Port C
Các thanh ghi Port D
1.3.1 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
Trang 15Ngượ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
1.3.2 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 Px 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
1.3.2 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
- Để đọ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)
- Để đư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
Trang 16Hình 1.7 Sơ đồ cấu trúc bộ định thời
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 1.4.2 Đơ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.8 Đơ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
Trang 17- 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)
1.4.3 Đơn vị so sánh ngõ ra
Hình 1.9 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
1.4.4 Mô tả các thanh ghi
Thanh ghi điều khiển bộ định thời/bộ đếm TCCR0
Hình 1.10 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
Trang 18- 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
Thanh ghi bộ định thời/bộ đếm
Hình 1.11 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 mặt nạ ngắt
Hình 1.12: 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.13 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
Trang 19- 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:
Trang 20Hình 1.14 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.5.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:
Trang 21Hình 1.15 Đơ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.5.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)
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)
Trang 221.5.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 1.5.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
1.5.5.1 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
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
1.5.6 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)
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
Trang 231.6 Bộ biến đổi A/D
Vi điều khiểnATmega8 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.17 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
Trang 24Để đ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.17a 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:
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
Trang 25Bit 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 :ADCAuto 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
Trang 26Hình 1.19 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
Trang 27CHƯƠNG II: GIỚI THIỆU MODULE SIM 900
2 1 Tổng quan về Module SIM900
Giới thiệu:
- SIMCom giới thiệu Module Sim900 là một module GSM/GPRS cực kỳ nhỏ gọn, được thiết kế cho thị trường toàn cầu Sim900 hoạt động được ở 4 băng tần GSM 850MHz, EGSM 900MHz, DCS 1800MHz và PCS 1900MHz như là một loại thiết bị đầu cuối với một Chip xử lý đơn nhân đầy sức mạnh, tăng cường các tính năng quan trọng dựa trên nền vi xử lý ARM926EJ-S, cho bạn nhiều lợi ích từ kích thước nhỏ gọn (24x24 mm), đáp ứng những yêu cầu về không gian trong các ứng dụng M2M
- GSM Module Sim900 là một sản phẩm do AT-COM phát triển nhằm giúp người sử dụng có thể khai thác các tính năng của Sim900 một cách dễ dàng Board hỗ trợ khá đầy các ngõ ra của Module Sim900 ( RS232, Audio, ADC, VRTC, PWM, I2C ) Dễ kết nối kết nối với các dòng vi điều khiển như PIC, AVR, ARM, Arduino để phát triển các ứng dụng điều khiển, giám sát qua môi trường mạng GSM, GPRS Ngõ ra RS232 giúp giao tiếp máy tính và lập trình cho Module Sim900 thông qua tập lệnh AT COMMAND
1.1 Đặc điểm kĩ thuật của GSM Module Sim900
Trang 28- Nguồn xung dùng IC LM2596 cho dòng tải 3A, tần số đáp ứng 150Khz
- Điện áp ngõ vào: 7-12V DC
- Điện áp ngõ ra : 4.5V, 4V, 3.3V chọn bằng “jumper select “ trên mạch
Giao tiếp máy tính:
- Cổng USB 2.0 kiểu B cho phép SIM900 giao tiếp máy tính
- Sử dụng IC FT232RL chuyển đổi USB TO UART
Đế sim card tích hợp trên board
Tích hợp gõ ra speaker, Mic
Header, RS232, ADC,VRTC, I2C, PWM
Hỗ trợ source code driver sim900
Hỗ trợ thiết kế shematic cho sim900
Kích thước nhỏ ngọn 47mm x 34.29mm
2.2 Khảo sát sơ đồ chân và chức năng từng chân
Khảo sát sơ đồ chân và chức năng từng chân
Hình 2.2 Sơ đồ chân của Module Sim900
STT Tên chân I/O Miêu tả
+ PIN 1: PWRKEY I
PWRKEY được dùng để bật hay tắt nguồn hệ thống Người sử dụng điều khiển PWRKEY ở mức điện áp thấp trong một thời gian ngắn bởi vì hệ thống cần có một khoảng thời gian ngắn để kích sim900 hoạt động
- PIN 2: PWRKEY_OUT O
Khi kết nối PWRKEY và PWRKEY_OUT , người sử dụng kích hoạt nó trong một thời gian ngắn sau đó thoát ra thì cũng có thể khởi động hoặc tắt các module
Trang 29- PIN 5: DCD O Phát hiện dữ liệu mang theo
- PIN 6: DSR O Dữ liệu cài đặt sẵn sàng
- PIN 7: CTS O Xóa để gửi
- PIN 8: RTS I Yêu cầu để gửi
- PIN 9: TXD O Truyền dữ liệu
- PIN10: RXD I Nhận dữ liệu
- PIN 11: DISP_CLK O Khối hiển thị
- PIN 12: DISP_DATA I/O
- PIN 13: DISP_D/C O
- PIN 14: DISP_CS
- PIN 15: VDD_EXT O Nguồn ra 2.8V
- PIN 16: NRESET I Reset lại sim900
Ngõ vào cho RTC: khi không có nguồn cungcấp cho hệ thống
Ngõ vào nguồn dữ trữ: khi nguồn chính đã có và nguồn dữ trữ ở mức thấp
- PIN 27: DBG_TXD O Gỡ lỗi và nâng cấp firmware
- PIN 28: DBG_RXD I
- PIN 29: GND Nối đất
- PIN 30: SIM_VDD O Cấp nguồn cho simcard
- PIN 31: SIM_DATA I/O Dữ liệu đầu ra của sim
- PIN 32: SIM_CLK O Sim clock
- PIN 33: SIM_RTS O Reset lại sim
- PIN 34: SIM_PRESENCE I Phát hiện simcard
- PIN 35: PWM1 O Đầu ra PWM
- PIN 36: PWM2
- PIN 37: SDA I/O Đường truyền dữ liệu I2C
- PIN 38: SCL O Đường truyền I2C
- PIN 39: GND Nối đất
GPIO1/KBR4 O Khối bàn phím
Trang 30Hiệu điện thế chuẩn: Vchuẩn = 4.0V
Hiệu điện thế lớn nhất: Vmax = 4.5V
Hiệu điện thế nhỏ nhất: Vmin = 3.4V
2.3 Các chế độ hoạt động của sim900
Sim900 có ba chế độ hoạt động khác nhau, với các chế độ này thì nguồn tiêu thụ và sự hoạt động cũng khác nhau Chi tiết các chế độ hoạt động của sim900 được thể hiện 2.3.1 Chế độ Hoạt động
+ Chế độ bình thường
- GSM/GPRS SLEEP
Sim900 sẽ tự động đi vào chế độ SLEEP (chế độ nghỉ) nếu DTR được thiết lập là mức cao và không có ngắt ở phần cứng Trong trường hợp này, dòng tiêu thụ của module sim900 sẽ được làm giảm tối thiểu chỉ còn 1.5mA
Trong chế độ SLEEP, các mô-đun vẫn có thể nhận được tin nhắn SMS từ hệ thống bình thường
- GSM IDLE
Trang 31Phần mềm được kích hoạt để hoạt động Sim900 đã đăng nhập vào hệ thống mạng GSM, và sẵn sàng để gửi và nhận tin nhắn,cuộc gọi
- GSM TALK
Kết nối giữa sim900 và thiết bị khác hỗ trợ GPRS được thực hiện Trong trường hợp này, công suất tiêu thụ phụ thuộc vào các thiết lập mạng như DTX bật/tắt, FR/EFR/HR, ăng-ten
- GPRS STANDBY
Sim900 đã sẵn sàng cho việc kết nối GPRS, nhưng không có dữ liệu hiện đang được gửi hoặc nhận được Trong trường hợp này, công suất tiêu thụ phụ thuộc vào các thiết lập mạng và cấu hình GPRS
- GPRS DATA
Dữ liệu GPRS đã được truyền (PPP hoặc TCP hoặc UDP) trong quá trình hoạt động Trong trường hợp này, công suất tiêu thụ có liên quan với các thiết lập mạng (ví dụ như điều khiển chế độ công suất), tốc độ uplink /downlink và cấu hình GPRS
Ngừng hoạt động nhưng không cần ngắt nguồn cung cấp Sử dụng lệnh "AT + CFUN"
để thiết lập sim900 về chế độ tiết kiệm mà không cần loại bỏ các nguồn cung cấp năng lượng Trong trường hợp này, phần ăng ten sẽ không làm việc hoặc SIM card sẽ không thể truy cập được, hoặc cả hai phần ăng ten và SIM card sẽ không hoạt động Nguồn tiêu thụ trong trường hợp này là rất thấp
Trang 32Quy tắc 4: Thông tin phản hồi và mã kết quả (bao gồm mã kết quả cuối cùng và mã kết quả không mong muốn) luôn bắt đầu với một ký tự về đầu dòng và một ký tự xuống dòng
2.3.2 Mã kết quả của lệnh AT
a Mã kết quả cuối cùng
Mã kết quả cuối cùng đánh dấu kết thúc phản hồi cho một lệnh AT Nó cho biết GSM modem đã hoàn thành thực thi lệnh Hai mã được sử dụng thường xuyên là OK và ERROR Mỗi một lệnh chỉ có một mã kết quả cuối cùng được trả về
Mã kết quả cuối cùng OK Cho biết một lệnh AT nào đó đã được thực hiện thành công bởi GSM modem Luôn bắt đầu và kết thúc với ký tự về đầu dòng và xuống dòng
Mã kết quả cuối cùng ERROR
Mã này cho biết đã có lỗi xảy ra khi thực hiện một lệnh AT Sau khi xảy ra lỗi, GSM/GPRS modem sẽ không xử lý tiếp phần còn lại trong chuỗi lệnh
Một số nguyên nhân dẫn đến lỗi như cú pháp của lệnh sai; Giá trị của một tham số không hợp lệ; Tên lệnh bị gõ sai; GSM/GPRS modem không hỗ trợ lệnh đó; Mã lỗi này cũng bắt đầu và kết thúc với ký tự về đầu dòng và xuống dòng
Mã kết quả cuối cùng +CMS ERROR
Mã này được trả về khi một lỗi dịch vụ tin nhắn xảy ra Một mã lỗi được trả về cho người lập trình để kiểm tra nguyên nhân gây ra lỗi Lỗi này chỉ liên quan đến những lệnh AT thao tác với SMS Cũng như OK và ERROR, mã lỗi này cũng bắt đầu và kết thúc với một ký tự về đầu dòng và xuống dòng, và một số nguyên thể hiện một lỗi xác định
2.3.4 Các lỗi +CMS và ý nghĩa của các lỗi
Mã lỗi +CMS Ý nghĩa
300 Lỗi thiết bị di động Thường là máy điện thoại hoặc GSM/GPRS modem
301 Dịch vụ SMS của thiết bị di động đã bị chiếm dụng
302 Thao tác thực hiện bởi lệnh AT không được cho phép
303 Thao tác thực hiện bởi lệnh AT không được hỗ trợ
304 Một hoặc nhiều giá trị tham số gắn với lệnh AT không hợp lệ
Trang 33305 Một hoặc nhiều giá trị tham số gắn với lệnh AT không hợp lệ
(Với chế độ văn bản)
310 Không có thẻ SIM
311 Thẻ SIM đòi hỏi phải nhập mã PIN
312 Thẻ SIM đòi hỏi phải nhập mã PH-SIM PIN
313 Lỗi thẻ SIM
314 Thẻ SIM bận
315 Thẻ SIM hỏng
2.3.5 Mã lỗi +CMS
Mã kết quả không được yêu cầu
Là những mã kết quả được gửi từ GSM/GPRS modem để cung cấp về sự xảy ra của một sự kiện nào đó Ví dụ, chúng ta có thể dùng lệnh +CNMI (New Message Indication to TE) để yêu cầu GSM/GPRS modem gửi các mã kết quả “+CMTI” tới máy tính mỗi khi có tin nhắn SMS được nhận từ SMSC
Dưới đây là một vài mã kết quả liên quan tới SMS:
CDS: được dùng để chuyển một tin nhắn SMS mới nhận thông báo tình trạng tới thiết
bị đầu cuối
CDSI: được dùng để nhắc nhở thiết bị đầu cuối về một tin nhắn SMS mới thông
báo tình trạng đã được nhận và vị trí trong bộ nhớ lưu nó
CMT: được dùng để chuyển một tin nhắn mới nhận vào thiết bị đầu cuối
CMTI: được dùng để nhắc nhở thiết bị đầu cuối có tin nhắn mới nhận và vị trí nó được lưu trong bộ nhớ
Một số lệnh AT được dùng
Một số thuật ngữ sử dụng: Carriage return (Mã ASCII 0x0D)
: Line Feed ( Mã ASCII 0 x0 A)
MT: Mobile Terminal - Thiết bị đầu cuối mạng (trong trường hợp này là
module Sim900)
TE : Terminal Equipment - Thiết bị đầu c uối (vi điều khiển, máy tính)
Dưới đây là một số lệnh AT thường gặp
- Lệnh ATZ
Lệnh ATZ dùng thiết lập lại (reset) tất cả các tham số hiện tại theo mẫu được người dùng định nghĩa Lệnh trả về của modem là lệnh OK Mẫu người dùng định nghĩa trước đó được lưu trên bộ nhớ cố định Nếu không thiết lập lại được theo mẫu của người dùng định nghĩa thì nó sẽ reset lại theo đúng các tham số mặc định của nhà sản xuất Bất cứ lệnh AT cộng thêm nào trên cùng một dòng với lệnh ATZ đều không được thực hiện
- Lệnh AT+CMGR
Lệnh AT+CMGR được dùng để đọc tin nhắn trên một ngăn nào đó trên sim điện thoại Cấu trúc lệnh như sau: AT+CMGR=i, với i là ngăn bộ nhớ chứa tin nhắn trong sim
Trang 34Đáp ứng trở về là lệnh OK nếu ngăn i có chứa tin nhắn Nếu ngăn i không chứa tin nhắn thì sẽ xuất hiện thông báo lỗi trả về ERROR Ví dụ khi gõ lệnh AT+CMGR=1 thì sim900 sẽ đọc tin nhắn tại ngăn số 1 của bộ nhớ sim điện thoại gắn ngoài
- Lệnh AT+CMGS
Lệnh AT+CMGS dùng để gửi tin nhắn SMS tới một số điện thoại cho trước
Cú pháp gửi tin như sau:
- AT+CMGS= “số điện thoại cần gửi”
- Nội dung tin nhắn
- ESC/Ctrl Z
Số điện thoại cần gửi phải được đặt trong dấu ngoặc kép Sau khi gõ xong số
điện thoại thì cần thực hiện lệnh enter để xuống dòng và bắt đầu nội dung tin nhắn Kết thúc lệnh này bằng việc thực hiện lệnh Cltr Z
Ví dụ lệnh gửi tin nhắn tới số 0989196980 với nội dung “abcd” được thực hiện tại chế
độ text trong phần mềm lập trình CCS như sau:
Với i là ngăn bộ nhớ chứa tin nhắn cần xóa Nếu ngăn i chứa tin nhắn thì đáp ứng trả
về là OK, còn nếu việc thực hiện tin nhắn không thực hiện được như ngăn i không có tin nhắn, hoặc lỗi kết nối tới sim, lỗi sóng thì trả về sẽ là ERROR
Ví dụ xóa tin nhắn từ ngăn số 1 của sim: AT+CMGD=1
- Lệnh ATE
Lệnh này dùng để thiết lập chế độ lệnh phản hồi trở lại Đáp ứng trở lại là OK
Lệnh ATE có hai tham số hoàn toàn khác nhau:
- ATE0: tắt chế độ phản hồi
- ATE1: bật chế độ phản hồi
Khi giao tiếp module sim900 với phần mềm terminal trên máy tính, nếu ta dùng lệnh ATE0 thì khi gõ các lệnh AT khác thì không nhìn thấy lệnh ta gõ mà chỉ nhìn thấy kết quả trả về của sim900 Ngược lại, khi dùng lệnh ATE1 thì sẽ nhìn được cả lệnh ta gõ lên và lệnh sim900 trả về
- Lệnh AT&W
Lệnh AT&W được dùng để lưu cấu hình cài đặt được thiết lập bởi các lệnh ATE và
Trang 35Lệnh AT+CMGF dùng để lựa chọn định dạng tin nhắn SMS, với hai chế độ là text và PDU, cụ thể như sau:
AT+CMGF=1: lựa chọn sử dụng tin nhắn ở chế độ văn bản
AT+CMGF=0: lựa chọn sử dụng tin nhắn ở chế độ PDU
Đáp ứng trả về là “OK” nếu như modem hỗ trợ, ngược lại, nếu modem không hỗ trợ chế độ định dạng tin nhắn là text hoặc PDU thì đáp ứng trả về sẽ là “ERROR”
- Lệnh AT+CNMI
Lệnh này dùng để thông báo có tin nhắn mới đến Với các tham số khác
nhau thì mỗi khi có tin nhắn, đáp ứng trả về cũng sẽ khác nhau
Ví dụ về các lệnh AT+CNMI khác nhau khi cùng nhận một tin nhắn SMS có nội dung giống nhau:
- Lệnh AT+CSAS
Lệnh AT+CSAS dùng để lưu các thiết lập SMS do người dùng đã cài đặt trước đó Lệnh này sẽ lưu trực tiếp các thông số đã cài đặt cho tin nhắn SMS như các lệnh AT+CMGF=1; AT+CNMI=2,2,0,0,0 và còn nhiều lệnh khác liên quan tới tin nhắn SMS đều được lưu lại bởi lệnh AT+CSAS này
Trên đây là một số lệnh AT thường dùng để GSM/GPRS modem xử lý với tin nhắn SMS Và cũng chính các lệnh cơ bản này được sử dụng trong việc viết chương trình điều khiển thiết bị có sử dụng trong đồ án này Sim900 đóng vai trò là Mobile Terminal Ngoài ra, còn rất nhiều tập lệnh AT dùng cho sim900 để phục vụ cho các quá trình khác nhau như thực hiện cuộc gọi, kết nối GPRS, cài đặt thời gian, đặt mật khẩu và còn nhiều chức năng khác phục vụ trong quá trình hoạt động của modem
Ứng dụng:
GSM Module Sim900 cho phép ta triển khai các ứng dụng giám sát/điều
khiển dựa trên tin nhắn SMS, hoặc công nghệ GPRS cho phép giám sát ngay
trên nền web
Trang 36Hình 2.3 Ứng dụng mô hình triển khai thực tế
Hình 4: Ứng dụng của GSM MODULE SIM900
GSM Module Sim900 cho phép điều khiển các thiết bị điện trong nhà như đèn quạt, máy tính, các thiết bị sử dụng điện 220V, thiết bị công suất thấp…Đồng thời GSM Module Sim900 cũng cập nhật và giám sát các thiết bị bằng các cảm biến mà người dùng tùy chọn thông qua các mạch vi điều khiển
2 Hướng dẫn sử dụng:
GSM Module Sim900 hoạt động với mức điện áp từ 3.2V – 4.8V, yêu cầu dòng cung cấp 2A Simcom khuyên nên sử dụng mạch nguồn xung 3A dùng IC ổn áp LM2576 hoặc LM2596 Để bật/tắt GSM Module Sim900 ta kích một xung mức cao vào chân số
1 trong thời gian khoảng 1s, lúc này đèn Led status sẽ sáng, sau đó nhấp nháy với tần suất nhanh báo hiệu Sim900 đang khởi động và tìm mạng 10s sau Led status nhấp nháy chậm lại báo hiệu Sim900 đã hoạt động bình thường.Với các ngõ giao tiếp được thiết kế sao cho thuận tiện nhất cho người sử dụng, bạn có thể tự phát triển ý tưởng và làm ra một sản phẩm “hand made” hiện đại nhưng cũng rất thiết thực với cuộc sống
Để test SIM900 với máy vi tính ta cần một board giao tiếp máy tính
truyền nhận dữ liệu từ cổng UART của SIM900 với bất kì một phần mềm
Terminal nào trên máy vi tính
Để hướng dẫn test GSM Module Sim900 sử dụng mạch nguồn
LM2596 STEP DOWN và mạch giao tiếp USB to UART do AT-COM
Sau khi kết nối ta sử dụng phần mềm Terminal.exe để giao tiếp máy tính với
GSM Module Sim900
Test GSM Module Sim900:
Bước 1: Khởi động SIM900
- Sau khi khởi động SIM900 ta sẽ nhìn thấy trên màn hình như sau…