Khóa luận Thiết kế mạch điều khiển thiết bị điện qua điện thoại di động

LỜI NÓI ĐẦU Ngày nay, ngành công nghệ thông tin đã đạt được những tiến bộ vượt bậc với sự ra đời của ngành công nghiệp phần cứng, cũng như phần mềm việc giải quyết các công việc giúp con người trở nên dễ dàng, thuận tiện và nhanh chóng. Cùng với sự phát triển của ngành công nghệ thông tin là sự phát triển mạnh mẽ của các hệ thống thông tin liên lạc, sự ra đời của các dịch vụ điện thoại mà cụ thể là điện thoại di động với ưu thế dễ dàng hoạt động khi di chuyển mọi lúc mọi nơi. Chính vì vậy ngoài việc dùng điện thoại để liên lạc một vấn đề được đặt ra là chúng ta có thể sử dụng điện thoại như một chiếc Remote để điều khiển các thiết bị điện từ xa. Từ yêu cầu trên và những kiến thức em được học ở trường em đã lựa chọn đề tài: “Điều khiển thiết bị điện điện sử dụng điện thoại di động.” Giới hạn đề tài: Việc thiết kế các ứng dụng của PIC với điện thoại di động, IC thu phát DTMF rất phong phú và phức tạp, do vậy trong đề tài này em tập trung giải quyết các vấn đề chính: Ø Thiết kế phần cứng điều khiển thiết bị điện thông qua IC MT8870. Ø Điều khiển bật/tắt thiết bị điện. Ø Hẹn giờ bật/tắt thiết bị điện. Hiển thị trên LCD mã điều khiển để kiểm tra MỤC LỤC MỤC LỤC 1 DANH MỤC CÁC HÌNH VẼ 5 DANH MỤC CÁC TỪ VIẾT TẮT 8 CHƯƠNG 1. 9 GIỚI THIỆU ĐỀ TÀI. 9 1.1 Ý tưởng bài toán. 9 1.2 Cấu tạo cơ bản và nguyên lý hoạt động của điện thoại 9 1.2.1 cấu tạo cơ bản. 9 1.2.2 Nguyên lý hoạt động. 10 1.3 Tín hiệu DTMF. 10 1.3.1 Định nghĩa. 10 1.3.2 KEYPAD 11 1.3.3 IC MT8870 thu tín hiệu DTMF. 13 CHƯƠNG 2. 19 TÌM HIỂU VI ĐIỀU KHIỂN PIC 16F877A 19 2.1 Giới thiệu PIC 16F877A 19 2.2 Các thành phần chính trong vi điều khiển PIC 16F877A 21 2.3 Tổ chức bộ nhớ. 23 2.3.1 Thanh ghi chức năng đặc biệt SFR 26 2.3.2 Thanh ghi mục đích chung GPR 27 2.3.3 Stack. 28 2.4 Các cổng xuất nhập của PIC16F877A 28 2.4.1 PORTA 29 2.4.2 PORTB 29 2.4.3 PORTC 30 2.4.4 PORTD 30 2.4.5 PORTE 30 2.5 Các bộ định thời 30 2.5.1 TIMER 0. 30 2.5.2 TIMER 1. 32 2.5.3 TIMER2. 34 2.6 ADC 36 2.7 NGẮT (INTERRUPT). 37 2.7.1 Ngắt INT 38 2.7.2 Ngắt do sự thay đổi trạng thái các Pin trong PORTB 39 2.7.3 Watchdog Timer (WDT). 39 2.7.4 Chế độ Sleep. 39 2.7.5 “Đánh thức” Vi điều khiển. 40 CHƯƠNG 3. 43 THIẾT KẾ MẠCH ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA ĐIỆN THOẠI DI ĐỘNG 43 3.1 Ý tưởng. 43 3.2 Sơ đồ khối của mạch. 43 3.3 Nguyên lý hoạt động. 45 3.3.1 Thực hiện đổi password. 45 3.3.2 Thực hiện bật tắt thiết bị điện. 46 3.3.3 Thực hiện hẹn giờ bật tắt thiết bị 47 3.4 Thiết kế phần cứng. 48 3.4.1 Thiết kế mạch nguyên lý. 48 3.4.2 Khối xử lý trung tâm 49 3.4.3 Khối thu và giải mã DTMF. 51 3.4.4 Khối hiển thị thông tin. 51 3.4.5 Khối nguồn nuôi 52 3.4.6 Khối điều khiển thiết bị điện. 53 3.4.7 Khối tín hiệu phản hồi 53 3.4.8 Mạch in thực tế sau khi thiết kế. 53 3.5 Thiết kế phần mềm 54 3.5.1 Lập trình cho PIC 54 3.5.2 Thuật toán điều khiển. 55 3.5.3 Giới thiệu về CCS. 55 3.5.4 Thuật toán điều khiển. 72 CHƯƠNG 4. 73 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI. 73 4.1 Đánh giá kết quả. 73 4.1.1 Tổng quan kết quả. 73 4.1.2 Mạch thực tế sau khi thiết kế và chạy thử. 73 4.2 Lý do chọn PIC 16F877A 74 4.3 Hướng phát triển đề tài 75 DANH MỤC CÁC TÀI LIỆU THAM KHẢO 77 CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 1.1 Ý tưởng bài toán Ngày nay, công nghệ điện thoại di động ngày một phát triển mạnh. Điện thoại trở thành một nhu cầu không thể thiếu được của con người trong nhịp sống hiện đại chiếc điện thoại gần như lúc nào cũng được chúng ta mang theo bên người. Bởi vậy ngoài khả năng nghe, gọi, nhắn tin, truy cập internet, giải trí vv thì một câu hỏi được đặt ra là: Có thể dùng điện thoại di động để điều khiển các thiết bị điện như Tủ lạnh, TV, điều hoà nhiệt độ, máy tính, lò vi sóng, quạt điện, đèn chiếu sáng, bình nóng lạnh .vv không? Trong thực tế cuộc sống có không ít lần chúng ta đi đến công ty hay đi ra ngoài mà quên không tắt máy tính, điều hoà, bình nóng lạnh vv và nhiều khi chúng ta phải trở về nhà chỉ để tắt các thiết bị này bởi nhiều lý do như: nguy cơ cháy nổ, nguy hiểm, hỏng hóc, tốn điện Trong những ngày mùa đông lạnh trước khi đi làm về chúng ta muốn có sẵn nước nóng để tắm cho thoải mái sau một ngày làm việc hay chúng ta muốn ngồi một chỗ để điều khiển công việc từ xa vv. Xuất phát từ những yêu cầu thực tế cuộc sống đề tài của em nghiên cứu thu tín hiệu DTMF từ điện thoại di động để từ đó giải mã và đưa ra được các tín hiệu điều khiển bật /tắt thiết bị điện.Với khả năng này chúng ta chỉ cần mang điện thoại ra và gọi điện nhập mã điều khiển là có thể yên tâm các thiết bị điện chúng ta đã ở trạng thái tắt/bật như ý muốn. 1.2 Cấu tạo cơ bản và nguyên lý hoạt động của điện thoại 1.2.1 cấu tạo cơ bản Gồm ba phần chính sau: Phần chuyển đổi mạch điện: Phần này gồm hệ thống lá mạ tiếp điểm và có nhiệm vụ đóng mở mạch điện khi có yêu cầu.Phần thu và phát tín hiệu gọi: Phần này gồm hai phần chính là máy điện quay tay có nhiệm vụ phát tín hiệu gọi lên đường truyền và phần chuông máy có nhiệm vụ biến dòng tín hiệu gọi thành tín hiệu gọi.Phần thu phát thoại: Gồm có loa và mic. Loa có nhiệm vụ biến đổi tín hiệu âm thanh thành tín hiệu điện và mic thì có nhiệm vụ ngược lại biến tín hiệu điện thành tín hiệu âm thanh. 1.2.2 Nguyên lý hoạt động Khi ta thực hiện cuộc gọi dao động âm thanh của tiếng nói sẽ tác động vào màng rung của mic làm xuất hiện dòng điện biến đổi tương ứng trong mạch. Dòng điện biến đổi này được truyền trên đường dây điện thoại và được chuyển mạch đến máy điện thoại được gọi, làm cho màng rung của loa dao động, lớp không khí trước màng sẽ dao động theo phát ra âm thanh tác động đến tai người nghe và quá trình truyền dẫn ngược lại cũng tương tự. 1.3 Tín hiệu DTMF 1.3.1 Định nghĩa DTMF(Dual Tone Multi Frequency): là tín hiệu gồm có hai tần số xếp trồng lên nhau. Mỗi tần số được lựa chọn sao cho có lợi cho việc thiết kế bộ lọc và dễ dàng truyền đi trên đường dây điện thoại có băng thông khoảng chừng 3,5KHz. DTMF phát ra là 1 tín hiệu âm thanh ghép của 2 tín hiệu trong dải tần số từ 697Hz đến 1633Hz. Phiên bản của DTMF sử dụng cho tín hiệu điện thoại được biết đến như hãng Touch-Tone, và được tiêu chuẩn hoá bởi ITU-T là Q.23. Tín hiệu DTMF có thể được phát hoặc thu bằng một IC chuyên dụng (VD: MTD887X). Hệ thống DTMF đang phát triển và trở thành phổ biến trong hệ thống điện thoại hiện nay. Hệ thống này được hình thành vào năm 1960 nhưng mãi đến năm 1970 mới được phát triển rộng rãi.

doc82 trang | Chia sẻ: lvcdongnoi | Ngày: 17/06/2013 | Lượt xem: 3707 | Lượt tải: 17download
Bạn đang xem nội dung tài liệu Khóa luận Thiết kế mạch điều khiển thiết bị điện qua điện thoại di động, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
khối chức năng sẽ được nhắc đến khi ta đề cập đến các khối chức năng đó. Thanh ghi STATUS (03h, 83h, 103h, 183h): thanh ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu. Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0. Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh): thanh ghi cho phép đọc và ghi, chứa các bit điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrput-on-change tại các chân của PORTB. Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức năng ngoại vi. Thanh ghi PIR1 (0Ch): chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1. Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM. Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2. Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của vi điều khiển. 2.3.2 Thanh ghi mục đích chung GPR Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSG (File Select Register). Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình. 2.3.3 Stack Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi. Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được vi điều khiển cất vào trong Stack. Khi một trong các lệnh RETURN, RETLW hat RETFIE được thực thi, giá trị PC sẽ tự động được lấy ra từ trong Stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng qui trình định trước. Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng. Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá trị 6 cất vào Stack lần thứ 2. Cần chú ý là không có cờ hiệu nào cho biết trạng thái Stack, do đó ta không biết được khi nào Stack tràn. Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ Stack sẽ hoàn toàn được điều khiển bởi CPU. 2.4 Các cổng xuất nhập của PIC16F877A Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương tác với thế giới bên ngoài. Sự tương tác này rất đa dạng và thông qua quá trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng. Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài. Chức năng của từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển được thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó. Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD và PORTE. 2.4.1 PORTA PORTA (RPA) bao gồm 6 I/O pin. Đây là các chân “hai chiều” (bidirectional pin), nghĩa là có thể xuất và nhập được. Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PORTA là input, ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương tự đối với các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là TRISA, đối với PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là TRISD và đối với PORTE là TRISE). Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port). Các thanh ghi SFR liên quan đến PORTA bao gồm: PORTA (địa chỉ 05h): chứa giá trị các pin trong PORTA. TRISA (địa chỉ 85h): điều khiển xuất nhập. CMCON (địa chỉ 9Ch): thanh ghi điều khiển bộ so sánh. CVRCON (địa chỉ 9Dh): thanh ghi điều khiển bộ so sánh điện áp. ADCON1 (địa chỉ 9Fh): thanh ghi điều khiển bộ ADC. 2.4.2 PORTB PORTB (RPB) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISB. Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình. Các thanh ghi SFR liên quan đến PORTB bao gồm: PORTB (địa chỉ 06h,106h): chứa giá trị các pin trong PORTB. TRISB (địa chỉ 86h,186h): điều khiển xuất nhập. OPTION_REG (địa chỉ 81h,181h): điều khiển ngắt ngoại vi và bộ Timer0. 2.4.3 PORTC PORTC (RPC) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART. Các thanh ghi điều khiển liên quan đến PORTC: PORTC (địa chỉ 07h): chứa giá trị các pin trong PORTC. TRISC (địa chỉ 87h): điều khiển xuất nhập. 2.4.4 PORTD PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là TRISD. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port). Các thanh ghi liên quan đến PORTD bao gồm: Thanh ghi PORTD: chứa giá trị các pin trong PORTD. Thanh ghi TRISD: điều khiển xuất nhập. Thanh ghi TRISE: điều khiển xuất nhập PORTE và chuẩn giao tiếp PSP. 2.4.5 PORTE PORTE (RPE) gồm 3 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISE. Các chân của PORTE có ngõ vào analog. Bên cạnh đó PORTE còn là các chân điều khiển của chuẩn giao tiếp PSP. Các thanh ghi liên quan đến PORTE bao gồm: PORTE: chứa giá trị các chân trong PORTE. TRISE: điều khiển xuất nhập và xác lập các thông số cho chuẩn PSP. ADCON: thanh ghi điều khiển khối ADC. 2.5 Các bộ định thời 2.5.1 TIMER 0 Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A. Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit. Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock. Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn. Bit TMR0IE (INTCON) là bit điều khiển của Timer0. TMR0IE=1 cho phép ngắt Timer0 tác động, TMR0IF= 0 không cho phép ngắt Timer0 tác động. Sơ đồ khối của Timer0 như sau: Hình 2.5: Sơ đồ khối của Timer 0 Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vào Timer0 bằng ¼ tần số oscillator). Khi giá trị thanh ghi TMR0 từ FFh trở về 00h, ngắt Timer0 sẽ xuất hiện. Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động. Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG). Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOCK1. Bit TOSE (OPTION_REG) cho phép lựa chọn cạnh tác động vào bộ đếm. Cạnh tác động sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1. Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON) sẽ được set. Đây chính là cờ ngắt của Timer0. Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thực hiện lại quá trình đếm. Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độ sleep. Bộ chia tần số (prescaler) được chia sẻ giữa Timer0 và WDT (Watchdog Timer). Điều đó có nghĩa là nếu prescaler được sử dụng cho Timer0 thì WDT sẽ không có được hỗ trợ của prescaler và ngược lại. Prescaler được điều khiển bởi thanh ghi OPTION_REG. Bit PSA (OPTION_REG) xác định đối tượng tác động của prescaler. Các bit PS2:PS0 (OPTION_REG) xác định tỉ số chia tần số của prescaler. Xem lại thanh ghi OPTION_REG để xác định lại một cách chi tiết về các bit điều khiển trên. Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler. Khi đối tượng tác động là Timer0, tác động lên giá trị thanh ghi TMR0 sẽ xóa prescaler nhưng không làm thay đổi đối tượng tác động của prescaler. Khi đối tượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngưng tác vụ hỗ trợ cho WDT. Các thanh ghi điều khiển liên quan đến Timer0 bao gồm: TMR0 (địa chỉ 01h, 101h): chứa giá trị đếm của Timer0. INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE). OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler. 2.5.2 TIMER 1 Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi (TMR1H:TMR1L). Cờ ngắt của Timer1 là bit TMR1IF (PIR1). Bit điều khiển của Timer1 sẽ là TMR1IE (PIE). Tương tự như Timer0, Timer1 cũng có hai chế độ hoạt động: chế độ định thời (timer) với xung kích là xung clock của oscillator (tần số của timer bằng ¼ tần số của oscillator) và chế độ đếm (counter) với xung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoài thông qua chân RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên). Việc lựa chọn xung tác động (tương ứng với việc lựa chọn chế độ hoạt động là timer hay counter) được điều khiển bởi bit TMR1CS (T1CON). Sau đây là sơ đồ khối của Timer1: Hình 2.6: Sơ đồ khối của Timer1 Ngoài ra, Timer1 còn có chức năng reset input bên trong được điều khiển bởi một trong hai khối CCP (Capture/Compare/PWM). Khi bit T1OSCEN (T1CON) được set, Timer1 sẽ lấy xung clock từ hai chân: RC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung đếm. Timer1 sẽ bắt đầu đếm sau cạnh xuống đầu tiên của xung ngõ vào. Khi đó PORTC sẽ bỏ qua sự tác động của hai bit TRISC và PORTC được gán giá trị 0. Khi clear bit T1OSCEN Timer1 sẽ lấy xung đếm từ oscillator hoặc từ chân RC0/T1OSO/T1CKI. Timer1 có hai chế độ đếm là đồng bộ (Synchronous) và bất đồng bộ (Asynchronous). Chế độ đếm được quyết định bởi bit điều khiển T1SYNC (T1CON). Khi T1SYNC = 1 xung đếm lấy từ bên ngoài sẽ không được đồng bộ hóa với xung clock bên trong, Timer1 sẽ tiếp tục quá trình đếm khi vi điều khiển đang ở chế độ sleep và ngắt do Timer1 tạo ra khi bị tràn có khả năng “đánh thức” vi điều khiển. Ở chế độ đếm bất đồng bộ, Timer1 không thể được sử dụng để làm nguồn xung clock cho khối CCP (Capture/Compare/Pulse width modulation). Khi T1SYNC = 0 xung đếm vào Timer1 sẽ được đồng bộ hóa với xung clock bên trong. Ở chế độ này Timer1 sẽ không hoạt động khi vi điều khiển đang ở chế độ sleep. Các thanh ghi liên quan đến Timer1 bao gồm: INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE). PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF). PIE1( địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE). TMR1L (địa chỉ 0Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1. TMR1H (địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1. T1CON (địa chỉ 10h): xác lập các thông số cho Timer1. 2.5.3 TIMER2 Timer2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần số prescaler và postscaler. Thanh ghi chứa giá trị đếm của Timer2 là TMR2. Bit cho phép ngắt Timer2 tác động là TMR2ON (T2CON). Cờ ngắt của Timer2 là bit TMR2IF (PIR1). Xung ngõ vào (tần số bằng ¼ tần số oscillator) được đưa qua bộ chia tần số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và được điều khiển bởi các bit T2CKPS1:T2CKPS0 (T2CON). Hình 2.7: Sơ đồi khối của Timer2 Timer2 còn được hỗ trợ bởi thanh ghi PR2. Giá trị đếm trong thanh ghi TMR2 sẽ tăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về 00h. Khi reset thanh ghi PR2 được nhận giá trị mặc định FFh. Ngõ ra của Timer2 được đưa qua bộ chia tần số postscaler với các mức chia từ 1:1 đến 1:16. Postscaler được điều khiển bởi 4 bit T2OUTPS3:T2OUTPS0. Ngõ ra của postscaler đóng vai trò quyết định trong việc điều khiển cờ ngắt. Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 còn đóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP. Các thanh ghi liên quan đến Timer2 bao gồm: INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE và PEIE). PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer2 (TMR2IF). PIE1 (địa chị 8Ch): chứa bit điều khiển Timer2 (TMR2IE). TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2. T2CON (địa chỉ 12h): xác lập các thông số cho Timer2. PR2 (địa chỉ 92h): thanh ghi hỗ trợ cho Timer2. Ta có một vài nhận xét về Timer0, Timer1 và Timer2 như sau: Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là bộ đếm 16 bit (giá trị đếm tối đa là FFFFh). Timer0, Timer1 và Timer2 đều có hai chế độ hoạt động là timer và counter. Xung clock có tần số bằng ¼ tần số của oscillator. Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độ khác nhau (tần số tác động, cạnh tác động) trong khi các thông số của xung tác động lên Timer1 là cố định. Timer2 được hỗ trợ bởi hai bộ chia tần số prescaler và postcaler độc lập, tuy nhiên cạnh tác động vẫn được cố định là cạnh lên. Timer1 có quan hệ với khối CCP, trong khi Timer2 được kết nối với khối SSP. Một vài so sánh sẽ giúp ta dễ dàng lựa chọn được Timer thích hợp cho ứng dụng. 2.6 ADC ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương tự và số. PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thế chuẩn được xác lập trên hai chân RA2 và RA3. Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghi ADRESH:ADRESL, bit (ADCON0) được xóa về 0 và cờ ngắt ADIF được set. Qui trình chuyển đổi từ tương tự sang số bao gồm các bước sau: Thiết lập các thông số cho bộ chuyển đổi ADC. Chọn ngõ vào analog, chọn điện áp mẫu (dựa trên các thông số của thanh ghi ADCON1) Chọn kênh chuyển đổi AD (thanh ghi ADCON0). Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0). Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0). Thiết lập các cờ ngắt cho bộ AD. Clear bit ADIF. Set bit ADIE. Set bit PEIE. Set bit GIE. Đợi cho tới khi quá trình lấy mẫu hoàn tất. Bắt đầu quá trình chuyển đổi (set bit GO/DONE ). Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách: Kiểm tra bit GO/DONE . Nếu GO/DONE =0, quá trình chuyển đổi đã hoàn tất. Kiểm tra cờ ngắt. Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit GO/DONE (nếu cần tiếp tục chuyển đổi). Tiếp tục thực hiện các bước 1 và 2 cho quá trình chuyển đổi tiếp theo. Hình 2.8: Sơ đồ khối bộ chuyển đổi ADC 2.7 NGẮT (INTERRUPT) PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuộc vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2. Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy ra. Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt. Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên được xử lí bằng chương trình để tránh hiện tượng trên xảy ra. Hình 2.9: Sơ đồ logic của tất cả các ngắt trong PIC16F877A 2.7.1 Ngắt INT Ngắt này dựa trên sự thay đổi trạng thái của pin RB0/INT. Cạnh tác động gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTION_ REG ). Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE. Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thi. 2.7.2 Ngắt do sự thay đổi trạng thái các Pin trong PORTB Các pin PORTB được dùng cho ngắt này và được điều khiển bởi bit RBIE (thanh ghi INTCON). Cờ ngắt của ngắt này là bit RBIF (INTCON). 2.7.3 Watchdog Timer (WDT) Watchdog timer (WDT) là bộ đếm độc lập dùng nguồn xung đếm từ bộ tạo xung được tích hợp sẵn trong vi điều khiển và không phụ thuộc vào bất kì nguồn xung clock ngoại vi nào. Điều đó có nghĩa là WDT vẫn hoạt động ngay cả khi xung clock được lấy từ pin OSC1/CLKI và pin OSC2/CLKO của vi điều khiển ngưng hoạt động (chẳng hạn như do tác động của lệnh sleep). Bit điều khiển của WDT là bit WDTE nằm trong bộ nhớ chương trình ở địa chỉ 2007h (Configuration bit). WDT sẽ tự động reset vi điều khiển (Watchdog Timer Reset) khi bộ đếm của WDT bị tràn (nếu WDT được cho phép hoạt động), đồng thời bit TO tự động được xóa. Nếu vi điều khiển đang ở chế độ sleep thì WDT sẽ đánh thức vi điều khiển (Watchdog Timer Wake-up) khi bộ đếm bị tràn. Như vậy WDT có tác dụng reset vi điều khiển ở thời điểm cần thiết mà không cần đến sự tác động từ bên ngoài, chẳng hạn như trong quá trình thực thi lệnh, vi điều khiển bị “kẹt” ở một chỗ nào đó mà không thoát ra được, khi đó vi điều khiển sẽ tự động được reset khi WDT bị tràn để chương trình hoạt động đúng trở lại. Tuy nhiên khi sử dụng WDT cũng có sự phiền toái vì vi điều khiển sẽ thường xuyên được reset sau một thời gian nhất định, do đó cần tính toán thời gian thích hợp để xóa WDT (dùng lệnh CLRWDT). Và để việc ấn định thời gian reset được linh động, WDT còn được hỗ trợ một bộ chia tần số prescaler được điều khiển bởi thanh ghi OPTION_REG (prescaler này được chia sẻ với Timer0). Một điểm cần chú ý nữa là lệnh sleep sẽ xóa bộ đếm WDT và prescaler. Ngoài ra lệnh xóa CLRWDT chỉ xóa bộ đếm chứ không làm thay đổi đối tượng tác động của prescaler (WDT hay Timer0). 2.7.4 Chế độ Sleep Đây là chế độ hoạt động của vi điều khiển khi lệnh SLEEP được thực thi. Khi đó nếu được cho phép hoạt động, bộ đếm của WDT sẽ bị xóa nhưng WDT vẫn tiếp tục hoạt động, bit (STATUS) được reset về 0, bit được set, oscillator ngưng tác động và các PORT giữ nguyên trạng thái như trước khi lệnh SLEEP được thực thi. Do khi ở chế độ SLEEP, dòng cung cấp cho vi điều khiển là rất nhỏ nên ta cần thực hiện các bước sau trước khi vi điều khiển thực thi lệnh SLEEP: Đưa tất cả các pin về trạng thái VDD hoặc VSS. Cần bảo đảm rằng không có mạch ngoại vi nào được điều khiển bởi dòng điện của vi điều khiển vì dòng điện nhỏ không đủ khả năng cung cấp cho các mạch ngoại vi hoạt động. Tạm ngưng hoạt động củ khối A/D và không cho phép các xung clock từ bên ngoài tác động vào vi điều khiển. Để ý đến chức năng kéo lên điện trở ở PORTB. Pin phải ở mức logic cao. 2.7.5 “Đánh thức” Vi điều khiển Vi điều khiển có thể được “đánh thức” dưới tác động của một trong số các hiện tượng sau: Tác động của reset ngoại vi thông qua pin . Tác động của WDT khi bị tràn. Tác động từ các ngắt ngoại vi từ PORTB (PORTB Interrupt on change hoặc pin INT). Các bit và được dùng để thể hiện trạng thái của vi điều khiển và để phát hiện nguồn tác động làm reset vi điều khiển. Bit được set khi vi điều khiển được cấp nguồn và được reset về 0 khi vi điều khiển ở chế độ sleep. Bit được reset về 0 khi WDT tác động do bộ đếm bị tràn. Ngoài ra còn có một số nguồn tác động khác từ các chức năng ngoại vi bao gồm: Đọc hay ghi dữ liệu thông qua PSP (Parallel Slave Port). Ngắt Timer1 khi hoạt động ở chế độ đếm bất đồng bộ. Ngắt CCP khi hoạt động ở chế độ Capture. Các hiện tượng đặc biệt làm reset Timer1 khi hoạt động ở chế độ đếm bất đồng bộ dùng nguồn xung clock ở bên ngoài). Ngắt SSP khi bit Start/Stop được phát hiện. SSP hoạt động ở chế độ Slave mode khi truyền hoặc nhận dữ liệu. Tác động của USART từ các pin RX hay TX khi hoạt động ở chế độ Slave mode đồng bộ. Khối chuyển đổi A/D khi nguồn xung clock hoạt động ở dạng RC. Hoàn tất quá trình ghi vào EEPROM. Ngõ ra bộ so sánh thay đổi trạng thái. Các tác động ngoại vi khác không có tác dụng đánh thức vi điều khiển vì khi ở chế độ sleep các xung clock cung cấp cho vi điều khiển ngưng hoạt động. Bên cạnh đó cần cho phép các ngắt hoạt động trước khi lệnh SLEEP được thực thi để bảo đảm tác động của các ngắt. Việc đánh thức vi điều khiển từ các ngắt vẫn được thực thi bất chấp trạng thái của bit GIE. Nếu bit GIE mang giá trị 0, vi điều khiển sẽ thực thi lệnh tiếp theo sau lệnh SLEEP của chương trình (vì chương trình ngắt không được cho phép thực thi). Nếu bit GIE được set trước khi lệnh SLEEP được thực thi, vi điều khiển sẽ thực thi lệnh tiếp theo của chương trình và sau đó nhảy tới địa chỉ chứa chương trình ngắt (0004h). Trong trường hợp lệnh tiếp theo không đóng vai trò quan trọng trong chương trình, ta cần đặt thêm lệnh NOP sau lệnh SLEEP để bỏ qua tác động của lệnh này, đồng thời giúp ta dễ dàng hơn trong việc kiểm soát hoạt động của chương trình ngắt. Tuy nhiên cũng có một số điểm cần lưu ý như sau: Nếu ngắt xảy ra trước khi lệnh SLEEP được thực thi, lệnh SLEEP sẽ không được thực thi và thay vào đó là lệnh NOP, đồng thời các tác động của lệnh SLEEP cũng sẽ được bỏ qua. Nếu ngắt xảy ra trong khi hay sau khi lệnh SLEEP được thực thi, vi điều khiển lập tức được đánh thức từ chế độ sleep, và lệnh SLEEP sẽ được thực thi ngay sau khi vi điều khiển được đánh thức. Để kiểm tra xem lệnh SLEEP đã được thực thi hay chưa, ta kiểm tra bit . Nếu bit vẫn mang giá trị 1 tức là lệnh SLEEP đã không được thực thi và thay vào đó là lệnh NOP. Bên cạnh đó ta cần xóa WDT để chắc chắn rằng WDT đã được xóa trước khi thực thi lệnh SLEEP, qua đó cho phép ta xác định được thời điểm vi điều khiển được đánh thức do tác động của WDT. CHƯƠNG 3 THIẾT KẾ MẠCH ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA ĐIỆN THOẠI DI ĐỘNG 3.1 Ý tưởng Thiết kế mạch điều khiển qua điện thoại di động có chức năng thực hiện điều khiển đóng ngắt thiết bị điện từ xa thông qua điện thoại di động. Hệ thống được thiết kế gồm 5 khối: Khối điện thoại thu sử dụng điện thoại Nokia 1200 hoặc 1202. Khối thu và giải mã DTMF sử dụng IC MT8870. Khối xử lý trung tâm sử dụng PIC 16F877A. Khối hiển thị sử dụng LCD 1602. Khối điều khiển thiết bị sử dụng Relay 12VDC để đóng/ cắt thiết bị. Khối tín hiệu phản hồi sử dụng Speaker 5V. Hệ thống điều khiển được thiết kế có thể đóng/ ngắt được 4 thiết bị điện và hoàn toàn có thể nâng cấp lên điều khiển được nhiều thiết bị hơn. 3.2 Sơ đồ khối của mạch Khối thu và giải mã DTMF Điện thoại thu Audio GND Khối điều khiển thiết bị Khối xử lý trung tâm StD/Q1÷Q4 Khối hiển thị Tín hiệu phản hồi Hình 3.1: Sơ đồ khối của mạch. Chức năng của từng khối: Khối xử lý trung tâm: vi điều khiển PIC 16F877A điều khiển toàn bộ hoạt động của mạch: nhận dữ liệu giải mã DTMF từ bộ giải mã. DTMF(MT8870) kiểm tra password và hiển thị password lên màn hình LCD sau đó đưa ra tín hiệu điều khiển bật /tắt (hẹn giờ bật /tắt) thiết bị điện. Khối thu và giải mã DTMF: Khối này có nhiệm vụ nhận tín hiệu DTMF từ điện thoại di động thu và sau đó giải mã thành mã nhị phân 4 bit đưa vào khối xử lý trung tâm. Khối hiển thị: Là màn hình tinh thể lỏng LCD (2 dòng, mỗi dòng 16 kí tự) để hiển thị password mà người điều khiển bấm từ điện thoại điều khiển. Đồng thời cho biết password mà người điều khiển vừa bấm là đúng hay sai, trạng thái của bộ điều khiển là đang điều khiển thiết bị hay đang thay đổi password hệ thống. Khối nguồn nuôi: Là khối cơ bản nhất nó cung cấp dòng nuôi cho toàn bộ linh kiện trong mạch. Nó tạo ra điện áp ổn định thoả mãn các chỉ số về điện áp và dòng . Khối bật tắt thiết bị điện: Là khối sử dụng Relay để đóng /ngắt mạch hoạt động của các thiết bị điện khối này nhận tín hiệu từ VĐK PIC 16F877A. Khối tín hiệu phản hồi: Là khối báo hiệu các trạng thái điều khiển của mạch điều khiển. Khi đăng nhập thành công hay thất bại, điều khiển bật/tắt thiết bị thì hệ thống đều đưa ra tín hiệu âm thanh để người điều khiển khẳng định được lệnh điều khiển là đúng hay sai và “việc điều khiển thiết bị có thực hiện được hay không ?”. 3.3 Nguyên lý hoạt động Mạch điều khiển được ghép với đường Audio, GND của điện thoại di động thu với đề tài này em sử dụng điện thoại Nokia 1200. Mạch có chức năng như sau: + Điều khiển bật /tắt các thiết bị điện. + Hẹn giờ bật /tắt thiết bị điện. + Hiển thị mã điều khiển để kiểm tra. Để điều khiển được các thiết bị điện thì đầu tiên người điều khiển phải gọi điện tới số máy nơi lắp đặt mạch điều khiển. Điện thoại được gọi, được mắc với mạch điều khiển qua đường Audio và Gnd (thiết bị muốn điều khiển on/off được mắc vào mạch điều khiển). Sau một thời gian nhất định thì điện thoại tự động nhấc máy. Người điều khiển phải cài đặt tính thời gian gọi trên điện thoại điều khiển để biết được điện thoại thu đã nhấc máy (Nhìn thấy giây đồng hồ bắt đầu chạy tức là đầu bên kia đã nhấc máy). Sau đó người điều khiển sẽ nhấn mã password để đăng nhập vào hệ thống điều khiển và đưa ra lệnh điều khiển các thiết bị thông qua các mã điều khiển đã được quy định trước. Các trạng thái điều khiển gồm có: + Thay đổi password đăng nhập hệ thống. + Bật /tắt thiết bị điện. + Hẹn giờ bật/ tắt thiết bị điện. 3.3.1 Thực hiện đổi password Gọi tới số máy điện thoại mắc với mạch điều khiển thiết bị sau khi đã thông thoại thì người điều khiển nhấn 1123456# (password 123456 này có thể thay đổi). Người điều khiển buộc phải nhập password này thì hệ thống mới cho phép thay đổi password. Sau khi đăng nhập thành công thì Speaker sẽ phát ra 1 tiếng kêu bip báo hiệu đăng nhập thành công(nếu đăng nhập thất bại thì Speaker phản hồi là 2 tiếng bip hệ thống được Reset và người điều khiển phải thực hiện lại quá trình đăng nhập từ đầu). Tiếp đó người điều khiển sẽ nhập mã 2 (mã đổi password) tiếp theo mã 2 là 6 ký tự mật khẩu mới rồi nhấn # để kết thúc. Sau khi đổi password thành công thì Speaker sẽ phản hồi lại bằng 1 tiếng bip. Nếu đổi password thất bại thì Speaker sẽ phản hồi lại bằng 2 tiếng bip và hệ thống được Reset lúc này người điều khiển phải đăng nhập lại từ đầu và thực hiện lại tất cả các bước trên. Cụ thể: Khi người điều khiển nhấn mã như sau: 1 123456 # để đăng nhập sau đó nhấn 2 658856 # thì lúc này hệ thống sẽ tự cập nhật mật khẩu mới để đăng nhập vào hệ thống là 658856. 1 : là ký tự quy định cho việc đăng nhập trước khi đổi password. 123456 : là password cho phép đăng nhập vào hệ thống. Sau khi đăng nhập password này thì mới được phép đổi mật khẩu. 2 : là ký tự quy định việc bắt đầu đổi password sau ký tự 2 là password mới. 658856 : là 6 ký tự của password mới. # : là báo kết thúc việc nhập password. 3.3.2 Thực hiện bật tắt thiết bị điện Để bật /tắt được thiết bị thì trước tiên người điều khiển phải nhập password để đăng nhập vào hệ thống bắt đầu là mã 1 sau mã 1 là 6 ký tự password rồi nhấn # sau đó nhập vào mã 3(mã quy định cho việc bật/tắt thiết bị ) sau mã 3 là mã thiết bị và mã trạng thái bật hoặc tắt. Cụ thể: Để bật thiết bị 1 thì người điều khiển nhập mã như sau: 1 658856 # 3 1 1 # Trong đó: 1 : là ký tự quy định việc đăng nhập để điều khiển bật /tắt thiết bị điện. 658856 : là password đăng nhập điều khiển bật /tắt thiết bị điện. # : kết thúc việc nhập password đăng nhập. 3 : là ký tự quy định cho trạng thái bật/tắt thiết bị điện. 1 : là là thiết bị 1. 1 : là quy định bật thiết bị # : kết thúc việc ra lệnh điều khiển bật/tắt thiết bị điện. Như vậy: Để tắt thiết bị 1 ta nhập mã như sau: 1658856# 310# Để bật thiết bị 2 ta nhập mã: 1658856# 321# Để tắt thiết bị 2 ta nhập mã: 1658856# 320# Để bật thiết bị 3 ta nhập mã: 1658856# 331# Để tắt thiết bị 3 ta nhập mã: 1658856#330# Trong quá trình đăng nhập nếu đăng nhập thành công thì Speaker phát ra 1 tiếng kêu bip(nếu đăng nhập thất bại thì Speaker phản hồi bằng 2 tiếng kêu bip và hệ thống được Reset người điều khiển phải đăng nhập lại từ đầu). + Nếu thiết bị được bật thì Speaker phản hồi lại bằng 1 tiếng Bip. + Nếu thiết bị được tắt thì Speaker phản hồi lại bằng 2 tiếng Bip. + Nếu nhấn sai mã thì Speaker phản hồi bằng 1 tiếng Bip dài và hệ thống được reset lúc này người điều khiển phải thực hiện lại các bước từ đầu nếu vẫn muốn tiếp tục điều khiển. 3.3.3 Thực hiện hẹn giờ bật tắt thiết bị Để hẹn giờ bật/tắt thiết bị điện thì sau khi đã đăng nhập bằng password đăng nhập hệ thống( 1658856#) người điều khiển nhập mã 4, sau mã 4 là bốn ký tự quy định mốc thời gian (giờ, phút) để kết thúc việc bật hay tắt thiết bị. Cụ thể nếu người điều khiển nhập mã như sau: 3 0306 0420 0545 1655 # Trong đó: 3 : là ký tự quy định việc hẹn giờ bật rồi tắt thiết bị điện. 0306 : là thời gian hẹn giờ (3 giờ 06 phút) ứng với thiết bị 1. 0420 : là thời gian hẹn giờ (4 giờ 20 phút) ứng với thiết bị 2. 0545 : là thời gian hẹn giờ (5 giờ 45 phút) ứng với thiết bị 3. 1655 : là thời gian hẹn giờ (16 giờ 55 phút) ứng với thiết bị 4. Sau việc nhập mã (3 0306 0420 0545 1655 #) thì trạng thái điều khiển các thiết bị như sau: + Thiết bị 1 được bật đến thời gian là 3 giờ 6 phút thì tắt. + Thiết bị 2 được bật đến thời gian là 4 giờ 20 phút thì tắt. + Thiết bị 3 được bật đến thời gian là 5 giờ 45 phút thì tắt. + Thiết bị 4 được bật đến thời gian là 16 giờ 55 phút thì tắt. Trong quá trình đăng nhập nếu đăng nhập thành công thì Speaker phát ra 1 tiếng kêu bip(nếu đăng nhập thất bại thì Speaker phản hồi bằng 2 tiếng kêu bip và reset lại hệ thống người điều khiển phải đăng nhập lại từ đầu). Nếu một thiết bị được bật thì Speaker phản hồi bằng 1 tiếng kêu bip ngược lại nếu điều khiển sai thì Speaker phản hồi bằng 1 tiếng Bip dài. Hệ thống được Reset và người điều khiển phải thực hiện lại các bước từ đầu. 3.4 Thiết kế phần cứng 3.4.1 Thiết kế mạch nguyên lý Dựa trên sơ đồ khối mạch nguyên lý được thiết kế tổng thể trên 5 khối. Hình 3.2: Sơ đồ mạch nguyên lý hệ thống 3.4.2 Khối xử lý trung tâm Khối xử lý trung tâm là vi điều khiển PIC16F877A, là IC có 40 chân, với 5 cổng vào ra là Port A(RA0÷RA5), Port B(RB0÷RB7), Port C(RC0÷RC7), Port D(RD0÷RD7), Port E(RE0÷RE2). Nó có 8K Flash ROM và 368 Byte RAM. Sơ đồ chi tiết như sau: Hình 3.3: Sơ đồ nguyên lý của PIC16F877A trong mạch Chân RESET là chân số 1 của PIC (chân MCLR) PIC sẽ reset khi chân này ở mức thấp. Bộ dao động thạch anh (8 MHz) được nối với chân 13 và 14 của vi điều khiển, bộ dao động có thêm tụ 22p tăng sự ổn định cho nguồn xung nhịp của hệ thống. PIC được cấp nguồn qua hai cặp chân VSS và VDD. Hai cặp chân VSS là chân 12 và 31 nối đất còn hai cặp chân VDD là chân 11 và 32 nối lên nguồn +5V do bộ nguồn nuôi cung cấp. Các cổng của PortD (từ RD0 đến RD7, RD3 không dùng) nối đến LCD. Các cổng của PortC (từ RC0 đến RC3) là lối vào của tín hiệu DTMF đã được mã hoá thành mã nhị phân 4 bit. Các cổng RA và RE được nối với Jump để cắm với Board mạch điều khiển thiết bị điện và Speaker 3.4.3 Khối thu và giải mã DTMF Giải mã DTMF được thực hiện bằng vi mạch chuyên dụng IC MT8870 nhờ thế mà việc giải mã trở nên đơn giản hơn. Sơ đồ nguyên lý kết nối của IC MT8870 trong mạch được trình bày như hình dưới: Hình 3.4: Sơ đồ nguyên lý kết nối trong mạch của IC MT8870. 3.4.4 Khối hiển thị thông tin Sử dụng màn hình tinh thể lỏng LCD (Liquid Crytal Display) loại 2 dòng, 16 kí tự LCD1602. Màn hình LCD đã rất phổ biến trên thị trường và việc lập trình cho nó rất đơn giản thêm vào đó là nó có mặt thẩm mĩ rất cao. Sử dụng nguồn nuôi thấp (từ 2, 5 đến 5V). Có thể hoạt động ở hai chế độ 4 bit hoặc 8 bit (trong đề tài này em sử dụng chế độ 4 bit). Hình 3.5: Sơ đồ nguyên lý kết nối của LCD1602 trong mạch điện LCD1602 được ghép nối với vi điều khiển thông qua PortD (RD0 đến RD7 Không sử dụng RD3). RD0 nối với chân E, RD1 nối với chân RS, RD2 nối với chân R/W là chân đọc ghi dữ liệu và chân RD4 đến RD7 là chân dữ liệu vào. 3.4.5 Khối nguồn nuôi Dùng IC 7805 để tạo nguồn +5V ổn định cấp toàn mạch cho mạch. Sơ đồ nguyên lý như hình dưới: Hình 3.6: Sơ đồ nguyên lý nguồn nuôi của mạch 3.4.6 Khối điều khiển thiết bị điện Hình 3.7 : Sơ đồ nguyên lý khối đóng ngắt thiết bị điện. Khối điều khiển thiết bị điện sử dụng Relay để đóng/ ngắt mạch điện khối công suất này nhận lệnh điều khiển từ VĐK PIC 16F877A. 3.4.7 Khối tín hiệu phản hồi Hình 3.8: Sơ đồ nguyên lý khối tín hiệu phản hồi Khối tín hiệu phản hổi nhận tín hiệu từ VĐK khiển để đưa ra các âm thanh phản hồi ứng với trạng thái của hệ thống. 3.4.8 Mạch in thực tế sau khi thiết kế Dựa trên sơ đồ nguyên lí mạch in được thiết kế 1 lớp có diện tích 7x15 cm. Hình 3.9: Sơ đồ mạch in thực tế sau thiết kế 3.5 Thiết kế phần mềm 3.5.1 Lập trình cho PIC Việc lập trình cho PIC 16F877A sử dụng ngôn ngữ C chuẩn, viết bằng phần mềm CCS PIC C Compiler phiên bản 3.249. Phần mềm CCS hỗ trợ một thư viện với khá nhiều hàm con nên việc lập trình trở nên dễ dàng hơn. Giao diện của phần mềm khá đẹp và có thể sử dụng một cách dễ dàng. Thêm vào đó CCS cung cấp một trang web có code chuẩn để tham khảo: ccsinfo.com/forum . 3.5.2 Thuật toán điều khiển Giao diện của PIC C Compiler Hình 3.10: Giao diện của PIC C Compiler 3.5.3 Giới thiệu về CCS CCS là trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC của hãng Microchip. Chương trình là sự tích hợp của 3 trình biên dịch riêng biệt cho 3 dòng PIC khác nhau đó là: ‐ PCB cho dòng PIC 12‐bit opcodes ‐ PCM cho dòng PIC 14‐bit opcodes ‐ PCH cho dòng PIC 16 và 18‐bit Tất cả 3 trình biên dịch này đuợc tích hợp lại vào trong một chương trình bao gồm cả trình soạn thảo và biên dịch là CCS. Giống như nhiều trình biên dịch C khác cho PIC, CCS giúp cho người sử dụng nắm bắt nhanh được vi điều khiển PIC và sử dụng PIC trong các dự án. Các chương trình diều khiển sẽ được thực hiện nhanh chóng và đạt hiệu quả cao thông qua việc sử dụng ngôn ngữ lạp trình cấp cao ngôn ngữ C. Tạo PROJECT đầu tiên trong CCS Để tạo một Project trong CCS có nhiều cách, có thể dùng Project Wizard, Manual Creat, hay đơn giản là tạo một Files mới và thêm vào đó các khai báo ban đầu cần thiết và “bắt buộc”. Trước hết, bạn khởi động chương trình làm việc PIC C Compiler. Từ giao diện chương trình di chuột chọn Project ‐> New ‐> PIC Wizard nhấn nút trái chuột chọn. Hình 3.11: Tạo Project bằng PIC Wizard Sau khi nhấn chuột, một cửa sổ hiện ra yêu cầu nhập tên Files cần tạo, tạo một thư mục mới, vào thư mục đó và lưu tên files cần tạo tại đây. Hình 3.12: Cửa sổ Save As Sau khi nhấn nút Save, một cửa sổ New Project hiện ra. Trong của sổ này bao gồm rất nhiều Tab, mỗi Tab mô tả về một vài tính năng của con PIC. Ta sẽ chọn tính năng sử dụng tại các Tab tương ứng Tab General Tab General cho phép lựa chọn loại PIC mà ta sử dụng và một số lựa chọn khác như chọn tần số thạch anh dao động, thiết lập các bit CONFIG nhằm thiết lập chế độ hoạt động cho PIC. Hình 3.13: Tab General ‐ Device: Liệt kê danh sách các loại PIC 12F, 16F, 18F… Chọn tên Vi điều khiển. PIC mà ta sử dụng trong dự án. Lấy ví dụ ta chọn PIC16F877A. ‐ Oscilator Frequency: Tần số thạch anh sử dụng, chọn 20 MHz (tùy từng loại) ‐ Fuses: Thiết lập các bit Config như: Chế độ dao động (HS, RC, Internal ), chế độ bảo vệ Code, Brownout detected… ‐ Chọn kiểu con trỏ RAM là 16‐bit hay 8‐bit. Tab Communications Tab Communications liệt kê các giao tiếp nối tiếp mà một con PIC hỗ trợ, thường là RS232 và I2C, cùng với các lựa chọn để thiết lập chế độ hoạt động cho từng loại giao tiếp. Giao tiếp RS232 Mỗi một Vi điều khiển PIC hỗ trợ một cổng truyền thông RS232 chuẩn. Tab này cho phép ta lựa chọn chân Rx, Tx, tốc độ Baud, Data bit, Bit Parity… Giao tiếp I2C Để sử dụng I2C ta tích vào nút chọn Use I2C, khi đó ta có các lựa chọn: Chân SDA, SCL, Tốc độ truyền (Fast ‐ Slow), chế độ Master hay Slave, địa chỉ cho Slave. Hình 3.14: Tab Communications Tab SPI and LCD. Tab này liệt kê cho người dùng các lựa chọn đối với giao tiếp nối tiếp SPI, chuẩn giao tiếp tốc độ cao mà PIC hỗ trợ về phần cứng. Chú ý khi ta dùng I2C thì không thể dùng SPI và ngược lại. Để có thể sử dụng cả hai giao tiếp này cùng một lúc thì buộc một trong 2 giao tiếp phải lập trình bằng phần mềm (giồng như khi dùng I2C cho các chip AT8051, không có hỗ trợ phần cứng SSP). Phần cấu hình cho LCD dành cho các chíp dòng 18F và 30F. Hình 3.15: Tab SPI and LCD. Tab Timer Liệt kê các bộ đếm/định thời mà các con PIC dòng Mid‐range có: Timer0, timer1, timer2, WDT Trong các lựa chọn cấu hình cho các bộ đếm/định thời có: chọn nguồn xung đồng hồ (trong/ngoài), khoảng thời gian xảy ra tràn… Hình 3.16: Tab Timer Tab Analog Liệt kê các lựa chọn cho bộ chuyển đổi tương tự/số (ADC) của PIC. Tùy vào từng IC cụ thể mà có các lựa chọn khác nhau, bao gồm: ‐ Lựa chọn cổng vào tương tự. ‐ Chọn chân điện áp lấy mẫu (Vref) ‐ Chọn độ phân giải: 8‐bit = 0 ~ 255 hay 10‐bit = 0~1023 ‐ Nguồn xung đồng hồ cho bộ ADC (trong hay ngoài), từ đó mà ta có được tốc độ lấy mẫu, thường ta chọn là internal 2‐6 us. ‐ Khi không sử dụng bộ ADC ta chọn none. Hình 3.17: Tab Analog Tab Other Tab này cho phép thiết lập các thông số cho các bộ Capture/Comparator/PWM. Capture Bắt giữ Chọn bắt giữ xung theo sườn dương (rising edge) hay sườn âm (falling edge) của xung vào. Chọn bắt giữ sau 1, 4 hay 16 xung (copy giá trị của TimerX vào thanh ghi lưu trữ CCCPx sau 1, 4 hay 16 xung). Compare ‐ So sánh Ta có các lựa chọn thực hiện lệnh khi xảy ra bằng nhau giữa 2 đối tượng so sánh là giá trị của Timer1 với giá trị lưu trong thanh ghi để so sánh. Bao gồm: Thực hiện ngắt và thiết lập mức 0 Thực hiện ngắt và thiết lập mức 1 Thực hiện ngắt nhưng không thay đổi trạng thái của chân PIC. Đưa Timer1 về 0 nhưng không thay đổi trạng thái chân. PWM ‐ Điều chế độ rộng xung Lựa chọn về tần số xung ra và duty cycle. Ta có thể lựa chọn sẵn hay tự chọn tần số, tất nhiên tần số ra phải nằm trong một khoảng nhất định. Comparator ‐ So sánh điện áp Lựa chọn mức điện áp so sánh Vref. Có rất nhiều mức điện áp để ta lựa chọn. Ngoài ra ta còn có thể lựa chọn cho đầu vào của các bộ so sánh. Hình 3.18: Tab Other Tab Interrupts và Tab Driver Tab Interrupts cho phép ta lựa chọn nguồn ngắt mà ta muốn sử dụng. Tùy vào từng loại PIC mà số lượng nguồn ngắt khác nhau, bao gồm: ngắt ngoài 0(INT0), ngắt RS232, ngắt Timer, ngắt I2C‐SPI, ngắt onchange PORTB.v.v… Tab Drivers được dùng để lựa chọn những ngoại vi mà trình dịch đã hỗ trợ các hàm giao tiếp. Đây là những ngoại vi mà ta sẽ kết nối với PIC, trong các IC mà CCS hỗ trợ, đáng chú ý là các loại EEPROM như 2404, 2416, 2432, 9346, 9356…Ngoài ra còn có IC RAM PCF8570, IC thời gian thực DS1307, Keypad 3x4, LCD, ADC… Chi tiết ta có thể xem trong thư mục Driver của chương trình: \...\PICC\Drivers Hình 3.19: Tab Interrupts Hình 3.20 : TabDriver Sau các bước chọn trên, ta nhấn OK để kết thúc quả trình tạo một Project trong CCS, một Files ten_project.c được tạo ra, chứa những khai báo cần thiết cho PIC.Mạch nạp sử dụng nạp chương trình cho PIC 16F877A là mạch nạp PG2C Hình 3.21: PG2C mạch nạp PIC qua cổng COM Chức năng của mạch: Có khả năng nạp hầu hết các loại vi điều khiển họ PIC bao gồm các loại 8 chân, 14 chân, 18 chân, 28 chân và 40 chân. Các dòng dsPIC 30F thông qua 2 chương trình nạp nổi tiếng là Winpic800 và ICProg. Có khả năng nạp trực tiếp cho vi điều khiển rời thông qua socket hoặc thông qua đường ICSP. Cách thức sử dụng mạch nạp PG2C khá đơn giản. Việc đầu tiên chúng ta cần làm là cài đặt chương trình WinPIC 800 lên máy tính. Giao diện phần mềm nạp cho PIC WinPic800: Hình 3.22: Giao diện phần mềm nạp WinPic800. Em sử dụng phần mềm WinPic800 để nạp cho PIC ngay trên mạch theo chuẩn ICSP. Khi trình dịch CCS đã dịch dữ liệu thành file *.hex, sau đó WinPic800 sẽ gửi từ máy tính tới vi điều khiển, vi điều khiển sẽ nhận dữ liệu thông qua cổng truyền thông nối tiếp và ghi lên bộ nhớ chương trình. Đầu tiên chúng ta vào menu “Settings” chọn hardware và chọn các thông số như hình vẽ: Hình 3.23: Test cable Chúng ta có thể bỏ dấu tích bên phải phía trên và chọn dấu tích ở ô đỏ phía giữa rồi nhìn đèn tín hiệu trên mạch nạp, nếu nó nhấp nháy theo việc tích (v) thì tức là Cable của chúng đã tốt, còn nếu đèn không nhấp nháy cần phải kiểm tra lại cáp cắm cổng COM. Sau đó chọn device rồi chọn hardware test : Hình 3.24: Test Hardware Từ lúc này có thể cắm vi điều khiển vào socket là có thể bắt đầu nạp được: Hình 3.25:Vi điều khiển PIC 40 chân Hình 3.26:Vi điều khiển PIC 18 chân Hình 3.27:Vi điều khiển PIC 28chân Hình 3.28:Vi điều khiển PIC 8 chân Trong quá trình cắm vi điều khiển vào đế Socket cần lưu ý là phải set lại jump ở ngay cạnh đế sang các vị trí cho phù hợp với loại vi điều khiển đó. Sau khi đã cắm vi điều khiển vào để, chọn detect device để xem mạch đã nhận thiết bị chưa? Sau khi đã nhận được thiết bị vào file, chọn open và tìm đến file .Hex cần nạp. Sau đó bấm vào biểu tượng program all để bắt đầu nạp. Hình 3.29: Quá trình Dectect Vi điều khiển Hình 3.30:Quá trình nạp file .Hex vào Vi điều khiển PICSau khi quá trình nạp hoàn thành là có thể gỡ vi điều khiển ra để dùng. Để chắc chắn chương trình đã nạp là đúng chúng ta có thể bấm vào read all. Hình 3.31:Đọc chương trình ra từ Vi điều khiển PIC Sau khi đã đọc xong chúng ta sẽ thấy một bảng các thanh ghi trạng thái của vi điều khiển đã được nạp. Bấm vào verify all để chương trình kiểm tra xem nó có giống với file hex của chúng ta không và sẽ cho kết quả là đúng để báo hiệu quá trình nạp tốt. Hình 3.32: So sánh để kiểm tra quá trình nạp file .Hex . Trong suốt quá trình nạp các loại PIC khác nhau chúng ta không cần phải chọn lại vi điều khiển mà chỉ cần để ô chọn vi điều khiển ở một loại PIC bất kỳ là mạch nạp có thể tự nhận ra đươc. Quá trình nạp trực tiếp trên mạch thông qua cáp ICSP cho dsPIC chỉ cần lưu ý cắm đúng các chân vào mạch. Trên mạch nạp có ký hiệu chân MCLR để tránh nhầm lẫn, sau đó chọn ô vi điều khiển loại dsPIC tương ứng và bắt đầu quá trình nạp như với PIC. 3.5.4 Thuật toán điều khiển Begin # được nhấn 1 được nhấn SS Temp[] và psw[] ? Đặt Enable=1 Sound_correct 2 được nhấn Wirte_ EEPROM Password new Sound_correct. 3 được nhấn 4 được nhấn Off TB1 On TB1 1 được nhấn 0 được nhấn 1 được nhấn 0 được nhấn On TB2 Off TB2 1 được nhấn 0 được nhấn On TB3 Off TB3 1 được nhấn 0 được nhấn On TB4 Off TB4 Ss Temp[] với hh và mm ? ĐK bật tắt TB Sound_wrong() Reset System. N Y Y N N Y Sound_wrong() Reset System N Y Y Y Y N N Y Y Y N N Y Y Y N Reset System N Y N N N N Hình 3.33: Lưu đồ thuật toán điều khiển CHƯƠNG 4 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 4.1 Đánh giá kết quả 4.1.1 Tổng quan kết quả Trong quá trình thực hiện đề tài em đã tìm hiểu về điện thoại và tín hiệu DTMF. Một chiếc điện thoại di động hay để bàn thông thường sử dụng mười sáu cặp tín hiệu DTMF để biểu diễn các số bấm trên bàn phím bấm, nghĩa là một phím bấm được miêu tả bởi hai tín hiệu có tần số khác nhau. Do vậy em đã tìm hiểu khá kĩ về tín hiệu DTMF vì nó là cơ sở lý thuyết quan trọng trong đề tài này. Về việc giải mã DTMF em sử dụng vi mạch MT8870, đây là vi mạch chuyên dụng để giải mã tín hiệu DTMF. Vi mạch MT8870 lấy tín hiệu DTMF từ đường điện thoại vào chân hai (IN-) còn tín hiệu được giải mã thành mã BCD 4 bit thì xuất ra bốn chân Q1,Q2,Q3,Q4, chân StD là chân báo khi có nhấn phím. Em cũng đã tìm hiểu và làm chủ được vi điều khiển PIC 16F877A của hãng Microchip. Vi điều khiển PIC 16F887A được tích hợp khá nhiều module, thêm vào đó là có thể sử dụng khá nhiều ngôn ngữ lập trình. Khối hiển thị thông tin em sử dụng LCD 1602 (2 dòng, 16 kí tự). Em đã thực hiện được việc hiển thị lên màn hình LCD, lập trình hiển thị lên LCD khá đơn giản vì đã có hàm xây dựng sẵn trong thư viện của CCS. Màn hình LCD được chia làm hai dòng, dòng đầu tiên có địa chỉ bắt đầu là 0x80 và địa chỉ kết thúc là 0x8f, còn dòng thứ hai có địa chỉ bắt đầu là 0xc0 và địa chỉ kết thúc là 0xcf. Lập trình cho PIC em sử dụng ngôn ngữ C chuẩn, viết bằng phần mềm CCS PIC C Compiler phiên bản 3.249. Phần mềm CCS hỗ trợ một thư viện với khá nhiều hàm con nên việc lập trình trở nên dễ dàng hơn. Giao diện của phần mềm khá đẹp và có thể sử dụng một cách dễ dàng. Thêm vào đó CCS cung cấp một trang web có nhiều code chuẩn để tham khảo: ccsinfo.com/forum . Em sử dụng phần mềm WinPic800 để nạp chương trình vào vi điều khiển PIC. 4.1.2 Mạch thực tế sau khi thiết kế và chạy thử Hình 4.1: Mạch thực tế sau khi thiết kế và chạy thử Mạch thực tế sau khi thiết kế và chạy thử đã điều khiển đóng ngắt chính xác các thiết bị từ xa. Tuy nhiên, còn vài nhược điểm cần khắc phục. 4.2 Lý do chọn PIC 16F877A Ngày nay vi điều khiển được sử dụng rất nhiều trong lĩnh vực điều khiển tự động mà vi điều khiển có rất nhiều loại như: dòng 89 hay AVR, PIC, PSOC…Em chọn PIC mà ko chọn AVR hay 89, bởi nếu so với 89 về mặt tính năng và công năng thì có thể xem PIC vượt trội hơn rất nhiều so với 89 với nhiều module được tích hợp sẵn như ADC10 BIT, PWM 10 BIT, PROM 256 BYTE, COMPARATER, VERF COMPARATER…Nhưng về mặt giá cả thì có đôi chút chênh lệch như giá 1 con 89S52 khoảng 20.000 thì PIC16F877A là 50.000 nhưng khi so sánh như thế thì em lại thấy phần linh kiện cho việc thiết kế mạch nếu như dùng 89 muốn có ADC em phải mua con ADC chẳng hạn như ADC0808 hay 0809 với giá vài chục nghìn và bộ opamp thì khi sử dụng PIC nó đã tích hợp cho em sẵn các module đó, có nghĩa là em không cần mua ADC, opam, EPPROM vì PIC đã có sẵn trong nó rồi ngoài ra em sẽ gặp nhiều thuận lợi hơn trong thiết kế board, khi đó board mạch của em sẽ nhỏ gọn và đẹp hơn dễ thi công hơn rất nhiều, nên tính về giá cả tổng cộng cho đến lúc thành phẩm thì PIC có thể xem như rẻ hơn 89, một đặc điểm nữa là tất cả các con PIC sử dụng thì đều có chuẩn PI tức chuẩn công nghiệp thay vì chuẩn PC (chuẩn dân dụng) nếu mua một con 89PI thì lúc đó giá cả giữa PIC và 89PI đã chênh lệch rất nhiều rồi. Và gần đây Philip cũng đã ra 1 dòng 89VRD mới bổ sung thêm chức năng PWM nhưng giá cả còn rất đắt mà vẫn còn thiếu nhiều tính năng so với PIC. Ngoài ra PIC còn được rất nhiều nhà sản xuất phần mềm tạo ra các ngôn ngữ hỗ trợ cho việc lập trình ngoài ngôn ngữ Asembly ra chúng ta còn có thể sử dụng ngôn ngữ C như CCSC, HTPIC hay sử dụng Basic thì có MirkoBasic… và còn nhiều chương trình khác nữa để hỗ trợ cho việc lập trình bên cạnh ngôn ngữ kinh điển là Asembler. Tóm lại em chọn PIC bởi nó được phát triển lâu đời và có rất nhiều dòng sản phẩm cho em lựa chọn như dòng basic PIC 12 midrange là PIC16, hi end là PIC18, gần đây là DS PIC, với những ai quan tâm đến lập trình điều khiển từ xa thì có IF PIC… và trong mỗi dòng sản phẩm ấy lại có rất nhiều loại chip để đáp ứng mọi nhu cầu của chúng ta. 4.3 Hướng phát triển đề tài Sau 12 tuần thực hiện đồ án tốp nghiệp em đã hoàn thành đồ án đúng thời gian quy định cũng như thực hiện được các yêu cầu đặt ra. Tuy nhiên do thời gian và khả năng có hạn trong đồ án còn một số mặt em chưa thực hiện được như khi điều khiển thì thay vì phản hồi bằng tiếng Bip ta sử dụng IC phát tiếng nói để phản hồi. Như vậy phản hồi bằng giọng nói là một trong những hướng để phát triển đề tài lên một cấp độ cao hơn. Để tài có thể phát triển lên bằng cách: + Sau khi thu tín hiệu DTMF từ MT8870 và đưa vào PIC 16F877A để xử lý điều khiển thì sẽ kết hợp phát không dây điều khiển các thiết bị điện để điều khiển được linh hoạt thông minh hơn. Sử dụng IC phát tiếng nói để người điều khiển nắm bắt được trạng thái điều khiển một cách chính xác, dễ dàng. + Nghiên cứu giải mã được các ký tự trong tin nhắn SMS từ điện thoại di động thay vì thu tín hiệu DTMF để đưa ra tín hiệu điều khiển.Với phương pháp này thì mạch điều khiển sẽ rất đơn giản và chi phí cho việc điều khiển sẽ là rất thấp. + Sử dụng Modem GSM để giải mã tin nhắn SMS điều khiển thiết bị điện sản phẩm được tạo ra mang tính công nghiệp cao. DANH MỤC CÁC TÀI LIỆU THAM KHẢO Tiếng Việt: Ngô Diên Tập , Vi xử lý trong đo lừng và điều khiển. Nhà xuất bản khoa học và kỹ thuật. Hà Nội 1999, tái bản 2001. Ngô Diên Tập , Vi điều khiển với lập trình C. Nhà xuất bản khoa học kỹ thuật. Hà Nội 2001. Danh mục các website tham khảo:

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

  • doc74968640-baocao-TN-11-sửa.doc
Luận văn liên quan