CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VI ĐIỀU KHIỂN PIC 1. Giới thiệu pic: 1.1 Sơ lược về pic: PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển đầu tiên của họ PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều khiển CP1600. Vi điều khiển này sau đó được nghiên cứu phát triển thêm và từ đó hình thành nên dòng vi điều.2 Phân loại pic: ➢ Kí hiệu: PIC12xxxx: độ dài lệnh 12 bit. PIC16xxxx: độ dài lệnh 14 bit.
PIC18xxxx: độ dài lệnh 16 bit. ➢ Theo chữ cái: C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM). F: PIC có bộ nhớ flash. LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp.
LV: tương tự như LF, đây là kí hiệu cũ. ➢ Theo hai chữ số đầu tiên: + Pic 12cxx,dòng pic cơ bản. + Pic 10F, 12F,16F dòng phổ biến hiên nay 14bit. + Pic 18 dòng cao cấp, độ dài lệnh 16bit.
+ Vi điều khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm chữ A ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A 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.3 Ngôn ngữ lập trình: Hộp ngữ, ccs, map lap. Sơ đồ vi điều khiển: 2.1 Sơ đồ chân vi điều khiển 3 pic 16f877a: 7 Hình 1.1 Sơ đồ chân vi điều khiển 3 pic 16f877a 8 2.1 Bộ nhớ chương trình: Có địa chỉ từ 0000h đến 1FFFh, trong đó từ địa chỉ 00005h đến 1FFFh phân thành 3 trang.3: sơ đồ bộ nhớ chương trình.2 Bộ nhớ dữ liệu: Bộ nhớ EEPROM pic 16f877a, được chia ra làm 4 bank.
Mỗi bank có dung lượng 128 byte bao gồm các thanh ghi có chức năng đặc biệt SFG Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau: 3. Đặc điểm pic 16f877a: ➢ Hổ trợ dao động thạch anh lên tới 20 Mhz. ➢ 8 kênh adc 10 bit. 10 ➢ Có 2 kênh cpp gồm ccp1 và eccpi.
➢ 1 module giao tiếp nối tiếp usart theo chẩn rs 232 và rs 485. ➢ Timer 0: bộ đếm 8 bit. ➢ Timer 1: bộ dếm 16 bit, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep. ➢ Timer 2: bộ đếm 8 bit.
Chức năng các modul của pic 1678ffa: 4.1 Modul I/O: Các port của 16f877a cho phép truyền và nhận dữ liệu theo 2 chiều. Hướng truyền được xác định bằng thanh ghi tris x “ x là port”, nếu 1 bit trong thanh ghi này được gán ở giá trị 0 thì pic hiểu là output còn ngược lại là input.vi du: trisb=’11110000’ từ rb0 đến rb3 la input, con lai la output. ➢ Port A: Gồm 8 chân, có chúc năng input và output ngoài ra còn có thêm các chức năng: + RA4 chân cấp xung clock cho timer 0. + chân vào điện thế chuẩn cho chức năng ADC.
+ RA6,RA7 chân cấp dao động ngồi cho vi điều khiển. ➢ Port B: Gồm 8 chân từ RB0 đến RB7, cũng có chức năng input và out như port a, ngoài ra còn có thêm chức năng liên quan đến ngắt ngoại vi và timer 0. Port B còn được tich hợp chức năng điện trở kéo được điểu khiển bởi chương trình.Bên cạnh đó một số chân của port B dùng trong qúa trinh nạp dữ liệu cho vi điều khiển. ➢ Port C: Củng giống như port A nhưng có thêm chức năng: dùng cho bộ định thời và đếm, bộ so sánh và điều khiển pwm, giao tiếp nối tiếp USART, giao tiếp I2C,SPI, SSP.
➢ Port D: Củng giống như port A, có 8 chân điều input và output. Ngoài ra còn có thêm chức năng của bộ enhthenced PWM và các cổng dữ liệu của chuẩn giao tiếp PSP (parallel slave port). 11 ➢ Port E: Gồm 4 chân, có chức năng: + 3 chan ngõ vào ra của digital I/O. + Các chân dữ liệu của giao tiếp PSP.
+ Chân MCLR/VPP/RE3 hoạt động như một input (khi MCLRE = 0).Nếu không thì hoạt động như Master clear input. RE3 có chức như the grogamming voltage input trong suốt quá trình lập trình. ➢ Các bộ timer: + Timer 0: Là bộ đếm 8 bit của pic 16f877a, kết nối với bộ chia tần số(prescaler) 8 bit. Cấu trúc của timer 0 cho phép chọn xung clock tác động, cạnh tích cực của xung clock, ngắt timer 0 xuất hiện khi tràn timer 0.
bit TMR0IE (intcon<5>) bit điều khiện timer 0. TMROIE =1 cho phép ngắt timer 0, TMR0IF = 0, không cho phép ngắt timer 0 tác động. sơ đồ khối của timer 0 như sau: Hình 1.4: Modul I/O 12 + Timer 1: Bộ định thời 16 bit, giá trị được lưu trong 2 thanh ghi TMR1H và TMR1L. cờ ngắt của timer 1 là bit TMR1IF (PIR1<0>).
Bit điều khiển của timer 1 là TMR1IE (PIE<0>). Timer 1 cũng có 2 chế độ định thời: Chế độ định thời timer với xung kích là xung clock của oscillator (tần số ¼ tần số osc), bộ đếm couter với xung kích là xung phản ánh các sự kiện cạnh lên, thông qua chân RC0/T1oso/t1Ck 1. Việc lựa chọn timer hoặc couter là do TMR1CS. Sơ đồ khối của timer 1: Hình 1.5: Bộ định thời 16 bit.
+ Timer 2: Bộ định thời 8 bit được hổ trợ bởi 2 bộ chia tần số prescaler và postcaler. Thanh ghi chứa giá tri là TMR2, bit cho phép ngắt tác động là TMR2ON, cờ ngắt là bit TMR2IF. Xung ngõ vào (1/4 osc) được đưa qua bộ chia tần số prescaler 4 bit. Sơ đồ khối của timer 2: Hình 1.6: Bộ định thời 8 bit.
13 ➢ Bộ ADC: ADC (Analog to digital Coverter) là bộ chuyển tín hiệu giữa tương tự và số. ở pic 16f877A có 8 ngõ vào analog (RÃ4 – RA0 và RE2 – RE0). Hiệu điện thế chuẩn vref là vdd, vss hay được xác lập bởi RA2 và RA3, kết quả chuyển đổi từ tương tự sang số là 10 bit. Sơ đồ khối chuyển đổi adc: Cách lưu giá trị chuyển đổi ad Hình 1.2 Modul điều rộng xung (pwm): + Modul ccp1 có 3 chế độ: Capture, so sánh, chế độ điều khiền xung pwm.
Chân điều khiển là RC2/CCP1. Sơ đồ cpp Compare mode: Hình 1.8: modul điều rông xung. + Modul ccp liên kết với thanh ghi điểu khiền ccp1con hoặc eccp1con và 1 thanh ghi dữ liệu ccpr1 hoặc eccpr1. Thanh ghi dữ liệu gồm 2 thanh ghi 8 bit, tất các thanh ghi này diếu đọc và ghi.
+ Chế độ điều rộng xung pwm: Hình 1.9: Sơ đồ khối pwm mode. - Khi hoạt động ở chế độ xung, tín hiệu sau khi điều chế sẽ được đưa ra ccp1. Phải chọn chân out pwm. ví dụ setup pwm: thiết lập thời gian của chu ky xung (PR2), thiết lập độ rộng xung (duty clcle) dựa vào thanh ghi ccp1l và các bit ccp1con, điều khiển ccp1, thiết lập giá trị bộ chia tần số, cho phép ccp hoat động.
- Chu kỳ: (giá trị 1 chu kỳ), Pwm =[(pr2)+1]*4*tosc*giá trị bộ chia tần số TMR2.3 Giao tiếp nối tiếp: 4.1 USART: Là một trong hai chuẩn giao tiếp nối tiếp.USART còn được gọi là giao diện giao tiếp nối tiếp nối tiếp SCI (Serial Communication Interface). Có thể sử dụng giao diện này cho các giao tiếp với các thiết bị ngọai vi, với các vi điều khiển khác hay với máy tính. Các dạng của giao diện USART ngọai vi bao gồm: Bất động bộ (Asynchronous), Đồng bộ Master mode, Đồng bộ Slave mode. Hai pin dùng cho giao diện này là RC6/TX/CK và RC7/RX/DT, trong đó RC6/TX/CK dùng để truyền xung clock (baud rate) và RC7/RX/DT dùng để truyền data.
Trong trường hợp này ta phải set bit TRISC<7:6> và SPEN (RCSTA<7>) C0 để cho phép giao diện USART.2 Truyền dữ liệu qua chuẩn giao tiếp USART bất đồng bộ: Hình 1.11: Sơ đồ khối của khối truyền dữ liệu USART. Để truyền dữ liệu theo giao diện USART bất đồng bộ, ta cần thực hiện tuần tự các bước sau: 1. Tạo xung truyền baud bằng cách đưa các giá trị cần thiết vào thanh ghi RSBRG và bit điều khiển mức tốc độ baud BRGH. Cho phép cổng giao diện nối tiếp nối tiếp bất đồng bộ bằng cách clear bit SYNC và set bit PSEN.
Set bit TXIE nếu cần sử dụng ngắt truyền. Set bit TX9 nếu định dạng dữ liệu cần truyền là 9 bit. Set bit TXEN để cho phép truyền dữ liệu (lúc này bit TXIF cũng sẽ được set). Nếu định dạng dữ liệu là 9 bit, đưa bit dữ liệu thứ 9 vào bit TX9D.
Đưa 8 bit dữ liệu cần truyền vảo thanh ghi TXREG. Nếu sử dụng ngắt truyền, cần kiểm tra lại các bit GIE và PEIE (thanh ghi INTCON). Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diện USART bất đồng bộ: Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép tất cả các ngắt. Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF.
Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE. Thanh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT). Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền. Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện.
Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud.3 Truyền dữ liệu qua chuẩn giao tiếp USART bất đồng bộ: Hình 1.12: Sơ đồ khối của khối nhận dữ liệu USART. Dữ liệu được đưa vào từ chân RC7/RX/DT sẽ kích hoạt khối phục hồi dữ liệu. Khối phục hồi dữ liệu thực chất là một bộ dịch dữ liệu có tốc độ cao va có tần số hoạt động gấp 16 lần hoặc 64 lần tần số baud. Trong khi đó tốc độ dịch của thanh thanh ghi nhận dữ liệu sẽ bằng với tần số baud hoặc tần số của oscillator.
khi sử dụng giao diện nhận dữ liệu USART bất đồng bộ cần tiến hành tuần tự các bước sau: 1. Thiết lập tốc độ baud (đưa giá trị thích hợp vào thanh ghi SPBRG và bit BRGH. Cho phép cổng giao tiếp USART bất đồng bộ (clear bit SYNC và set bit SPEN). Nếu cần sử dụng ngắt nhận dữ liệu, set bit RCIE.
Nếu dữ liệu truyền nhận có định dạng là 9 bit, set bit RX9. Cho phép nhận dữ liệu bằng cách set bit CREN. Sau khi dữ liệu được nhận, bit RCIF sẽ được set và ngắt được kích hoạt (nếu bit RCIE được set). Đọc giá trị thanh ghi RCSTA để đọc bit dữ liệu thứ 9 và kiểm tra xem quá trình nhận dữ liệu có bị lỗi không.
Đọc 8 bit dữ liệu từ thanh ghi RCREG. Nếu quá trình truyền nhận có lỗi xảy ra, xóa lỗi bằng cách xóa bit CREN. Nếu sử dụng ngắt nhận cần set bit GIE và PEIE (thanh ghi INTCON).