*Kit MSP430 LaunchPad
- MSP430 LaunchPad là kit phát triển giá rất rẻ dành cho người mới học về vi điều khiển của hãng Texas Instruments. Kit MSP430 LaunchPad phiên bản hiện tại (1.5) sử dụng MCU MSP430G2553 (16MHz, 16Kb Flash, 512B SRAM, 2 Timer 16-bit, 8 kênh ADC 10-bit, giao tiếp UART LIN IrDA I2C SPI) . Đây là MCU thuộc dòng Value Line của TI, siêu tiết kiệm năng lượng, đầy đủ chức năng, rất phù hợp với túi tiền của học sinh-sinh viên. Trên kit có sẵn mạch Program/Debug rất tiện lợi nữa.
48 trang |
Chia sẻ: builinh123 | Lượt xem: 2515 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Bluetooth low energy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA-ĐHQG TPHCM
KHOA ĐIỆN – ĐIỆN TỬ
NGÀNH ĐIỆN TỬ - VIỄN THÔNG
ĐỀ TÀI:
BLUETOOTH LOW ENERGY
.................................... ....................................
TPHCM 22-12-2014
MỤC LỤC
PHẦN 1: GIỚI THIỆU TỔNG QUAN VỀ BLUETOOTH
1 – Giới thiệu khái niệm về bluetooth...trang 3
2 - Một số thuật ngữ dùng trong bluetooth..trang 3
3 - Các ứng dụng nổi bật của Bluetooth:.trang 4
4 – Sơ lược về các “thế hệ” Bluetooth.trang 5
PHẦN 2: BLUETOOTH LOW ENERGY (BLE)
1 – Giới thiệu về BLE..trang 7
2 – Thông số kỹ thuật của BLE.....trang 7
3 - Ứng dụng của BLE....trang 9
PHẦN 3: CHI TIẾT VỀ CC2540 VÀ HM-10
1 – Giới thiệu chip CC2540...trang 11
2 – Giới thiệu về module HM-10 của chip..trang 12
3 – Sơ đồ cấu hình chân ra của HM-10..trang 13
4 – Chức năng các chân của HM-10...trang 14
5 – Kích thước HM-10....trang 15
6 – Sơ đồ mạch HM-10...trang 16
7 – Cấu trúc tập lệnh của HM-10..trang 17
7 – Thiết kế PCB cho HM-10....trang 21
PHẦN 4: MÔ PHỎNG KẾT NỐI VÀ TRUYỀN DỮ LIỆU GIỮA HAI MODULE HM-10
1 – Khối vi điều khiển .....trang 25
2 – Khối truyền nhận dữ liệu không dây.....trang 30
3 – Khối hiển thị ..trang 31
4 – Lưu đồ giải thuật chương trình ...trang 33
PHẦN 5: TÀI LIỆU THAM KHẢO VÀ CODE LẬP TRÌNH
1 – Tài liệu tham khảo....trang 36
2 – Code chương trình phần phát ...trang 37
3 – Code chương trình phần thu ..trang 44
PHẦN 1:GIỚI THIỆU TỔNG QUAN VỀ BLUETOOTH
1 ) Giới thiệu khái niệm về bluetooth
Bluetooth là công nghệ dựa trên tần số vô tuyến sử dụng để tạo kết nối giao tiếp giữa hai loại thiết bị khác nhau trong một cự li nhất định. Có rất nhiều các thiết bị sử dụng công nghệ bluetooth như: điện thoại di động, máy tính và thiết bị hổ trợ cá nhân (PDA)
Bluetooth được thiết kế để thay thế dây cable giữa máy tính và các thiết bị truyền thông cá nhân, kết nối vô tuyến giữa các thiết bị điện tử với nhau.
Bluetooth khi kích hoạt có thể tự định vị những thiết bị khác có chung công nghệ trong vùng xung quanh và bắt đầu kết nối với chúng.
Bluetooth có thể đạt được tốc độ truyền dữ liệu 1Mb/s. Bluetooth hỗ trợ tốc độ truyền tải dữ liệu lên tới 720 Kbps trong phạm vi 10 m–100 m
Sử dụng dải tần 2.4 – 2.48GHz
Một số đặc điểm nổi trội của bluetooth:
- Tương thích cao
- Tiêu thụ năng lượng thấp
- Dễ dàng phát triển ứng dụng
- An toàn và bảo mật
2 ) Một số thuật ngữ dùng trong bluetooth
- Piconet là tập hơp các thiết bị được kết nối thông qua kỹ thuật bluetooth theo mô hình Ad-hoc (xây dựng 1 mạng kết nối (chủ yếu là vô tuyến) giữa các thiết bị đầu cuối mà không cần phải dùng các trạm thu phát gốc (BS).)
- Scatternet là 2 hay nhiều Piconet độc lập và không đồng bộ kết hợp lại truyền thông với nhau
- Master unit: master thiết lập bộ đếm xung, quyết định số kênh truyền thông và kiểu bước nhảy để đồng bộ tất cả các thiết bị trong cùng piconet à nó đang quản lý
- Slaver unit là các thiết bị còn lại trong piconet mà không phải là master
Có 4 trạng thái chính của 1 thiết bi bluetooth trong piconet
- Inquiring device: đang phát tín hiệu tìm thiết bị
- Inquiring scanning device: nhận tín hiệu inquiring và trả lời
- Paging device: phát tín hiệu yêu cầu kết nối
- Page scanning device: nhận yêu cầu kết nối
Chế độ kết nối
- Active mode: thiết bị bluetooth tham gia vào hoạt động của mạng
- Sniff mode: là 1 chế độ tiết kiệm năng lượng của thiết bị đang ở trong trạng thái active, thiết bi slave nhận tín hiệu từ mạng với tần số giảm hay nói cách khác là giảm công suất
- Hold mode: là 1 chế độ tiết kiệm năng lượng của thiết bị đang ở trong trạng thái active, đây là chế độ tiết kiệm năng lượng trung bình
- Park mode: là chế độ tiết kiệm năng lượng của thiết bị vẫn còn trong mạng nhưng không tham gia vào quá trình trao đổi dữ liệu (inactive), đây là chế độ tiết kiệm năng lượng nhất
3)Các ứng dụng nổi bật của Bluetooth:
- Điều khiển và giao tiếp không giây giữa một điện thoại di động và tai nghe không dây.
- Mạng không dây giữa các máy tính cá nhân trong một không gian hẹp đòi hỏi ít băng thông.
- Giao tiếp không dây với các thiết bị vào ra của máy tính, chẳng hạn nhưchuột, bàn phím và máy in.
- Truyền dữ liệu giữa các thiết bị dùng giao thức OBEX (dùng trao đổi các dữ liệu vật lý như tập tin, hình ảnh và cả các dạng nhị phân).
- Thay thế các giao tiếp nối tiếp dùng dây truyền thống giữa các thiết bị đo, thiết bị định vị dùng GPS, thiết bị y tế, máy quét mã vạch, và các thiết bị điều khiển giao thông.
- Thay thế các điều khiển dùng tia hồng ngoại.
- Gửi các mẩu quảng cáo nhỏ từ các pa-nô quảng cáo tới các thiết bị dùng Bluetooth khác.
- Điều khiển từ xa cho các thiết bị trò chơi điện tử như Wii - Máy chơi trò chơi điện tử thế hệ 7 của Nintendo[1] vàPlayStation 3 của Sony.
- Kết nối Internet cho PC hoặc PDA bằng cách dùng điện thoại di động thay modem.
4 ) Sơ lược về các “thế hệ” Bluetooth
Theo Wikipedia, thuật ngữ “Bluetooth” (có nghĩa là “răng xanh”) được đặt theo tên của một vị vua Đan Mạch, vua Harald Bluetooth, người Viking nổi tiếng về khả năng giúp mọi người có thể giao tiếp, thương lượng với nhau. Bluetooth được phát triển đầu tiên bởi Ericsson (hiện nay là Sony Ericsson và Ericsson Mobile Platforms), và sau đó được chuẩn hoá bởi Bluetooth Special Interest Group (SIG). Chuẩn được phát hành vào ngày 20 tháng 5 năm 1999. Ngày nay được công nhận bởi hơn 1800 công ty trên toàn thế giới. Được thành lập đầu tiên bởi Sony Ericsson, IBM, Intel, Toshiba và Nokia, sau đó cùng có sự tham gia của nhiều công ty khác với tư cách cộng tác hay hỗ trợ. Bluetooth có chuẩn là IEEE 802.15.1.
Bluetooth 1.0. Tháng 7/1999, phiên bản Bluetooth 1.0 đầu tiên được đưa ra thị trường với tốc độ kết nối ban đầu là 1Mbps. Tuy nhiên, trên thực tế tốc độ kết nối của thế hệ này chưa bao giờ đạt quá mức 700Kbps. Phiên bản này còn khá nhiều lỗi và các nhà sản xuất đã rất khó khăn khi tích hợp nó với các sản phẩm công nghệ.
Bluetooth 1.1. Năm 2001, phiên bản Bluetooth 1.1 ra đời, đánh dấu bước phát triển mới của công nghệ Bluetooth trên nhiều lĩnh vực khác nhau với sự quan tâm của nhiều nhà sản xuất mới. Cũng trong năm này, Bluetooth đươc bình chọn là công nghệ vô tuyến tốt nhất năm.
Bluetooth 1.2. Ra mắt vào tháng 11/2003, Bluetooth 1.2 bắt đầu có nhiều tiến bộ đáng kể. Chuẩn này hoạt động dựa trên nền băng tần 2.4 Ghz và tăng cường kết nối thoại. Motorola RARZ là thế hệ di động đầu tiên tích hợp Bluetooth 1.2.
Bluetooth 2.0 + ERD. Một năm sau, vào tháng 11/2004, công nghệ Bluetooth 2.0 + ERD đã bắt đầu nâng cao tốc độ và giảm thiểu một nửa năng lượng tiêu thụ so với trước đây. Tốc độ của chuẩn Bluetooth lên đến 2.1 Mbps với chế độ cải thiện kết nối truyền tải – ERD (enhanced data rate), song ERD vẫn chỉ là chế độ tùy chọn, phụ thuộc vào các hãng sản xuất có đưa vào thiết bị hay không. Năng lượng sử dụng của kết nối Bluetooth chỉ còn tiêu hao một nửa so với trước. Các thiết bị tiêu biểu ứng dụng Bluetooth 2.0 + ERD là: Apple iPhone, HTC Touch Pro và T-Mobile’s Android G1.
Bluetooth 2.1 + ERD. Đây chính là thế hệ nâng cấp của Bluetooth 2.0. Bluetooth 2.1 có hiệu năng cao hơn và tiết kiệm năng lượng hơn. Chuẩn này chủ yếu đã được sử dụng trong trong điện thoại, máy tính và các thiết bị di động khác. Tuy nhiên, Bluetooth 2.1 không cho phép truyền các file lớn với tốc độ cao. Do đó, nếu người dùng muốn chuyển các file dung lượng lớn đến 1-2GB từ máy tính sang điện thoại thì chỉ có thể kết nối hai thiết bị này bằng dây cắm USB hoặc bằng thẻ nhớ .
Bluetooth 3.0 + HS: Tháng 4/2009, Bluetooth 3.0 - thế hệ "siêu tốc" chính thức ra mắt. Bluetooth 3.0 có tốc độ truyền dữ liệu đạt mức 24Mbps – bằng sóng Bluetooth – High Speed, tương đương chuẩn Wi-Fi thế hệ đầu tiên. Chuẩn này giúp các thiết bị tương tác tốt hơn, tăng cường năng lực kết nối giữa các cá nhân với nhau và tiết kiệm pin nhờ chức năng điều khiển năng lượng nâng cao. Đặc biệt, nó có thể dò tự động các thiết bị gần kề và chuyển trực tiếp sang mạng Wi-Fi nếu các thiết bị đó có kết nối Wi-Fi. Tuy nhiên, phạm vi hiệu quả nhất chỉ trong vòng 10m.
Bluetooth 4.0: Đây là phiên bản mới nhất của Bluetooth vừa được tổ chức SIG thông qua. Bluetooth 4.0 có nhiều đặc điểm chung với chuẩn 3.0, nhưng ngoài khả năng truyền dữ liệu tốc độ cao lên tới 25 Mb/giây, Bluetooth 4.0 còn bổ sung thêm khả năng truyền dữ liệu dung lượng nhỏ trong phạm vi ngắn (8-27 byte tốc độ 1Mbps) với mức tiêu thụ điện năng rất thấp giúp tiết kiệm năng lượng so với chuẩn cũ.
Bluetooth 4.0 nhiều khả năng sẽ dành cho các ứng dụng trong lĩnh vực y tế, chăm sóc sức khỏe và an ninh, chẳng hạn như đồng hồ đeo tay theo dõi sức khỏe, hoặc trang bị cho các bộ cảm biến nhiệt độ, nhịp tim, thể thao, và các thiết bị sử dụng tại gia. Tổ chức Continua Health Alliance đã đồng ý chọn lựa Bluetooth 4.0 làm công nghệ truyền dữ liệu cho những thiết bị y tế di động tương lai. Dự kiến các thiết bị sử dụng chuẩn bluetooth 4.0 sẽ ra mắt trong quý IV năm nay.
Tuy nhiên, cũng có nghiên cứu cho rằng, quá lạm dụng thiết bị Bluetooth sẽ gây ảnh hưởng không tốt tới sức khoẻ do sóng radio gây ra.
PHẦN 2 :BLUETOOTH LOW ENERGY (BLE)
1 ) Giới thiệu về BLE
Trước đây, một trong những lý do khiến người ta ngại bật bluetooth là vì nó đốt pin khá nhiều, lại gây nóng máy nếu hoạt động liên tục. Tuy nhiên, Bluetooth 4.0 đã khắc phục được nhược điểm này. Một trong những cải thiện vượt trội nhất của BLE là gần như máy không bị tiêu hao pin dù bạn có bật thường trực.
Ngày 30/6/2010 Bluetooth SIG đã đưa ra Bluetooth phiên bản 4.0 là sự kết hợp của 3 giao thức nhỏ là “classic Bluetooth” (Bluetooth 2.1 và 3.0), “Bluetooth high speed” (Bluetooth 3.0 +HS) và “Bluetooth low energy – Bluetooth năng lượng thấp” (Bluetooth Smart Ready/Bluetooth Smart).
“Bluetooth low energy” là một phần của Bluetooth 4.0 với một giao thức hoàn toàn mới để những kết nối đơn giản được thực hiện nhanh chóng. Nó là một sự chuyển đổi những giao thức tiêu chuẩn của Bluetooth 1.0 vào 4.0 nhằm phục vụ cho những ứng dụng năng lượng cực thấp. Điều này cho phép giảm đáng kể điện năng tiêu thụ, qua đó kéo dài thời lượng pin các thiết bị di động, một vấn đề đang rất được quan tâm hiện nay.
2) Thông số kỹ thuật của BLE
-Truyền dữ liệu - công nghệ Bluetooth năng lượng thấp cung cấp các gói dữ liệu rất ngắn (8 byte tối thiểu lên đến 27 byte tối đa) với tốc độ 1 Mbit/s. Tất cả các kết nối tiên tiến sử dụng đánh giá sniff-sub để đạt được chu kỳ nhiệm vụ cực kỳ thấp.
-Công nghệ bluetooth 4.0 cũng sử dụng dãy tần 2,4 GHz như công nghệ bluetooth cũ, Thừa hưởng những ưu thế về tốc độ truyền dữ liệu và khoảng cách giao tiếp giữa hai thiết bị lên tới 90m, tốc độ bit là 1 Mbit/s và công suất phát tối đa là 10 mW
-Công nghệ Bluetooth năng lượng thấp sử dụng một CRC 24 bit mạnh mẽ trên tất cả các gói đảm bảo sự chống nhiễu tối đa
-Bảo mật an ninh - mã hóa AES-128 Full sử dụng CCM để cung cấp mã hóa và xác thực của các gói dữ liệu.
-Cấu trúc liên kết - công nghệ Bluetooth năng lượng thấp sử dụng một địa chỉ truy cập 32 bit trên mỗi gói cho mỗi thiết bị, cho phép hàng tỷ thiết bị được kết nối. Công nghệ này được tối ưu hóa cho một-một kết nối trong khi cho phép một-nhiều kết nối sử dụng cấu trúc liên kết hình sao. Với việc sử dụng các kết nối nhanh chóng và ngắt kết nối, dữ liệu có thể di chuyển trong một vùng mạng lưới một cách đơn giản và dễ dàng
Về vấn đề tương tác
-Bluetooth smart chỉ hoạt động ở chế độ đơn tần ( single radio) hướng đến khả năng phát tín hiệu cho các thiết bị trong lĩnh vực y tế ( đo nhịp tim) thông qua một cảm biến tích hợp, các thông tin thu được chỉ có thể được gửi qua thiết bị có Bluetooth Smart Ready. Các thiết bị Bluetooth smart sẽ không có tốc độ cao như 3.0 nhưng bù lại chúng tiêu thụ năng lượng rất thấp, pin của chúng thậm chí chỉ hoạt đông trong vài năm.
-Trong khi đó, phiên bản Bluetooth smart ready hoạt động ở hai dãy tín hiệu (dual radio) lại hội đủ các điều kiện trên và hoàn toàn tương thích ngược với 3.0.Thiết bị Bluetooth Smatr Ready có thể vừa kết nối với các thiết bị Bluetooth thông thường vừa có khả năng nhận dữ liệu truyền tải từ các thiết bị Bluetooth smart.Các thiết bị chuẩn Bluetooth smart ready gồm điện thoại, máy tính bảng, tivi và PC và đã được triển khai trên iphone 4s, Mac Mini, Macbook Air.
-Mỗi chuẩn thiết bị khác nhau đều có sự tương thích khác nhau. Với thiết bị gắn nhãn Bluetooth Smart Ready nó có thể dùng cho các thiết bị thuộc nhãn Bluetooth Smart Ready,Bluetooth smart và Bluetooth.Trong khi đó Bluetooth chỉ tương thích với Bluetooth, Bluetooth Smart ready và nhãn Bluetooth Smart chỉ có thể tương thích với Bluetooth Smart Ready mà thôi.
-Để hiểu rõ hơn về khả năng tương thích giữa các thiết bị Bluetooth 4.0, có thể tham khảo thêm bảng dưới đây:
3 ) Ứng dụng của BLE
Nhờ những cải tiến tuyệt vời đó, Bluetooth 4.0 được sử dụng một cách rộng rãi trên nhiều thiết bị công nghệ khác nhau, từ smartphone cho tới vòng đeo tay theo dõi sức khỏe...Và trong tương lai, Bluetooth LE hứa hẹn sẽ là chìa khóa để mở ra cánh cửa đón chúng ta vào "ngôi nhà thông minh" và Internet Of Things
Ngoài ra Bluetooth 4.0 còn tương thích với công nghệ giao tiếp phạm vi gần (NFC – Near Field Communication) phục vụ nhu cầu thanh toán điện tử mới trong tương lai
Đặc điểm chung của các sản phẩm sử dụng BLE là khả năng kết nối liên tục và trực tiếp với Smartphone mà không tiêu tốn nhiều năng lượng của cả thiết bị lẫn điện thoại.
Khắc phục được vấn đề về năng lượng và khoảng cách, BLE được đánh giá sẽ là phương thức kết nối của tương lai
Dưới đây là một vài ứng dụng của Bluetooth 4.0 trên những sản phẩm mà chúng ta sử dụng tới hàng ngày.
Nhà thông minh (Smart Home)
Ứng dụng BLE để điều khiển máy lạnh, TV, đèn, máy giặt nói chung là mọi thiết bị trong ngôi nhà của bạn. Biến chiếc mobile của bạn thành chiếc remote đa năng, điều khiển đủ mọi thứ trong nhà
IBeacon
Công nghệ iBeacon được phát triển dựa trên BLE. Một trong những ứng dụng của iBeacon, giả sử bạn đang đi dạo trong một trung tâm mua sắm, mỗi gian hàng sẽ có một thiết bị iBeacon để giao tiếp với điện thoại của bạn để biết bạn đến mỗi gian hàng bao lâu, xem món hàng nào nhiều, có gian hàng nào ghé hơn 2 lần trong cùng lúc ấy. Dựa trên những hành vi ấy để xét đoán mức độ quan tâm của bạn để đưa ra những ưu đãi đặc biệt để tác động đến hành động của hàng của bạn.
Quản lý trẻ nhỏ, thú cưng, chống quên vật dụng cá nhân
Nếu bạn đi siêu thị và dắt theo con nhỏ hoặc dẫn thú cưng đi dạo chơi công viên mà sợ bị lạc các tình yêu này thì có thể sắm thêm một thiết bị tròn tròn nho nhỏ có đường kính tầm 2 đến 3cm gắn vào các bạn ấy rồi cứ thoải mái cho các bạn ấy tung tăng, hễ cứ xa bạn 10m (hoặc 1m, 5m, hoặc xa hơn, tùy chúng ta tùy chỉnh) là sẽ có một báo động dưới dạng âm thanh hoặc rung (hoặc cả hai) để bạn nhận diện
Bạn cũng có thế dùng theo cách thức tương tự cho các vật dụng cá nhân như ví, chìa khóa theo hình thức pair (kết nối hai thiết bị lại, còn gọi là kết nối theo cặp) với ĐTDĐ của bạn. Giả sử bạn để quên ví hay chìa khóa ở quán café mà đã đi ra ngoài thì điện thoại của bạn sẽ hú inh ỏi lên hoặc quên điện thoại mà tay thì tung tăng cầm chìa khóa thì xâu chìa khóa của bạn sẽ rung lên báo hiệu là bạn để quên gì đó.
PHẦN 3 :CHI TIẾT VỀ CC2540 VÀ HM-10
1 ) Giới thiệu chip CC2540
- Bluetooth low energy (BLE) sử dụng chip CC2540 của Texas Instruments (TI), hiệu quả về chi phí, tiêu tốn rất ít năng lượng, có thể hoạt động trong vòng một năm chỉ với một viên pin cúc áo. dễ dàng lắp đặt do chip CC2540 có kích thước vật lý chỉ khoảng 6mm2, được nhúng bộ nhớ Flash bên trong, chip Bluetooth này có thể dễ dàng cập nhật khi cần
- CC2540 là sự kết hợp giữa một bộ thu phát RF và một MCU 8051, sử dụng hệ thống lập trình với bộ nhớ flash, 8 KB RAM với rất nhiều tính năng hỗ trợ thiết bị ngoại vi khác, thời gian chuyển đổi ngắn giữa các chế độ hoạt động cho phép tiêu thụ điện năng thấp
- CC2540 có hai phiên bản khác nhau: CC2540F128 / F256, với 128 và 256 KB bộ nhớ flash, tương ứng.
- Các chế độ hoạt động :
+ Chế độ RX: 19.6 mA
+ Chế độ TX: 24 mA
+ Chế độ hoạt động 1 (3us - khởi động): 235 uA
+Chế độ hoạt động 2 (Sleep timer on– định thời gian nghỉ): 0.9uA
+Chế độ hoạt động 3 (External interrupts – ngắt ngoài): 0.4 uA
Nguồn điện: 2V – 3.6V
Độ nhạy : -93 dBm
Nhiệt độ hoạt động: -40 - 85◦C
- Lõi MCU hiệu suất cao và công suất thấp 8051.
8051 lõi CPU là một MCU 8 bit đơn chip mạnh cho ta một giải pháp có hiệu quả về chi phí. Nó có ba bus truy cập bộ nhớ khác nhau (SFR, DATAvà CODE/XDATA), một giao diện gỡ lỗi, và 18-đầu vào ngắt mở rộng.
- Thiết bị ngoại vi :
+ 12-Bit ADC với Tám kênh .
+4 timers gồm một timer 16-bit ,1 timer 40-bit và hai timer 8-Bit .
+ Có 21 chân I / O trong đó 19 I/O dòng 4 mA và 2 I/O dòng 20 mA.
+ Hai USARTs hỗ trợ giao thức nối tiếp .
+ Full-Speed giao diện USB
-Mỗi CC2540 chứa 48-bit địa chỉ IEEE duy nhất có thể được sử dụng như địa chỉ cố định cho một thiết bị Bluetooth. Người lập trình có thể tự do sử dụng địa chỉ này.
- Các bộ dao động trong chế độ sleep là một bộ đếm thời gian năng lượng cực thấp có thể sử dụng một dao động 32,768 kHz tinh thể bên ngoài hoặc sử dụng bộ dao động RC nội 32,753 kHz. Các bộ dao động này chạy liên tục trong tất cả các chế độ hoạt động ngoại trừ chế độ power mode 3. Ứng dụng điển hình của bộ đếm thời gian này như một thời gian truy cập hoặc là một bộ đếm thời gian đánh thức để chip có thể thoát khỏi chế độ power mode 1 hoặc 2.
- Timer 1 là một bộ đếm thời gian 16-bit với chức năng hẹn giờ / truy cập / PWM. Nó có một prescaler lập trình một khoảng thời gian 16-bit giá trị và năm kênh truy cập có thể lập trình riêng rẽ.
- Timer 2 là một bộ đếm thời gian 40-bit sử dụng năng lượng thấp Bluetooth stack. Nó có 16-bit truy cập với một bộ đếm thời gian cấu hình thời gian và 24-bit tràn truy cập có thể được sử dụng để theo dõi số lượng thời gian có transpired hoặc ngắt nói chung.
- Timer 3 và 4 là timer 8-bit với chức năng hẹn giờ / truy cập / PWM. Nó có một prescaler lập trình một giá trị thời gian 8-bit, và một kênh truy cập lập trình với 8-bit so sánh giá trị.
- Ứng dụng:
+Hệ thống bluetooth năng lượng thấp 2,4 GHz
+Phụ kiện điện thoại di động
+Thiết bị thể thao và giải trí
+Điện tử gia dụng
+Thiết bị giao diện con người (bàn phím, chuột, điều khiển từ xa)
+Chăm sóc sức khỏe và y tế
2 )Giới thiệu về module HM-10 của chip
HM-10 là một board phát triển của chip CC2540 cho công nghệ Bluetooth low energy với firmware đã được nạp sẵn lên chip . HM-10 sử dụng giao diện truyền nhận nối tiếp để khởi động các mode và giao tiếp .
Đặc điểm kỹ thuật
Loại module
Không dây
Chức năng
Bluetooth SPP (Master & Slave)
Tần số hoạt động
2.4 GHz
Khối lượng
8g
Kích thước
26.9mm x 13mm x 2.2 mm
Phiên bản
1.0
Nguồn cung cấp
3.3Vdc
Nhiệt độ hoạt động
-5 -> 65◦C
Bảo vệ
Xác thực và mã hóa
3 ) Sơ đồ cấu hình chân ra của HM-10
4 ) Chức năng các chân của HM-10
STT
Tên
Chức năng
1
UART_TX
Giao diện UART
2
UART_RX
Giao diện UART
3
UART_CTS
Giao diện UART
4
UART_RTS
Giao diện UART
5
NC
NC
6
NC
NC
7
NC
NC
8
NC
NC
9
NC
NC
10
NC
NC
11
RESETB
12
VCC
3.3V
13
GND
Ground
14
GND
Ground
15
USB_D-
Giao tiếp USB
16
NC
NC
17
NC
NC
18
NC
NC
19
NC
NC
20
USB_D+
Giao tiếp USB
21
GND
Ground
22
GND
Ground
23
PIO0
Hệ thống nút điều khiển
24
PIO1
Hệ thống LED
25
PIO2
Lập trình input/output
26
PIO3
Lập trình input/output
27
PIO4
Lập trình input/output
28
PIO5
Lập trình input/output
29
PIO6
Lập trình input/output
30
PIO7
Lập trình input/output
31
PIO8
Lập trình input/output
32
PIO9
Lập trình input/output
33
PIO10
Lập trình input/output
34
PIO11
Lập trình input/output
5 ) Kích thước HM-10
6 ) Sơ đồ mạch HM-10
7) Cấu trúc tập lệnh của HM-10
*System LED and System KEY : trong HM-10 chân PIO0 được cấu hình là ngõ vào của switch và chân PIO1 là ngõ ra cho LED.
- System KEY : Khi không nhấn switch chân này ở mức cao (3,3 V) ,khi nhấn switch sẽ chuyển xuống mức thấp (0 V) .
+Ở chế độ master
Khi chưa kết nối: nhấn switch sẽ xóa thông tin địa chỉ thiết bị từ xa kết nối cuối cùng .
Khi đã kết nối : nhấn switch sẽ ngắt kết nối.
+ Ở chế độ slave
AT+PIO10 nhấn switch không có tác dụng.
Khi đã kết nối : nhấn switch sẽ ngắt kết nối.
- System LED :
+ Nếu lệnh AT+PIO10 được thiết lập
Khi chưa kết nối:ngõ ra sẽ là xung vuông 500ms mức thấp và 500ms mức cao.
Khi đã kết nối : ngõ ra ở mức cao.
+ Nếu lệnh AT+PIO11 được thiết lập
Khi chưa kết nối : ngõ ra ở mức thấp.
Khi đã kết nối : ngõ ra ở mức cao.
* Các tập lệnh AT
- AT : xác định trạng thái ( trả về OK).
- Truy vấn / Thiết lập tốc độ baud
AT+BAUD? : hỏi tốc độ baud ( trả về OK+Get:[tốc độ baud] )
AT+BAUD[para1] : thiết lập tốc độ baud
Para1: Baud rate No.
0---------9600
1---------19200
2---------38400
3---------57600
4---------115200
Mặc định: 0(9600)
- Truy vấn / Thiết lập bit chẵn lẻ
AT+PARI? : truy vấn bit chẵn lẻ
AT+PARI[para1] : thiết lập bit chẵn lẻ ( trả về OK+Set:[para1] )
Para1: 0,1,2
0:None
1:EVEN
2:ODD
Mặc định: 0 (None)
- Truy vấn / Thiết lập Stop bit
AT+STOP? : truy vấn stop bit ( trả về OK+Get:[para1] )
AT+STOP[para1] : thiết lâp chế độ stop bit ( trả về OK+Set:[para1] )
Para1:0, 1
0: One stop bit
1: Two stop bit
Mặc định: 0 (One stop bit)
- Truy vấn / Đặt Chế độ module làm việc
AT+MODE? : hỏi về mode hoạt động ( trả về OK+Get:[para1] )
AT+MODE[para1] : thiết lập mode hoạt động ( trả về OK+Set:[para1] )
Para1: 0, 1, 2
0: Transmission Mode
1: Remote Control Mode
2: 0 Mode + 1 Mode
Mặc định: 0
- Truy vấn / Set chế độ PIO1 output (System LED)
AT+PIO1? : hỏi chế độ PIO1 (trả về OK+Get:[para1] )
AT+ PIO1 [para1] ; thiết lập chế độ PIO1 ( trả về OK+Set:[para1] )
Para1: 0, 1
0:Unconnected Output
500ms High 500ms Low,
Connected output High.
1:Unconnected output
Low, Connected output
High.
Mặc định: 0
- Reset module
AT+RESET : khởi động lại module ( trả về OK+RESET )
- Truy vấn / Thiết lập chế độ Master hay slave
AT+ROLE? : Hỏi chế độ đang hoạt động ( trả về OK+ROLE:[para1] )
AT+ROLE[para1] : thiết lập chế độ hoạt động ( trả về OK+Set:[para1] )
Para1: M, S
M: Master
S: Slaver
Mặc định: S
- Truy vấn / Thiết lập mã pin
AT+PASS? : hỏi mã pin ( trả về OK+PASS:[para1] )
AT+PIN[para1] : thiết lập mã pin ( trả về OK+Set:[para1] 0
Para1 is Pin Code,
000000~999999
Mặc định: 000000
- Xóa địa chỉ thiết bị kết nối cuối
AT+CLEAR : trả về OK+CLEAR lệnh này chỉ sử dụng khi module đang ở chế độ master
- Truy vấn / Thiết lập chế độ module Bond
AT+TYPE? : hỏi chế độ ( trả về OK+Get:[para1] )
AT+TYPE[para1] :thiết lập chế độ cho Bond ( trả về OK+Set:[para1])
Para1: 0~1
0:Not need PIN Code
1:Need PIN Code
Mặc định: 0
- Truy vấn / Thiết lập chế độ công suất phát song
AT+POWE? : hỏi chế độ phát sóng ( trả về OK+Get:[para1] )
AT+ POWE [para1] : thiết lập chế độ công suất phát ( trả về OK+Set:[para1] )
Para: 0 ~ 3
0: -23dbm
1: -6dbm
2: 0dbm
3: 6dbm
Mặc định: 2
8)Thiết kế PCB cho HM-10 ( sử dụng phần mềm Altium designer )
- Mạch nguyên lý :
- PCB layout :
- Mạch in :
PHẦN 4: MÔ PHỎNG KẾT NỐI VÀ TRUYỀN DỮ LIỆU GIỮA HAI MODULE HM-10
( Truyền tín hiệu nhiệt độ qua BLUETOOTH hiển thị lên LCD )
1)Khối vi điều khiển
Vi điều khiển sử dụng là MSP430G2553 trên kit MSP430 LaunchPad
-Trong ứng dụng này ta sẽ sử dụng 2 kit MSP430 LaunchPad 1 kit cho phần phát và 1 kit cho phần thu
+Kit ở phần phát có nhiệm vụ đọc cảm biến nhiệt độ bên trong chip MSP430G2553 và đẩy lên UART để phát đi thông qua HM-10.
+ Kit ở phần thu nhận dữ liệu nhiệt độ thu được từ HM-10 qua UART và hiển thị giá trị đó lên LCD .
*Giới thiệu về MSP430
MSP430 là dòng vi điều khiển của Texas Instrument chứa 16 bit RISC CPU, các ngoại vi và hệ thống bộ định thời linh hoạt được kết nối với nhau theo cấu trúc VON-NEUMANN, có các Bus liên kết như: Bus địa chỉ bộ nhớ ( MAB), Bus dữ liệu bộ nhớ ( MDB). Đây là một bộ xử lý hiện đại với các mô đun bộ nhớ tương tự và nhúng kết nối ngoại vi tín hiệu số, MSP430 đã đưa ra được những giải pháp tốt cho những nhu cầu ứng dụng với tín hiệu hỗn tạp.
MSP430G2553:
- Cấu trúc sử dụng nguồn thấp giúp kéo dài tuổi thọ của Pin
+ Duy trì 0.1µA dòng nuôi RAM.
+ Chỉ 0.8µA real- time clock.
+ 250 µA/ MIPS.
- Bộ tương tự hiệu suất cao cho các phép đo chính xác
+ 12 bit hoặc 10 bit ADC-200 kskp, cảm biến nhiệt độ, Vref.
+12 bit DAC.
+ Bộ giám sát điện áp nguồn.
-16 bit RISC CPU cho phép được nhiều ứng dụng, thể hiện một phần ở kích thước Code lập trình.
+ Thanh ghi lớn nên loại trừ được trường hợp tắt nghẽn tập tin khi đang làm việc.
+ Thiết kế nhỏ gọn làm giảm lượng tiêu thụ điện và giảm giá thành.
+ Tối ưu hóa cho những chương trình ngôn ngữ bậc cao như C, C++
+ Có 7 chế độ định địa chỉ.
+ Khả năng ngắt theo vector lớn.
- Trong lập trình cho bộ nhớ Flash cho phép thay đổi Code một cách linh hoạt, phạm vi rộng, bộ nhớ Flash còn có thể lưu lại như nhật ký của dữ liệu.
Mode hoạt động
- Họ MSP430 được thiết kế cho những ứng dụng sử dụng nguồn thấp và sử dụng ở nhiều chế độ hoạt động khác nhau. Các chế độ hoạt động khác nhau ở 3 đặc điểm chính:
+ Mức độ sử dụng nguồn thấp.
+ Tốc độ và lưu lượng dữ liệu.
+ Mức độ làm nhỏ đi lượng tiêu thụ điện của các thiết bị ngoại vi.
- Ở chế độ nguồn thấp LPM0 đến LPM4 được thiết lập với các Bit SCG0, SCG1,OSCOFF, CPUOFF trong thanh ghi trạng thái. Ưu điểm của các Bit điều khiển SCG0,SCG1, OSCOFF và CPUOFF trong thanh ghi trạng thái là chế độ hoạt động hiện tại sẽđược lưu trong Stack trong suốt quá trình ngắt diễn ra. Chương trình sẽ quay về chế độ hoạt động trước đó nếu giá trị được lưu trong thanh ghi trạng thái không bị thay đổi trong suốt quá trình ngắt. Chương trình có thể quay về một chế độ hoạt động khác nếu có sự thay đổi giá trị được lưu bên trong Stack trong suốt quá trình ngắt diễn ra. Các Bít điều khiển và Stack có thể được truy cập bởi bất kì lệnh nào. Các chế độ hoạt động của họ MSP430 được trình bày ở Bảng II.2
- Một sự kiện ngắt được cho phép sẽ kích hoạt MSP430 từ bất kì chế độ hoạt động nguồn thấp nào. Chương trình là:
Nhập chương trình ngắt:
+ PC và SR được lưu trữ trên ngăn xếp.
+ Các Bit CPUOFF, SCG1 và OSCOFF tự động Reset.
Trở về từ chương trình ngắt:
+ SR được lấy ra từ ngăn xếp và khôi phục lại chế độ điều hành trước đó.
+ Các Bit SR được lưu trữ trong ngăn xếp có thể bị thay đổi trong thường trình dịch vụ ngắt quay trở về một chế độ hoạt động khác khi lệnh RETI được thực thi.
ADC
-ADC10 là một bộ biến đổi A-D 10 Bit có hiệu suất cao. Mô đun ADC10 lắp đặt 10 bit SAR core, Bộ điều khiển lựa chọn mẫu, Bộ sinh mẫu, Bộ điều khiển chuyển đổi dữ liệu ( DTC).
- DTC cung cấp cho ADC10 những mẫu được chuyển đổi và lưu trữ ở bất kì nơi đâu trong bộ nhớ mà không có bất kì sự can thiệp nào của CPU. Mô đun ADC10 có thể được thiết lập bởi người sử dụng cho những ứng dụng đa dạng.
ADC10 bao gồm:
+ Tỉ lệ chuyển đổi lớn nhất hơn 200 ksps.
+ Lấy mẫu và giữ với chu kỳ lấy mẫu có thể lập trình được.
+ Sự chuyển đổi được khởi tạo bởi chương trình hoặc timer A.
+ Chương trình lựa chọn điện áp chuẩn trên chip ( 1.5V hoặc 2.5V ).
+ Chương trình lựa chọn sự tham chiếu bên trong hoặc bên ngoài.
+ Có 8 kênh nhập tín hiệu từ bên ngoài ( 12 đối với MSP430x22xx).
+ Có kênh chuyển đổi cho cảm biến nhiệt độ bên ngoài, Vcc, tham chiếu bên ngoài.
+ Lựa chọn nguồn xung clock chuyển đổi.
+ Nhân ADC và điện áp chuẩn được cấp xuống một cách riêng rẽ.
+ Bộ chuyển đổi dữ liệu lưu trữ kết quả chuyển đổi một cách tự động.
- Nhân ADC10 chuyển đổi một tín hiệu vào tương tự sang số 10 Bit và lưu kết quả chuyển đổi trong thanh ghi ADC10MEM. Nhân ADC10 sử dụng chương trình lựa chọn mức điện thế ( VR+ và VR-) để xác định giới hạn trên và giới hạn dưới của sự chuyển đổi. Ngã ra số ( NADC) có kích thước đầy đủ ( 03FFh) khi tín hiệu vào bằng hoặc nhỏ hơn VR+ và bằng 0 khi tín hiệu vào bằng hoặc nhỏ hơn VR-. Kênh tín hiệu vào và mức điện áp chuẩn ( VR+ và VR-) thì được xác định bởi bộ nhớ điều khiển chuyển đổi.
- Nhân ADC10 được thiết lập bởi 2 thanh ghi điều khiển là ADC10CTL0 và ADC10CTL1.Nhân ADC10 được cho phép bởi Bit ADC10ON. Có một vài ngoại lệ là Bit điều khiển ADC10 có thể bị biến đổi khi ENC = 0. ENC phải được Set lên 1 trước khi có bất kì sự chuyển đổi nào có thể xảy ra.
- ADC10CLK được sử dụng như là xung clock chuyển đổi và bộ sinh chu kỳ lấy mẫu. Nguồn xung clock của ADC10 được chọn bởi việc sử dụng Bit ADC10SSELx và có thể được chia từ 1-8 sử dụng Bit ADC10DIVx. Có thể nguồn của ADC10CLK là SMCLK, MCLK, ACLK và một bộ dao động bên trong là ADC10OSC.
- Người sử dụng phải đảm bảo rằng nguồn xung Clock được chọn cho ADC10CLK phải hoạt động cho đến khi sự chuyển đổi kết thúc. Khi nguồn cấp xung bất chợt bị mất khi đang trong quá trình chuyển đổi thì sự chuyển đổi sẽ không hoàn thành và kết quả thì sẽ bị lỗi.
- Một ngắt và một véc tơ ngắt được ghép với ADC10. Khi DTC không được sử dụng ( ADC10DTC1 = 0), ADC10IFG được Set khi kết quả biến đổi A-D được tải xuống ADC10MEM. Khi DTC được sử dụng ( ADC10DTC1 > 0), ADC10IFG được Set khi sự chuyển giao một khối được hoàn thành và bộ đếm chuyển giao bằng 0. Nếu cả hai Bit ADC10IE và GIE được Set, ADC10IFG sẽ sinh ra một ngắt yêu cầu. Cờ ADC10IFG tự động Reset khi ngắt yêu cầu được duy trì hoặc có thể được Reset bằng phần mềm.
Timer A
-Timer là ngoại vi cơ bản của vi xử lý
-Có chức năng định thì, capture, compare
-MSP430G2553 có 2 TimerA 16bit -A0 và A1
-Hỗ trợ đa chức năng:Capture /Compare,ngõ ra PWM và định thì từng khoảng thời gian.
-Có các chế độ ngắt Timer/Counter và Capture/Compare.
-Có thể lựa chọn để hoạt động với các nguồn xung Clock khác nhau.
Clock Source Timer :
- TACLK (Timer A clock): Là một nguồn xung clock ngoại được đưa vào chân P1.0 của MSP430G2553.
-ACLK (Auxiliary clock): Là một nguồn clock bổ sung cho Timer A, chỉ được cấp nguồn từ LFXTCL, thường dùng cho hệ thống phụ với clock hoạt động thấp để tiết kiệm năng lượng.
- SMCLK (Submaster clock): thường dùng cho ngoại vi, lấy nguồn từ DCO hoặc XT2.
- Up : Chế độ đếm lên của Timer A. Giá trị của thanh ghi TAR (Timer A register) sẽ tăng liên tục từ 0 cho đến một giá trị được định sẵng trong thanh ghi TACCR0 rồi reset về giá trị 0,quá trình hoạt động cứ tiếp tục như vậy.
- Continous: Chế độ đếm lên liên tục của Timer A.Trong một chu kỳ hoạt động giá trị của thanh ghi TARsẽ tăng liên tục từ 0 cho đến 0FFFFh rồi reset về giá trị 0.
- Up/Down: Chế độ đếm lên/xuống của Timer A. Trong một chu kỳ hoạt động giá trị của thanh ghi TAR sẽ tăng liên tục từ 0 cho đến TACCR0 rồi giảm dần về giá trị 0.
- Các thanh ghi timer :
+TAxCTL: setup timer
+TARx: thanh ghi giá trị đếm của timer
+ TACCRx: thanh ghi giá trị caputre/compare
+TAxCCTL: setup capture/compare mode
+TAIV: thanh ghi ngắt
*Kit MSP430 LaunchPad
- MSP430 LaunchPad là kit phát triển giá rất rẻ dành cho người mới học về vi điều khiển của hãng Texas Instruments. Kit MSP430 LaunchPad phiên bản hiện tại (1.5) sử dụng MCU MSP430G2553 (16MHz, 16Kb Flash, 512B SRAM, 2 Timer 16-bit, 8 kênh ADC 10-bit, giao tiếp UART LIN IrDA I2C SPI) . Đây là MCU thuộc dòng Value Line của TI, siêu tiết kiệm năng lượng, đầy đủ chức năng, rất phù hợp với túi tiền của học sinh-sinh viên. Trên kit có sẵn mạch Program/Debug rất tiện lợi nữa.
2) Khối truyền nhận dữ liệu không dây
- Khối truyền nhận dữ liệu không dây là 2 module HM-10 giao tiếp với vi điều khiển qua chân RX và TX của UART .
- Hai module này đã được cấu hình để có thể kết nối với nhau trong đó :
+ Module phát cấu hình là master thông qua lệnh AT+ ROLE1
+ Module thu cấu hình slave thông qua lệnh AT+ ROLE0
- Các module được đặt ở chế độ Transmission Mode
3) Khối hiển thị
Để hiển thị giá trịnh nhiệt độ đo được ta sử dụng LCD 16x2 là một LCD rất thông dụng trên thị trường hiện nay .
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển bên trong lớp
vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số thứ
tự và đặt tên như hình :
- Ý nghĩa các chân của LCD :
4) Lưu đồ giải thuật chương trình
* Phần phát
- Khởi tạo xung clock
- Khởi tạo time
- Khởi tạo ADC
- Khởi tạo UART
Vào chế độ lowpower chờ ngắt
Đọc cảm biến nhiệt độ nội từ ADC10 lưu giá trị đọc được vào biến temp
Ngắt ADC
Ngắt timer
A0
- Xóa cờ ngắt
- Khởi tạo lại time
- Chuyển giá trị temp thành giá trị nhiệt độ thực lưu vào tempc
-Ghi giá trị tempc ra UART
*Phần thu
Đọc giá trị từ UART hiển thị lên LCD
Vào chế độ lowpower chờ ngắt
- Khởi tạo xung clock
- Khởi tạo LCD
- Khởi tạo UART
Ngắt UART
RX
PHẦN 5: TÀI LIỆU THAM KHẢO VÀ CODE LẬP TRÌNH
1)Tài liệu tham khảo
- wikipedia.org
- Một số đồ án về Bluetooth
- Pay It Forward Câu lạc bộ Nghiên Cứu Khoa Học Khoa Điện - Điện tử - Bách Khoa TP. HCM
-
2)Code lập trình phần phát
* main.c
#include
#include "Basic_config.h"
#include "UART_.h"
#define Vref 3.3
unsigned long temp, volt,tempc;
void timer_init (void)
{
TACTL = TASSEL_1 + MC_2; // ACLK (12kHz), continuousmode
CCR0 = 12000; // cycle 12000*1/12000 = 1s
CCTL0 = CCIE; // CCR0 interrupt enabled
}
void ADC10_Init(void)
{
ADC10CTL0 = SREF_1 + ADC10SHT_3 + ADC10ON + ADC10IE + REFON;
ADC10CTL1 = INCH_10 + ADC10DIV_1 + ADC10SSEL_3 ;
}
void main()
{
Config_stop_WDT();
Config_Clocks();
timer_init();
ADC10_Init ();
uart_init ();
ADC10CTL0 |= ENC + ADC10SC; //Enable ADC10, Start sample - conversion
delay_ms (200);
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 with interrupt
while (1)
{
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 with interrupts
}
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
tempc = ((temp -673)*42300)/1024 ;
uart_put_num (tempc, 2, 0);
ADC10CTL0 |= ENC + ADC10SC; //Enable ADC10, Start sample - conversion
CCR0 += 12000; // Add Offset to CCR0
}
#pragma vector = ADC10_VECTOR
__interrupt void ADC10_Interrupt(void)
{
temp = ADC10MEM;
}
* Basic_config.c
#include
#include "Basic_config.h"
void Config_stop_WDT(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
}
void Config_Clocks(void)
{
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) // Check if constants cleared
{
while(1); // If cal constants erased, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // Set DCO range & ACLK prescaler
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
BCSCTL3 |= LFXT1S_2 + XCAP_3; // configure ACLK Source
while(IFG1 & OFIFG) // wait for OSCFault to clear
{
IFG1 &= ~OFIFG;
__delay_cycles(100000);
}
BCSCTL2 |= SELM_0 + DIVM_0; // select MCLK, SMCLK clock and prescaler
void delay_us (int t)
{
int i;
for (i = 0; i<t; i++ )
__delay_cycles(MCLK_F);
}
void delay_ms (int t)
{
int i;
for (i = 0; i<t; i++ )
__delay_cycles(MCLK_F*1000);
}
* Basic_config.h
#ifndef BASIC_CONFIG_H_
#define BASIC_CONFIG_H
#define MCLK_F 1 // frequency of Master Clock in MHz
#define SMCLK_F 1000000 // frequency of Sub-System Master Clock in Hz
#define ACLK_F 12000 // frequency of Auxiliary Clock in Hz
void Config_stop_WDT (void);
void Config_Clocks (void);
void delay_us (int t);
void delay_ms (int t);
#endif /* BASIC_CONFIG_H_ */
* UART_.h
#ifndef UART_H_
#define UART_H_
#ifndef SMCLK_F
#define SMCLK_F 1000000 // frequency of Sub-System Master Clock in Hz
#endif
#define BAUDRATE 9600 // may be ... 1200, 2400, 4800, 9600, 19200, ...
#define UART_RX_INT_EN 0
// For further description, see UART.c
void uart_init();
void uart_putc(char c);
void uart_puts(const char *s);
void uart_put_num (unsigned long val, char dec, unsigned char neg);
char uart_data_ready();
char uart_getc();
void uart_gets(char *s);
#endif /* UART_H_ */
* UART_.c
#include
#include "UART_.h"
void uart_init(void)
{
unsigned int tempfactor;
P1SEL |= BIT1 + BIT2 ; // Set P1.1 as RXD
P1SEL2 |= BIT1 + BIT2 ; // Set P1.2 as TXD
UCA0CTL0 |= UCMODE_0; // Select UART mode
UCA0CTL1 |= UCSSEL_2; // Select clock source USCI
tempfactor = SMCLK_F/BAUDRATE;
UCA0BR0 = (unsigned char) tempfactor&0x00FF;
tempfactor >>= 8;
UCA0BR1 = (unsigned char) (tempfactor&0x00FF);
UCA0MCTL |= UCBRF_0 + UCBRS_0; // Configure modulator
UCA0CTL1 &= ~UCSWRST; // **Release USCI to operate**
if (UART_RX_INT_EN)
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
void uart_putc(char c)
{
while(!(IFG2&UCA0TXIFG)); // Wait until USCI_A0 TX buffer empty
UCA0TXBUF = c; // assign character to TX buffer
}
void uart_puts(const char* s)
{
while(*s != '\0'){
uart_putc(*s);
s++;
}
}
void uart_put_num (unsigned long val, char dec, unsigned char neg)
{
char i, j, digit,k;
long total;
long temp;
for (i = 0, total = val; total > 0;i++) // count number
total /= 10;
total = i;
if (neg !=0 )
uart_putc ('-');
if ((total - dec) <=0) // if total < dec put 0.xxx
uart_putc('0');
else
{
for (i=0; i< (total-dec); i++)
{
temp = 1;
for (j=1;j<(total-i);j++)
temp *=10;
digit = (val/temp)%10;
uart_putc(digit + 0x30);
}
}
if (dec > 0)
{
uart_putc('.');
if ( (dec - total)> 0) // ex: val = 55; dec = 3 put 0.055
{
for ( i = 0; i < (dec-total);i++)
uart_putc('0');
k = 0;
}
else
k = total - dec;
for (i=k; i< total; i++)
{
temp = 1;
for (j=1;j<(total-i);j++)
temp *=10;
digit = (val/temp)%10;
uart_putc(digit + 0x30);
}
}
}
char uart_getc()
{
while(!(IFG2&UCA0RXIFG)); // Wait until USCI_A0 RX receive a complete character
return UCA0RXBUF; // assign RX buffer to function 's name
}
void uart_gets(char *s)
{
*s = uart_getc();
while(*s!='\0')
{
s++;
*s = uart_getc();
}
}
char uart_data_ready()
{
if(UCA0RXIFG) return 1;
else return 0;
}
3)Code lập trình phần thu
* main.c
#include "msp430g2553.h"
#include
int a,b,c,d,e,f;
int i=0;
void Wst(char* string)
{
while(*string) // Het chuoi ky tu thi thoat
{
while (!(IFG2&UCA0TXIFG)); // Doi gui xong ky tu truoc
UCA0TXBUF= *string; // Moi cho phep gui ky tu tiep theo
string ++; // Lay ky tu tiep theo
}
}
void Wch(unsigned char data)
{
while (!(IFG2&UCA0TXIFG)); // Doi gui xong ky tu truoc
UCA0TXBUF= data; // Moi cho phep gui ky tu tiep theo
}
void DisplayLCD(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 = CALBC1_1MHZ; // Set DCO 1Mhz
DCOCTL = CALDCO_1MHZ;
P1SEL |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz/9600 = ~104.2
UCA0BR1 = 0;
UCA0MCTL |= UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &=~ UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
DisplayLCD();
__bis_SR_register(GIE); // Interrupts enabled
while(1)
{
__bis_SR_register(LPM3_bits + GIE);
}
}
void DisplayLCD(void)
{
LCM_init(); // CAI DAT CAU HINH LCD
clear();
MoveCursor(0,0);
PrintStr("Nhiet do phong");
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG));
a= UCA0RXBUF;
switch (i)
{
case 0:
b=a;
i++;
break;
case 1:
c=a;
i++;
break;
case 2:
d=a;
i++;
break;
case 3:
e=a;
i++;
break;
default:
f=a;
i=0;
MoveCursor(1,0);
SendByte(b , TRUE);
SendByte(c , TRUE);
SendByte(d , TRUE);
SendByte(e , TRUE);
SendByte(f , TRUE);
SendByte(0xDF, TRUE);
SendByte(0x43, TRUE);
break;
}
}
* simple_LCM.h
#ifndef SIMPLE_LCM_H_
#define SIMPLE_LCM_H_
#endif /*SIMPLE_LCM_H_*/
#include
/* Definitions for specific configuration */
/* Change these as necessary. */
#define LCM_DIR P1DIR
#define LCM_OUT P1OUT
#define RS BIT0 // Tie Register Select to P1.0 (remove led jumper)
#define EN BIT3 // Tie Enable to P1.3
#define D4 BIT4 // Tie Data lines 4-7 to P1.4-7 (remove led jumper
#define D5 BIT5 // for P1.6)
#define D6 BIT6
#define D7 BIT7
/* Definitions for convenience */
#define MASK (RS + EN + D4 + D5 + D6 + D7)
#define FALSE 0
#define TRUE 1
void pulse(void);
void SendByte(char, char);
void LCM_init(void);
void clear(void);
void MoveCursor(char, char);
void PrintStr(char *);
* simple_LCM.c
#include "simple_LCM.h"
void pulse(void) {
LCM_OUT |= EN;
__delay_cycles(200);
LCM_OUT &= ~EN;
__delay_cycles(200);
} // pulse
void SendByte(char ByteToSend, char IsData) {
LCM_OUT &= ~MASK;
LCM_OUT |= (ByteToSend & 0xF0);
if (IsData == TRUE) LCM_OUT |= RS;
else LCM_OUT &= ~RS;
pulse();
LCM_OUT &= ~MASK;
LCM_OUT |= ((ByteToSend & 0x0F) << 4);
if (IsData == TRUE) LCM_OUT |= RS;
else LCM_OUT &= ~RS;
pulse();
} // pulse
void LCM_init(void) {
LCM_DIR |= MASK;
LCM_OUT &= ~MASK;
__delay_cycles(100000);
LCM_OUT = 0x20;
pulse();
SendByte(0x28, FALSE);
SendByte(0x0C, FALSE);
SendByte(0x06, FALSE);
} // LCM_init
void clear(void) {
SendByte(0x01, FALSE);
SendByte(0x02, FALSE);
__delay_cycles(100000);
} // clear
void MoveCursor(char Row, char Col) {
char address;
if (Row == 0) address = 0;
else address = 0x40;
address |= Col;
SendByte(0x80|address, FALSE);
} // MoveCursor
void PrintStr(char *Text) {
char *c;
c = Text;
while ((c != 0) && (*c != 0)) {
SendByte(*c, TRUE);
c++;
}
}
Các file đính kèm theo tài liệu này:
- do_an_1_774.doc