3 đo NHIỆT độ độ SÁNG và báo CHÁY với PIC18F4550

24 7 0
  • Loading ...
1/24 trang

Thông tin tài liệu

Ngày đăng: 26/11/2018, 12:10

Ủ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 BÁO CHÁY VỚI PIC18F4550 HỆ ĐẠI HỌC NIÊN KHÓA: 2014-2019 Sinh viên thực hiện: PHẠM THÁI THÔNG DKT1142 Mssv: 3114520078 Thành phố Hồ Chí Minh, 2017 ĐỒ ÁN MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ PIC18F4550 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 MÔ PHỎNG 12 CHƯƠNG 3: LÀM MẠCH THỰC TẾ 21 3.1 MẠCH IN .21 3.2 BOARD 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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN CHƯƠNG 1: TỔNG QUAN VỀ PIC18F4550 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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ Á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 yê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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ Á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ó 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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN 1.1.4 Sơ đồ khối PIC18F4550 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ Á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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ Á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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN Biểu đồ nhiệt độ điện áp ngõ Biểu đồ sai số nhiệt độ khác KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ Á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 đặ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 KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN 11 CHƯƠNG 2: THIẾT KẾ MẠCH NGUYÊN LÝ 2.1 SƠ ĐỒ KHỐI 2.2 LƯU ĐỒ GIẢI THUẬT KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN 12 2.3 NHÚNG 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 /* 4-bit Interface: 0b00101100 */ KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN 13 #define EIGHT_BIT 0b00111100 /* 8-bit Interface */ #define LINE_5X7 0b00110000 /* 5x7 characters, single line */ { Delay1KTCYx(25); // Delay of 5ms return; } void displaylcd_l2 (unsigned int intval) #define LINE_5X10 0b00110100 /* 5x10 characters */ { #define LINES_5X7 0b00101000 /* 5x7 characters, multiple line: 0b00111000 */ char o[10]; #define putcXLCD WriteDataXLCD unsigned int volt; volt = ((intval*25)/255) ; itoa(volt,o); void OpenXLCD(void); void SetCGRamAddr(PARAM_SCLASS unsigned char); void SetDDRamAddr(PARAM_SCLASS unsigned char); 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; else PORTDbits.RD3=0;} 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; // ADCON2bits.ADCS1 = 1; // ADCON2bits.ADFM = 1; // Right justified unsigned char u,v; ADCON0bits.ADON = 1; // Enable ADC for (u=0;uu;v ){ jal(); while(BusyXLCD()); Delay10KTCYx(250); SetDDRamAddr(v-1); while(1) while(BusyXLCD()); { WriteDataXLCD(t[u]); ADCON1 = 0b00000000; // Vref = VDD Delay1KTCYx(50); ADCON0bits.CHS3 = 0; } ADCON0bits.CHS2 = 0; } ADCON0bits.CHS1 = 0; for (u=0;uu;v ){ Delay100TCYx(2); // Give the ADC time to get ready while(BusyXLCD()); SetDDRamAddr(64+(v-1)); while(BusyXLCD()); // configure external LCD ADCON0bits.GO = 1; // Start the ADC conversion WriteDataXLCD(h[u]); while (ADCON0bits.GO); Delay1KTCYx(50); displaylcd_l1(ADRES); } Delay10KTCYx(50); ADCON1 = 0b00000000; KHOA ĐIỆN TỬ - VIỄN THÔNG ĐỒ Á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; // Start the ADC conversion 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 // All control WriteCmdXLCD(LINES_5X7); // 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 low RS_PIN = 0; pin made low // Register select E_PIN = 0; // Clock pin made low // Delay for 15ms to allow for LCD Power on reset WriteCmdXLCD(DOFF&CURSOR_OFF&BLIN K_OFF); // Display OFF/Blink OFF while(BusyXLCD()); Wait if LCD busy // WriteCmdXLCD(DON&CURSOR_OFF&BLIN K_OFF); // Display ON/Blink ON Delay1KTCYx(75); // Delay of 15ms // -reset procedure through software -WriteCmdXLCD(0x30); Delay10KTCYx(0x05); WriteCmdXLCD(0x30); // Clear display while(BusyXLCD()); Wait if LCD busy WriteCmdXLCD(0x01); // Clear display // Set entry mode inc, no shift KHOA ĐIỆN TỬ - VIỄN THÔNG // ĐỒ ÁN 17 while(BusyXLCD()); Wait if LCD busy // TRIS_DATA_PORT &= 0x0f; Make port output WriteCmdXLCD(SHIFT_DISP_LEFT); // Entry Mode DATA_PORT &= 0x0f; write upper nibble // Set DD Ram address to while(BusyXLCD()); Wait if LCD busy // SetDDRamAddr(0x80); // Set Display data ram address to return; // Upper nibble interface TRIS_DATA_PORT &= 0x0f; Make nibble input DATA_PORT &= 0x0f; write upper nibble // // Set control RS_PIN = 0; DATA_PORT |= ((DDaddr | 0b10000000) & 0xf0); RW_PIN = 0; // Set control bits RS_PIN = 0; E_PIN = 1; cmd and address in // Clock the DelayFor18TCY(); E_PIN = 0; 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 TRIS_DATA_PORT &= 0x0f; E_PIN = 1; // Clock command in 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
- Xem thêm -

Xem thêm: 3 đo NHIỆT độ độ SÁNG và báo CHÁY với PIC18F4550, 3 đo NHIỆT độ độ SÁNG và báo CHÁY với PIC18F4550

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay