Nghiên cứu ghép nối cảm biến có tín hiệu ra dạng số cho nút mạng cảm nhận không dây

MỞ ĐẦU Trong những năm gần đây với sự phát triển mạnh mẽ của công nghệ linh kiện điện tử và công nghệ thông tin đã tạo ra những sự thay đổi to lớn trong cuộc sống. Mô hình mạng cảm nhận không dây ra đời dựa trên cơ sở ứng dụng những thành tựu của công nghệ truyền thông không dây. Nó ra đời nhằm thỏa mãn nhiều yêu cầu trong thực tế trong đó việc đo một thông số môi trường là rất cần thiết và đang được nghiên cứu và ứng dụng rộng rãi bởi vì nó đem lại nhiều ứng dụng cần thiết cho con người. Đặc điểm của mạng cảm nhận không dây là vừa có chức năng mạng vửa có chức năng cảm nhận. Nó hoạt động trên nguyên lí là tại một nút mạng sẽ cảm nhận thông số của môt trường cần đo , đo đặc thông số và sau đó tiến hành truyền dữ liệu qua môt trường không dây về trạm gốc (nút gốc), để trên cơ sở đó nút gốc có thể đưa ra các lệnh xử lý cần thiết hoặc truyền số liệu vào máy tính. Bản thân nút gốc không nhất thiết phải là một máy vi tính mà cũng có thể được chế tạo với kích thước nhỏ,phù hợp với đặc thù của từng lĩnh vực ứng dụng cụ thể. Mạng cảm nhận không dây do vây đã mở ra một hướng nghiên cứu mới,với một loạt các ứng dụng hấp dẫn đáp ứng được những đòi hỏi khắt khe trong nhiều lĩnh vực quân sự,công nghiệp,nông nghiệp,y tế với đề tài “Nghiên cứu ghép nối cảm biến có tín hiệu ra dạng số cho nút mạng cảm nhận không dây” là một trong những phần của nút mạng cảm nhận không dây và cụ thể trong đề tài này đã tiến hành nghiên cứu ghép nối cảm biến đo nhiệt độ và độ ẩm đầu ra số SHT71 với vi điều khiển AVR và sau đo ghép nối với vi điều khiển CC1010 của hãng Chipcon Vi điều khiển CC1010 là một Module tích hợp vi điều khiển họ 8051 thông thường với bộ truyền nhận RF không dây trên cùng một chip,vì thế khi ghép nối với đầu đo ,không những có khả năng tạo thành các điểm đo thông số môi trường mà còn có thể xây dựng thành một nút mạng trong cấu hình mạng cảm nhận không dây,cả nút mạng và nút gốc đều được thiết kế với chip xử lý chính là vi điều khiển CC1010. Khóa luận này tiến hành nghiên cứu đê xây dựng các ghép nối tạo thành nút mạng “Đo tự động và truyền nhiệt độ và độ ẩm” về nút gốc “Nhận và hiển thị nhiệt độ và độ ẩm” qua LCD từ việc nghiên cứu về môt hình mạng cảm nhận không dây thì các vấn đề cần phải giải quyết trong để tài này là: Thiết kế khối cảm nhận:thực hiện việc ghép nối giữa cảm nhận và vi điều khiển cụ thể là cảm biến nhiệt độ đầu ra số SHT71 và vi điều khiển AVR. Thiết kế khối truyền thông tin và hiển thị nhiệt độ và độ ẩm: Màn hình LCD1602A được ghép nối với vi điều khiển CC1010.Tín hiệu thu được từ Anten được phân tích để lọc ra thông tin nhiệt độ và độ ẩm.Thông tin nhiệt độ và độ ẩm được phân tích và đưa lên màn hình LCD Viết phần mền cho hệ thống,đảm bảo hệ thống ghi nhận thông số nhiệt độ,độ ẩm ,truyền ,nhận và hiển thị thông tin. Tiêu chí được đặt ra là hệ thống chế tạo phải có độ ổn định cao,nút mạng tiêu thụ năng lượng thấp,có khả năng hoạt động độc lập liên tục dài ngày. Phương pháp nghiên cứu được lựa chọn là kết hợp phương pháp truyền thống (nghiên cứu lý thuyết,tính toán xây dựng mô hình hệ thống ) với phương pháp hiện đại:Sử dụng phần mềm vẽ mạch Protel,mạch in nhiều lớp,bộ công cụ phát triển Keil uVision 2 ,các IC cảm biến và vi điều khiển có độ tích hợp cao .) Nội dung để tài chia làm 3 chương: Chương I: Tổng quan về mạng cảm nhận không dây. Chương II: Các phương pháp ghép nối dạng đầu đo và chương trình thực hiện chức năng thu thập dữ liệu. Chương III: Phần mềm nhúng. MỤC LỤC LỜI MỞ ĐẦU 1 Nguồn cung cấp 14 Chân 19 Lõi CPU của Atmega64L 20 Nguồn xung hệ thống: 27 Ngắt phần cứng của Atmega64L 27 Bộ đếm/định thời của Atmega64L: 28 Bộ biến đổi tương tự sang số ADC 29 Phần mềm WSN viết cho CC1010 52

doc56 trang | Chia sẻ: banmai | Lượt xem: 1865 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Nghiên cứu ghép nối cảm biến có tín hiệu ra dạng số cho nút mạng cảm nhận không dây, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
less sensor network-WSN) đòi hỏi hiểu biết chi tiết về khả năng và giới hạn của các thành phần phần cứng, cũng như hiểu rõ các công nghệ mạng hiện đại, lý thuyết phân bố hệ thống. Một thách thức là ánh xạ toàn bộ yêu cầu hệ thống vào một thiết bị riêng lẻ. Để làm cho WSN trở nên thực tế, một kiến trúc cần được phát triển để tổng hợp các ứng dụng dựa trên khả năng của phần cứng. Để phát triển kiến trúc hệ thống cần đi từ yêu cầu ứng dụng mức cao xuống các yêu cầu phần cứng mức thấp. Để giới hạn số các ứng dụng phải xem xét, cần tập trung vào một tập các dạng ứng dụng được sử dụng nhiều trong thực tế. Sử dụng các dạng ứng dụng này để tìm ra các yêu cầu mức hệ thống cho toàn bộ kiến trúc. Từ các yêu cầu mức hệ thống này, có thể có các yêu cầu cho các nút mạng riêng lẻ 1. Các ứng dụng của mạng cảm nhận không dây Có ba dạng ứng dụng của mạng cảm nhận không dây: thu thập dữ liệu môi trường, giám sát an ninh, và theo dõi đối tượng. Hầu hết các ứng dụng chủ yếu của WSN đều thuộc ba dạng này. 1.1 Thu thập dữ liệu môi trường Mạng cảm nhận không dây thu thập dữ liệu môi trường ra đời đáp ứng cho nhu cầu thu thập thông tin về môi trường tại một tập hợp các điểm xác định trong một khoảng thời gian nhất định nhằm phát hiện xu hướng hoặc quy luật vận động của môi trường 1.2 Giám sát an ninh Một ứng dụng thứ hai của mạng cảm nhận là giám sát an ninh. Các mạng giám sát an ninh được tạo bởi các nút đặt ở những vị trí cố định trong môi trường liên tục theo dõi một hay nhiều cảm biến để nhận biết sự bất thường. Sự khác nhau chủ yếu giữa giám sát an ninh và giám sát môi trường là các mạng an ninh không thu thập bất kỳ dữ liệu nào. Điều này có tác động lớn đến việc tối ưu kiến trúc mạng. Mỗi nút thường xuyên kiểm tra trạng thái các cảm biến của chúng nhưng chỉ truyền dữ liệu khi có sự vi phạm an ninh. Việc truyền tức thời và tin cậy của thông điệp cảnh báo là yêu cầu chính của hệ thống. 1.3 Theo dõi đối tượng Với các mạng cảm nhận không dây, các đối tượng có thể được theo dõi đơn giản gắn chúng với một nút cảm biến nhỏ. Nút cảm biến này sẽ được theo dõi khi chúng đi qua một trường các nút cảm biến được triển khai tại những vị trí đã biết. Thay vì cảm nhận dữ liệu môi trường, những nút này sẽ được triển khai để cảm nhận các thông điệp RF của các nút gắn với các đối tượng. Những nút này có thể được sử dụng như những thẻ để thông báo sự có mặt của một thiết bị. Một cơ sở dữ liệu có thể được sử dụng để ghi lại vị trí tương đối của đối tượng với các nút mạng, do đó có thể biết vị trí hiện thời của đối tượng. Giới thiệu một số VĐK có thể làm nút mạng cảm nhận Vấn đề lựa chọn VĐK để xây dựng nút mạng là một vấn đề quan trọng. Việc chọn VĐK hợp lý sẽ làm cho qúa trình xây dựng hệ thống được rút ngắn, hệ thống hoạt động ổn định, tin cậy và đạt các chỉ tiêu đề ra. Từ các chỉ tiêu nút mạng đã nói ở Chương 1, các tiêu chí quan trọng để chọn VĐK như sau: Tiêu thụ năng lượng thấp. Tích hợp ADC để có thể ghép nối với cảm biến tương tự. Bộ nhớ chương trình cũng như bộ nhớ dữ liệu có kích thước hợp lý. Kích thước vật lý nhỏ. Có công cụ phát triển giúp người phát triển xây dựng hệ thống dễ dàng và thuận tiện như: sử dụng ngôn ngữ cấp cao, có các thư viện hỗ trợ cho việc cảm nhận cũng như truyền nhận không dây, hỗ trợ gỡ lỗi… Giá thành rẻ. Hiện giờ có 3 họ VĐK trên thị trường có thể thoả mãn các tiêu chí trên: Họ VĐK MSP430 của Texas. Họ VĐK ATMEGA của Atmel. VĐK CC1010 của hãng Chipcon. Các VĐK nói trên đều thỏa mãn các tiêu chí đề ra. Tuy nhiên, hai họ VĐK đầu tiên không có tích hợp truyền nhận không dây, vì thế nếu sử dụng những VĐK như vậy sẽ phải có thêm mạch truyền nhận không dây bên ngoài, quá trình xây dựng hệ thống sẽ phức tạp. VĐK CC1010 được lựa chọn nhờ có tích hợp truyền nhận không dây, do đó việc chọn VĐK CC1010 làm nút mạng hợp lý hơn chọn các VĐK khác. 1.4 Giới thiệu Vi điều khiển CC1010 A. Các đặc điểm chính: Thu phát không dây 300-1000 MHz. Dòng tiêu thụ rất thấp (9,1 mA trong chế độ nhận). Độ nhạy cao (-107 dBm). Có thể lập trình cho công suất đầu ra tới +10 dBm. Tốc độ truyền RF có thể đạt 76.8 kbit/s. Cần rất ít thành phần ngoài Đo được cường độ RF (RSSI) Tương thích họ VĐK 8051 32 kB Flash, 2048 + 128 Byte SRAM 3 kênh ADC 10 bit, 4 timers / 2PWMs, 2 UARTs, RTC, Watchdog, SPI, mã hoá DES, 26 cổng I/O Có khả năng gỡ lỗi sử dụng chương trình dịch Keil μVision2 IDE qua cổng nối tiếp Điện áp 2.7 - 3.6 V 64-lead TQFP (Thin Quad Flat Pack) Cổng Có 4 cổng I/O P0, P1, P2, P3 với 26 chân cổng. Mỗi cổng có 2 thanh ghi tương ứng: thanh ghi cổng P0, P1, P2, P3 và thanh ghi hướng (P0DIR, P1DIR, P2DIR, P3DIR). Mỗi bit trong thanh ghi Px có một bit hướng tương ứng trong thanh ghi PxDIR.y. Đặt PxDIR.y = 1 sẽ làm cho Px.y là cổng nhận dữ liệu (input) và đặt PxDIR.y = 1 sẽ làm cho Px.y là cổng xuất dữ liệu (output). Ngắt CC1010 có tổng cộng 15 nguồn ngắt, chia sẻ 12 đường ngắt. Mỗi ngắt có một mức ưu tiên, vector ngắt, cờ cho phép ngắt và cờ báo ngắt. Bảng 1. Ngắt và các tham số Ngắt Mức ưu tiên tự nhiên Điều khiển mức ưu tiên Vector ngắt Cờ cho phép ngắt Cờ ngắt Ngắt Flash/debug 0 - 0x33 EICON.PDIE EICON.PDIF Ngắt ngoài 0 1 IP.PX0 0x03 IE.EX0 TCON.IE0 Ngắt Timer 0 2 IP.PT0 0x0B IE.ET0 TCON.TF0 Ngắt ngoài 1 3 IP.PX1 0x13 IE.EX1 TCON.IE1 Ngắt Timer 1 4 IP.PT1 0x1B IE.ET1 TCON.TF1 Ngắt truyền nối tiếp 0 5 IP.PS0 0x23 IE.ES0 SCON0.TI 0 Ngắt nhận nối tiếp 0 SCON0.RI 0 Ngắt truyền nối tiếp 1 6 IP.PS1 0x3B IE.ES1 SCON1.TI 1 Ngắt nhận nối tiếp 1 SCON1.RI 1 Ngắt truyền/nhận RF 7 EIP.PRF 0x43 EIE.RFIE EXIF.RFIF Ngắt Timer 2 8 EIP.PT2 0x4B EIE.ET2 EXIF.TF2 Ngắt ADC 9 EIP.PAD 0x53 EIE.ADIE và ADCON2. ADCIE EXIF.ADIF và ADCON2. ADCIF Ngắt mã hoá/giải mã DES EIE.ADIE và CRPCON. CRPIE EXIF.ADIF và CRPCON. CRPIF Ngắt Timer 3 10 EIP.PT3 0x5B EIE.ET3 EXIF.TF3 Ngắt thời gian thực 11 EIP.PRTC 0x63 EIE.RTCIE EICON.RTCIF Mặt nạ ngắt IE.EA là cờ cho phép ngắt toàn bộ các ngắt, ngoại trừ ngắt Flash/Debug. Khi cờ IE.EA được thiết lập, mỗi ngắt bị che bởi cờ cho phép ngắt được liệt kê ở bảng 1. Khi cờ IE.EA bị xoá, tất cả các ngắt bị che, ngoại trừ ngắt Flash/Debug, có bit che ngắt riêng, EICON.FDIE. Xử lý ngắt Khi một ngắt được cho phép xảy ra, CPU nhảy tới địa chỉ phục vụ ngắt tương ứng với ngắt đó (ISR), như chỉ ra ở bảng 1. CC1010 thực hiện ISR để hoàn thành trừ khi một ngắt khác có mức ưu tiên cao hơn xảy ra. Mỗi ISR kết thúc với lệnh RETI. Sau khi thực hiện lệnh RETI, CC1010 quay trở lại lệnh tiếp theo sau lệnh đã được thực hiện trước khi xảy ra ngắt. Nếu lệnh đang thực hiện là RETI, hay đang ghi vào các thanh ghi IP, IE, EIP, EIE, CC1010 hoàn thành thêm một lệnh trước khi phục vụ ngắt. Thứ tự ưu tiên Các ngắt có 2 giai đoạn ưu tiên: mức ngắt và mức tự nhiên. Mức ngắt được ưu tiên trước mức tự nhiên. Mức ngắt có 2 mức: thấp và cao. Ngắt có mức ưu tiên là cao sẽ có thể ngắt ngang chương trình phục vụ ngắt có mức ưu tiên thấp hơn. Nếu các ngắt có cùng mức ưu tiên mà cùng xảy ra đồng thời, ngắt nào có mức ưu tiên tự nhiên thấp nhất sẽ được phục vụ trước. Biến đổi ADC Bộ biến đổi ADC của CC1010 có độ phân dải 10 bit, được điều khiển bởi các thanh ghi ADCON và ADCON2. Có ba kênh vào ADC, được chọn bởi ADCON.ADADR. Thanh ghi này cũng được sử dụng để chọn chân AD1 như là điện áp tham chiếu ngoài (khi sử dụng AD0). Khi chân AD1 được dùng như tham chiếu ngoài, chỉ có hai lối vào ADC được sử dụng. Đầu ra ADC là đơn cực, nghĩa là giá trị 0 tương ứng với 0V và 1023 tương ứng với điện áp tham chiếu (1.25 V hoặc VDD phụ thuộc vào bit ADCREF). Điện áp tham chiếu analog được điều khiển bởi ADCON.ADCREF. ADCON.AD_PD cần đặt bằng 1 khi không sử dụng ADC để tiết kiệm năng lượng. Biến đổi ADC được bắt đầu sau 5µs sau khi xoá bit điều khiển ADCON.ADCRUN khi sử dụng VDD hay nguồn tham chiếu ngoài, hoặc 100 µs khi sử dụng tham chiếu trong 1.25V. Bộ định thời CC1010 có 4 bộ định thời Timer 0, Timer 1, Timer 2, Timer 3 hoạt động như là bộ định thời hay bộ đếm (Timer/Counter) trong đó Timer2 và Timer3 còn có thể hoạt động như bộ điều chế độ rộng xung (PWM - Pulse Width Modulation). Time 0/ Timer 1 Timer/Counter 0 và 1 có thể được lập trình và hoạt động độc lập theo 4 chế độ, được điều khiển bởi các thanh ghi TMOD và TCON. Các chế độ có thể như sau: 13 bit Timer/Counter (Mode 0) 16 bit Timer/Counter (Mode 1) 8 bit Timer/Counter tự động nạp lại (Mode 2) 2 Timer 8 bit (chỉ dùng cho Timer 0, Mode 0) Chi tiết về các chế độ, cách điều khiển sử dụng 2 thanh ghi TCON và TMOD xin xem thêm phần Tài liệu tham khảo [6]. Timer 2/ Timer 3 Ngoài tính năng như là bộ định thời, Timer 2 và 3 có thể được sử dụng như bộ điều chế độ rộng xung PWM. Nếu xoá bit TCON2.M2/TCON2.M3 thì sẽ là bộ định thời. Nếu thiết lập bit TCON2.M2/TCON2.M3 thì sẽ là PWM. Khi đó chân P3.4 và chân P3.5 là chân phát xung đầu ra tương ứng cho Timer2/Timer3. Chu kỳ TnPWM đối với Timer n như sau: Trong đó thời gian ở trạng thái cao Tnh là: Điều này có nghĩa là trong chế độ PWM, nếu Tn = 0 thì có mức thấp ở đầu ra và nếu Tn = 255 thì có mức cao. Trong đó giá trị các thanh ghi Tn và TnPRE được đặt từ trước. 1.5 Bộ thu phát không dây (RF Transceiver) Miêu tả chung Bộ thu phát CC1010 UHF RF được thiết kế cho những ứng dụng tiêu thụ năng lượng thấp và điện áp thấp. Mạch thu phát được dành cho ISM (công nghiệp, khoa học và y học) và SRD (Short Range Device) dải tần 315, 433, 868 và 915 MHz, nhưng có thể dễ dàng lập trình để hoạt động trong dải tần 300-1000 MHz. Các thông số chính của CC1010 có thể được lập trình thông qua các thanh ghi chức năng đặc biệt (Special Function Registers - SFRs), làm cho CC1010 rất mềm dẻo và dễ sử dụng bộ thu phát vô tuyến. Rất ít các thành phần tích cực đòi hỏi cho hoạt động của bộ thu phát RF. Một sơ đồ khối được đơn giản hoá của bộ thu phát RF được thể hiện ở hình 2.1. Chỉ các chân tín hiệu analog được thể hiện cùng với bus dữ liệu SFR bên trong để thiết lập giao tiếp RF và để truyền và nhận dữ liệu. Hình 2.1. Sơ đồ khối của bộ thu phát RF Trong chế độ nhận, tín hiệu vào RF được khuếch đại bởi bộ khuếch đại ồn thấp (low-noise amplifier LNA) và được chuyển thành trung tần (intermediate frequency - IF) bởi bộ trộn (MIXER). Trong giai đoạn trung tần (IF STAGE) tín hiệu được khuếch đại và lọc trước khi đưa tới bộ giải điều chế (DEMOD). Như một lựa chọn, một tín hiệu RSSI hay IF sau khi trộn được đưa vào AD2. Sau khi giải điều chế, tín hiệu số được đưa tới thanh ghi RFBUF. Ngắt có thể được sinh ra theo mỗi bit hay mỗi byte nhận được (EXIF.RFIF). Trong chế độ truyền, dao động được điều khiển bởi điện áp (VCO) được đưa trực tiếp tới khuếch đại công suất (PA). Đầu ra RF là khoá dịch chuyển tần số (frequency shift keyed - FSK) bởi luồng bit được đưa tới thanh ghi RFBUF. Ngắt có thể được sinh ra cho mỗi bit hay byte được truyền (EXIF.RFIF). Mạch chuyển bên trong T/R làm cho giao tiếp với antenna dễ dàng và sử dụng rất ít thành phần ngoại vi. Bộ tổ hợp tần số tạo ra dao động bên trong được đưa tới MIXER trong chế độ nhận và PA trong chế độ truyền. Bộ tổ hợp tần số bao gồm một dao động thạch anh (XOSC), bộ nhận biết pha (phase detector - PD), bơm nạp (CHARGE PUMP), bộ lọc (internal loop filter - LPF), VCO, và các bộ chia tần (/R và /N). Một tinh thể ngoài có thể được nối vào XOSC. VCO chỉ cần một cuộn cảm ngoài. Mạch ứng dụng RF Bộ thu phát RF đòi hỏi rất ít các ngoại vi. Một mạch ứng dụng điển hình được thể hiện ở hình 2.2. Các giá trị của các thành phần này xin xem thêm phần Tài liệu tham khảo [6]. Tương ứng vào/ra Cặp C31/L32 là đầu vào cho nơi nhận của bộ nhận, và nội trở của L32 có tác dụng định thiên (bias) một chiều. C41, L41 và C42 được sử dụng để tương ứng với bộ truyền có trở kháng 50 Ohm. Một bộ chuyển mạch trong T/R làm cho nó có khả năng cùng nối với đầu vào và đầu ra và thích hợp với bộ thu phát 50Ω trong cả hai chế độ RX và TX. VCO được tích hợp hoàn toàn trừ cuộn cảm L101. Lọc Các thành phần bên ngoài (ví dụ RF LC hay lọc răng cưa) có thể được sử dụng để cải tiến hiệu năng cho các ứng dụng riêng biệt. Nếu lọc răng cưa được sử dụng, nó chỉ có tác dụng cho RX (phải sử dụng chuyển mạch ngoài RX/TX). Nguồn cung cấp Các tụ tách và lọc nguồn cần được sử dụng (không chỉ ra trong mạch ứng dụng). Các tụ này càng gần chân nguồn càng tốt. Vị trí và kích thước của tụ tách và lọc nguồn là rất quan trọng để đạt được độ nhạy tốt nhất. Chú ý rằng các giá trị hợp thành cho 868 và 915 MHz có thể là như nhau. Tuy nhiên, rất quan trọng là cách bố trí được tối ưu hoá để lựa chọn cuộn cảm VCO để làm cho tần số hoạt động được chính xác. Cuộn cảm VCO phải được đặt rất sát và đối xứng với các chân tương ứng (L1 và L2). Chipcon cung cấp cách bố trí tham khảo để đạt được hiệu năng cao nhất. 1.6 Mạng cảm nhận không dây dựa trên vi điều khiển CC1010 CC1010 với các đặc điểm,cấu tạo và đặc tính tiêu thụ điện năng thấp và có chức năng xử lý như một máy vi tính có thêm các bộ thu phát RF,bộ mã hóa DES,bộ biến đổi ADC,…phù hợp để ghép các cảm biển dể trở thành một nút mạng trong mạng cảm nhận không dây .Mạch ứng dụng tương đối đơn giản CC1010 ,thuận tiện để tạo ra các nút WSN hoạt động như một thiết bị độc lập.Việc lập trình cho CC1010 được sử dụng các thư viện của 8051 và các bộ dịch cho 8051. có thể sử dụng assemble hoặc c để lập trình cho CC101.Trong CC1010 có tích hợp một bộ gỡ rối,hỗ trợ mô trường phát triển KilVision2 qua cổng giao tiếp. 1.7 Mô hình mạng: WSN gồm nhiều nút mạng CC1010 giao tiếp với nhau qua song vô tuyến tần số 300-1000MHz.có ba loại nút mạng:Trạm gốc,nút cảm nhận,va nút chuyển tiếp. Các nút cảm nhận có gắn đầu đo vừa trực tiếp đo số liệu và truyền về trạm gốc vừa chuyển tiếp dữ liệu nhận được từ các nút con trong topolopy dạng cây, gửi về cho nút cha Vi điều khiển CC1010 với những ưu điểm đã được phân tích ở trên tỏ ra khá thích hợp với mô hình mạng cảm nhận không dây.Dùng vi điều khiển CC101 có thể xây dựng được nhiều ứng dụng hấp dẫn với sơ đồ thiết kế không quá phức tạp.Phần mềm nhúng có thể đi theo hướng hệ điều hành hoặc đơn giản hơn là các phương trình nhỏ có thể viết bằng các ngôn ngữ lập trình thông dụng như ASM,C … và nạp cho vi điều khiển Kết luận: Trong chương này chúng ta đã trình bày sơ lược về mạng cảm nhận không dây và vi điều khiển CC101,cách dùng CC1010 vào mạng không dây Chương II GHÉP NỐI VI ĐIỀU KHIỂN AVR VỚI CẢM BIẾN II. Những nét cơ bản của vi điều khiển AVR-Micro Atmega64L -Hãng Atmel đã từ lâu nổi tiếng với chíp vi điều khiển họ 89Cxx phù hợp với các ứng dụng đơn giản. Chuyển sang họ AVR, Atmel đã thêm vào chip vi điều khiển này nhiều tính năng mà chíp họ 8051 không có như là ADC, PWM, BUS I2C, 2 Wire v.v..., để giúp cho người sử dụng có thêm nhiều tính năng để sử dụng. 2.1 Đặc điểm cấu tạo của AVR -AVR là vi điều khiển được thiết kế cho rất nhiều ứng dụng. Từ các ứng dụng điều khiển, đo lường... -Vi điều khiển AVR có thể coi như là một máy vi tính được tích hợp trên một chíp đơn. AVR là vi điều khiển 8 bit ( không thuộc họ vi điều khiển xử lý số DSP ) thiết kế hướng vào mục đích điều khiển. Được tích hợp các bộ nhớ EEPROM và bộ nhớ Flash (có thể lập trình được trong hệ thống- In system programmable) -AVR có các trình dịch hộ trợ để lập trình từ mức thấp assembly (AVR Studio), đến ngôn ngữ bậc cao như là C ( ICC, AVR CodeVision ). AVR có thể thực hiện được hàng triệu lệnh đơn trong một giây. 2.1.1. Tính năng của Atmega64L -Hiệu suât cao. Là dòng AVR 8 bit tiêu thụ điện năng thấp (Low power AVR). -Sử dụng cấu trúc RISC 133 chỉ lệnh. Một lệnh trong 1 chu kỳ máy. 32x8 thanh ghi chung + thanh ghi điều khiển ngoại vi. Lên đến 16 triệu lệnh/s với tấn số 16 MHz. -Bộ nhớ chương trình và bộ nhớ dữ liệu: 64K Byte bộ nhớ Flash lập trình lại trong hệ thống. Lựa chọn Boot code với các bit lock độc lập. Lập trình trong hệ thông bằng chương trình Boot. 4KB EEPROM và 4KB SRAM. ( có thể mở rộng 64K RAM ngoài). Lập trình trong hệ thống (ISP) qua giao diện SPI. -Giao diện JTAG (chuẩn IEEE std. 1149.1) Hỗ trợ chức năng gỡ rối trên chíp. Lập trình thông qua JTAG. -Các tính năng ngoại vi: Hai timer 8 bit và hai timer 16 bit. Đồng hồ thời gian thực với bộ chia tần số. Hai kênh PWM 8bit. 6 kênh PWM 2-16bit. Bộ so sánh tương tự. ADC 8 kênh 10 bit. 7 kênh ADC vi phân, 2 kênh ADC có bộ khếch đại 1x, 10x, 200x. Giao diện nối tiếp Two-wire. Hai UASRT. Giao diện nối tiếp Chủ/Tớ SPI. Timer watch dog. -Các tính năng đặc biệt: Reset khi cấp nguồn. Bộ phát hiện xụt nguồn (Brown-out detection) khả trình. Bộ giao động RC tích hợp sẵn bên trong. Ngắt trong và ngắt ngoài. Sáu chế độ ngủ ( Sleep) để tiết kiệm năng lượng. Tần số làm việc có thể xác định bằng phần mềm. -Điện áp làm việc: 2,7 – 5,5V cho Atmega64L 4,5 – 5,5V cho Atmega64 -Tốc độ: 0 - 8 MHz cho Atmega64L 0 - 16 MHz cho Atmega64 Chân - Sơ đồ cấu hình chân của Atmega64L Hình 19: Sơ đồ phần cứng - Sơ đồ khối: Hình 20: Sơ đồ khối vi điều khiển AVR: Atmega64L 2.1.2 Khối của Atmega64L -Do các khối chức năng của Atmega64L rất nhiều lên em chỉ đề cập đến các khối chức năng sử dụng trong luận văn này. Lõi CPU của Atmega64L -Trong mục này sẽ mô tả tổng quát về cấu trúc lõi CPU của AVR. Chức năng chính của lõi CPU là đảm bảo cho chương trình hoạt động. CPU phải có khả năng truy cập vào bộ nhớ, thực hiện tính toán, điều khiển ngoại vi và quản lý ngắt. - Sơ đồ khối của CPU: Hình 21: Sơ đồ khối CPU. -Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau. Hình trên minh họa sơ đồ khối CPU của AVR. Bus dữliệu dùng cho bộ nhớ dữ liệu là 1 bus 8 bit, cho phép nối hầu hết các bộ phận ngoại vi với tệp thanh ghi ( register file). Bus dữ liệu dùng cho bộ nhớ chương trình có độ rộng 16 bit và chỉ nối với thanh ghi lệnh. Khối số học logic ALU Khối số học (ALU) thực hiện các thao tác như thao tác bit, phép tính số học và lôgic trên nội dung của các thanh ghi và ghi ngược kết quả vào tệp thanh ghi trên thanh ghi đã được chỉ định. Các thao tác này được thực hiện trong một chu kỳ đồng hồ đơn lẻ. Mỗi một thao tác ALU đều làm ảnh hưởng đến các cờ trong thanh ghi trạng thái (STATUS), tùy thuộc vào lệnh. Thanh ghi trạng thái SREG Thanh ghi triạng thái có chứa 8bit cờ, đóng vai trò báo hiệu trạng thái hiện tại của bộ xử lý. Tất cả các bit đó dược xóa bởi chương trình. Các địa chỉ I/O của thanh ghi trang thái là $3F( địa chỉ bộ nhớ là $57). Thanh ghi trạng thái không được lưu trữ bằng máy (machine) trong thời gian diễn ra một thao tác ngắt. Lệnh trong một đoạn chương trình ngắt có thể xủa đổi bít cờ trạng thái, và vì thế chương trình của người dùng phải lưu trữ và khôi phục thanh ghi trạng thái trong thời gian có một ngắt. Tập thanh ghi đa năng Tất cả các bộ điều khiển AVRđều có 32 thanh ghi đa năng. Một số trong các thanh ghi này còn có các chức năng riêng, bổ sung. Các thanh ghi dược đặt tên từ R0 đến R31. Tệp thanh ghi được tách thành 2 phần, mỗi phần có 16 thanh ghi, đánh số từ R0 đến R15 và R16 đến R31. Tất cả truy nhập trong chu trình đơn đến tất cả các thanh ghi. Thanh ghi con trỏ ngăn xếp SP Thanh ghi này có độ rộng bằng 1 byte đối với các bộ xử lý có đến 256 byte bộ nhớ SRAM và bằng 2byte (được gọi là SPH và SPL) đối với các bộ xử lý có bộ nhớ . Thanh ghi này sử dụng để chỉ đến vùng trong bộ nhớ SRAM ở đỉnh của ngăn xếp. Ngăn xếp được sử dụng để lưu trữ địa chỉ mà bộ xử lý trả trở lại trong thời gian một ngắt và gọi thủ tục . Bởi vì SP được khởi tạo về $0000 khi rết, nên chương trình người dùng cần phải khởi tạo SP cho thích hợp, bởi vì địa chỉ bắt đầu của bộ nhắ SRAM không phải là $0000 mà là $60. Ngăn xếp sắp xếp theo thứ tự từ trên xuống dưới trong địa chỉ bộ nhớ, nghĩa là, việc đẩy một giá trị lên trên ngăn xếp sẽ làm cho SP giảm đi một giá trị. Khi kéo một giá trị khỏi ngăn xếp sẽ làm tăng SP thêm một giá trị. Việc thực thi lệnh Bộ xử lý AVR được điều khiển bởi đồng hồ hệ thống, đồng hồ này có thể ở bên ngoài hoặc, nếu có tồn tại và được phép, một đồng hồ RC bên trong có thể được sử dụng. Đồng hồ hệ thống này không qua bất kỳ bộ chia nào và được sử dụng trục tiếp cho tất cả các thao tác truy nhập bên trong bộ xử lý. Bộ xử lý có một đường ống (pipeline) 2 tầng, và lệnh tìm nạp/ giải mã được thực hiện đồng thời vời việc thực thi lệnh. Hình 22: Tìm nạp/ giải mã lệnh và việc thực thi lệnh. Cứ mỗi lần lệnh được tìm nạp, nếu đây là một lệnh liên quan đến ALU, nó có thể được thực thi bởi khối ALU như được minh họa tren hình 3-5 cho một chu trình đơn lẻ. Hình 23: Việc thực thi của ALU bao gồm tim/nạp. thực thi, và ghi ngược lại vào thanh ghi Mặt khác, việc truy nhập bộ nhớ SRAM chiếm mất 2 chu kỳ, như dược minh họa ở hình dưới. Nguyên nhân là việc truy nhập bộ nhớ SRAM sử dụng một thanh ghi con trỏ dùng cho địa chỉ bộ nhớ SRAM. Thanh ghi con trỏ này chỉ là một trong các thanh ghi con trỏ (các cặp thanh ghi X, Y hoặc Z) có trên chip. Chu trình đồng hồ thứ nhất được cần đến để truy nhập tệp thanh ghi và để thao tác trên thanh ghi con trỏ (các lệnh truy nhập bộ nhớ SRAM cho phếp tăng địa chỉ trước/ sau thao tác trên thanh ghi con trỏ). Ở thời điểm kết thúc của chu kỳ đồng hồ thứ nhất, khối ALU thực hiện phép tính này, và sau đó địa chỉ này được sử dụng để truy nhập ô nhớ SRAM và để ghi vào ô nhớ này (hoặc đọc ra rừ đó vòa thanh ghi đích), như được minh họa hình dưới. Hình 24: Các chu trình truy nhập dữ liệu lên thanh ghi SRAM trên chip. 2.1.3 Các chu trình truy nhập dữ liệu lên thanh ghi SRAM trên chip 5 của Atmega64L - Bộ nhớ của Atmega64L được chia làm 2 phần : bộ nhớ chương trình và bộ nhớ dữ liệu. Trong trường hợp đặc biệt bộ nhớ EEPROM được mô tả như là bộ nhớ dữ liệu. - Atmega có 64k Byte bộ nhớ Flash lập trình lại được trong hệ thống (ISP- In system progammable) cho bộ nhớ chương trình. Bây giờ họ vi điều khiển AVR đề là chip 16 hoặc 32 bit thì Flash được tổ chức là 32k x 6. Để vi điều khiển hoạt động chương trình phải được nạp vào bộ nhớ Flash. Trong luận văn này Atmega64L được lập trình qua mode ISP: Serial downloading sử dụng giao diện SPI. Bộ nạp là AVR-doper: Hình 25: Bộ nạp AVR-doper - Bộ nạp này có ưu điểm là sử dụng giao diện USB với PC, và hoạt động được với điện áp 3,3V. - Atmega64L có bộ nhớ SRAM là 4k byte. Nguồn xung hệ thống: - Atmega có thể dùng các nguồn xung clock: RC ngoài, thạch anh ngoài, nguồn xung ngoài hoặc bộ dao động RC tích hợp bên trong. - Trong luận văn, vi điều khiển Atmega64L dùng bộ cộng hưởng thạch anh ngoài 8 MHz ( CKSEL3..0 = 1111, SUT1..0 = 11 ). Ngắt phần cứng của Atmega64L -Atmega64L có tổng cộng 36 ngắt phần cứng : ngắt cho timer, ngắt USART, ngắt ADC, PWM v.v... Hình 25: bảng véc tơ ngắt của Atmega64L Bộ đếm/định thời của Atmega64L: -Atmega64L có 4 timer/counter gồm 2 timer 8bit (timer0 và timer2) và 2 timer 16bít (timer1 và timer2). -Sơ đồ khối của timer1: Hình 26: Sơ đồ khối của timer/counter. -- Timer/counter1, 16 bit cho phép lập trình các thời gian điều khiển chính xác ( đếm các sự kiện), tạo xung, đo độ rộng thời gian của tín hiệu. Các tính năng: Là timer 16 bit cho phép tạo PWM 16bit. Ba lối ra so sánh độc lập. Một bộ capture đầu vào. Chế độ Auto Reload. Triệt nhiễu đầu vào Capture. Hiệu chỉnh pha PWM. Chu kỳ PWM thay đổi được. Bộ tạo tần số. Đếm sự kiện ngoài. 10 nguyên nhân gây ngắt timer độc lập(TOV1, OCF1A, OCF1B, OCF1C, ICF1, TOV3, OCF3A, OCF3B, OCF3C, and ICF3) Bộ biến đổi tương tự sang số ADC Tính năng: - Trả về kết quả ADC 10 bit. - 0.75 đơn vị không tuyến tính. - Độ chính xác tuyệt đối là ± 1.5 LSB. - Thời gian biến đổi là từ 13- 260 μs. - 8 lối vào đơn hợp kênh ADC. - 7 lối vào vi phân ADC. - 2 lối vào vi phân có bộ khếch đại đầu vào. - Điều chỉnh lệch trái ở kết quả ADC. - Điện áp vào ADC từ 0 – Vcc hoặc 2,7 – Vcc đối với ADC vi phân. - Có khả năng lựa chọn 2,56V làm điện áp chuẩn cho ADC. - ADC tự động bắt đầu biến đổi bời Auto Trigger của nguồn ngắt. - Ngắt khi biến đổi hoàn thành. - Có mode loại trừ nhiễu. Hình27: Sơ đồ khối bộ biến đổi ADC. - 2.1.4 Bộ truyền nhận nối tiếp USART - Atmega64L có 2 khối USART: USART0 và USART1. Tính năng: Hoạt động song công ( Thanh ghi truyền và nhận độc lập ) Hoạt động ở chế độ đồng bộ hoặc không đồng bộ. Bộ tạo tốc độ Baud. Khung truyền 5,6,7,8 hoặc 9 bit dữ liệu và 1 hoặc 2 bit stop. Tạo và kiểm tra chẵn lẻ bằng phần cứng. Phát hiện tràn dữ liệu. Phát hiện lỗi khung truyền. Lọc nhiễu bao gồm phát hiện lỗi bit start và lọc số thông thấp. Ba ngắt : truyền hoàn tất, thanh ghi dữ liệu TX trống, nhận hoàn tất. Truyền thông đa vi xử lý. Gấp đôi tốc độ với mode truyền không đồng bộ. Hình 28: Sơ đồ khối USART. -Mode thường được sử dụng là mode: truyền không đồng bộ, tốc độ baud 9600, 8 bit dữ liệu, 1 bit stop, không kiểm chẵn lẻ, không bắt tay. 2.1.5 Cảm biến đầu ra tín hiệu số và cách ghép nối A.Tổng quan về kỹ thuật bus I2C Bus I2C (liên mạch tích hợp) là bus truyền thông (đường truyền tín hiệu điện tử) 2 dây, có1tốc độ từ thấp đến trung bình của Philips Semiconductors vào nửa đầu thập niên 80. I2C được tạo ra nhằm giảm chi phí sản xuất của các sản phẩm điện tử. Nó cung cấp liên kết truyền thông giá rẻ nhưng hiệu quả giữa các chip trong các sản phẩm này. Ứng dụng ban đầu của I2C gồm có điều khiển dung tích và độ tương phản trong radio và vô tuyến. Trong thập kỷ vừa qua. I2C đã mở rộng vai trò truyền thông sang một dải ứng dụng rộng. Ngày nay, I2C có thể thấy trong rất nhiều ứng dụng điện tử với khả năng phát triển gần như không hạn chế. - Chuẩn công nghiệp Quyển “I2C Bus Specification” của Philips Semiconductors cung cấp định nghĩa giao thức truyền thông của các hoạt động báo hiệu của bus I2C. Các đặc tính thông số này giúp chỉ dẫn cho các nhà sản xuất thiết bị bán dẫn và các nhà phát triển sản phẩm điện tử theo đúng công nghệ. Đặc tính thông số được phát hành miễn phí trên Internet. (www.semiconductors.philips.com/buses/i2c) -Giá rẻ Trước I2C, truyền thông giữa các chip dung nhiều dây với giao diện song song, thường yêu cầu các IC (mạch tích hợp) có 24, 28 hay nhiều chân hơn. Nhiều chân được dùng để đánh địa chỉ liên chip, chọn, điều khiển và truyền dữ liệu. Trong giao diện song song, 8 bit dữ liệu thường được truyền từ một IC gửi vào một IC nhận bằng một thao tác đơn. I2C thực hiện truyền thông giữa các chip chỉ dung 2 dây trong giao diện song song, cho phép I2C truyền thông bằng ít chân hơn. 2 dây trong bus I2C được gọi là Xung (SCL) và Dữ liệu (SDA). 2 dây này mang địa chỉ, chọn, điều khiển và dữ liệu, mỗi bit tại một thời điểm. Dây SDA mang dữ liệu còn dây SCL đồng bộ bộ gửi và bộ nhận qua quá trình truyền. Các IC dùng I2C có thể thực hiện các chức năng tương tự như trong giao diện song song cồng kềnh hơn nhưng với ít chân hơn nhiều. Điều này giảm đáng kể kích thước và giá thành IC dựa trên bus I2C. Khoản tiết kiệm thứ hai từ thiết kế bus I2C 2 dây là kích thước và giá thành bản mạch in (PCB). Với IC dựa trên bus I2C, chỉ cần ít dây hơn nhiều (dây đồng) cho truyền thông liên chip, các bản mạch dung IC trên I2C giảm đáng kể về kích thước, độ phức tạp và giá thành. - Công suất lớn hơn Dù chỉ giảm chi phí đã đủ làm nên thành công cho bus I2C, các nhà phát triển cũng được đánh giá cao khi tạo ra liên kết truyền thông hiệu quả. I2C giải quyết được khó khăn bằng việc cung cấp nhiều đặc tính hiệu quả. B.Cấu trúc Master-Slave Thiết bị I2C được phân loại là master hoặc slave. Thiết bị khởi tạo một thông điệp được gọi là master còn thiết bị phản hồi thông điệp gọi là slave. Thiết bị có thể chỉ là master, chỉ là slave hay chuyển đổi giữa master và slave tuỳ theo ứng dụng yêu cầu. Đa thiết bị I2C có thể kết nối nhiều IC chỉ bằng 2 dây. Mỗi thiết bị I2C slave có một địa chỉ slave duy nhất. Khi một master gửi một thông điệp, nó gửi kèm địa chỉ slave khi bắt đầu thông điệp. Tất cả các thiết bị trên bus lắng nghe thông điệp nhưng chỉ slave nhận ra địa chỉ của nó tham gia vào quá trình truyền. Hỗ trợ nhiều master I2C cũng hỗ trợ nhiều thiết bị master trên bus cùng lúc, một đặc tính hữu hiệu là giám sát việc sử dụng bus nhờ giữ các luồng thông điệp bus ở mức tổi thiểu. Để hỗ trợ nhiều master, I2C phải giải quyết các xung đột tín hiệu, khi mà có hai hay nhiều thiết bị master hơn cố gắng truyền qua bus tại cúng một thời điểm. Đặc tính này, gọi là phát hiện mất phân phối bus, cho phép một master phát hiện ra khi tín hiệu bus của nó xung đột với tín hiệu của master khác. Một master phát hiện ra mất phân phối sẽ kết thúc việc sử dụng bus, cho phép thông điệp từ master khác truyền qua bus mà không bị ảnh C. Đặc điểm của SHT71 -Tổng quát về sản phẩm SHT1X/SHT7X SHTXX là module sensor đo độ ẩm và nhiệt độ tương đối một chip đơn gồm một đầu ra số chuẩn hóa. Ứng dụng trong quá trình CMOS công nghiệp với cơ chế siêu nhỏ được cấp sáng chế (công nghệ CMOSens) đảm bảo độ tin cậy cao nhất và độ ổn định dài hạn tốt. Thiết bị gồm một thành phần cảm nhận điện dung bằng polymer dùng làm sensor đo độ ẩm và dải nhiệt độ tương đối. Cả hai đều được nối với một bộ chuyển đổi tương tự - số 14 bit và một mạch giao tiếp nối tiếp trên cùng một chip. Như vậy sẽ thu được chất lượng tín hiệu tốt, thời gian phản hồi nhanh và khả năng chống nhiễu từ bên ngoài tốt mà giá thành rẻ. Mỗi SHTXX được chuẩn hóa riêng với một dải độ ẩm chính xác với ẩm kế đã được thử nghiệm làm tham chiếu. Các hệ số chuẩn hóa được lập trình trong bộ nhớ OTP. Các hệ số này được dùng trong khi đo để chuẩn hóa tín hiệu từ sensor. Giao diện nối tiếp 2-wire và việc điều chỉnh điện thế trong cho phép ghép nối hệ thống nhanh chóng và dễ dàng. Kích thước rất nhỏ và tiêu tốn ít năng lượng tạo thuận lợi cho hầu hết các ứng dụng cần thiết. Thiết bị có giao diện LCC (Sóng mang chip không định hướng) cắm hay thành phần cắm nóng 4 chân đơn đường. Các tùy chọn về gói sử dụng của khách hàng có thể làm theo yêu cầu. Đầu đo nhiệt độ và độ ẩm -Đặc tính kĩ thuật + Sensor đo độ ẩm và nhiệt độ tương đối +Điểm sương +Đầu ra số chuẩn hóa toàn phần +Độ ổn định dài hạn cao +Không yêu cầu thành phần gắn ngoài +Tiêu thụ rất ít năng lượng +Giao diện cắm hay nối toàn phần 4 chân +Kích thước nhỏ +Tự động ngắt nguồn - Các thông số kết nối Các chân nối nguồn SHTXX yêu cầu điện thế từ 2.4V đến 5.5V. Sau khi bật nguồn, thiết bị cần 11ms để thoát khỏi trạng thái "sleep". Trước thời gian này, các lệnh không được gửi đi. Các chân nguồn (VDD, GND) có thể được nối với tụ điện 100nF. Giao diện kết nối (2-wire hai chiều trực tiếp) Giao diện nối tiếp của SHTXX đánh giá số liệu đầu ra sensor và năng lượng tiêu thụ và không tương thích với giao diện PC SCK được dùng để đồng bộ hóa truyền thông giữa vi điều khiển và SHT1X/SHT7X. Do giao diện gồm các logic tĩnh đầy đủ nên không có tần số SCK tối thiểu Dữ liệu nối tiếp (DATA) Chân ba trạng thái DATA dùng để truyền dữ liệu vào ra thiết bị. DATA chuyển sau sườn xung xuống và hoạt động ở sườn xung lên của xung nối tiếp SCK. Trong quá trình truyền thông, đường DATA phải được giữ ổn định với mức SCK cao. Để tránh nhiễn tín hiệu, vi điều khiển nên giữ DATA ở mức thấp. Cần một điện trở lớn gắn ngoài (ví dụ 10kOhm) để giữ cho tín hiệu ở mức cao. (Xem hình 2) Điện trở lớn thường gắn trong các kênh vào/ra của vi điều khiển. Xem bảng 5 để rõ hơn về đặc tính vào/ra. Truyền lệnh Để khởi tạo một đợt truyền, chuỗi "Bắt đầu truyền" được sinh ra. Nó là thành phần xung xuống của DATA khi SCK ở mức cao, theo sau là một xung thấp trên SCK và tăng DATA trở lại khi SCK ở mức cao. Lệnh tiếp đó gồm 3 bit địa chỉ (hiện tại chỉ có "000") và 5 bit lệnh. SHT1X/SHTX chỉ định việc thu chính xác một lệnh bằng việc chuyển chân DATA xuống mức thấp (bit ACK) sau sườn xung xuống của xung SCK thứ 8. Đường DATA hoạt động (và lên mức cao) sau sườn xung xuống của xung SCK thứ 9. - Chuỗi đo (RH và T) Sau khi phát sinh lệnh đo ('00000101' cho độ ẩm tương đối, '00000011' cho nhiệt độ), vi điều khiển phải đợi đến khi đo xong. Mất khoảng 11/55/210 ms cho một phép đo 8/12/14 bit. Thời gian chính xác biến thiên lên đến +(-) 15% với tốc độ bộ tạo dao động. Để báo hiệu đã đo xong, SHT1X hạ đường dữ liệu xuống. Vi điều khiển phải đợi báo hiệu "dữ liệu sẵn sàng" này trước khi bắt đầu thay đổi xung SCK tiếp. 2 byte dữ liệu đo và một byte mã kiểm tra tổng CRC sẽ được truyền đi sau đó. uC phải nhận biết mỗi byte bằng cách hạ đường DATA xuống thấp. Tất cả các giá trị đều là MSB bên phải tính trước (ví dụ xung SCK thứ 5 là MSB với giá trị 12 bit, với 8 bit thì byte đầu tiên không được sử dụng). Việc truyền thông kết thúc sau bit nhận biết dữ liệu CRC. Nếu chuỗi CRC không sử dụng thì vi điều khiển sẽ kết thúc việc truyền thông sau LSB dữ liệu đo bằng cách giữ ack ở mức cao. Thiết bị tự động trở lại chế độ sleep sau khi quá trình đo và truyền thông kết thúc. Chú ý: Để giữ độ ổn định nhiệt độ là 0.1 độ C, SHTXX không nên hoạt động hơn 15% thời gian (ví dụ tối đa 3 lần đo/giây cho độ chính xác 12 bit). - Chuỗi khởi tạo lại kết nối Nếu truyền thông với thiết bị bị mất, chuỗi tín hiệu sau sẽ khởi tạo lại giao diện nối tiếp của nó: Khi để DATA ở mức cao, thay đổi SCK từ 9 lần trở lên. Sau đó phải là một chuỗi "bắt đầu khởi tạo" trước khi thực hiện lệnh tiếp theo. Chuỗi này chỉ khởi tạo lại giao diện. Thanh ghi trạng thái giữ nguyên nội dung của nó. - Tính chuỗi kiểm tra tổng CRC Việc truyền thông số được đảm bảo bởi chuỗi kiểm tra tổng 8 bit. Nó đảm bảo rằng dữ liệu sai được tìm ra và loại bỏ. Hãy đọc thêm chú ý ứng dụng "Tính toán chuỗi kiểm tra tổng CRC" để xem thông tin về cách tính CRC. - Thanh ghi trạng thái Một số chức năng tiên tiến của SHTXX có sẵn trong thanh ghi trạng thái. Phần sau nêu tổng quan ngắn gọn về các đặc tính. Bản mô tả chi tiết hơn có trong chú ý ứng dụng "Thanh ghi trạng thái". - Độ chính xác đo Độ chính xác đo mặc định với 14 bit (nhiệt độ) và 12 bit (độ ẩm) có thể giảm xuống 12 hay 8 bit. Như vậy đặc biệt hữu dụng với các ứng dụng tốc độ cao hay có năng lượng tiêu thụ thấp. - Hết pin Chức năng hết pin thông báo điện thế VDD dưới 2.47V. Độ chính xác là +(-) 0.05V. - Tăng nhiệt độ Một thành phần tăng nhiệt gắn trên chip có thể được bật lên. Nó sẽ tăng nhiệt độ sensor lên xấp xỉ 5 độ C (9 độ F). Năng lượng tiêu thụ cũng tăng cỡ 8mA/5V. D. Ứng dụng: Nhờ so sánh các giá trị nhiệt độ và độ ẩm trước và sau khi bật bộ tăng nhiệt, tính chính xác của cả hai sensor có thể thay đổi. Với môi trường có độ ẩm tương đối cao (hơn 95%) thì việc làm nóng sensor sẽ ngăn sự đọng nước làm thay đổi thời gian phản hồi và độ chính xác. Chú ý: Khi được làm nóng, SHTXX sẽ có nhiệt độ cao hơn và độ ẩm tương đối thấp hơn so với khi chưa làm nóng. Các đặc tính điện VDD = 5V, nhiệt độ = 25 độ C trừ khi có khuyến cáo khác. 3 Chuyển đổi đầu ra thành các giá trị vật lý Độ ẩm tương đối Để bù cho sự không tuyến tính của sensor độ ẩm và để đạt được độ chính xác hoàn toàn, nên chuyển đổi các giá trị đầu ra theo công thức sau: RHtuyến tính = C1 + C2 * SORH + C3 * SORH(2) Để đơn giản, đỡ phải tính toán hãy xem các công thức chuyển đổi trong chú ý ứng dụng "Bù không tuyến tính độ ẩm tương đối và nhiệt độ". Sensor đo độ ẩm không phụ thuộc nhiều vào điện thế. Bù độ phụ thuộc độ ẩm tương đối/nhiệt độ Với nhiệt độ, đặc biệt khác nhau từ 25 độ C (khoảng 77 độ F), hệ số nhiệt độ của sensor đo độ ẩm tương đối được tính theo: RH thực = (T độ C - 25)* (t1 + t2*SORH) + RH tuyến tính Công thức trên ứng với độ ẩm tương đối cỡ 0.12%/độ C/độ ẩm tương đối 50%. Nhiệt độ Sensor đo nhiệt độ dải tỷ lệ theo nhiệt độ tuyệt đối được thiết kế rất tuyến tính. Dùng công thức sau đây để chuyển kết quả đầu ra thành nhiệt độ: Nhiệt độ = d1 + d2*SOT Để có độ chính xác cao khi nhiệt độ cao dùng công thức chuyển đổi tính toán phức tạp hơn, xem chú ý ứng dụng "Bù không tuyến tính độ ẩm tương đối và nhiệt độ". Điểm sương Do độ ẩm và nhiệt độ đều được đo trên cùng một chip, SHTXX cho phép đo điểm sương chính xác. Xem thêm chú ý ứng dụng "Tính toán điểm sương". 2.1.6 Ghép nối đầu đo với vi điều khiển AVR 2.1.7 Phần mền nhúng cho VAR /***************************************************** This program was produced by the CodeWizardAVR V1.25.9 Professional Automatic Program Generator © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l. Project : Version : Date : 05/05/2008 Author : F4CG Company : F4CG Comments: Chip type : ATmega8 Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include #include // I2C Bus functions #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=4 .equ __scl_bit=5 #endasm #include // Standard Input/Output functions #include #include // Declare your global variables here void main(void) { char tempH,tempL; char humiH,humiL; int SOrh; int temp,humi; char res,str[15]; // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 (Double Speed Mode) UCSRA=0x02; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // I2C Bus initialization i2c_init(); i2c_write(0xFF); delay_ms(15); while (1) { // Place your code here res = i2c_start(); //putchar(res); //delay_ms(5); i2c_stop(); DDRC.5 = 1; PORTC.5 = 0; delay_ms(100); tempH = i2c_write(0b00000011); //putchar(tempH); //delay_ms(380); DDRC.4 = 0; while(PINC.4); tempH = i2c_read(1); tempL = i2c_read(1); //putchar(tempH); //putchar(tempL); temp = (int)tempH; temp = (temp<<8)&0xFF00; temp += tempL; temp = temp/10 - 400; sprintf(str,"T = %02d,%01d C\r",(char)(temp/10),(char)(temp%10)); puts(str); i2c_read(1); delay_ms(1000); res = i2c_start(); i2c_stop(); DDRC.5 = 1; PORTC.5 = 0; delay_ms(100); // do do am humiH = i2c_write(0b00000101); DDRC.4 = 0; while(PINC.4); humiH = i2c_read(1); humiL = i2c_read(1); sprintf(str," %2X %2X\r",humiH,humiL); humi = (int)humiH; humi = (humi<<8)&0xFF00; SOrh = humi + humiL; humi = SOrh; humi = (humi*0.405) - 40 - humi*humi*0.000028; sprintf(str,"Hlr = %02d,%01d%%\r",(char)(humi/10),(char)(humi%10)); puts(str); humi = (temp - 250)*(0.1 + 0.00008*SOrh) + humi; sprintf(str,"Htr = %02d,%01d%%\r",(char)(humi/10),(char)(humi%10)); puts(str); i2c_read(1); delay_ms(1000); }; } Chương III PHẦN MỀM NHÚNG III. Phần mềm nhúng 3.1 Tổng quan về phần mềm nhúng Phần mềm nhúng đang có những bước đột phá mới, tạo ra những cuộc cách mạng triệt để trong tương lai. Lý do của sự phát triển này xuất phát từ những nhu cầu bức thiết của thực tế và những bước tiến mạnh mẽ trong công nghệ phần cứng. Một phần mềm nhúng phải kết hợp chặt chẽ với môi trường của nó bao gồm phần cứng và các hệ thống liên quan. Nó có những ràng buộc về tốc độ xử lý, dung lượng bộ nhớ và mức tiêu thụ điện năng... Một phần mềm nhúng tốt là phần mềm phải đảm bảo các yếu tố trên và đó cũng là hướng phát triển quan trọng của các phần mềm nhúng. Điểm mấu chốt của các phần mềm nhúng ngày nay là việc lựa chọn các phương pháp Vì vậy mà không thể bỏ đi các tính năng “cứng” của phần mềm như các phần mềm truyền thống khác. Một phần mềm nhúng ngày nay được phát triển theo cách sau: Liên kết phần mềm nhúng từ dưới lên trên, từ các lớp trừu tượng đến các chức năng hệ thống. Liên kết phần mềm nhúng với các nền lập trình được - các nền hỗ trợ nó cung cấp các phương tiện cần thiết để đánh giá xem các ràng buộc đưa ra có thỏa mãn hay không. Để làm được như vậy thì thực chất cần phải phát triển các kỹ thuật hình thức ở mức trừu tượng để có những đánh giá sớm cùng với các nhóm công cụ và phương pháp đúng đắn. Mặt khác cũng cần phải xem xét phần mềm nhúng và kiến trúc phần cứng của nó trong một tổng thể cân đối. Do phải thỏa mãn nhiều yếu tố khác nhau về phần cứng, môi trường, giá thành, hiệu năng nên tồn tại nhiều thách thức trong phát triển phần mềm nhúng ngày nay, như: Tăng cường việc tái sử dụng. Đồng thiết kế phần cứng, phần mềm. Xây dựng mô hình các thuộc tính phi chức năng. Chuyển đổi các phần mềm thành các dịch vụ thông qua các thành phần phần mềm. Kiến trúc hệ thống và kiến trúc phần mềm. Đánh giá và kiểm định mức hệ thống. Tương thích phần cứng và phần mềm nhờ các cấu trúc có thể định cấu hình lại và các thành phần Plug and Play. Xây dựng các hệ thống có khả năng tổ hợp được nhờ các thành phần phần mềm có thể tái sử dụng. 3.2 Các bước cơ bản xây dựng một phần mềm nhúng Phần mềm nhúng viết cho các họ vi xử lý có thể sử dụng các ngôn ngữ khác nhau như C/C++ hoặc Assembler. Tuỳ theo tiêu chí xây dựng hệ thống mà lựa chọn ngôn ngữ thích hợp. Từ đó cũng chọn chương trình dịch thích hợp. Ngày nay, do nhu cầu phát triển hệ thống nhanh, bảo trì dễ dàng nên ngôn ngữ được lựa chọn thường là ngôn ngữ cấp cao như C/C++. Quy trình xây dựng một phần mềm bất kỳ thường trải qua các bước sau: Tìm hiểu bài toán Phân tích Thiết kế Viết chương trình Kiểm thử Việc xây dựng phần mềm nhúng cũng tuân theo trình tự các bước như trên. Ngoài ra, phần mềm nhúng còn có đặc trưng là làm việc trực tiếp với phần cứng. Do đó để kiểm soát quá trình làm việc với các thành phần chấp hành có đúng đắn hay không là điều đặc biệt quan trọng. 3.3 Phần mềm nhúng viết cho CC1010 Phần mềm nhúng viết cho CC1010 được viết bằng ngôn ngữ C, sử dụng các thư viện cho CC1010 do hãng Chipcon cung cấp, chương trình biên dịch Keil uVision 2.0. Chương trình dịch Keil uVision 2.0 do hãng Keil Elektronik GmbH xây dựng là một môi trường phát triển tích hợp (IDE) dùng để xây dựng các chương trình cho các họ VĐK tương thích 8051 của Intel. Đây là bộ chương trình dịch cho phép người viết chương trình soạn thảo chương trình, dịch chương trình và gỡ lỗi trên cùng một môi trường. Chương trình dịch hỗ trợ cho cả ngôn ngữ C và Assembly. Hãng Chipcon cũng cung cấp bộ thư viện CC1010IDE hỗ trợ cho việc xây dựng phần mềm cho VĐK CC1010. Đây là bộ thư viện giúp cho việc xây dựng chương trình cho CC1010 được dễ dàng và nhanh chóng. CC1010IDE dựa trên công cụ phát triển “uVision2” của hãng Keil ™ Elektronik GmbH. Công cụ này cung cấp một khung (framework) cho hầu hết các đặc điểm của CC1010IDE và cũng hỗ trợ hầu hết cho các VĐK họ 8051. Trình soạn thảo là một công cụ chủ yếu để soạn thảo các file nguồn và file hợp ngữ. Nó cũng cung cấp các chức năng trợ giúp khác như giao diện đồ hoạ (Graphic User Interface - GUI), cần cho mô phỏng/gỡ lỗi (mã lệnh dạng hợp ngữ, thanh ghi, bộ nhớ, các cửa sổ theo dõi, bước lệnh, …). Thêm vào đó, IDE cũng cung cấp các giao diện với thư viện liên kết động (Dynamic Linking Library – DLL) được sử dụng để mô phỏng và gỡ lỗi trên mạch. Một điểm đặc biệt của bộ dịch là có thể chuyển các file nguồn được viết bằng C sang dạng hợp ngữ, để sau đó có thể tối ưu hoá mã lệnh. Dạng hợp ngữ sau đó được chuyển thành các file đối tượng (mã máy hoặc dữ liệu nhị phân). Cuối cùng, bộ liên kết đưa ra dạng file thực thi dạng Intel HEX và có thể nạp vào bộ nhớ Flash của VĐK. Mô hình của một phần mềm nhúng viết cho CC1010 như sau: Chương trình ứng dụng Các file định nghĩa phần cứng (Hardware definition file - HDF) Thư viện phần cứng (Hardware abstraction library – HAL) Thư viện tiện ích Chipcon (Chipcon utility library-CUL) Thư viện C chuẩn Các file định nghĩa phần cứng - Hardware Definition Files (HDF) Các file định nghĩa phần cứng định nghĩa địa chỉ các thanh ghi, ánh xạ vectơ ngắt và các hằng số phần cứng khác. Chúng cũng thường dùng các macro cho CC1010EB, và các định nghĩa hỗ trợ hợp ngữ và ngôn ngữ C. Thư viện phần cứng - Hardware Abstraction Library (HAL) Để hỗ trợ việc phát triển chương trình nhanh chóng và dễ dàng, Chipcon cung cấp thư viện các macro và các hàm truy cập phần cứng C1010 dễ dàng. Những thư viện này nằm trong Thư Viện Phần Cứng (HAL) và thi hành một giao tiếp phần cứng trừu tượng đối với chương trình người dùng. Nhờ đó chương trình người dùng có thể truy cập ngoại vi của vi điều khiển, thông qua các lời gọi hàm/macro, mà không cần hiểu chi tiết về phần cứng. Thư viện HAL hỗ trợ các chức năng sau: Truyền nhận không dây Đo cường độ RSSI Truyền nhận RS232 Làm việc với ADC Xử lý thời gian thực Mã hoá DES Thiết lập các bộ định thời Làm việc với các cổng Thư viện tiện ích Chipcon - Chipcon Utility Library (CUL) Bên cạnh module HAL CC1010IDE cũng cung cấp một thư viện cho truyền thông RF đặt trong Thư Viện Tiện Ích (CUL). Thư viện này thường dùng cho các ứng dụng RF điển hình, và cung cấp một giao thức RF đầy đủ. Thư viện CUL hỗ trợ các chức năng sau: Truyền nhận không dây Tính toán Mã dư vòng (CRC) Xử lý Thời gian thực (Realtime Clock) Cả hai thư viện HAL và CUL đều hỗ trợ Truyền nhận không dây và xử lý thời gian thực. Tuy nhiên, các hàm ở thư viện CUL làm việc ở mức cao hơn, người viết chương trình cũng dễ dàng và tiện lợi hơn, nhưng bù lại cũng kém mềm dẻo hơn so với sử dụng các hàm ở thư viện HAL. Do vậy, đối với những ứng dụng đòi hỏi sự phức tạp thì thường dùng thư viện HAL. Phần mềm WSN viết cho CC1010 Phần mềm viết cho nút mạng cho WSN cần thực hiện những chức năng cơ bản sau: Cảm nhận Tính toán Truyền thông Một thách thức là phải thực hiện tất cả những công việc trên vào một VĐK bị ràng buộc về mặt tài nguyên. Điều đó đòi hỏi chương trình viết càng ngắn và càng tốn ít bộ nhớ càng tốt, trong khi vẫn đảm bảo việc viết chương trình nhanh, bảo trì và nâng cấp dễ dàng. Việc thực hiện cảm nhận và tính toán đã được đề cập chi tiết tại chương III. Còn thực hiện việc truyền thông, chương trình sử dụng các hàm trong bộ thư viện HAL của Chipcon. Chương trình truyền thông cho CC1010 thực hiện theo các bước sau: Khởi tạo RF: thiết lập tần số RF, tốc độ truyền, cách điều chế tín hiệu, công suất phát. Trong chương trình cụ thể, các thông số trên lần lượt có giá trị là: 868MHz, 2.4kb/s, mã hoá Manchester, 4 dBm. Các khai báo này được đặt trong một cấu trúc RF_SETTINGS được khai báo như sau: RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0x4B, 0x2F, 0x15, // Modem 0, 1 and 2: Manchester, 2.4 kBaud 0x75, 0xA0, 0x00, // Freq A 0x58, 0x32, 0x8D, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x40, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW 4dBm 0x00, // MATCH 0x00, // PRESCALER }; Việc khởi tạo RF theo các bước trình tự sau: halRFCalib(&RF_SETTINGS, &RF_CALDATA); //chuẩn hoá RF INT_GLOBAL_ENABLE (INT_OFF); //cấm ngắt toàn cục INT_SETFLAG (INUM_RF, INT_CLR); //xoá ngắt RF INT_PRIORITY (INUM_RF, INT_HIGH); //mức ưu tiên ngắt RF là cao RF_SET_BYTEMODE(); //RF hoạt động ở chế độ byte RF_SET_PREAMBLE_COUNT(PREAMBLE_BYTE_COUNT); //thiết lập số //byte dẫn đường RF_SET_SYNC_BYTE(RF_SUITABLE_SYNC_BYTE);//thiết lập byte đồng bộ MODEM1=(MODEM1&0x03)|0x24; //lọc trung bình // Reset preamble detection PDET &= ~0x80; PDET |= 0x80; INT_ENABLE (INUM_RF, INT_OFF); //cấm ngắt ngắt RF INT_GLOBAL_ENABLE (INT_ON); //cho phép ngắt toàn cục Nhận dữ liệu RF: việc nhận dữ liệu RF thông qua ngắt. Mỗi khi nhận được một byte, VĐK sinh ra một ngắt. Chương trình xử lý ngắt có nhiệm vụ đưa byte này vào một bộ đệm. Khi toàn bộ gói tin đã nhận xong, ngắt này bị cấm để chờ xử lý xong bộ đệm. Quá trình nhận một byte từ bộ đệm RFBUF vào bộ đệm chương trình như sau: //nhận một byte từ RFBUF vào bộ đệm rf_rx_buf tại vị trí rf_rx_index; rf_rx_buf[rf_rx_index] = RF_RECEIVE_BYTE(); rf_rx_index++; //tăng chỉ số lên 1 Byte đầu tiên của bộ đệm chương trình rf_rx_buf [0] lưu độ dài gói tin. Việc nhận dữ liệu kết thúc khi rf_rx_index bằng giá trị độ dài gói tin, nghĩa là: rf_rx_index = rf_rx_buf[0]; Sau khi toàn bộ gói tin RF đã nhận được, chương trình sẽ phân tích gói tin, lọc ra các dữ liệu cần thiết. Nếu là nút Master, nó sẽ truyền dữ liệu nhận được về PC qua cổng RS232. Nếu là Slave, nó sẽ thực hiện việc cảm nhận, tính toán rồi truyền dữ liệu về Master. Truyền dữ liệu RF: việc truyền dữ liệu RF được thực hiện bởi các hàm/macro trong thư viện HAL của Chipcon như sau: halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);//turn on TX RF_START_TX(); //bắt đầu truyền halRFSendPacket(PREAMBLE_BYTE_COUNT,&txDataBuffer[0],4); //truyền dữ liệu tại txDataBuffer với độ dài là 4 halRFSetRxTxOff(RF_RX,&RF_SETTINGS,&RF_CALDATA);//turn on //RX RF_START_RX(); // bắt đầu chế độ nhận INT_SETFLAG (INUM_RF, INT_CLR); //xoá cờ ngắt RF INT_ENABLE (INUM_RF, INT_ON); //cho phép ngắt RF TÀI LIỆU THAM KHẢO 2 1 3 MỤC LỤC LỜI MỞ ĐẦU 1

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

  • docccccc.DOC