VI ĐIỀU KHIỂN ATMEGA16

Một phần của tài liệu Nghiên cứu thiết kế mô hình nhà thông minh (Trang 51)

5. Phƣơng pháp nghiên cứu

2.6. VI ĐIỀU KHIỂN ATMEGA16

2.6.1. Giới thiệu chung [2],[3],[7]

Vi điều khiển AVR là sản phẩm của công ty Atmel. Atmel cũng là cha đẻ của con MCU 89C51 đã quen thuộc với hầu hết mọi người. AVR rất mạnh và đang phát triển rất nhanh trong thời gian gần đây. Ngày càng có nhiều bạn muốn tìm hiểu về loại vi điều khiển mới mẻ này.

AVR là họ vi điều khiển 8 bit theo công nghệ mới, với những tính năng rất mạnh được tích hợp trong chip của hãng Atmel theo công nghệ RISC, nó mạnh ngang hàng với các họvi điều khiển 8 bit khác như PIC, Pisoc. Do ra đời muộn hơn nên họvi điều khiển AVR có nhiều tính năng mới đáp ứng tối đa nhu cầu của người sử dụng, so với họ 8051 89xx sẽ có độ ổn định, khả năng tích hợp, sự mềm dẻo trong việc lập trình và rất tiện lợi.

Tính năng mới của họ AVR: - Giao diện SPI đồng bộ.

- Các đường dẫn vào/ra (I/O) lập trình được. - Giao tiếp I2C.

- Bộbiến đổi ADC 10 bit. - Các kênh băm xung PWM.

- Các chế độtiết kiệm năng lượng như sleep, stand by..vv. - Một bộ định thời Watchdog. - 3 bộTimer/Counter 8 bit. - 1 bộTimer/Counter 16 bit. - 1 bộso sánh analog. - Bộ nhớ EEPROM. 2.6.2. Chức năng Timer/Counter [2],[6]

Chức năng chính của các bộ Timer/Counter, như tên gọi của chúng, là định thì (tạo ra 1 khoảng thời gian, đếm thời gian), và đếm sự kiện bên ngoài.

Ngoài ra trên các chip AVR, các bộ Timer/Counter còn có chức năng điều chế độ rộng xung PWM (Pulse width Modulation), ứng dụng trong điều khiển tốc độ động cơ và điều khiển độ sáng tối của bóng đèn…

Các bộ Timer có thể hoạt động với tần số bên trong (lấy từ thạch anh), cũng có thể hoạt động với tần số bên ngoài, đưa vào đầu vào của bộ Timer. Có thể dùng ứng dụng này để đếm sản phẩm, hay đo độ rộng xung.

Timer/Counter 0: đây là 1 bộ timer 8 bit. Có 4 chế độ hoạt động cơ bản là: Normal, CTC, Past PWM, Phase correct PWM.

Timer/Counter 1: đây là 1 bộ timer 16 bit. Nó cũng có đầy đủ các chế độ hoạt động như của Timer 0, tuy nhiên vì là bộ timer 16 bit nên phạm vi hoạt động của nó rộng hơn. Nếu như giá trị MAX trong Timer0 chỉ là 0xFF, thì giá trị MAX trong Timer1 lên đến 0xFFFF. Ngoài ra bộ Timer1 còn có thể tạo ra 2 tín hiệu PWM độc lập ở các chân OC1A (PORTD.5) và OC1B (PORTD.4), giúp dễ dàng khi điều khiển 2 động cơ cùng 1 lúc (2 động cơ chạy bánh).

Timer/Counter 2: đây là 1 bộ Timer 8 bit. Nó cũng có 4 chế độ hoạt động cơ bản giống như Timer0, đó là: Normal, CTC, Past PWM, Phase correct PWM.

2.6.3. Chức năng Ngắt [2],[3],[6]

Ngắt là sự kiện bên trong hay bên ngoài làm ngắt bộ vi điều khiển để báo cho nó biết rằng thiết bị cần dịch vụ của nó.

Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có 2 cách để thực hiện điều này đó là sử dụng các ngắt interrupt và thăm dò.Trong phườn pháp sử dụng các ngắt thì mỗi khi có thiết bị bất kỳ cần đến dịch vụ của nó thì nó báo cho bộ vi điều khiển bằng cách gửi 1 tín hiệu ngắt.Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị.Chương trình đi cùng ngắt được gọi là dịch vụ ngắt ISR hay còn gọi là chương trình quản lý ngắt.Còn trong phương pháp thăm dò thì bộ vi điều khiển hiển thị lien tục tình trạng của 1 thiết bị đã cho và điều điều khiển thỏa mãn thì nó phục vụ thiết bị.Sau đó chuyển sang hiển thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều phục vụ.

Đối với mỗi ngắt thì phải có 1 trình phục vụ ngắt ISR hay trình ngắt. Khi 1 ngắt được gọi thì bộ vi điều khiển phục vụ ngắt. Đối với mỗi ngắt thì nó có 1 vị trí cố định trong bộ nhớ giữa địa chỉ ISR của nó. Nhóm các vị chí nhớ dành giêng để gửi các địa chỉ của các ISR được gọi là bảng vectơ ngắt.

Khi kích hoạt 1 ngắt bộ vi điều khiển đi qua các bước sau:

+ Vi điều khiển kết thúc lệnh đang thực hiện và lưu trữ địa chỉ của lệnh kế tiếp (pc) vào ngăn xếp.

+ Nó nhảy đến vị trí cố định trong bộ nhớ được gọi là bảng vectơ ngắt nơi lưu giữ địa chỉ của 1 trình phục vụ ngắt.

+ Bộ vi điều khiển nhận địa chỉ ISR từ bảng vectơ ngắt và nhảy tới đó.Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR và RETI (trở về từ ngắt).

+ Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nới nó đã bị ngắt.Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 2 byte trên đỉnh của ngăn xếp vào PC.Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó.

Đối với Atmga16 thì có 2 chân ngắt là PD2 (INT0) và PD3 (INT1). Có 3 thanh ghi liên quan đến ngắt ngoài đó là:

- Thanh ghi điều khiển MCUCR: Thanh ghi xác địnhchế độ ngắt ngoài, là 1 thanh ghi 8 bit nhưng chỉ dùng 4 bit thấp cho hoạt động ngắt ngoài.

- Thanh ghi điều khiển ngắt chung GICR(General Interrupt Control Register)là 1 thanh ghi 8 bit nhưng chỉ dùng 2 bit cao để ngắt ngoài.

- Thanh ghi cờ ngắt chung GIFR (General Interrupt Flag Register) có 2 bit là các bit trạng thái của 2 ngắt INT1 và INT0.

2.6.4. Chức năng truyền thông nối tiếp USART [2],[3],[6]

USART là một chuẩn truyền thông nối tiếp được tích hợp trong rất nhiều thiết bị, module, vi điều khiển, vi xử lý, cảm biến, các hệ thống tự động hóa... Chuẩn truyền thông USART sử dụng 2 mức logic theo chuẩn TTL tức thể hiện logic 0 (0V) và logic 1 (3-5V). Dữ liệu truyền đi có thể là đồng bộ hoặc không đồng bộ. Ở

vi điều khiển chúng ta chỉ sử dụng cách truyền là không đồng bộ tức dữ liệu sẽ được đóng gói thành các khung truyền và có tốc độ truyền (BAUD - bps) được chuẩn hóa và phải giống nhau tốc độ baud. Ví dụ: 2400, 4800, 9600, 14400, 19200, 28800,... Tốc độ truyền bây giờ có thể lên đến vài trăm kbps. Thông thường ta thường sử dụng 9600 đề truyền nhằm giảm nhiễu.

Họ vi điều khiển AVR được tích hợp sẵn một bộ truyền thông nối tiếp. TX là chân truyền dữ liệu đi và RX là chân nhận dữ liệu về. Khi ghép nối chuẩn giao tiếp ta phải đấu nó theo kiểu bắt chéo tức TX của con này với RX của con kia và TX của con kia với RX của con này, kiểu TX1-RX2 và RX1-TX2.

- Thanh ghi UDR (USART I/O Data Register): là 2 thanh ghi dữ liệu cùng một tên truyền và nhận, khi ghi vào 1 byte thì nó sẽ truyền đi byte đó, và khi nhận được một byte thì ta sẽ đọc dữ liệu từ thanh ghi này

Hình 2. 9. Thanh ghi UDR

- Thanh ghi UCSRA: là thanh ghi trạng thái của USART

Hình 2. 10. Thanh ghi UCSRA

Các bit trạng thái:

RXC là bit cờ ngắt nhận dữ liệu từ RX

TXC là bit cờ ngắt truyền đi một byte ra TX

UDRE là bit cờ ngắt thanh ghi UDR trống và sẵn sàng ghi dữ liệu mới vào

để truyền đi.

FE là bit báo khung truyền bị lỗi

DOR là bit báo tràn dữ liệu

U2X là bit set nhân đôi tốc độ truyền

MPCM là bit set chế độ truyền thông đa xử lý

- Thanh ghi UCSRB: là thanh ghi mặt nạ ngắt và điều khiển

Hình 2. 11. Thanh ghi UCSRB

Các bit trạng thái:

RXCIE là bit set cho phép ngắt nhận

TXCIE là bit set cho phép ngắt truyền

UDRIE là bit set cho phép ngắt thanh ghi UDR trống

RXEN là bit cho phép nhận dữ liệu trên chân RX

TXEN là bit cho phép truyền dữ liệu trên chân TX

UCSZ2 là bit chọn kích thước ký tự, kết hợp với 2 bit trong thanh ghi

UCSRC

RXB8 là bit truyền dữ liệu thứ 8 trong chế độ truyền 9bit

TXB8 là bit nhận dữ liệu thứ 8 trong chế độ truyền 9bit

Trong truyền dữ liệu không đồng bộ ta thường sử dụng ngắt để nhận dữ liệu do vậy ta chỉ cần set các bít sau lên 1: RXCIE=1, RXEN=1, TXEN=1 ta viết ngắn gọn UCSRB=0x98; tương đương UCSRB=0b 1001 1000

- Thanh ghi UCSRC: là thanh ghi quy định khung truyền và chế độ truyền

Hình 2. 12. Thanh ghi UCSRC

Bit UMSEL là bit chọn chế độ truyền thông đồng bộ hay không đồng bộ.

Khi UMSEL=1 là chế độ đồng bộ và UMSEL=0 là chế độ không đồng bộ, trong ứng dụng này ta đặt UMSEL=0 tức chế độ không đồng bộ.

UPM1 UPM0 Chức năng

0 0 Không sử dụng Parity

0 1 Dự trữ không dùng

1 0 Parity chẵn được chọn

1 1 Parity lẻ được chọn

Bảng 2. 4. Thiết lập bit chọn kiểu chẵn lẻ

Bit USBS là bit chọn sử dụng một hay 2 bit Stop. Nếu USBS=1 thì là 2 bit

Stop và khi USBS=0 là 1 bit Stop

Hai bit UCSZ1 và UCSZ0 kết hợp với bit UCSZ2 từ thanh ghi UCSRB ta

được 3bit chọn độ dài dữ liệu truyền:

UCSZ2 UCSZ1 UCSZ0 Kích thƣớc truyền

0 0 0 5 bit 0 0 1 6 bit 0 1 0 7 bit 0 1 1 8 bit 1 0 0 Dự trữ 1 0 1 Dự trữ 1 1 0 Dự trữ 1 1 1 9 bit

Bảng 2. 5. Thiết lập bit chọn độ dài dữ liệu truyền

Bit UCPOL là bit chỉ tích cực của xung clock trong chế độ truyền đồng bộ.

Kết luận lại ta sẽ cần có các bit sau được set (cho chế độ truyền không đồng bộ): URSEL=1, UCSZ1=1, UCSZ0=1 ta được UCSRC=0x86 tương đương UCSRC=0b 1000 0110 (8bit USART, 1 stop, no parity)

Phần cuối cùng là thiết lập tốc độ truyền BAUD được quy định bởi 2 thanh

ghi UBRRHUBRRL. Do dữ liệu cài đặt lớn hơn 255 lên nó được mở rộng

thêm 4bit trên thanh ghi UBRRH

Ta sẽ có các bit từ UBRR[11:0] để cài đặt tốc độ BAUD theo bảng sau, ở đây ta sử dụng thạch anh 11.0592MHz để tạo tốc độ BAUD với sai số 0%

UBRRH UBRRL Tốc độ BAUD Bit U2X (UCSRA)

0x01 0x1F 2400 0 0 143 4800 0 0 71 9600 0 0 47 14400 0 0 35 19200 0 0 23 28800 0 0 17 38400 0 Bảng 2. 6. Thiết lập tốc độ BAUD

Như bảng trên ta để UBRRH mặc định không cần khai báo, còn UBRRL

sẽ bằng các giá trị trên tương ứng với tốc độ BAUD đó. Trừ BAUD = 2400 phải nạp 2 giá trị trên vào 2 thanh ghi UBRRHUBRRL

2.7. KẾT LUẬN

Chương này đã tập trung nghiên cứu cơ sở lý thuyết về các linh kiện điện tử chính được sử dụng trong hệ thống. Chương tiếp theo sẽ trình bày cơ sở lý thuyết về module SIM900, phương pháp giao tiếp SIM900 với vi điều khiển.

CHƢƠNG 3.

HỆ THỐNG KẾT NỐI MẠNG KHÔNG DÂY 3.1. TỔNG QUAN VỀ TIN NHẮN SMS [9]

3.1.1. Giới thiệu về SMS

SMS là từ viết tắt của Short Message Service. Đó là một công nghệ cho phép gửi và nhận các tín nhắn giữa các điện thoại với nhau. SMS xuất hiện đầu tiên ở Châu âu vào năm 1992. Ở thời điểm đó, nó bao gồm cả các chuẩn về GSM (Global System for Mobile Communications). Một thời gian sau đó, nó phát triển sang công nghệ wireless như CDMA và TDMA. Các chuẩn GSM và SMS có nguồn gốc phát triển bởi ETSI. ETSI là chữ viết tắt của European Telecommunications Standards Institute. Ngày nay thì 3GPP (Third Generation Partnership Project) đang giữ vai trò kiểm soát về sự phát triển và duy trì các chuẩn GSM và SMS.

Như đã nói ở trên về tên đầy đủ của SMS là Short Message Service, từ cụm từ đó, có thể thấy được là dữ liệu có thể được lưu giữ bởi một tin nhắn SMS là rất giới hạn. Một tin nhắn SMS có thể chứa tối đa là 140 byte (1120 bit) dữ liệu. Vì vậy, một tin nhắn SMS chỉ có thể chứa:

+ 160 kí tự nếu như mã hóa kí tự 7 bit được sử dụng (mã hóa kí tự 7 bit thì phù hợp với mã hóa các lí tự Latin chẳng hạn như các lí tự alphabet của tiếng Anh). + 70 kí tự nếu như mã hóa kí tự 16 bit Unicode UCS2 được sử dụng (các tin nhắn SMS không chứa các kí tự latin như kí tự chữ Trung Quốc phải sử dụng mã hóa kí tự 16 bit).

Tin nhắn SMS dạng text hỗ trợ nhiều ngôn ngữ khác nhau. Nó có thể hoạt động tốt với nhiều ngôn ngữ mà có hỗ trợ mã Unicode, bao gồm cả Arabic, Trung Quốc, Nhật bản và Hàn Quốc. Bên cạnh gửi tin nhắn dạng text thì tin nhắn SMS còn có thể mang các dữ liệu dạng binary. Nó còn cho phép gửi nhạc chuông, hình ảnh cùng nhiều tiện ích khác … tới một điện thoại khác.

Một trong những ưu điểm nổi trội của SMS đó là nó được hỗ trợ bởi các điện thoại có sử dụng GSM hoàn toàn. Hầu hết tất cả các tiện ích cộng thêm gồm cả dịch vụ gửi tin nhắn giá rẻ được cung cấp, sử dụng thông qua sóng mang wireless. Không giống như SMS, các công nghệ mobile như WAP và mobile Java thì không được hỗ trợ trên nhiều model điện thoại.

Sử dụng tin nhắn SMS ngày càng phát triển và trở lên rộng khắp: - Các tin nhắn SMS có thể được gửi và đọc tại bất kỳ thời điểm nào.

Ngày nay, hầu hết mọi người đều có điện thoại di động của riêng mình và mang nó theo người hầu như cả ngày. Với một điện thoại di động, bạn có thể gửi và đọc các tin nhắn SMS bất cứ lúc nào bạn muốn, sẽ không gặp khó khăn gì khi bạn đang ở trong văn phòng hay trên xe bus hay ở nhà…

- Tin nhắn SMS có thể được gửi tới các điện thoại mà tắt nguồn.

Nếu như không chắc cho một cuộc gọi nào đó thì bạn có thể gửi một tin nhắn SMS đến bạn của bạn thậm chí khi người đó tắt nguồn máy điện thoại trong lúc bạn gửi tin nhắn đó. Hệ thống SMS của mạng điện thoại sẽ lưu trữ tin nhắn đó rồi sau đó gửi nó tới người bạn đó khi điện thoại của người bạn này mở nguồn.

- Các tin nhắn SMS ít gây phiền phức trong khi bạn vẫn có thể giữ liên lạc với người khác

Việc đọc và viết các tin nhắn SMS không gây ra ồn ào. Trong khi đó, bạn phải chạy ra ngoài khỏi rạp hát, thự viện hay một nơi nào đó để thực hiện một cuộc điện thoại hay trả lời một cuộc gọi. Bạn không cần phải làm như vậy nếu như tin nhắn SMS được sử dụng.

- Các điện thoại di động và chúng có thể được thay đổi giữa các sóng mang Wireless khác nhau.

Tin nhắn SMS là một công nghệ rất thành công và trưởng thành. Tất cả các điện thoại mobile ngày nay đều có hỗ trợ nó. Bạn không chỉ có thể trao đổi các tin nhắn SMS đối với người sử dụng mobile ở cùng một nhà cung cấp dịch vụ mạng sóng mang wireless, mà đồng thời bạn cũng có thể trao đổi nó với người sử dụng khác ở các nhà cung cấp dịch vụ khác.

- SMS là một công nghệ phù hợp với các ứng dụng Wireless sử dụng cùng với nó.

Nói như vậy là do:

Thứ nhất, tin nhắn SMS được hỗ trợ 100% bởi các điện thoại có sử dụng công nghệ GSM. Xây dựng các ứng dụng wireless trên nền công nghệ SMS có thể phát huy tối đa những ứng dụng có thể dành cho người sử dụng.

Thứ hai, các tin nhắn SMS còn tương thích với việc mang các dữ liệu binary bên cạnh gửi các text. Nó có thể được sử dụng để gửi nhạc chuông, hình ảnh, hoạt họa.

Thứ ba, tin nhắn SMS hỗ trợ việc chi trả các dịch vụ trực tuyến.

3.1.2. Cấu trúc của một tin nhắn SMS

Một phần của tài liệu Nghiên cứu thiết kế mô hình nhà thông minh (Trang 51)

Tải bản đầy đủ (PDF)

(92 trang)