− Công nghệ nanowatt Tất cả các vi điều khiển trong họ PIC18F đều có tính năng giảm đáng kể lượng công suất tiêu thụ trong quá trình hoạt động.. Hoạt động theo xung clock từ bộ điều khiể
Trang 1TRƯỜ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
Sinh viên thực hiện:
PHẠM THÁI THÔNG
DKT1142 Mssv: 3114520078
Thành phố Hồ Chí Minh, 2017
Trang 2MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ PIC18F4550 VÀ CÁC CẢM BIẾN 3
1.1 PIC18F4550 3
1.2 LM35 8
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
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 3CHƯƠ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 là vi điều khiển 40 chân, có khả năng giao tiếp USB hiệu năng cao, được tăng cường bộ nhớ Flash sử dụng công nghệ nanoWatt
− Là bộ vi xử lý được trang bị tính năng giao tiếp USB 2.0
− Có khả năng truyền nhận dữ liệu tốc độ thấp (1.5 Mb/s) và tốc độ cao (12 Mb/s)
− Hỗ trợ việc điều khiển, ngắt, truyền dữ liệu kích thước lớn và truyền dữ liệu đồng thời
− Hỗ trợ lên đến 32 điểm đầu cuối (16 đường truyền song hướng)
− 1 kb bộ nhớ RAM truy cập kép cho USB
− Bộ thu phát USB cùng với bộ điều chỉnh điện áp 3.3 V trên chip
− Giao tiếp bộ thu phát USB riêng bên ngoài
− Có port truyền dữ liệu song song (SPP) cho việc truyền dòng dữ liệu USB (chỉ có ở
vi điều khiển 40 chân)
− Run: CPU hoạt động, các khối ngoại vi hoạt động − Idle: CPU không hoạt động, các khối ngoại vi hoạt động Dòng điện ở chế độ idle giảm xuống chỉ còn 5.8 μA
− Sleep: CPU không hoạt động, các khối ngoại vi không hoạt động Dòng điện ở chế
độ sleep giảm xuống chỉ còn 0.1 μA
− Bộ dao động Timer1 với các thông số: 1.1 μA, 32 kHz, 2 V
− Bộ định thời watchdog hoạt động với dòng chỉ bằng 2.1 μA
− Có chế độ khởi động bộ dao động hai tốc độ
− Công nghệ nanowatt Tất cả các vi điều khiển trong họ PIC18F đều có tính năng giảm đáng kể lượng công suất tiêu thụ trong quá trình hoạt động Chế độ chạy luân phiên
Trang 4Hoạt động theo xung clock từ bộ điều khiển Timer1 hoặc bộ dao động nội, công suất tiêu thụ trong quá trình thực thi chương trình có thể giảm đến 90% Chế độ tĩnh (idle) phức hợp
Vi điều khiển có thể chạy với CPU ngưng hoạt động, nhưng các khối ngoại vi vẫn hoạt động Ở trạng thái này, công suất tiêu thụ có thể giảm hơn nữa, ít hơn đế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 được gọi bởi chương trình của người dùng trong quá trình hoạt động, cho phép người lập trình kết hợp các ý tưởng tiết kiệm năng lượng thành thiết kế ứng dụng của họ
1.1.2 Tính năng bộ đa dao động
Dòng vi điều khiển PIC18F đều có tính năng lựa chọn 12 nguồn dao động khác nhau, cho phép người dùng nhiều sự lựa chọn hơn trong việc phát triển các ứng dụng Tính năng này bao gồm: − 4 nguồn dao động thạch anh sử dụng thạch anh hoặc bộ cộng hưởng ceramic
− 4 nguồn dao động ngoại
− 1 khối tạo dao động nội cung cấp nguồn xung 8 MHz (độ chính xác ±2%), một nguồn dao động nội dùng RC INTRC (xấp xỉ 31 KHz không bị ảnh hưởng bởi nguồn cung cấp và nhiệt độ), cũng như một dãi 6/8 tần số mà người dùng có thể lựa chọn có dãi tần từ
125 kHz đến 4 MHz Lựa chọn này giúp ta có thêm hai chân dao động trống để sử dụng cho các giao tiếp I/O − Một bộ nhân tần số vòng lặp khóa pha (PLL) sử dụng cả thạch anh tần số cao và bộ dao động ngoại cho phép tần số từ 4 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 bộ dao động tần số cao, trong khi phần còn lại của vi điều khiển được cấp xung clock
từ bộ dao động công suất thấp bên trong
Bộ dao động nội bên cạnh vai trò nguồn xung, còn cung cấp nguồn tham chiếu ổn định cho một số tính năng bổ sung như: − Giám sát lỗi xung clock (Fail-Safe Clock
Monitor): chế độ này 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 ra lỗi xung clock, vi điều khiển sẽ chuyển sang sử dụng bộ dao động nội cho phép tiệp tục hoạt động tốc độ thấp hoặc shutdown các ứng dụng một cách an toàn − Chế độ khởi động hai tốc độ: lựa chọn này cho phép bộ dao động nội phục
vụ như một nguồn xung, cấp cho chế độ reset khi đang mở nguồn (Power-on Reset), hoặc đánh thức đưa hệ thống thoát khỏi chế độ sleep cho đến khi nguồn xung clock chính hoạt động trở lại
Thiết lập các lệnh mở rộng Họ PIC 18F đưa ra các lựa chọn mở rộng các lệnh thiết lập gồm 8 cấu trúc lệnh mới và một chế độ ghi địa chỉ offset đánh chỉ số bằng chữ Lựa
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 5chọn mở rộng này như một lựa chọn về cấu hình thiết bị, được thiết kế đặc biệt để tối ưu các mã chương trình của ngôn ngữ cấp cao như C
Khối CCP tăng cường Trong chế độ PWM, khối này cung cấp các ngõ ra điều chế 1,
2, 4 để điều khiển các driver cầu và bán cầu Các tính năng khác bao gồm chế độ auto shutdown để vô hiệu ngõ ra PWM theo ngắt hay theo các điều kiện khác Ngoài ra còn có chế độ auto-restart để kích hoạt lại ngõ ra PWM một khi điều kiện kể trên bị xóa
Khối USART tăng cường có khả năng lập địa chỉ Khối truyền thông nối tiếp này có khả năng hoạt động theo chuẩn RS-232 và cung cấp sự hỗ trợ cho giao thức bus LIN Tính năng tăng cường bao gồm nhận dạng tốc độ baud tự động, và một bộ tạo tốc độ baud 16-bit nhằm cải thiện độ phân giải khi truyền dữ liệu Khi vi điều khiển sử dụng bộ dao động nội thì EUSART sẽ vẫn hoạt động ổn định trên các ứng dụng mà không cần phải dùng đến dao động thạch anh bên ngoài
ADC 10-bit Khối này 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 và khởi xướng quá trình chuyển đổi mà không cần đợi chu kỳ lấy mẫu Do đó, tính năng này làm giảm bớt các mã có thể vượt quá giới hạn
chuyển đổi
Port ICD/ICSP dành riêng Port dành riêng này cung cấp việc sử dụng các chân sửa lỗi
và chân lập trình không tích hợp các chức năng khác của vi điều khiển Tính năng này cho phép người dùng phát triển các ứng dụng chuyên về I/O trong khi vẫn duy trì khả năng lập trình và sửa lỗi trên chip.
Trang 61.1.4 Sơ đồ khối PIC18F4550
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 71.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 là 10-bit Khối AD (Analog to Digital) gồm có 5 thanh ghi: ADRESH (AD Result High register), ADRESL (AD Result Low register), ADCON0 (AD Control register 0), ADCON1 và ADCON2
Sơ đồ khối bộ chuyển đổi ADC
Trang 8Các thanh ghi liên kết với bộ ADC
1.2 LM35
Cảm biến nhiệt độ LM35 là một loại cảm biến tương tự rất hay được ứng dụng trong
các ứng dụng đo nhiệt độ thời gian thực Vì nó hoạt động khá chính xác với sai số nhỏ, đồng thời với kích thước nhỏ và giá thành rẻ là một trong những ưu điểm của nó.
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 9Biểu đồ nhiệt độ và điện áp ngõ ra
Biểu đồ sai số ở các nhiệt độ khác nhau
Trang 10Biểu đồ liên hệ giữa điện trở và cường độ sáng
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 11CHƯƠNG 2: THIẾT KẾ MẠCH NGUYÊN LÝ
2.1 SƠ ĐỒ KHỐI
2.2 LƯU ĐỒ GIẢI THUẬT
Trang 12#define RS_PIN LATDbits.LATD0
#define TRIS_RS TRISDbits.TRISD0
#define RW_PIN LATDbits.LATD1
#define TRIS_RW TRISDbits.TRISD1
#define E_PIN LATDbits.LATD2
#define TRIS_E TRISDbits.TRISD2
Trang 13#define EIGHT_BIT 0b00111100 /* 8-bit
characters, multiple line: 0b00111000 */
#define putcXLCD WriteDataXLCD
unsigned char BusyXLCD(void);
unsigned char ReadAddrXLCD(void);
void WriteDataXLCD(PARAM_SCLASS char);
void putsXLCD(PARAM_SCLASS char *);
void putrsXLCD(const rom char *);
extern void DelayFor18TCY(void);
extern void DelayPORXLCD(void);
extern void DelayXLCD(void);
void DelayFor18TCY( void )
{ Delay10TCYx(2); // Delay of 5us
void displaylcd_l2 (unsigned int intval) {
unsigned int volt;
char o[10];
volt = ((intval*25)/255) ; itoa(volt,o);
if (volt > 9 & volt <= 99) {
Trang 14while(BusyXLCD()); // Wait if LCD busy
SetDDRamAddr(0x40); // Select line 2
putrsXLCD("Temp:");
itoa(v, out);
while(BusyXLCD());
if (v >99) {
if (v > 9 & v <= 99) {
if (v>= 0 & v <= 9) {
while(BusyXLCD());
WriteDataXLCD(0x20); while(BusyXLCD()); WriteDataXLCD(0x20);
WriteDataXLCD(out[0]);
while(BusyXLCD());
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 15void main( void ) {
Delay10KTCYx(250);
while(1) { ADCON1 = 0b00000000; // Vref = VDD ADCON0bits.CHS3 = 0;
Trang 16TRIS_RW = 0; // All control
signals made outputs
TRIS_RS = 0;
TRIS_E = 0;
RW_PIN = 0; // R/W pin made
low
RS_PIN = 0; // Register select
pin made low
E_PIN = 0; // Clock pin made
low // Delay for 15ms to allow for LCD
-
// Set data interface width, # lines, font while(BusyXLCD()); // Wait if LCD busy
WriteCmd8bit(FOUR_BIT & LINES_5X7);
// Function set cmdwhile(BusyXLCD());
WriteCmdXLCD(LINES_5X7);
// Turn the display on then off Delay10KTCYx(0x05);
// Wait if LCD busy
WriteCmdXLCD(DOFF&CURSOR_OFF&BLINK_OFF); // Display OFF/Blink OFF while(BusyXLCD()); // Wait if LCD busy
WriteCmdXLCD(DON&CURSOR_OFF&BLINK_OFF); // Display ON/Blink ON
// 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
Trang 17while(BusyXLCD()); //
Wait if LCD busy
WriteCmdXLCD(SHIFT_DISP_LEFT);
// Entry Mode // Set DD Ram address to 0
}void SetCGRamAddr(unsigned char CGaddr)
{ // Upper nibble interface
TRIS_DATA_PORT &= 0x0f; //
Make nibble input
DATA_PORT &= 0x0f; // and
write upper nibble
DATA_PORT |= ((CGaddr | 0b01000000) &
and address in DelayFor18TCY();
E_PIN = 0; DATA_PORT &= 0x0f;
// Write lower nibble
Make inputs return;
}void SetDDRamAddr(unsigned char DDaddr)
{ // 4-bit interface
// Upper nibble interface TRIS_DATA_PORT &= 0x0f; // Make port output
DATA_PORT &= 0x0f; // and write upper nibble
DATA_PORT |= ((DDaddr | 0b10000000) & 0xf0); RW_PIN = 0; // Set control bits RS_PIN = 0;
DATA_PORT |= ((DDaddr<<4)&0xf0); DelayFor18TCY();
E_PIN = 1; // Clock the cmd and address in
DelayFor18TCY();
E_PIN = 0;
// Upper nibble interface TRIS_DATA_PORT |= 0xf0; // Make port input
return;
}unsigned char BusyXLCD(void){ RW_PIN = 1; // Set the control bits for read
Trang 18char data; // Holds the data
retrieved from the LCD
// 4-bit interface
RW_PIN = 1; // Set control bits
for the read
E_PIN = 0; // Reset the clock DelayFor18TCY();
E_PIN = 1; // Clock out the lower nibble
DelayFor18TCY();
// Upper nibble interface data |= (DATA_PORT>>4)&0x0f; // Read the nibble into the lower nibble of data
// 4-bit interface RW_PIN = 1;
RS_PIN = 1;
DelayFor18TCY();
E_PIN = 1; // Clock the data out
of the LCD DelayFor18TCY();
// Upper nibble interface data = DATA_PORT&0xf0; // Read theupper nibble of data
E_PIN = 0; // Reset the clock line
DelayFor18TCY();
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 19E_PIN = 1; // Clock the next
nibble out of the LCD
DelayFor18TCY();
// Upper nibble interface
data |= (DATA_PORT>>4)&0x0f; // Read
the lower nibble of data
RW_PIN = 0; // Set control
signals for command
Trang 20buffer++; // Increment buffer }
WriteDataXLCD(*buffer); // Write character to LCD
buffer++; // Increment buffer }
return;
}
KHOA ĐIỆN TỬ - VIỄN THÔNG
Trang 24 Chỉ báo động có cháy khi nhiệt độ môi trường cao.
Chưa tối ưu linh kiện.
Giá thành còn cao
4.2 HƯỚNG PHÁT TRIỂN
Mạch được thiết kế với các jumper có thể cắm vào các chân port IC
Từ đó ta có thể nâng cấp mạch thêm nhiều tính năng cùng với sự đa năng của Pic18f4550 như:
-lưu dữ liệu nhiệt độ các ngày
-điều khiển các thiết bị
-giao tiếp với các board khác hoặc máy tính
TÀI LIỆU THAM KHẢO
[1] TS Văn Tấn Lượng -Ths Nguyễn Quốc Đán (2015) “Giáo trình kĩ thuật
vi xử lý”, đại học Sài Gòn.