) (2.4 Với α là phần tử cơ bản của trường GF(2 m
THIẾT KẾ ỨNG DỤNG
3.1.3. Bộ vi điều khiển PIC16F
Vi mạch PIC16F877A là một máy tính có tập lệnh giảm thiểu hiệu năng cao RISC (Redunce Instruction Set Computer). Tất cả các lệnh được thực hiện trong một chu kỳ duy nhất, ngoại trừ các nhánh của chương trình được thực hiện trong 2 chu kỳ. PIC16F877A có bộ nhớ Flash (Flash Program Memory) lên tới 8K x 14 words (1 word=2bytes), 368 x 8 bytes bộ nhớ dữ liệu (RAM), 156 x 8 bytes bộ nhớ dữ liệu EEPROM. Các đặc trưng ngoại vi mở rộng cũng có được ở kiểu bộ vi điều khiển này. Hơn nữa, bộ vi điều khiển này cũng cung cấp chuẩn giao tiếp ngoại vi đồng bộ/không đồng bộ USART (Universal Synchronous Asynchronous Receiver Transmitter) để sử dụng cho truyền thông.
Vi mạch PIC16F876 được đóng gói nhựa, gồm có 28 chân dạng gói PDIP (Plastic Dual In-line) và SOIC (Plastic Small Outline). Gói PDIP 28 chân được dùng để thuận tiện cho hàn tay. Gói khác thì sử dụng công nghệ dán bề mặt (SMT – Surface Mount Technology) và khó khi hàn tay. Hình 3.4 là hình ảnh về gói PDIP 28 chân.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 3-4: Gói PDIP 28 chân của PIC16F876 3.1.3.1. Các cổng vào ra (I/O)
Các cổng vào ra (I/O) là một phần quan trọng của bộ vi điều khiển. Các cổng đầu ra sẽ được kết nối tới thiết bị cần được điều khiển trong hệ thống đã được thiết kế. Các cổng đầu ra sẽ có điện áp ra 5V và dòng điện 25mA.. Các rơ le cần được kết nối đến các cổng này, khi đó các thiết bị sử dụng dòng điện xoay chiều (AC) sẽ được điều khiển. Khi bộ vi điều khiển nhận dữ liệu về lệnh được gửi từ máy tính, nó sẽ thực hiện các lệnh để bật hoặc tắt cổng tương ứng phụ thuộc vào lệnh nhận được. Cổng PORTA có độ rộng 6-bit, là cổng 2 chiều. Thanh ghi định hướng dữ liệu tương ứng với cổng này là TRISA. TRISA có thể quyết định PORTA là cổng đầu ra hoặc đầu vào. Khi đặt 1 bit TRISA (=1) sẽ đặt PORTA tương ứng với 1 cổng đầu vào, đầu vào này sẽ đặt vào bộ điều khiển đầu ra tương ứng ở trạng thái trở kháng cao. Xóa bit TRISA về 0 sẽ làm cho chân PORTA tương ứng với 1 đầu ra, đầu ra này đưa nội dung của chốt đầu ra vào chân được chọn. PORTA có thể được cấu hình như các đầu vào tương tự. Để có được điều này ta phải cấu hình PORTA trong chế độ chuyển đổi tương tự thành số (A/D converter). Danh sách các thanh ghi được gán cho PORTA được thể hiện ở bảng 3.2. Trong thiết kế hệ thống này, PORTA chỉ được sử dụng như các cổng đầu ra. Do đó, bit TRISA luôn được đặt là 0.
Bảng 3-2: Các thanh ghi kết hợp với PORTA
Địa chỉ
Tên Bit 7 Bit 6
Bit 5
Bit 4
Bit 3 Bit 2 Bit 1 Bit 0 Giá trị trên: POR,B OR Giá trị trên tất cả các thành
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn phần khác : RESET 05h PORTA - - RA 5 RA 4
RA3 RA2 RA1 RA0 -- 0x 0000
--0u 0000 85h TRISA - - Thanh ghi định hướng dữ liệu PORTA --11
1111 --11 --11 1111 9Fh ADCO N1 ADF M - - - PCFG 3 PCFG 2 PCFG 1 PCFG 0 --0- 0000 --0- 0000 PORTB có độ rộng 8-bit, cổng 2 chiều. Không giống như PORTA, PORTA chỉ chứa đầu vào tương tự, PORTB là một cổng I/O duy nhất. Thanh ghi định hướng dữ liệu tương ứng là TRISB. PORTB làm việc cũng giống như PORTA. Khi đặt bit TRISB là 1 sẽ làm chân PORTB tương ứng như một đầu vào, đầu vào này sẽ đặt vào bộ điều khiển đầu ra tương ứng ở trạng thái trở kháng cao. Xóa bit TRISB về 0 sẽ làm cho chân PORTB tương ứng với 1 đầu ra, đầu ra này đưa nội dung của chốt đầu ra vào chân được chọn. Mỗi chân của PORTB đều có một mạch weak pull-up bên trong. Một bít điều khiển có thể đóng tất cả các mạch pull-ups. Điều này được thực hiện bằng cách xóa bit RBPU (OPTION_REG<7>). Bảng 4.3 liệt kê các thanh ghi được gán cho PORTB. Mạch weak pull-up tự động được chuyển về trạng thái ngắt khi cổng được cấu hình như một đầu ra. Các mạch pull-up bị vô hiệu khi khởi động lại nguồn. Trải qua quá trình cấu hình các cổng đầu vào, tất cả các mạch weak pull-up được kích hoạt. Điều này làm cho mạch đơn giản hơn và có số điện trở nhỏ nhất.
Bảng 3.3: Toàn bộ các thanh ghi được gán với PORTB
Địa chỉ
Tên Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Giá trị trên: POR,B OR Giá trị trên tất cả các thành phần khác : RESET 06h, 106h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu 86h, 186h
TRISB Thanh ghi định hướng dữ liệu PORTB 1111 1111
1111 1111 1111
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 81h, 181h OPTIO N_REG RBP U INTED G T0C S T0S E PSA PS2 PS1 PS0 1111 1111 1111 1111 Chú ý: x = không xác định, u= không đổi. Các ô được chia sẻ không được sử dụng bởi PORTB
3.1.3.2. Bộ thu phát đồng bộ/ không đồng bộ đa năng (USART)
USART là một trong hai khối vào ra nối tiếp. USART cũng được biết đến như giao diện truyền thông nối tiếp (SCI – Serial Communications Interface). Nó chuyển đổi dữ liệu dạng song song sang nối tiếp để truyền dẫn. USART tạo ra và loại bỏ các bit start (bắt đầu) và stop (dừng) xuất hiện ở mỗi ký tự. USART có thể được cấu hình như một hệ thống không đồng bộ truyền song công và có thể giao tiếp với các thiết bị ngoại vi như kết cuối CRT hay máy tính cá nhân. Hoặc USART có thể được cấu hình như hệ thống đồng bộ truyền bán song công, khi đó USART có thể giao tiếp với các thiết bị ngoại vi như các mạch tích hợp A/D hoặc D/A, và các EEPROM nối tiếp.
USART có thể được cấu hình ở các chế độ sau: 1. Bất đồng bộ (song công)
2. Đồng bộ - Master (bán song công) 3. Đồng bộ - Slave (bán song công)
Bit SPEN (RCSTA<7>) và bit TRISC<7:6> phải được lập để cấu hình chân RC6/TX/CK và RC7/RX/DT giống như USART. Trong khối (module) USART cũng có một bộ đa xử lý có khả năng phát hiện địa chỉ 9-bit. USART là một lõi truyền thông trong hệ thống PLC này. Nó chịu trách nhiệm truyền và nhận các gói dữ liệu qua mạng. USART sẽ được cấu hình ở chế độ bất đồng hộ sử dụng 8-bit địa chỉ.
3.1.3.3. Lựa chọn tốc độ Baud
Trong phần trước, modem TDA5051A được sử dụng ở tốc độ 600 hoặc 1200 baud. Do đó, cần phải cần phải có một bộ USART có cùng tốc độ với modem cho bộ vi điều khiển. Khi dùng cùng tốc độ như vậy, modem và bộ vi điều khiển có thể được đồng bộ khi dữ liệu được truyền từ modem tới bộ vi điều khiển. Để làm tăng công suất của modem, tốc độ 1200 baud được lựa chọn cho hệ thống. Tốc độ baud càng cao thì dữ liệu gửi từ máy tính cá nhân tới vi điều khiển càng nhanh.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Bộ tạo tốc độ baud của vi điều khiển PIC hỗ trợ cả hai chế độ của USART. Nó là một bộ tái tạo tốc độ baud 8-bit. Thanh ghi BRGH (TXSTA<2>) cũng tham gia điều khiển tốc độ baud. Trong chế độ đồng bộ, bit RBGH bị bỏ qua không dùng. Bảng 3.4 là các công thức tính tốc độ baud cho các chế độ USART khác nhau và chỉ áp dụng trong Master Mode (đồng hồ trong).
Đưa ra tốc độ baud và FOSC mong muốn, giá trị nguyên gần nhất cho thanh ghi SPBRG có thể được tính toán nhờ bảng 3.4. Bảng 3.4: Công thức tính tốc độ baud SYNC BRGH=0 (tốc độ thấp) BRGH=1 (tốc độ cao) 0 (Không đồng bộ) Tốc độ baud = FOSC/(64(X+1)) Tốc độ baud = FOSC/(16(X+1))
1 (Đồng bộ) Tốc độ baud = FOSC/(4(X+1)) Tốc độ baud = FOSC/(16(X+1))
X: giá trị trong thanh ghi SPBRG (0 – 255)
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Sử dụng tốc độ baud cao (BRGH=1) đem lại nhiều thuận lợi, ngay cả khi xung đồng hồ baud chậm hơn. Đó là vì biểu thức FOSC/(64(X+1)) có thể giảm lỗi tốc độ baud trong nhiều trường hợp. Khi ghi một giá trị mới lên thanh ghi SPBRG khiến bộ đếm thời BRG khởi động lại (hoặc bị xóa).
Bảng 3.5 cho thấy tốc độ baud trong chế độ không đồng bộ (BRGH=1). Để cho lỗi tốc độ baud nhỏ nhất, yêu cầu cần phải lựa chọn tần số của bộ dao động phù hợp. Từ bảng 3.4, tần số của bộ tạo dao động phù hợp là 3.6864MHz với giá trị thanh ghi SPBRG là 191 và tỉ lệ lỗi là 0%. Với tỉ lệ lỗi như vậy, dữ liệu truyền và nhận sẽ tốt nhất.