1. Trang chủ
  2. » Luận Văn - Báo Cáo

đo nhiệt độ độ sáng và báo cháy với pic18f4550

24 526 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 2,73 MB

Nội dung

ĐỒ ÁN 1 ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC SÀI GỊN KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN MÔN HỌC ĐO NHIỆT ĐỘ ĐỘ SÁNG VÀ BÁO CHÁY VỚI PIC18F4550 HỆ ĐẠI HỌC NIÊN KHÓA: 2014-2019 ĐỒ ÁN MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ PIC18F4550 VÀ CÁC CẢM BIẾN 1.1 PIC18F4550 1.2 LM35 1.3 QUANG TRỞ 10 CHƯƠNG 2: THIẾT KẾ MẠCH NGUYÊN LÝ 11 2.1 SƠ ĐỒ KHỐI .11 2.2 LƯU ĐỒ GIẢI THUẬT .12 2.3 NHÚNG VÀ MÔ PHỎNG 12 CHƯƠNG 3: LÀM MẠCH THỰC TẾ 21 3.1 MẠCH IN .21 3.2 BOARD VÀ LINH KIỆN 22 CHƯƠNG 4: KẾT LUẬN 23 4.1 ƯU NHƯỢC ĐIỂM .24 4.2 HƯỚNG PHÁT TRIỂN .24 ĐỒ ÁN CHƯƠNG 1: TỔNG QUAN VỀ PIC18F4550 VÀ CÁC CẢM BIẾN 1.1 PIC18F4550 1.1.1 Tổng quan PIC 18F4550 vi điều khiển 40 chân, có khả giao tiếp USB hiệu cao, tăng cường nhớ Flash sử dụng công nghệ nanoWatt − Là vi xử lý trang bị tính giao tiếp USB 2.0 − Có khả truyền nhận liệu tốc độ thấp (1.5 Mb/s) tốc độ cao (12 Mb/s) − Hỗ trợ việc điều khiển, ngắt, truyền liệu kích thước lớn truyền liệu đồng thời − Hỗ trợ lên đến 32 điểm đầu cuối (16 đường truyền song hướng) − kb nhớ RAM truy cập kép cho USB − Bộ thu phát USB với điều chỉnh điện áp 3.3 V chip − Giao tiếp thu phát USB riêng bên ngồi − Có port truyền liệu song song (SPP) cho việc truyền dòng liệu USB (chỉ có vi điều khiển 40 chân) − Run: CPU hoạt động, khối ngoại vi hoạt động − Idle: CPU không hoạt động, khối ngoại vi hoạt động Dòng điện chế độ idle giảm xuống 5.8 μA − Sleep: CPU không hoạt động, khối ngoại vi khơng hoạt động Dịng điện chế độ sleep giảm xuống 0.1 μA − Bộ dao động Timer1 với thông số: 1.1 μA, 32 kHz, V − Bộ định thời watchdog hoạt động với dịng 2.1 μA − Có chế độ khởi động dao động hai tốc độ − Công nghệ nanowatt Tất vi điều khiển họ PIC18F có tính giảm đáng kể lượng cơng suất tiêu thụ trình hoạt động Chế độ chạy luân phiên ĐỒ ÁN Hoạt động theo xung clock từ điều khiển Timer1 dao động nội, cơng suất tiêu thụ q trình thực thi chương trình giảm đến 90% Chế độ tĩnh (idle) phức hợp Vi điều khiển chạy với CPU ngưng hoạt động, khối ngoại vi hoạt động Ở trạng thái này, công suất tiêu thụ giảm nữa, đến 4% lượng cơng suất mà chế độ họat động bình thường u cầu Chế độ on-to-fly Chế độ quản lý công suất gọi chương trình người dùng trình hoạt động, cho phép người lập trình kết hợp ý tưởng tiết kiệm lượng thành thiết kế ứng dụng họ 1.1.2 Tính đa dao động Dịng vi điều khiển PIC18F có tính lựa chọn 12 nguồn dao động khác nhau, cho phép người dùng nhiều lựa chọn việc phát triển ứng dụng Tính bao gồm: − nguồn dao động thạch anh sử dụng thạch anh cộng hưởng ceramic − nguồn dao động ngoại − khối tạo dao động nội cung cấp nguồn xung MHz (độ xác ±2%), nguồn dao động nội dùng RC INTRC (xấp xỉ 31 KHz không bị ảnh hưởng nguồn cung cấp nhiệt độ), dãi 6/8 tần số mà người dùng lựa chọn có dãi tần từ 125 kHz đến MHz Lựa chọn giúp ta có thêm hai chân dao động trống để sử dụng cho giao tiếp I/O − Một nhân tần số vịng lặp khóa pha (PLL) sử dụng thạch anh tần số cao dao động ngoại cho phép tần số từ MHz đến 48 MHz − Hoạt động với nguồn xung clock kép không đồng bộ, cho phép chế độ USB sử dụng dao động tần số cao, phần lại vi điều khiển cấp xung clock từ dao động công suất thấp bên Bộ dao động nội bên cạnh vai trò nguồn xung, cung cấp nguồn tham chiếu ổn định cho số tính bổ sung như: − Giám sát lỗi xung clock (Fail-Safe Clock Monitor): chế độ giám sát liên tục nguồn xung sơ cấp dựa vào tín hiệu tham chiếu từ nguồn dao động nội Nếu xảy lỗi xung clock, vi điều khiển chuyển sang sử dụng dao động nội cho phép tiệp tục hoạt động tốc độ thấp shutdown ứng dụng cách an toàn − Chế độ khởi động hai tốc độ: lựa chọn cho phép dao động nội phục vụ nguồn xung, cấp cho chế độ reset mở nguồn (Power-on Reset), đánh thức đưa hệ thống thoát khỏi chế độ sleep nguồn xung clock hoạt động trở lại 1.1.3 Tính đặc biệt khác Độ bền nhớ Bộ nhớ flash tăng cường dùng cho chương trình liệu EEPROM ghi xóa với chu kỳ đến hàng ngàn lần, lên đến 100.000 lần nhớ chương trình, 1000.000 lần cho EEPROM Khả trì liệu mà khơng cần làm tươi nhớ 40 năm Tính tự lập trình Linh kiện ghi vào chỗ trống nhớ chương trình điều khiển phần mềm nội Bằng cách sử dụng thủ tục khởi động khối boot nằm nhớ chương trình, tạo lập ứng dụng có khả tự cập nhật Thiết lập lệnh mở rộng Họ PIC 18F đưa lựa chọn mở rộng lệnh thiết lập gồm cấu trúc lệnh chế độ ghi địa offset đánh số chữ Lựa ĐỒ ÁN chọn mở rộng lựa chọn cấu hình thiết bị, thiết kế đặc biệt để tối ưu mã chương trình ngơn ngữ cấp cao C Khối CCP tăng cường Trong chế độ PWM, khối cung cấp ngõ điều chế 1, 2, để điều khiển driver cầu bán cầu Các tính khác bao gồm chế độ auto shutdown để vô hiệu ngõ PWM theo ngắt hay theo điều kiện khác Ngồi cịn có chế độ auto-restart để kích hoạt lại ngõ PWM điều kiện kể bị xóa Khối USART tăng cường có khả lập địa Khối truyền thơng nối tiếp có khả hoạt động theo chuẩn RS-232 cung cấp hỗ trợ cho giao thức bus LIN Tính tăng cường bao gồm nhận dạng tốc độ baud tự động, tạo tốc độ baud 16-bit nhằm cải thiện độ phân giải truyền liệu Khi vi điều khiển sử dụng dao động nội EUSART hoạt động ổn định ứng dụng mà không cần phải dùng đến dao động thạch anh bên ADC 10-bit Khối kết hợp với chu kỳ thời gian nhận tín hiệu chuyển đổi khả trình cho phép chọn lựa kênh chuyển đổi khởi xướng q trình chuyển đổi mà khơng cần đợi chu kỳ lấy mẫu Do đó, tính làm giảm bớt mã vượt giới hạn chuyển đổi Port ICD/ICSP dành riêng Port dành riêng cung cấp việc sử dụng chân sửa lỗi chân lập trình khơng tích hợp chức khác vi điều khiển Tính cho phép người dùng phát triển ứng dụng chuyên I/O trì khả lập trình sửa lỗi chip ĐỒ ÁN 1.1.4 Sơ đồ khối PIC18F4550 ĐỒ ÁN 1.1.5 Bộ chuyển đổi ADC PIC 18F4550 có 13 chân ngõ vào nhận tín hiệu tương tự để chuyển thành tín hiệu số với độ phân giải 10-bit Khối AD (Analog to Digital) gồm có ghi: ADRESH (AD Result High register), ADRESL (AD Result Low register), ADCON0 (AD Control register 0), ADCON1 ADCON2 Sơ đồ khối chuyển đổi ADC ĐỒ ÁN Các ghi liên kết với ADC 1.2 LM35 Cảm biến nhiệt độ LM35 loại cảm biến tương tự hay ứng dụng ứng dụng đo nhiệt độ thời gian thực Vì hoạt động xác với sai số nhỏ, đồng thời với kích thước nhỏ giá thành rẻ ưu điểm ĐỒ ÁN Biểu đồ nhiệt độ điện áp ngõ Biểu đồ sai số nhiệt độ khác ĐỒ ÁN 10 1.3 QUANG TRỞ Quang trở loại "vật liệu" điện tử hay gặp sử dụng mạch cảm biến ánh sáng Có thể hiểu cách dễ dàng rằng, quang trở loại ĐIỆN TRỞ có điện trở thay đổi theo cường độ ánh sáng Nếu đặt mơi trường có ánh sáng, có bóng râm tối điện trở quang trở tăng cao cịn đặt ngồi nắng, nơi có ánh sáng điện trở giảm Biểu đồ liên hệ điện trở cường độ sáng ĐỒ ÁN CHƯƠNG 2: THIẾT KẾ MẠCH NGUYÊN LÝ 2.1 SƠ ĐỒ KHỐI 2.2 LƯU ĐỒ GIẢI THUẬT 11 ĐỒ ÁN 12 2.3 NHÚNG VÀ MÔ PHỎNG #include #define E_PIN LATDbits.LATD2 #include #define TRIS_E TRISDbits.TRISD2 #include #define DON 0b00001111 #ifndef bootlcd_H #define DOFF 0b00001011 #define bootlcd_H #define CURSOR_ON 0b00001111 #include "p18f4550.h" #define CURSOR_OFF 0b00001101 #define UPPER #define BLINK_ON 0b00001111 #define DATA_PORT PORTD #define TRIS_DATA_PORT TRISD #define RS_PIN LATDbits.LATD0 #define TRIS_RS TRISDbits.TRISD0 #define RW_PIN LATDbits.LATD1 #define TRIS_RW TRISDbits.TRISD1 #define BLINK_OFF 0b00001110 #define SHIFT_CUR_LEFT 0b00000100 #define SHIFT_CUR_RIGHT 0b00000101 #define SHIFT_DISP_LEFT 0b00000110 #define SHIFT_DISP_RIGHT 0b00000111 #define FOUR_BIT 0b00100000 Interface: 0b00101100 */ /* 4-bit ĐỒ ÁN #define EIGHT_BIT Interface */ 13 0b00111100 { Delay1KTCYx(25); // Delay of 5ms return; } #define LINE_5X7 0b00110000 characters, single line */ #define LINE_5X10 characters */ /* 8-bit 0b00110100 #define LINES_5X7 0b00101000 characters, multiple line: 0b00111000 */ /* 5x7 /* 5x10 void displaylcd_l2 (unsigned int intval) { unsigned int volt; /* 5x7 #define putcXLCD WriteDataXLCD void OpenXLCD(void); void SetCGRamAddr(PARAM_SCLASS unsigned char); void SetDDRamAddr(PARAM_SCLASS unsigned char); char o[10]; volt = ((intval*25)/255) ; itoa(volt,o); while(BusyXLCD()); SetDDRamAddr(0x00); putrsXLCD("Do sang:"); while(BusyXLCD()); unsigned char BusyXLCD(void); if (volt >99) unsigned char ReadAddrXLCD(void); char ReadDataXLCD(void); void WriteCmdXLCD(PARAM_SCLASS unsigned char); void WriteCmd8bit(PARAM_SCLASS unsigned char); { WriteDataXLCD(o[0]); while(BusyXLCD()); WriteDataXLCD(o[1]); while(BusyXLCD()); void WriteDataXLCD(PARAM_SCLASS char); WriteDataXLCD(o[2]); void putsXLCD(PARAM_SCLASS char *); while(BusyXLCD()); void putrsXLCD(const rom char *); WriteDataXLCD(0x25); extern void DelayFor18TCY(void); } extern void DelayPORXLCD(void); else extern void DelayXLCD(void); if (volt > & volt = & volt 99) WriteDataXLCD(0x20); { while(BusyXLCD()); WriteDataXLCD(out[0]); WriteDataXLCD(0x20); while(BusyXLCD()); while(BusyXLCD()); WriteDataXLCD(out[1]); WriteDataXLCD(o[0]); while(BusyXLCD()); while(BusyXLCD()); WriteDataXLCD(out[2]); WriteDataXLCD(0x25); while(BusyXLCD()); } WriteDataXLCD(0xDF); else } { else WriteDataXLCD('Error'); if (v > & v = & v 39) PORTDbits.RD3=1; PORTDbits.RD3=0;} else void jal (void) { unsigned int current_ad_value; TRISAbits.TRISA0 = 1; TRISAbits.TRISA1 = 1; TRISDbits.TRISD3 = 0; char t[16]={'J','a','c','k','m','a','t','h','e','m','a','t','i','c','a','l'} ; ADCON2bits.ADCS0 = 0; // Fosc/32 clock char h[16]={'3','1','1','4','5','2','0','0','7','8',' ','D','K','T','4','2'}; ADCON2bits.ADCS2 = 0; // unsigned char u,v; for (u=0;uu;v ){ ADCON2bits.ADCS1 = 1; // ADCON2bits.ADFM = 1; // Right justified ADCON0bits.ADON = 1; // Enable ADC OpenXLCD(); jal(); while(BusyXLCD()); SetDDRamAddr(v-1); while(BusyXLCD()); WriteDataXLCD(t[u]); Delay1KTCYx(50); } } for (u=0;uu;v ){ while(BusyXLCD()); SetDDRamAddr(64+(v-1)); while(BusyXLCD()); // configure external LCD Delay10KTCYx(250); while(1) { ADCON1 = 0b00000000; // Vref = VDD ADCON0bits.CHS3 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS0 = 0; Delay100TCYx(2); // Give the ADC time to get ready ADCON0bits.GO = 1; conversion WriteDataXLCD(h[u]); while (ADCON0bits.GO); Delay1KTCYx(50); displaylcd_l1(ADRES); } Delay10KTCYx(50); ADCON1 = 0b00000000; // Start the ADC ĐỒ ÁN 16 ADCON0bits.CHS3 = 0; Delay10KTCYx(0x01); ADCON0bits.CHS2 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS0 = 1; WriteCmdXLCD(0x20); Delay100TCYx(2); // Give the ADC time to get ready ADCON0bits.GO = 1; conversion // Start the ADC while( BusyXLCD() ); // - while (ADCON0bits.GO); displaylcd_l2(ADRES); Delay10KTCYx(50); // Set data interface width, # lines, font } while(BusyXLCD()); busy } WriteCmd8bit(FOUR_BIT & LINES_5X7); // Function set cmd void OpenXLCD() { // Wait if LCD DATA_PORT &= 0x0f; while(BusyXLCD()); TRIS_DATA_PORT &= 0x0F; TRIS_RW = 0; signals made outputs WriteCmdXLCD(LINES_5X7); // All control // Turn the display on then off Delay10KTCYx(0x05); // Wait if LCD busy TRIS_RS = 0; TRIS_E = 0; RW_PIN = 0; // R/W pin made WriteCmdXLCD(DOFF&CURSOR_OFF& BLINK_OFF); // Display OFF/Blink OFF RS_PIN = 0; pin made low // Register select while(BusyXLCD()); Wait if LCD busy low E_PIN = 0; // Clock pin made low // Delay for 15ms to allow for LCD Power on reset Delay1KTCYx(75); // Delay of 15ms // -reset procedure software through WriteCmdXLCD(0x30); // WriteCmdXLCD(DON&CURSOR_OFF&B LINK_OFF); // Display ON/Blink ON // Clear display while(BusyXLCD()); Wait if LCD busy // WriteCmdXLCD(0x01); // Clear display Delay10KTCYx(0x05); // Set entry mode inc, no shift WriteCmdXLCD(0x30); while(BusyXLCD()); Wait if LCD busy // ĐỒ ÁN 17 WriteCmdXLCD(SHIFT_DISP_LEFT); // Entry Mode TRIS_DATA_PORT &= 0x0f; Make port output // Set DD Ram address to while(BusyXLCD()); Wait if LCD busy DATA_PORT &= 0x0f; write upper nibble // SetDDRamAddr(0x80); // Set Display data ram address to return; }void SetCGRamAddr(unsigned char CGaddr) { // DATA_PORT |= ((DDaddr | 0b10000000) & 0xf0); RW_PIN = 0; // Set control bits RS_PIN = 0; DelayFor18TCY(); // Clock the DelayFor18TCY(); E_PIN = 0; DATA_PORT &= 0x0f; write upper nibble // and DATA_PORT |= ((CGaddr | 0b01000000) & 0xf0); RW_PIN = 0; signals // and E_PIN = 1; cmd and address in // Upper nibble interface TRIS_DATA_PORT &= 0x0f; Make nibble input // Set control // Upper nibble interface DATA_PORT &= 0x0f; lower nibble // Write DATA_PORT |= ((DDaddr4)&0x0f; the lower nibble of data return; // Read }void WriteCmd8bit(unsigned char cmd) { E_PIN = 0; RS_PIN = 0; // 4-bit interface // Reset the control bits // Upper nibble interface RW_PIN = 0; TRIS_DATA_PORT &= 0x0f; DATA_PORT &= 0x0f; return(data); // Return the data DATA_PORT |= cmd&0xf0; byte RW_PIN = 0; signals for command } void WriteCmdXLCD(unsigned char cmd) RS_PIN = 0; { DelayFor18TCY(); // 4-bit interface // Upper nibble interface E_PIN = 1; // Clock command in TRIS_DATA_PORT &= 0x0f; DATA_PORT &= 0x0f; DelayFor18TCY(); DATA_PORT |= cmd&0xf0; E_PIN = 0; RW_PIN = 0; signals for command // Set control TRIS_DATA_PORT |= 0xf0; // Set control return; RS_PIN = 0; }void WriteDataXLCD(char data) DelayFor18TCY(); { E_PIN = 1; // Clock command // Upper nibble interface in TRIS_DATA_PORT &= 0x0f; DelayFor18TCY(); DATA_PORT &= 0x0f; E_PIN = 0; // Upper nibble interface DATA_PORT |= data&0xf0; DATA_PORT &= 0x0f; DATA_PORT |= (cmd

Ngày đăng: 19/11/2020, 23:35

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w