Mạch điều khiển các thiết bị trong nhà

Phần I: Lý thuyết tổng quan.5

I.Tổng quan về VĐK PIC16F876A.5

1. Giới thiệu họ vi điều khiển PIC.5

2. Vi điều khiển PIC 16F876A.5

II.Giao tiếp cổng nối tiếp .19

1. Cấu trúc cổng nối tiếp.19

2. Truyền thông giữa hai nút.22

3. Truy xuất trực tiếp thông qua cổng.24

Phần II. Thiết kế phần cứng .28

I.Sơ đồ khối và chức năng các khối.28

1. Sơ đồ khối.28

2. Chức năng các khối.28

II.Sơ đồ nguyên lý.31

Kết luận.32

 

 

doc41 trang | Chia sẻ: lethao | Lượt xem: 2425 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Mạch điều khiển các thiết bị trong nhà, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ông minh khả trình” của hãng Microchip. Hiện tại ở Việt Nam và trên thế giới sử dụng PIC khá rộng rãi. Các tính năng đa dạng họ vi điều khiển PIC cũng như các công cụ hỗ trợ lập trình cho họ vi điều khiển PIC không ngừng được cải tiến và phát triển đã tạo ra những ứng dụng vượt trội của PIC so với các họ vi điều khiển khác. Các kí hiệu của họ vi điều khiển PIC: PIC 12xxxx: độ dài lệnh 12 bit PIC 16xxxx: độ dài lệnh 14 bit PIC 18xxxx: độ dài lệnh 16 bit C: PIC có bộ nhớ EPROM ( chỉ có 16C84 là EEPROM) F: PIC có bộ nhớ Flash LF: PUC có bộ nhớ flash hoạt động ở điện áp thấp LV: tương tự như LF Bên cạnh đó có một số vi điều khiển có kí hiệu 16Fxxx là EEPROM, nếu có thêm chữ A ở cuối là flash (ví dụ 16F877 là EEPROM, 16F877A là flash). Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC. Ở Việt Nam phổ biến nhất là các họ Vi điều khiển PIC do hãng Microchip sản xuất. 2. Vi điều khiển PIC 16F876A 2.1. Mô tả cấu trúc PIC 16F876A thuộc họ 16F87x sử dụng công nghệ tích hợp cao RISC CPU, có thể lập trình với 35 câu lệnh đơn giản. Tất cả các câu lệnh thực hiện trong 1 chu kì lệnh ngoại trừ một số câu lệnh rẽ nhánh thực hiện trong 2 chu kì lệnh. Tốc độ hoạt động xung đồng hồ vào là DC-20MHz với chu kì lệnh thực hiện trong 200ns. Bộ nhớ chương trình Flash 8Kx14 words. Bộ nhớ Ram là 368x8 bytes, bộ nhớ dữ liệu EFPROM 256x8 bytes. Khả năng của bộ vi xử lí này : + Khả năng ngắt (lên tới 14 nguồn ngắt trong và ngắt ngoài) + Ngăn nhớ Stack được phân chia làm 8 mức + Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp. + Nguồn khởi động lại (POR). + Bộ tạo xung thời gian (PWRT) và bộ tạo dao động (OST) + Bộ đếm xung thời gian (WDT) với nguồn dao động trên chip (nguồn dao động RC) hoạt động đáng tin cậy. + Có mã chương trình bảo vệ. Có bảng lựa chọn dao động + Phương thức cất giữ SLEEP. + Công nghệ CMOS FLASH/EEPROM nguồn mức thấp, tốc độ cao. + Thiết kế hoàn toàn tĩnh. Mạch chương trình nối tiếp có hai chân. + Xử lý đọc/ghi tới bộ nhớ chương trình. + Dải điện thế hoạt động rộng: 2.0V ÷ 5.5V. Nguồn sử dụng hiện tại 25mA. + Dãy nhiệt độ công nghiệp và thuận lợi. + Công suất tiêu thụ thấp: < 0.6mA với 5V, 4MHz 20µA với 3V, 32 kHz < 1µA nguồn dự phòng. Các đặc tính nổi bật của thiết bị ngoại vi trên chip: + Timer0: 8 bít của bộ định thời, bộ đếm với hệ số tỷ lệ trước + Timer1:16 bít của bộ định thời, bộ đếm với hệ số tỷ lệ trước, có khả năng tăng trong khi ở chế độ Sleep qua xung đồng hồ được cung cấp bên ngoài. + Timer2: 8 bít của bộ định thời, bộ đếm với 8 bít của hệ số tỷ lệ trước, hệ số tỷ lệ sau. + Có 2 chế độ bắt giữ, so sánh, điều chế độ rộng xung (PWM) + Chế độ bắt giữ 16 bít, tốc độ 12,5 ns, chế độ so sánh với 16 bít, tốc độ giải quyết cực đại là 200ns, chế độ điều chế độ rộng xung với 10 bít. + Bộ chuyển đổi tín hiệu số sang tương tự với 10 bít. + Cổng truyền thông nối tiếp SSP với SPI phương thức chủ và I2C(chủ/phụ) + Bộ truyền nhận thông tin đồng bộ, dị bộ(USART/SCL) có khả năng phát hiện 9 bít địa chỉ. + Cổng phụ song song (PSP) với 8 bít mở rộng, với RD, WR, và CS điều khiển. Sơ đồ các chân của PIC 16F876: 2.2. Sự tổ chức bộ nhớ PIC 16F876A PIC 16F87A có 3 khối bộ nhớ: bộ nhớ chương trình FLASH, bộ nhớ dữ liệu RAM, bộ nhớ EEPROM. a) Tổ chức bộ nhớ chương trình FLASH và Stack nhớ PIC 16F876 có một bộ đếm chương trình 13 bít và có 8Kx14 từ mã của bộ nhớ chương trình FLASH, được chia thành 4 trang mỗi trang 2Kx14 từ mã. Khi Reset địa chỉ bắt đầu thực hiện chạy là 0000h, vectơ ngắt bắt đầu 0004h. Stack có 8 mức dùng để lưu địa chỉ lệnh thực hiện tiếp theo sau lệnh CALL và khi xảy ra ngắt. Bản đồ bộ nhớ chương trình và các ngăn xếp: Sơ đồ khối chức năng của PIC 16F876: b) Tổ chức bộ nhớ dữ liệu RAM RAM là bộ nhớ có thể đọc và ghi, nó không lưu dữ liệu khi mất điện, bộ nhớ RAM của PIC 16F876A có 4 bank, mỗi bank có dải địa chỉ 0-7FH(128 byte) trên các bank những thanh ghi đa mục đích, hoạt động như một RAM tĩnh (General purpose register), và những thanh ghi chức năng đặc biệt (Special function registers) ở vùng địa chỉ thấp. Bít RP1(Status ) và bit RP0(Status ) dùng để lựa chọn bank làm việc. Các thanh ghi đa mục đích (General purpose register): các thanh ghi này được truy cập bằng cả hai cách trực tiếp hoặc gián tiếp qua thanh ghi FSR, tổng cộng có 368 byte. Các thanh ghi chức năng đặc biệt: các thanh ghi này được dùng bởi CPU và các khối ngoại vi để điều khiển sự hoạt động theo yêu cầu của thiết bị. Sau đây là một số thanh ghi đặc biệt quan trọng: Các thanh ghi trạng thái STATUS: có 4 thanh ghi trạng thái trên 4 dãy, tại các địa chỉ 03h, 83h, 103h, 183h. Các thanh ghi này cho biết trạng thái của phần tử logic toán học ALU, trạng thái Reset, trạng thái của các bít lựa chọn dãy thanh ghi cho bộ nhớ dữ liệu Các thanh ghi lựa chọn OPTION_REG: có 2 thanh ghi lựa chọn tại các địa chỉ 81h và 181h, các thanh ghi này có thể đọc hoặc ghi, nó chứa đựng nhiều bit điều khiển khác nhau để xác định hệ số định trước TMR0/hệ số định sau WDT, ngắt ngoài INT, TMR0, các điện áp treo trên cổng B Các thanh ghi INTCON: có 4 thanh ghi INTCON tại các địa chỉ 0Bh, 8Bh, 10Bh, 18Bh. Các thanh ghi này có thể đọc và ghi, chứa đựng nhiều sự cho phép và các bit cờ cho việc tràn thanh ghi TMR0, các ngắt thay đổi cổng RB và chân các ngắt ngoài RB0/INT. Thanh ghi PIE1: Tại địa chỉ 8Ch, chứa đựng các bit cho phép riêng lẻ cho các ngắt ngoại vi. Thanh ghi PIR1: Tại địa chỉ 0Ch, chứa đựng các bit cờ riêng lẻ cho các ngắt ngoại vi. Thanh ghi PIE2: Tại các địa chỉ 8Dh, chứa đựng các bit cho phép riêng lẻ cho các ngắt ngoại vi CCP2, ngắt xung đột tuyến SSP và EEPROM ghi các hoạt động ngắt Thanh ghi PCON (Power Control): Chứa bit cờ cho phép phân biệt giữa việc Reset hệ thống để Reset MCLR ngoại với Reset WDT PCL và PCLATH: Chương trình đếm chỉ rõ địa chỉ của lệnh tiếp theo được thực hiện. PC có độ rộng 13 bit, byte thấp được gọi là thanh ghi PCL (có thể đọc hoặc ghi), byte cao được gọi là thanh ghi PCH . c) Các trang bộ nhớ chương trình PIC16F876A có 8Kx14 PLASH các lệnh CALL, GOTO chỉ cung cấp 11 bit địa chỉ cho phép rẽ nhánh được 2K của một trang bộ nhớ chương trình, 2 bit cao được cung cấp bởi 2 bit 3,4 của PCLATH do vậy tuỳ việc thiết lập các bit 3,4 của PCLATH trước khi lệnh CALL, GOTO thực hiện cho phép rẽ nhánh tới các trang bộ nhớ khác nhau Chú ý các lệnh RETURN, RETFIE không làm thay đổi PCLATH 2.3. Các cổng vào/ra PIC16F876A có 3 cổng vào/ra là Port A, Port B, Port C. Một số chân của cổng vào/ra được tích hợp với một số hàm có thể thay đổi để phù hợp với những thiết bị ngoại vi. a) Cổng A và thanh ghi TRISA Cổng A là cổng hai chiều với độ rộng đường truyền là 6 bit. Để điều khiển việc truy xuất dữ liệu người ta dùng thanh ghi TRISA. Nếu đặt bit TRISA = 1 thì cổng A sẽ tương ứng có các chân là chân vào. Nếu xoá bít TRISA = 0 thì cổng A sẽ tương ứng có các chân là chân ra. Việc đọc cổng A chính là đọc trạng thái của các chân, việc viết phải qua các chốt của cổng. Các chân của cổng A chủ yếu sử dụng nhận tín hiệu tương tự hoặc các chân vào/ra. Riêng chân RA4 có thể đa hợp với chân vào bộ Timer 0 và khi đó nó trở thành chân RA4/T0CKI. Chân này như một đầu vào của Trigger Schmitt và nó mở đầu ra. Các chân khác của cổng A là chân vào bộ TTL. Việc điều khiển các chân này thông qua việc đặt hay xoá các bít của thanh ghi ADCON1. Thanh ghi TRISA điều khiển trực tiếp các chân của cổng A, khi sử dụng các chân này để nhận tín hiệu tương tự vào ta phải chắc chắn rằng các bít của thanh ghi TRISA đã được đặt rồi. Sơ đồ khối chân RA3:RA0, chân RA5, và chân RA4/TOCK1 của cổng A b) Cổng B và thanh ghi TRISB Cổng B là cổng hai chiều với độ rộng đường truyền là 8 bit. Tương ứng với nó để điều khiển trực tiếp dữ liệu ta sử dụng thanh ghi TRISB. Nếu đặt bít TRISB = 1 thì cổng B được định nghĩa là chân vào. Nếu xoá bít TRISB = 0 thì cổng B được định nghĩa là chân ra. Nội dung của chốt ra có thể chọn trên mỗi chân. Có 3 chân của cổng B có thể đa hợp với các chương trình vận hành bằng điện áp thấp. Đó là các chân sau: RB3/PGM, RB6/PGC, RB7/PGD. Sự thay đổi hoạt động của những chân này được miêu tả ở trong phần đặc tính nổi bật. Mỗi chân của cổng B có khả năng dừng bên trong nhưng yếu. Điều này được trình bày bởi việc xoá bit RBPU (bit 7 của thanh ghi OPTION_REG). Khả năng dừng này sẽ tự động tắt đi khi các chân của cổng được định nghĩa là chân ra. Khả năng dừng này sẽ tự động mất đi khi ta RESET. Bốn chân của cổng B, từ RB7÷ RB4 có đặc tính là ngắt khi thay đổi trạng thái. Chỉ những chân được định dạng là những chân vào thì ngắt này mới tồn tại. Một vài chân RB7:RB4 được định dạng như chân ra nó thi hành ngắt trên sự thay đổi so sánh. Chân vào RB7:RB4 được so sánh với giá trị cũ của chốt ở lần đọc cuối cùng của cổng B. Sự ghép đôi không khớp chân ra của RB7:RB4 bằng lệnh OR làm phát ra ngắt với cờ bit RBIF của thanh ghi INTCON. Ngắt này có thể khởi động thiết bị từ trạng thái SLEEP. Sơ đồ khối của chân RB3÷RB0, và chân RB7÷RB4 của cổng B: c) Cổng C và thanh ghi TRISC Cổng C là cổng 2 chiều với độ rộng đường truyền là 8 bit. Tương ứng với việc điều khiển nó là thanh ghi TRISC. Nếu đặt bit TRISC=1 thì tương ứng với chân của cổng C là chân vào. Nếu xoá bit TRISC=0 thì tương ứng với chân của cổng C là chân ra. Đặt nội dung của chốt ra có thể đặt trên chân chọn. Cổng C đa hợp với việc vận hành thiết bị ngoại vi. Chân của cổng C thông qua bộ đệm Trigger Schmitt đầu vào. Khi chế độ I2C hoạt động, thì các chân cổng PORTC (4:3) có thể được sắp xếp với mức I2C thường hoặc với mức SMBUS bằng cách sử dụng bit CKE (SSPSTART) là bit 6 của thanh ghi SSPSTART. Khi vận hành các thiết bị ngoại vi bằng việc xác định bit TRIS của mỗi chân cổng C. Một số phần phụ có thể ghi đè lên bit TRISC làm cho chân này trở thành chân ra, trong khi đó thì một số phần phụ khác lại ghi đè lên bit TRIS làm cho nó trở thành chân vào. Từ khi những bit TRIS ghi đè thì trong việc tác động trong các thiết bị ngoại vi là có thể, những lệnh đọc-sửa–ghi (BSF, BCF, XORWF) với thanh ghi TRISC như là nơi gửi tới sẽ được tránh. Người sử dụng nên đề cập tới việc phân chia kết nối các thiết bị ngoại vi cho việc set chính xác các bit TRIS Sơ đồ khối chân RC RC và chân RC của cổng C 2.4. Các bộ Timer của chip Bộ vi điều khiển PIC 16F876 có 3 bộ Timer đó là: Timer 0, Timer 1, Timer2. a) Bộ Timer0 Là bộ định thời hoặc bộ đếm có những ưu điểm nổi bật sau: + 8 bit cho timer hoặc bộ đếm. + Có khả năng đọc và viết. + Có thể dùng đồng hồ bên trong hoặc bên ngoài. + Có thể chọn cạnh xung của xung đồng hồ. + Có hệ số chia cho xung đầu vào có thể lập trình lại bằng phần mềm. + Ngắt tràn. Hoạt động của bộ Timer0: Timer 0 có thể hoạt động như một bộ định thời hoặc một bộ đếm. Viêc chọn bộ định thời hoặc bộ đếm có thể được xác lập bằng việc xoá hoặc đặt bit TOSC của thanh ghi OPTION_REG. Nếu dùng hệ số chia xung đầu vào thì xoá bit PSA của thanh ghi OPTION_REG. Trong chế độ bộ định thời được lựa chọn bởi việc xoá bit T0CS (OPTION_REG), nó sẽ được tăng giá trị sau một chu kỳ lệnh nếu không chọn hệ số chia xung đầu vào. Và giá trị của nó được viết tới thanh ghi TMR0. Chế độ đếm được lựa chọn bởi việc set bit T0CS (OPTION_REG). Trong chế độ bộ đếm, nó sẽ được tăng ở xung đi xuống nếu xoá bit T0SE (OPTION_REG) hoặc ở xung đi lên nếu set bit T0SE. Và giá trị của nó được viết tới thanh ghi TMR0. Khi dùng xung clock bên ngoài cho bộ định thời Timer 0 và không dùng hệ số chia clock đầu vào Timer 0 thì phải đáp ứng các điều kiện cần thiết để có thể hoạt động đó là phải đảm bảo xung clock bên ngoài có thể đồng bộ với pha xung clock bên trong (TOSC). Các hệ số chia: Hệ số chia dùng cho Timer 0 hoặc bộ WDT. Các hệ số này không có khả năng đọc và khả năng viết. Để chọn hệ số chia xung vào Timer 0 hoặc cho bộ WDT ta tiến hành xoá hoặc đặt bit PSA của thanh ghi OPTION_REG. Những bit PS2, PS1, PS0 của thanh ghi OPTION_REG dùng để xác lập các hệ số chia. Ngắt của bộ Timer0: Ngắt của bộ Timer 0 được phát sinh ra khi thanh ghi TMR0 bị tràn tức từ FFh quay về 00h. Khi đó bit T0IF của thanh ghi INTCON sẽ được đặt. Bit này phải được xoá bằng phần mềm nếu cho phép ngắt bit T0IE của thanh ghi INTCON được set. Timer 0 bị dừng hoạt động ở chế độ SLEEP ngắt Timer 0 không đánh thức bộ xử lý ở chế độ SLEEP. * Thanh ghi OPTION_REG Bit 5 TOCS lựa chọn nguồn clock 1= Clock ngoài từ chân T0CKI 0= Clock trong Focs/4 Bit 4 T0SE bit lựa chọn sườn xung clock 1= Timer 0 tăng khi chân T0CKI từ cao xuống thấp (sườn xuống) 0= Timer 0 tăng khi chân T0CKI từ thấp lên cao (sườn lên) Bit 3 PSA bit gán bộ chia xung đầu vào 1= gán bộ chia Prescaler cho WDT 0=gán bộ chia Prescaler cho Timer 0 Bit 2:0 PS2:PS1 lựa chọn hệ số chia xung đầu vào theo bảng sau: PS2:PS0 Timer 0 WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 b) Bộ Timer1 Bộ Timer1 có thể là bộ đếm hoặc bộ định thời với ưu điểm sau: + 16 bit cho bộ đếm hoặc bộ định thời (gồm 2 thanh ghi TMR1H:TMR1L). + Có khả năng đọc và viết. + Có thể chọn xung đồng hồ bên trong hoặc bên ngoài. + Có thể ngắt khi tràn FFFFh về 0000h. Timer1 có 1 thanh ghi điều khiển, đó là thanh ghi T1C0N. Bộ Timer1 có hoạt động hay không hoạt động là nhờ việc đặt hoặc xoá bit TMR1ON (T1CON). Hoạt động của Timer1: Nó có thể hoạt động ở một trong các chế độ sau: + Là một bộ định thời 16 bit. + Là một bộ đếm có đồng bộ. + Là một bộ đếm không có đồng bộ. Phương thức hoạt động của bộ này được xác định bởi việc chọn nguồn xung vào Timer1. Nguồn xung đồng hồ được chọn bởi việc đặt xoá bit TMR1CS (T1CON). Ở chế độ bộ định thời, đầu vào là clock trong Fosc/4, bit đồng bộ T1SYNC (T1CON) không có tác dụng vì clock trong luôn đồng bộ. Chế độ bộ đếm hoạt động hai chế độ. Có đồng bộ xung vào xoá bit T1SYNC (T1CON), không đồng bộ xung vào set bit T1SYNC (T1CON) Timer1 tăng ở sườn lên xung đầu vào. Khi bộ dao động Timer1 cho phép hoạt động thì các chân RC1/T1OSI/CCP2, RC0/T1OSO/T1CKI trở thành chân vào. Ở chế độ đếm có đồng bộ bộ đếm tăng mỗi khi sườn lên ở chân RC0 hoặc ở chân RC1 nếu bit T1OSEN xoá và xung vào phải đồng bộ với clock trong, ở chế độ này bộ đếm không tăng trong trạng thái SLEEP. Ở chế độ đếm không đồng bộ Timer1 tăng mỗi khi sườn lên ở chân RC0 hoặc ở chân RC1 nếu bit T1OSCEN xoá, ở chế độ này bộ đếm tiếp tục tăng trong trạng thái SLEEP và có khả năng tràn gây ra ngắt khi đó bộ xử lý được đánh thức. Dao động của Timer1: Mạch dao động thạch anh được xây dựng giữa 2 chân TiOSI và T1OS0. Khi dao động được cung cấp ở chế độ công suất thấp thì tần số cực đại của nó sẽ là 200kHz và trong nó ở chế độ SLEEP nó cung cấp ở tần số 32kHz. Ngắt của bộ Timer1: Cặp thanh ghi TMR1H và TMR1L tăng từ giá trị 0000h đến FFFFh đến giá trị này tiếp tục tăng thì tràn và quay lại giá trị 0000h. Và ngắt xuất hiện khi tràn quá giá trị FFFFh khi này cờ ngắt TMR1IF sẽ được đặt. Ngắt có thể hoạt động hoặc không hoạt động nhờ việc đặt hoặc xoá bit TMR1IE. * Thanh ghi điều khiển Timer 1 T1CON: Bit 7,6 không sử dụng Bit 5,4 T1CKPS1:T1CKPS0 lựa chọn hệ số chia xung đầu vào T1CKPS1:T1CKPS0 1:1 1:2 1:4 1:8 Bit 3 T1OSEN bit điều khiển bộ dao động Timer1 1= Bộ dao động hoạt động 0= Bộ dao động không hoạt động Bit 2 Bit điều khiển xung clock ngoài đồng bộ khi TMRCS=1 Bit 2=0 có đồng bộ clock ngoài Bit 2=1 không đồng bộ clock ngoài Khi TMR1CS=0 bit này không tác dụng Bit 1 TMR1CS bit lựa chọn nguồn xung clock vào TMR1CS=1 clock từ chân RC0/T1OSO/T1CKI (sườn lên) TMR1CS=0 clock trong Fosc/4 Bit 0 Bit bật tắt Timer 1= Timer 1 enable 0= Timer 1 Disable c) Bộ Timer2 Bộ Timer2 có những đặc tính sau đây: + 8 bit cho bộ định thời (thanh ghi TMR2) + 8 bit vòng lặp (thanh ghi PR2) + Có khả năng đọc và viết ở cả 2 thanh ghi nói trên + Có khả năng lập trình bằng phần mềm tỷ lệ trước + Có khả năng lập trình bằng phần mềm tỷ lệ sau Chế độ SSP dùng đầu ra của TMR2 để tạo xung clock. Timer2 có một thanh ghi điều khiển đó là thanh ghi T2CON. Timer2 có thể tắt bằng việc xoá bit TMR2CON của thanh ghi T2CON. Hoạt động của bộ Timer2: Timer 2 được dùng chủ yếu ở phần điều chế xung của bộ CCP, thanh ghi TMR2 có khả năng đọc và viết, nó có thể xoá bằng việc reset lại thiết bị. Đầu vào của xung có thể chọn các tỷ lệ sau: 1:1, 1:2 hoặc 1:16 việc chọn các tỷ lệ này có thể điều khiển các bit sau T2CKPS1 và bit T2CKPS0 Ngắt của bộ Timer2: Bộ Timer 2 có 1 thanh ghi 8 bit PR2. Timer 2 tăng từ giá trị 00h cho đến khớp với PR2 và tiếp theo nó sẽ reset lại giá trị 00h và lệnh kế tiếp thực hiện. Thanh ghi PR2 là một thanh ghi có khả năng đọc và viết. Thanh ghi PR2 bắt đầu từ giá trị FFh đầu ra của TMR2 là đường dẫn cổng truyền thông đồng bộ, nó được dùng để phát các xung đồng bộ. * Thanh ghi T2CON Bit 7 không sử dụng Bit 6-3 TOUTPS3:TOUTPS0 bit lựa chọn hệ số đầu ra Timer2 0000 = 1:1 0001 = 1:2 0010 = 1:3 … 1111 = 1:16 Bit 2 TMR2ON bit bật tắt hoạt động Timer2 1 = Enable 0 = Disable Bit 1-0 2CKPS1:T2CKPS0 chọn hệ chia đầu vào 00 = 1:1 01 = 1:4 1x = 1:16 II. GIAO TIẾP CỐNG NỐI TIẾP 1. Cấu trúc cổng nối tiếp Cổng nối tiếp được sử dụng để truyền dữ liệu hai chiều giữa máy tính và ngoại vi, có các ưu điểm sau: - Khoảng cách truyền xa hơn truyền song song. - Số dây kết nối ít. - Có thể truyền không dây dùng hồng ngoại. - Có thể ghép nối với vi điều khiển hay PLC (Programmable Logic Device). - Cho phép nối mạng. - Có thể tháo lắp thiết bị trong lúc máy tính đang làm việc. - Có thể cung cấp nguồn cho các mạch điện đơn giản Các thiết bị ghép nối chia thành 2 loại: DTE (Data Terminal Equipment) và DCE (Data Communication Equipment). DCE là các thiết bị trung gian như MODEM còn DTE là các thiết bị tiếp nhận hay truyền dữ liệu như máy tính, PLC, vi điều khiển, … Việc trao đổi tín hiệu thông thường qua 2 chân RxD (nhận) và TxD (truyền). Các tín hiệu còn lại có chức năng hỗ trợ để thiết lập và điều khiển quá trình truyền, được gọi là các tín hiệu bắt tay (handshake). Ưu điểm của quá trình truyền dùng tín hiệu bắt tay là có thể kiểm soát đường truyền. Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry Associations). Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ -3V đến -25V (mark), mức logic 0 ứng với điện áp từ 3V đến 25V (space) và có khả năng cung cấp dòng từ 10 mA đến 20 mA. Ngoài ra, tất cả các ngõ ra đều có đặc tính chống chập mạch. Chuẩn RS-232 cho phép truyền tín hiệu với tốc độ đến 20.000 bps nhưng nếu cáp truyền đủ ngắn có thể lên đến 115.200 bps. Các phương thức nối giữa DTE và DCE: - Đơn công (simplex connection): dữ liệu chỉ được truyền theo 1 hướng. - Bán song công ( half-duplex): dữ liệu truyền theo 2 hướng, nhưng mỗi thời điểm chỉ được truyền theo 1 hướng. - Song công (full-duplex): số liệu được truyền đồng thời theo 2 hướng. Định dạng của khung truyền dữ liệu theo chuẩn RS-232 như sau: Start D0 D1 D2 D3 D4 D5 D6 D7 P Stop 0 1 Khi không truyền dữ liệu, đường truyền sẽ ở trạng thái mark (điện áp -10V). Khi bắt đầu truyền, DTE sẽ đưa ra xung Start (space: 10V) và sau đó lần lượt truyền từ D0 đến D7 và Parity, cuối cùng là xung Stop (mark: -10V) để khôi phục trạng thái đường truyền. Dạng tín hiệu truyền mô tả như sau (truyền ký tự A): Các đặc tính kỹ thuật của chuẩn RS-232 như sau: Chiều dài cable cực đại 15m Tốc độ dữ liệu cực đại 20 Kbps Điện áp ngõ ra cực đại ± 25V Điện áp ngõ ra có tải ± 5V đến ± 15V Trở kháng tải 3K đến 7K Điện áp ngõ vào ± 15V Độ nhạy ngõ vào ± 3V Trở kháng ngõ vào 3K đến 7K Các tốc độ truyền dữ liệu thông dụng trong cổng nối tiếp là: 1200 bps, 4800 bps, 9600 bps và 19200 bps Sơ đồ chân Cổng COM dạng đầu nối DB9 (9 chân) mô tả như hình 4.2. Ý nghĩa của các chân mô tả như sau: D9 Tín hiệu Hướng truyền Mô tả 1 - - Protected ground: nối đất bảo vệ 3 TxD DTEÆDCE Transmitted data: dữ liệu truyền 2 RxD DCEÆDTE Received data: dữ liệu nhận 7 RTS DTEÆDCE Request to send: DTE yêu cầu truyền dữ liệu 8 CTS DCEÆDTE Clear to send: DCE sẵn sàng nhận dữ liệu 6 DSR DCEÆDTE Data set ready: DCE sẵn sàng làm việc 5 GND - Ground: nối đất (0V) 1 DCD DCEÆDTE Data carier detect: DCE phát hiện sóng mang 4 DTR DTEÆDCE Data terminal ready: DTE sẵn sàng làm việc 9 RI DCEÆDTE Ring indicator: báo chuông 2. Truyền thông giữa hai nút Các sơ đồ khi kết nối dùng cổng nối tiếp: TxD RxD GND TxD RxD GND TxD RxD GND TxD RxD GND DTE1 DTE2 DTE DCE Hình 4.3 – Kết nối đơn giản trong truyền thông nối tiếp Khi thực hiện kết nối như trên, quá trình truyền phải bảo đảm tốc độ ở đầu phát và thu giống nhau. Khi có dữ liệu đến DTE, dữ liệu này sẽ được đưa vào bộ đệm và tạo ngắt. Ngoài ra, khi thực hiện kết nối giữa hai DTE, ta còn dùng sơ đồ sau: TxD RxD GND RTS CTS DSR DCD DTR TxD RxD GND RTS CTS DSR DCD DTR DTE1 DTE2 Hình 4.4 – Kết nối trong truyền thông nối tiếp dùng tín hiệu bắt tay Khi DTE1 cần truyền dữ liệu thì cho DTR tích cực Æ tác động lên DSR của DTE2 cho biết sẵn sàng nhận dữ liệu và cho biết đã nhận được sóng mang của MODEM (ảo). Sau đó, DTE1 tích cực chân RTS để tác động đến chân CTS của DTE2 cho biết DTE1 có thể nhận dữ liệu. Khi thực hiện kết nối giữa DTE và DCE, do tốc độ truyền khác nhau nên phải thực hiện điều khiển lưu lượng. Quá trinh điều khiển này có thể thực hiện bằng phần mềm hay phần cứng. Quá trình điều khiển bằng phần mềm thực hiện bằng hai ký tự Xon và Xoff. Ký tự Xon được DCE gởi đi khi rảnh (có thể nhận dữ liệu). Nếu DCE bận thì sẽ gởi ký tự Xoff. Quá trình điều khiển bằng phần cứng dùng hai chân RTS và CTS. Nếu DTE muốn truyền dữ liệu thì sẽ gởi RTS để yêu cầu truyền, DCE nếu có khả năng nhận dữ liệu (đang rảnh) thì gởi lại CTS. 3. Truy xuất trực tiếp thông qua cổng Tên Địa chỉ Ngắt Vị trí chứa địa chỉ COM1 3F8h 4 0000h:0400h COM2 2F8h 3 0000h:0402h COM3 3E8h 4 0000h:0404h COM4 2E8h 3 0000h:0406h Các cổng nối tiếp trong máy tính được đánh số là COM1, COM2, COM3, COM4 với các địa chỉ như sau Giao tiếp nối tiếp trong máy tính sử dụng vi mạch UART với các thanh ghi cho trong bảng sau: Offset DLAB R/W Tên Chức năng 0 0 W THR Transmitter Holding Register (đệm truyền) 0 R RBR Receiver Buffer Register (đệm thu) 1 R/W BRDL Baud Rate Divisor Latch (số chia byte thấp) 1 0 R/W IER Interrupt Enable Register (cho phép ngắt) 1 R/W BRDH Số chia byte cao 2 R IIR Interrupt Identification Register (nhận dạng ngắt) W FCR FIFO Control Register 3 R/W LCR Line Control Register (điều khiển đường dây) 4 R/W MCR Modem Control Register (điều khiển MODEM) 5 R LSR Line Status Register (trạng thái đường dây) 6 R MSR Modem Status Register (trạng thái MODEM) 7 R/W Scratch Register (thanh ghi tạm) Các thanh ghi này có thể truy xuất trực tiếp kết hợp với địa chỉ cổng (ví dụ như thanh ghi cho phép ngắt của COM1 có địa chỉ là BACOM1 + 1 = 3F9h). ™ IIR (Interrupt Identification): IIR xác định mức ưu tiên và nguồn gốc của yêu cầu ngắt mà UART đang chờ phục vụ. Khi cần xử lý ngắt, CPU thực hiện đọc các bit tương ứng để xác định nguồn gốc của ngắt. Định dạng của IIR như sau: D7 D6 D5 D4 D3 D2 D1 D0 00: không có FIFO 11: cho phép FIFO Cho phép FIFO 64 byte (trong 16750) - 1: ngắt time-out (trong 16550) Xác định nguồn gốc ngắt 0: có ngắt 1: không ngắt D2 D1 Ưu tiên Tên Nguồn D2 – D0 bị xoá khi 0 0 4 Đường truyền Lỗi khung, thu đè, lỗi parity, gián đoạn khi thu Đọc LSR 0 1 3 Đệm thu Đệm thu đầy Đọc RBR 1 0 2 Đệm phát Đệm phát rỗng Đọc IIR, ghi THR 1 1 1 Modem CTS, DSR, RI, RLSD Đọc MSR (mức 1 ưu tiên cao nhất) ™ IER (Interrupt Enable Register): IER cho phép hay cấm các nguyên nhân ngắt khác nhau (1: cho phép, 0: cầm ngắt) ™ MCR (Modem Control Register): BI: Break Interrupt (=1 khicó sự gián đoạn khi truyền, nghĩa là tồn tại mức logic 0 trong khoảng thời gian dài hơn khoảng thời gian truyền 1 byte và bị xoá khi CPU đọc LSR) FE: Frame Error (=1 khi có lỗi khung truyền và bị xoá khi CPU đọc LSR) PE: Parity Error (=1 khi có lỗi parity và bị xoá khi CPU đọc LSR) OE: Overrun Error (=1 khi có lỗi thu đè, nghĩa là CPU không đọc kịp dữ liệu làm cho quá trình ghi chồng lên RBR xảy ra và bị xoá khi CPU đọc LSR) RxDR: Receiver Data Ready (=1 khi đã nhận 1 ký tự và đưa vào RBR và bị xoá khi CPU đọc RBR). ™ LCR (Line Control Register): D7 D6 D5 D4 D3 D2 D1 D0 DLAB SBCB PS2 PS1 PS0 STB WLS1 WLS0 DLAB (Divisor Latch Access Bit) = 0: truy xuất RBR, THR, IER, = 1 cho phép đặt bộ chia tần trong UART để cho phép đạt tốc độ truyền mong muốn. UART dùng dao động thạch anh với tần số 1.8432 MHz đưa qua bộ chia 16 thành tần số 115,200 Hz. Khi đó, tuỳ theo giá trị trong BRDL và BRDH, ta sẽ có tốc độ mong muốn. Ví dụ như đường truyền có tốc độ truyền 2,400 bps có giá trị chia 115,200 / 2,400 = 48d = 0030h Æ BRDL = 30h, BRDH = 00h. Một số giá trị thông dụng xác định tốc độ truyền cho như sau: Tốc độ (bps) BRDH BRDL 1,200 00h 60h 2,400 00h 30h 4,800 00h 18h 9,600 00h 0Ch 19,200 00h 06h 38,400 00h 03h 57,600 00h 02h 115,200 00h 01h SBCB (Set Break Control Bit) =1

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

  • docMạch điều khiển các thiết bị trong nhà.doc