Giới thiệu Chip PSOC. ứng dụng PSOC trong việc thiết kế thiết bị đo nhiệt độ và độ ẩm. Giưới thiệu sơ lược về USB. Nghiên cứu truyền dữ liệu USB với máy tính. Giới thiệu Chip PSOC. ứng dụng PSOC trong việc thiết kế thiết bị đo nhiệt độ và độ ẩm. Giưới thiệu sơ lược về USB. Nghiên cứu truyền dữ liệu USB với máy tính.
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI HOÀNG THỊ TÚ UYÊN NGHIÊN CỨU ỨNG DỤNG CÔNG NGHỆ FPAA TRONG ĐO LƯỜNG ĐIỀU KHIỂN LUẬN VĂN THẠC SĨ NGÀNH ĐO LƯỜNG VÀ HỆ THỐNG ĐIỀU KHIỂN Hà Nội, 2006 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI HOÀNG THỊ TÚ UYÊN NGHIÊN CỨU ỨNG DỤNG CÔNG NGHỆ FPAA TRONG ĐO LƯỜNG ĐIỀU KHIỂN LUẬN VĂN THẠC SĨ NGÀNH ĐO LƯỜNG VÀ HỆ THỐNG ĐIỀU KHIỂN NGƯỜI HƯỚNG DẪN : TS.PHẠM TH NGC YN H Ni, 2006 -1Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Lời cảm ơn Lời xin đợc gửi lời cảm ơn sâu sắc đến TS Nguyễn Quốc Cờng, ngời đà tận tình bảo , hớng dẫn , giúp đỡ suốt thời gian thực luận văn Tôi xin cảm ơn thầy cô giáo Bộ môn Kỹ thuật Đo Tin học Công nghiệp nói riêng thầy cô giáo Khoa Điện nói chung đà truyền thụ kiến thức cho trình học tập dới mái trờng Đại học Bách khoa Hà nội Và xin đợc bày tỏ biết ơn đến gia đình bạn bè ngời đà giúp đỡ động viên lúc khó khăn Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển -2Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Lời mở đầu Trớc phát triển mạnh mẽ không ngừng khoa học kỹ thuật đặc biệt lĩnh vực bán dẫn chế tạo chip, điều thật đà giúp ngời sử dụng có đợc nhiều lựa chọn chip cho thiết kế Tuy nhiên việc lựa chọn nh phù hợp cho thiết kế lại vấn đề Trong trình thực luận văn tốt nghiệp với nội dung Nghiên cứu, thiết kế thiết bị đo đại lợng không điện sử dụng Psoc truyền tin USB cho thấy tiện lợi công nghệ chip tích hợp chuẩn USB Trớc đà thiết kế mạch đo sử dụng chip xử lý(chỉ đơn chip xử lý) chuẩn truyền thông RS232 Bây trình thực luận văn đợc tiếp cận công nghệ khiến vô hứng thú việc thiết kế mạch đo theo hớng hoàn toàn có đôi lúc bỡ ngỡ Những bỡ ngỡ ban đầu thùc sù qua rÊt nhanh mét ®· quen víi công nghệ Psoc Vì nội dung công việc luận văn là: Nghiên cứu công nghệ Psoc qua thấy đợc số u điểm Psoc so với chíp cũ Để làm rõ điều trình thực hiện, có thiết kế thiết bị đo nhiệt độ, độ ẩm sử dụng Psoc Nghiên cứu truyền tin USB, cụ thể phơng pháp truyền liệu USB thiết kế mạch dùng để truyền số liệu chip(đợc tích hợp USB) với máy tính So sánh kết truyền để thấy đợc u điểm USB Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển -3Luận văn Thạc sỹ ngành Đo Lờng hệ thống ®iỊu khiĨn Ch−¬ng đặt vÊn ®Ị 1.1 Mét sè ®iĨm khái quát thiết bị đo 1.1.1 Các vấn đề thờng gặp thiết kế thiết bị đo 1.1.2 Xu h−íng hiƯn 1.1.3 C¸c tính Psoc 10 1.2 Mục tiêu đề tài 11 Ch−¬ng 12 Giíi thiƯu chip Psoc 12 2.1 Sơ đồ cấu trúc Psoc 12 2.1.1 Sơ đồ khối chức Psoc 12 2.1.2 ChÕ ®é hoạt động cổng vào/ra Psoc 13 2.1.3 C¸c khèi analog block 18 2.2 TÇn sè dao ®éng cđa Psoc 21 2.3 Sự tiêu thụ l−ỵng cđa Chip 24 Ch−¬ng 27 øng dụng Psoc việc thiết kế thiết bị đo 27 nhiệtđộ độ ẩm 27 3.1 Giao tiÕp Psoc víi c¶m biÕn nhiƯt ®é 28 3.2 Đo độ ẩm : 30 3.3 KÕt qu¶ thùc hiƯn 37 Ch−¬ng 41 Sơ lợc usb 41 4.1Giíi thiƯu vÒ chuÈn USB : 41 4.2 Host USB : 43 4.3 Quá trình truyền liệu USB 44 4.4 Mô hình lng d÷ liƯu USB 46 4.5 Bus Topology 47 4.5.1 USB host 47 4.5.2 Các thiết bị USB 48 4.5.3 KiÕn tróc bus vËt lý 49 4.6 Lng trun th«ng USB 49 4.7 Các loại truyền liệu Usb 50 4.7.1.Trun ®iỊu khiĨn : 50 4.7.2 Trun ng¾t : 51 4.7.3.Truyền đẳng thời 51 4.7.4 TruyÒn khèi : 51 4.8 Các tầng giao thøc cña USB 52 4.8.1Tr−êng ®ång bé : 52 4.8.2Tr−êng sè khung vµ tr−êng sè liƯu : 53 Ngun §øc HiƯp – Cao häc Đo lờng hệ thống điều khiển -4Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển 4.9 HID 53 4.10 Sơ lợc hoạt động truyền tin USB : 61 Ch−¬ng 62 Nghiên cứu truyền liệu USB với máy tính 62 5.1 Mét sè vấn đề cần ý 62 5.2 ThiÕt kÕ m¹ch giao tiếp USB máy tính 63 Ch−¬ng 66 Chơng trình 66 6.1 Mà lệnh chơng trình chÝnh 66 6.2 Các chơng trình hỗ trợ 68 KÕt luËn vµ h−íng ph¸t triĨn 72 Ngun §øc HiƯp – Cao häc Đo lờng hệ thống điều khiển -5Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Chơng đặt vấn đề 1.1 Một số điểm khái quát thiết bị đo 1.1.1 Các vấn đề thờng gặp thiết kế thiết bị đo Hiện vấn đề nhà nghiên cứu kỹ s thiết kế thiết bị đo tín hiệu đo việc xử lý tín hiệu để đạt đợc yêu cầu cao mà chi phí lại rẻ Do vấn đề thờng gặp thiết kế mạch đo vấn đề xử lý tín hiệu đo vấn đề tích hợp Hiện phát triển công nghiệp bán dẫn đà làm giá vi xử lý giảm xuống tạo c¬ héi cho ng−êi sư dơng cã c¬ héi lùa chọn cấu hình chip hợp lý Từ trớc đến thiết kế mạch đo ta nghĩ đến chuyển đổi tơng tự số với số bit phù hợp yêu cầu toán ®Ĩ biÕn ®ỉi tÝn hiƯu cÇn ®o sang tÝn hiƯu số, nh mạch đo phần xử lý trung tâm cần thêm ADC hay khuyếch đại Đó thói quen mà công nghệ bán dẫn cha phát triển nh làm cho ngời thiết kế gặp nhiều khó khăn, khối nh ADC, khuyếch đại xử lý tách rời Tuy nhiên vấn đề hay gặp trình thiết kế mạch đo Nh ta hình dung mạch đo (là phần thiết bị đo ) gồm có khối nh sau : Ngun §øc HiƯp – Cao häc §o l−êng hệ thống điều khiển -6Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển ` Điều khiĨn CB C§ CB C§ MUX ADC VXL §iỊu khiĨn Hình 1.1 Mô tả hình 1.1 khối VXL ( vi xử lý ) có nhiệm vụ, chức xử lý tín hiệu từ khối ADC ( sau đà đợc biến đổi ) Ngoài chức xử lý sè liƯu tõ khèi ADC , khèi xư lý trung tâm phải đảm nhận số nhiệm vụ kh¸c nh− giao tiÕp víi m¸y tÝnh, trun tin , điều khiển khối khác ( nh khối dồn kênh ) Điều cho ta thấy mạch đo thuộc loại đơn giản phải cần ®Õn Ýt nhÊt lµ hai khèi : ADC vµ khèi xử lý trung tâm ( không kể linh kiện khác nh điện trở , tụ điện ) để đảm bảo cho ADC hoạt động , thiết kế mạch đo ngời thiết kế chọn loại linh kiện cho phù hợp mà phải quan tâm đến khâu thiết kế vẽ mạch in cho mạch nhỏ gọn Xu hớng đại phát triển hệ thống nhúng (Embeđed system ) hay sản phẩm tơng đối phức tạp , thờng có khối ngoại vi nh khuyếch đai thuật toán (OPAM) lọc (Filter) , khối biến đổi số tơng tự tơng tự số Khi xuất số vấn đề nảy sinh nh : ã Càng nhiều thành phần chiếm không gian diện tích không nhỏ gọn ã Tiêu hao công suất phải cung cấp cho nhiỊu linh kiƯn Ngun §øc HiƯp – Cao häc Đo lờng hệ thống điều khiển -7Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển ã Các vấn đề thiết kế mạch in ( độ phức tạp cao , khó kiểm tra theo dõi bảo trì ) ã Tốn kinh phí cho thiết bị ngoại vi ã Sai số cho mạch đo thiết bị ngoại vi gây nên , dƠ bÞ nhiƠu … 1.1.2 Xu h−íng hiƯn Từ trớc tới nhà thiết kế gặp phải vấn đề nêu trình thiết kế mạch đo Với phát triển không ngừng Khoa học kỹ thuật không nghĩ đến loại chíp đợc tích hợp tất khối ngoại vi nh ADC, DAC,các khuyếch đại thuật toán Có thể hình dung loại chip tiện nghi ngời dùng thích linh kiện lấy để sử dụng cho công việc mà lắp thêm ADC hay đếm Nếu có loại chip có tính nh sơ đồ khối mạch đo nh hình 1.1 gói gọn chip nh hình mô tả 1.2 , nh ngời sử dụng cần chip đầu đo ( cảm biến ) Điều giúp ngời dùng hạn chế đợc nhợc điểm nêu Một phần xu cầu cần có linh kiện kết hợp tất thành phần lại với Rất nhiều xu hớng thiết kế gần chuyển sang thực Soc(System on chip) Sáng tạo Soc với đặc điểm kỹ thuật chúng cho phép ngời thiết kế cuối tính mềm dẻo để phù hợp với thiết kế họ Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển -8Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Hình 1.2 Do thị truờng có loại chip giúp ngời thiết kế khắc phục đợc phần lý nêu Đó Psoc Một kiểu linh kiện lập trình đà đợc phát triển để kết hợp tốt thành phần vi xử lý, khối logic khối tơng tự Nó cung cấp giải qut c©n b»ng cho nhiỊu øng dơng thÕ giíi thực Vậy chip Psoc ? Với công nghệ Csoc đợc tích hợp Proceesor nhớ Ram , Flash cho phép ta lập trình thuật toán xử lý phức tạp ngôn ngữ C hay Asb So với vi điều khiển nh họ 8051 Atmel, Pic Microchip họ có cấu trúc CPU ngoại vi cố định ( fixed digital and analog peripheral) chíp Csoc có khả mềm dẻo thích ứng với đa dạng ứng dụng khả định dạng cấu hình tạo thành nhiều loại chip khác chip thời điểm khác ứng dụng Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển - 60 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển 1.Khởi tao ghi USB dùng phơng pháp truyền điều khiển tuân theo giao thøc USB ThiÕt kÕ phÇn mỊm giao tiÕp USB với máy tính sử dụng VB , nhiên VB không hỗ trợ nhiều USB ta phải sử dụng th viện liên kết động (*.dll) phần mềm Win driver để hỗ trợ thêm Và phần mềm PC đợc tổ chức nh sau : Cần tạo lớp giao diện ngời dùng với thiết bị USB , vấn đề cần giải thống Descriptor thiết bị USB phần mềm ứng dụng Khi có thống , vendor ID product ID thiết bị phải đợc đặt sẵn phần mềm ứng dụng để cắm thiết bị USB thử nghiệm vào cổng USB máy tính phần mềm ứng dụng ( nói Windows ) tìm kiếm nhận thiết bị nhờ tơng ứng vendor ID product ID Để thực giao diện ta cần phải sử dụng hàm có sẵn Windriver nh sau : a Hàm kiểm tra xem có thiết bị cắm vào cổng USB hay không ? Tên hàm FindTheHid có kết trả biến Boolean b Hàm đếm số thiết bị cắm vào c Hàm đặt đệm liƯu trun nhËn (4 byte ) ®Ĩ thiÕt lËp thiÕt bi , hàm detailDataBufer d Hàm đặt địa bus (Member Index ) cho thiết bị hình thức đặt tên cho thiết bị ( setupDiEnumDeviceInterface.) e Hàm mở thiết bị :Open device f Hàm đặt thông tin cho thiết bị , xác định luồng truyền thông setupDiGetDeviceInterface hàm gói INT sử dụng truyền điều khiển có kiểu truyền nh sau : Trớc hết sau đặt địa cho thiết bị gửi gói INT yêu cầu thiết bị gửi vendor ID product ID thiết bị Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển - 61 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Khi thiết bị đà đợc Windows chấp nhận , hàm có nhiệm vụ yêu cầu thiết bị gửi mô tả riêng thiết bị g Hàm đọc thông tin gửi từ thiết bị có cấu trúc giống hàm đặt thông tin , nhng gói OUT : hàm Get_Attribute Đọc thông tin mô tả thiết bị gửi nh vendor ID , product ID , mô tả riêng thiết bị gói OUT để xử lý tiếp h Việc khởi tạo cho hàm Get_Attribute đợc sử dụng để xây dựng hàm đọc liệu từ thiết bị khác kich thứơc khung liệu 4.10 Sơ lợc hoạt động truyền tin USB : Ta khái quát trình trun USB nh− sau : Mét cc trun b¾t đầu điều khiển chủ gửi thông báo (tocken packet ) gồm địa (addr) thiết bị , sè hiƯu ®iĨm ci ENDP , h−íng cđa cc truyền dạng ống Thiết bị có địa tơng ứng tự chọn cách giải mà địa từ gói mà thông báo thiết bị ngoại vi trả lời gói liệu ( data packet ) , không máy chủ sÏ tiÕp tơc b»ng viƯc trun d÷ liƯu Nãi chung , sau nhận đợc liệu nơi nhận ( máy chủ thiết bị ngoại vi ) gửi lại gói bắt tay Gãi nµy cã thĨ cã ý nghÜa : chÊp nhËn liệu ACK , không chấp nhận liệu NAK , tắc nghẽn STALL Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển - 62 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Chơng Nghiên cứu truyền liệu USB với máy tính 5.1 Một số vấn đề cần ý -Endpoint: Qui định tính chất cc trun, endpoint lµ dïng cho gãi setup ban đầu để Windown hỏi kiểm tra thiết bị đợc cắm vào máy tính Endpoint truyền liệu từ host tới thiết bị Enpoint 81 dùng để truyền liệu từ Host tới thiết bị theo chế ngắt -Vendor ID v Product ID ch l nhng thông tin ca sn phm ch không liên quan tới chức nã Vendor ID l tên hÃng sn xuất (thờng chữ sè), Product ID mét sản phẩm mà nhà s¶n xuất qui định ( thng l ch số), hiểu cách đơn giản dó mà số nh xe máy có số khung số máy ®Ĩ nhËn biÕt chiÕc xe ®ã NÕu vendor ID lµ 0461 đà đợc đăng ký trang web usb.org USB MicroChip hÃng khác không đwocj đăng ký nh nữa, nhiên chóng ta vÉn cã thĨ sư dơng t ý Vendor ID, nÕu chóng ta cịng vÉn chän Vendor ID=0461 th× sản phẩm đợc hiểu Microchip Mỗi thiết bị có Vendor ID Product ID khác cắm vào máy tính windown hỏi driver cho thiét bị nhng đến lần sau host ta cắm thiết bị không hỏi hi mà vào Vendor ID Product ID mà đà lu trữ để qui định driver trớc cho thiết bị Bởi xảy trờng hợp thiét bị Vendor ID product ID cắm vào cổng USB hai thời điểm khác bị hiểu nhầm thiết bị cắm trớc gây hoạt động nhầm Những thông tin đà đợc kiểm chứng trực tiếp từ phần cứng , qui định chức cho thiết bị Endpoint Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển - 63 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển 5.2 Thiết kế mạch giao tiếp USB máy tính Hình 5.1 Mạch giao tiếp USB máy tính Trong thực tế thực mạch giao tiếp tận dụng vấn đề nghiên cứu Psoc để thiết kế mạch giao tiếp USB, nhiên có vấn đề khó khăn chip Psoc mà đợc hỗ trợ cổng USB lại chip dán nhỏ nên mua đợc thị tr−êng ViƯt Nam vËy ®Ĩ thùc hiƯn cho viƯc thiÕt kÕ em chun sang sư dơng hä Pic ®Ĩ thiÕt kÕ Bộ truyền nhận trªn chip: Trong khối USB PIC 18F2455 có sẵn truyn nhận USB full- speed low-speed nối với vi mạch SIE Bộ truyền nhận gọi truyền nhận trªn chip Khi dùng truyền nhận trªn chip, liệu khỏi truyền nhận tÝn hiệu vi sai nối trực tiếp lªn cỉng USB qua ch©n D+(pin 16) D- (pin 15) PIC Bộ truyền nhận bên (External Transceiver ): Module USB trªn PIC cã thể sử dụng truyền nhận bªn ngồi chip ( External Transceiver) Bộ truyn nhn bên ngoi chip c dựng Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển - 64 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển cho nhng ng dng m ng dng yêu cu v trí ca b truyền nhận nằm c¸ch xa giao diện trªn chip SIE Hình 5.2: sơ đồ kết nối SIE với External Transceive -Khi sử dụng truyền nhận bên ngồi phải sử dụng chân tín hiệu truyền tới truyền nhận bên để thiết lập giao diện phần cứng tương thích truyền theo chuẩn USB : • VM (pin 15): tÝn hiệu vào từ đường D• VP (pin 16): tÝn hiệu vào từ đường D+ • RCV (pin 6): TÝn hiệu vào từ nhận vi sai • VMO (pin 23) VPO (pin 24): tÝn hiệu từ SIE vi sai trªn truyền nhn bên ngoi ã OE-tích cc thp(pin 12): chân cho phÐp tÝn hiệu Tuy vËy USB vÒ thùc tế cha đợc phổ biến rộng rÃi(về mặt driver nh cổng Com) nên có số khó khăn thiết kế mạch in để đảm bảo đợc thành công ta cần lu ý số vấn đề nh sau: - Càng đơn giản tốt - Dây giao tiếp USB ngắn tốt khoảng 15cm trở lại - Không cần mạch reset bên cắm vào PC đà tự reset - USB cú thch anh riờng nờn thạch anh không ảnh hởng tới việc truyền liệu qua USB Tuy nhiên để đảm bảo việc truyền thông tin nen sử dụng thạch anh 20MHz Ngun §øc HiƯp – Cao häc §o l−êng hệ thống điều khiển - 65 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển - Với cổng USB PC chúng nhận lầ đầu sau vào Vendor ID product ID mà đà lu trữ mà lần sau cắm thiết bị vào không xảy tợng Cần vào Properties\Hardware\Device Manager Windown để kiểm tra thiết bị hay dùng phần mềm Win driver đợc - Phân tích file sử dụng phần mềm điều khiển Pic *) wdf_dscr.h Là file lu trữ phơng thức điều khiển *) wdf_dscr.c Là file lu trữ nh để định nghĩa thông tin thiết bị Nếu muốn đổi vài thông số thay đổi đay VD nh : Max length, Endpoint Vendor ID… *) periph.c Lµ file rÊt quan träng, néi dung cđa nã chÝnh lµ m· code C firmware Mọi nguyên tắc hoạt động nh nội dung chơng trình ta nạp vào Pic chứa Nguyễn Đức Hiệp Cao học Đo lờng hệ thống điều khiển - 66 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển Chơng Chơng trình 6.1 Mà lệnh chơng trình Do chơng trình chủ yếu thực công việc cách nh sau : Tr−íc hÕt ta xư lý tÝn hiƯu lÊy tõ ADC cách đọc giá trị từ ADC 12 bit, sau xư lý sè liƯu lÊy tõ ADC vỊ biến đổi thành giá trị nhiệt độ tơng ứng cất biến chơng trình Sau Psoc tiếp tục xử lý đến khối Psoc theo nh sơ đồ thuật toán chơng ta xử lý trình phóng nạp cảm biến HS1101 lấy đợc giá trị thoát khỏi vòng lặp Do trình lấy giá trị nh nhiệt độ đợc hỗ trợ hàm nên chơng trình tơng đối ngắn chủ yếu câu lệnh gọi hàm xử lý để đọc kết Chơng trình main.c // -// main.c // -#include #include "PSoCAPI.h" #include "stdlib.h" #include "math.h" //****************************************************************** //****************************************************************** #include "main.h" #include "temperature.c" #include "humidity.c" //****************************************************************** //****************************************************************** #pragma interrupt_handler sleep_tic void sleep_tic() { static int tic_count = 0; M8C_ClearWDTAndSleep; tic_count++; if(tic_count > 30) { tic_count = 0; hour_flag = TRUE; Ngun §øc HiƯp – Cao häc §o l−êng hệ thống điều khiển - 67 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển } } //****************************************************************** void main() { dump_to_uart = FALSE; Sensors.temperature = 84; Sensors.humidity = 52; PGA_2_Start(PGA_2_MEDPOWER); ADCINC12_2_Start(ADCINC12_2_HIGHPOWER); ADCINC12_2_GetSamples(0); //************************************************************* Counter16_1_WritePeriod(65534); CMPPRG_1_Start(CMPPRG_1_HIGHPOWER); //************************************************************* UART_1_CmdReset(); UART_1_IntCntl(UART_1_ENABLE_RX_INT); UART_1_Start(UART_1_PARITY_NONE); //************************************************************* LCD_1_Start(); M8C_ClearWDTAndSleep; //thiet lap sleep timer second M8C_EnableIntMask(INT_MSK0,INT_MSK0_SLEEP); //cho phep che sleep timer hoat dong M8C_EnableGInt ; //cho phep ng init_constants(); while(1) { getTemperature(); getHumidity(); Display_Temperature(TO_LCD); Display_Humidity(TO_LCD); getCommand(); if((dump_to_uart == TRUE) || (uConstants.Constants.DumpCont == TRUE)) { dump_to_uart = FALSE; Display_Temperature(TO_UART); Display_Humidity(TO_UART); Display_Barometer(TO_UART); } } } Ngun §øc HiƯp – Cao häc §o lờng hệ thống điều khiển - 68 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển 6.2 Các chơng trình hỗ trợ Chơng trình đo tính toán nhiệt độ : getTemperature(); void getTemperature() { int ADCval; while(ADCINC12_2_fIsDataAvailable() == 0); ADCINC12_2_ClearFlag(); ADCval=ADCINC12_2_iGetData(); // lap den co ngat //xoa co ngat ADC // lay ket qua ADC //****************************************************************** //****************************************************************** mytempunion.tempcalc = (long)ADCval; mytempunion.tempcalc *= 0x03E8; mytempunion.tempcalc += 0x1F4000; if(mytempunion.tempWords.low_word & 0x8000) mytempunion.tempWords.hi_word++; Sensors.temperature = mytempunion.tempWords.hi_word; //****************************************************************** void Display_Temperature(BYTE to_where) { itoa(buffer_shared,(int)Sensors.temperature, 10); if (to_where == TO_LCD) { //******************************************** LCD_1_Position(0,0); LCD_1_PrCString(sLine0Temp); LCD_1_Position(0,10); LCD_1_PrString(buffer_shared); LCD_1_PrCString(" C"); NguyÔn §øc HiƯp – Cao häc §o l−êng vµ hƯ thèng điều khiển - 69 Luận văn Thạc sỹ ngành Đo Lờng hệ thống điều khiển } else { Print out temperature UART_1_PutString(buffer_shared); UART_1_CPutString(","); } } Chơng trình đo xử lý độ ẩm : getHumidity(); void getHumidity() { static BYTE count = 0; static int FilterSum = 0; int i,j; int FiltNewVal; myHumidityUnion.tempcalc = 0; for(j=0;j 4; FilterSum = myHumidityUnion.tempWords.hi_word; if(myHumidityUnion.tempWords.low_word & 0x8000) Sensors.humidity = FilterSum; myHumidityUnion.tempcalc = 0; //****************************************************************** //****************************************************************** void Display_Humidity() { float ftemp; int i; itoa(buffer_shared,(int)Sensors.humidity, 10); if (to_where == TO_LCD) { LCD_1_Position(1,0); LCD_1_PrCString(sLine1Humidity); //LCD_1_Position(1,10); //sua LCD_1_Position(1,10); LCD_1_PrString(buffer_shared); LCD_1_PrCString(" %"); //sua for(i=0;i