Chế độ Capture

Một phần của tài liệu Đề tài Kit thực tập PIC 16F877A (Trang 52)

Để module CCP hoạt động trong chế độ

Capture thì Timer 1 phải thiết lập ở chế độ định thời hoặc chế độ đếm đồng bộ, nếu không chếđộ Capture sẽ không làm việc. Khi chếđộ Capture được sử dụng, chân CCP phải

được mặc định là ngõ vào.

Trong chế độ Capture, hai thanh ghi CCPRxH và CCPRxL sẽ ghi lại giá trị 16 bit

của Timer 1 khi có môt sự kiện xuất hiện trên chân CCPx (giá trị trong Timer 1 không bị

reset). Một sự kiện được định nghĩa bởi: - Bất cứ một xung cạnh xuống - Bất cứ một xung cạnh lên - Bất cứ 4 xung cạnh lên - Bất cứ 16 xung cạnh lên

Sự kiện được lựa chọn bởi các bit điều khiển CCPxM3:CCPxM0 (CCPxCON<3:0>). Khi một sự kiện xuất hiện giá trị trong Timer 1 được ghi lại và cờ

CCPxIF được bật lên, cờ này phải được xóa bằng phần mềm trước khi một sự kiện khác xảy ra nếu không giá trị lưu trước đó sẽ bị xóa.

Khi thay đổi hoạt động chế độ Capture sẽ tạo ra một ngắt nên khi muốn thay đổi hoạt động chếđộ Capture trước hết phải vô hiệu hóa các ngắt và xóa các cờ ngắt.

3.3.1 Bộđịnh tỉ lệ của CCP:

Bộđịnh tỉ lệ prescaler có 4 giá trị tỉ lệđược lựa chọn bởi các bit CCPxM3:CCPxM0. Bất cứ khi nào module CCP ngừng hoạt động hoặc không hoạt động trong chế độ

Khi thay đổi giá trị prescaler có thể gây ra một ngắt. Giá trị đếm prescaler sẽ không bị xóa nên sự Capture đầu tiên có thể không xuất phát từ giá trị 0 của bộ prescaler.

3.4 Chếđộ Compare:

Để module CCP hoạt động trong chế độ

Compare thì Timer 1 phải thiết lập ở chế độ định thời hoặc chế độ đếm đồng bộ, nếu không chế độ Compare sẽ không làm việc. Khi chếđộ Compare được sử dụng, chân CCP phải được mặc định là ngõ vào.

Trong chế độ Compare giá trị trong thanh ghi TMR1 sẽ được so sánh với một giá trị đã được lưu sẵn trong thanh ghi 16 bit CCPRx, khi hai giá trị này bằng nhau, một ngắt sẽ xảy ra nếu được cho phép.Chân CCPx sẽ:

- Lên mức cao - Xuống mức thấp

- Hay giữ nguyên trạng thái

Trạng thái của chân CCP sẽ phụ thộc vào các bit CCPxM3:CCPxM0.

Việc xóa thanh ghi CCPxCON sẽ đẩy trạng thái của chân CCP xuống mức thấp.

Đặc biệt trong chếđộ này, khi giá trị trong 2 thanh ghi TMR1 và CCPRx bằng nhau thì một xung tín hiệu sẽ được tạo ra. Xung này sẽ reset cặp thanh ghi TMR1H và TMR1L. Điều này cho phép thanh ghi CCPRx hoạt động giống như một thanh ghi khoảng thời gian cho Timer 1.

3.5 Chếđộđiều biến xung PWM:

Trong chế độđiều chếđộ rộng xung PWM, chân CCP tạo ra một tín hiệu có độ phân giải 10 bit. Chân CCP phải được mặc định là ngõ ra.

Việc xóa thanh ghi CCPxCON sẽ đẩy chân ngõ ra CCPx xuống mức mặc định thấp.

3.5.1 Chu kỳ PWM:

Chu kỳ PWM được chỉ định trong thanh ghi PR2. Chu kỳ có thể được tính bằng công thức:

Chu kỳ PWM = [(PR2 + 1)*4*Tosc*giá trị tỉ lệ TMR2) Tần số PWM = 1/ chu kỳ PWM.

- Thanh ghi TMR2 bị xóa

- Chân CCPx được set lên mức 1

- Giá trị Duty cycle ( Chu kỳ nhiệm vụ) từ thanh ghi CCPRxL sẽ chuyển sang thanh ghi CCPRxH.

Lưu ý: Bộ postcaler của Timer 2 không có tác dụng trong việc quyết định tần số (adsbygoogle = window.adsbygoogle || []).push({});

PWM. Bộ prescaler được kết hợp với thanh ghi TMR2 để tạo ra bộ đếm 10 bit tương ứng.

3.5.2 Chu kỳ nhiệm vụ của PWM:

Giá trị chu kỳ nhiệm vụ của PWM được quy định bằng 10 bit : 8 bit trong thanh ghi CCPRxL và 2 bit trong thanh ghi CCPxCON (DCxB1, DCxB0). Chu kỳ nhiệm vụ PWM có thểđược tính theo công thức sau:

Ton PWM = ( Giá trị của DCxB9:DcxB0) * Tosc * giá trị tỉ lệ tiền định TMR2

Giá trị DCxB9:DcxB0 có thể thay đổi tùy ý nhưng giá trị này sẽ không được tải vào trong thanh ghi CCPRxH cho đến khi trạng thái cân bằng xảy ra giữa 2 thanh ghi PR2 và TMR2. Trong chếđộ PWM thanh ghi CCPRxH là thanh ghi chỉđọc.

Độ phân giải PWM có thể tính theo công thức sau:

3.5.3 Cài đặt hoạt động cho PWM:

Để cài đặt hoạt động cho chếđộ PWM ta tiến hành các bước sau: - Định chân CCPx là ngõ ra.

- Thiết lập chu kỳ PWM bằng việc ghi vào thanh ghi PR2

- Thiết lập chu kỳ nhiệm vụ PWM bằng việc ghi giá trị vào các bit DCxB9:DCxB0. - Cài đặt giá trị tỉ lệ cho Timer 2 và cho phép Timer 2 hoạt động bằng cách ghi vào

thanh ghi T2CON.

3.5.4 Module MSSP (Master Synchronous Serial Port): Giới thiệu:

Module MSSP là một giao diện nối tiếp, hữu dụng cho việc giao tiếp với các thiết bị

ngoại vi hoặc các VĐK khác. Những thiết bị

ngoại vi này có thể là EEPROMs nối tiếp, thanh ghi dịch, điều khiển hiển thị hay bộ biến

đổi ADC …

Module MSSP có thể hoạt động ở một trong hai chếđộ:

- SPI ( Serial Peripheral Interface) - I2C (Inter- Intergrated Circuit)

+ Full master Mode

+ Slave Mode ( with general address call)

Giao tiếp I2C cung cấp các chế độ sau

đây trong phần cứng: - Master mode

- Multi Master Mode - Slave Mode

Thanh ghi điều khiển:

Module MSSP có 3 thanh ghi liên quan: thanh ghi trạng thái (SSPSTAT) và hai thanh ghi điều khiển (SSPCON và SSPCON2). Việc sử dụng và cài đặt giá trị cho các thanh ghi này phụ thuộc vào việc Module MSSP hoạt

động ở chếđộ nào.

CHƯƠNG IV : B BIN ĐỔI ADC 10 BIT 4.1 Giới thiệu module ADC 10 bit:

Trên VĐK có một bộ biến đổi ADC 10bit, 8 ngõ vào Analog, 8 ngõ vào này được nối với ngõ vào của bộ chuyển đổi. Sau đó bộ chuyển đổi sẽ tạo ra một kết quả 10 bit tương ứng với giá trị Ananlog đầu vào. Điện thế tham chiếu đầu vào sẽ được lựa chọn bằng phần mềm (từ Vdd, Vss hoặc 2 chân AN2, AN3. Module ADC là module duy nhất có khả năng hoạt động trong chế độ ngủ. Để hoạt động trong chế độ ngủ Sleep, xung clock cung cấp cho ADC phải được nhận từ dao động nội RC của ADC.

Module ADC bao gồm 4 thanh ghi:

- Thanh ghi chứa byte cao của kết quả ADRESH - Thanh ghi chứa byte thấp của kết quả ADRESL - Thanh ghi chứa các bit điều khiển ADCON0 - Thanh ghi chứa các bit điều khiển ADCON1 (adsbygoogle = window.adsbygoogle || []).push({});

4.2 Các thanh ghi điều khiển: Thanh ghi điều khiển ADCON0: Thanh ghi điều khiển ADCON0:

Bit 7:6 ADCS1:ADCS0: Các bit lựa chọn tần số chuyển đổi A/D 00 =FOSC/2

01 =FOSC/4 10 =FOSC/32

11 =FRC (xung clock được lấy từ dao đông nội RC)

Bit 5:3 CHS2:CHS0: Các bit lựa chọn kênh Analog

000: Kênh 0, (AN0) 001: Kênh 1, (AN1) 010: Kênh 2, (AN2) 011: Kênh 3, (AN3) 100: Kênh 4, (AN4) 101: Kênh 5, (AN5) 110: Kênh 6, (AN6) 111: Kênh 7, (AN7)

Bit 2 GO/ DONE: Bit báo trạng thái chuyển đổi A/D Khi bit ADON = 1

1: Quá trình A/D đang thực hiện (Khi chúng ta set bit này lên thì quá trình chuyển đổi sẽ xảy ra, khi quá trình kết thúc nó sẽ tựđộng được xóa bằng phần mềm).

0: Quá trình A/D không xảy ra hoặc đã hoàn tất. Bit 1 Không sử dụng, giá trị là 0

1: Nguồn được cung cấp cho A/D 0: Ngưng cung cấp nguồn cho A/D

Thanh ghi điều khiển ADCON1:

Bit 7 ADFM: Bit lựa chọn định dạng kết quả A/D

1: Canh phải, 6 bit cao nhất của thanh ghi ADRESH có giá trị 0 0: Canh trái, 6 bit thấp nhất của thanh ghi ADRESL có giá trị 0 Bit 6 ADCS2: Bit lựa chọn clock chuyển đổi A/D

Bit 5,4 Không sử dụng

Bit 3:0 PCFG3:PCFG0: Các bit điều khiển cấu hình các chân ADC

Hai thanh ghi ADRESH và ADRESL chứa giá trị 10 bit của kết quả ADC. Khi quá trình chuyển đổi hoàn tất, kết quả ADC sẽ được lưu lại trong cặp thanh ghi này. Bit GO/DONE bị xóa và cờ ngắt ADIF được bật lên.

Sau khi module ADC đã được cấu hình như mong muốn, chúng ta phải lựa chọn kênh chuyển đổi A/D trước khi chuyển đổi ADC xảy ra. Các chân Analog phải được chọn là ngõ vào bằng cách set các bit trong thanh ghi TRIS tương ứng.

Để tiến hành chuyển đổi ADC, tiến hành theo các bước sau: Bước 1: Cấu hình cho module ADC:

- Cấu hình cho các chân ngõ vào/ điện thế chuẩn và I/O số (ADCON1) - Lựa chọn kênh ngõ vào A/D (ADCON0)

- Lựa chọn tần số chuyển đổi (ADCON0) - Cấp nguồn cho module ADC (ADCON0) Bước 2: Cấu hình các ngắt ADC (nếu cần):

- Xóa cờ ngắt ADIF

- Set bit GIE (Cho phép ngắt toàn cục)

- Set bit ADIE (Cho phép ngắt chuyển đổi ADC) Bước 3: Đợi thời gian Acquisition (lấy mẫu) cần thiết Bước 4: Bắt đầu quá trình chuyển đổi ADC:

Set bit GO/ DONE (ADCON0) Bước 5: Đợi quá trình ADC hoàn tất:

Chạy vòng lập đợi bit GO/DONE bị xóa hoặc cờ ngắt ADIF bật lên

Bước 6 : Đọc kết quả trong 2 thanh ghi ADRESH và ADRESL, xóa bit ADIF ( nếu cần thiết)

Bước 7: Nếu muốn tiếp tục thực hiện chuyển đổi ADC trong chu kỳ kế tiếp thì quay lại bước 1 hoặc bước 2.

Sơđồ khối của bộ biến đổi ADC 10 bit:

Thời gian lấy mẫu bao gồm hai giai đoạn:

Thời gian acquition: Là thời gian cần để tụđiện của bộ sample and hold (tạm dịch là bộ lấy mẫu và giữ) nạp điện để có giá trị điện thế bằng với giá trị của nguồn analog cần lấy mẫu. (adsbygoogle = window.adsbygoogle || []).push({});

Thời gian chuyển đổi từ tương tự sang số: Vào khoảng 12 chu kỳ của bộ ADC. Tổng 2 thời gian đó ta được thời gian lấy mẫu

Cách tính thời gian acquition:

TACQ = Thời gian ổn định của phần cứng khuếch đại + Thời gian nạp của tụ + hệ

số nhiệt độ

TACQ = TAMP + TC + TCOFF

= 2µs + TC +[(Nhiệt độ - 250C)(0.05/0C)] = 19.72 µs

4.5 Lựa chọn xung clock cho biến đổi A/D:

Thời gian chuyển đổi 1 bit được định nghĩa là chu kỳ TAD. Để biến đổi 10 bit chúng ta cần thời gian xấp xỉ 12TAD . Nguồn xung clock cung cấp cho ADC được lựa chọn bằng phần mềm. Có 4 giá trị để lựa chọn:

- 2 Tosc

- 8 Tosc

- 32 Tosc

- Dao động nội RC của module ADC (2-6µs)

Để đảm bảo quá trình ADC chính xác thì xung clock ADC (TAD) phải được lựa chọn đểđảm bảo rằng giá trị tối thiểu của TAD là 1.6µs.

4.6 Cấu hình các chân Analog:

Các thanh ghi ADCON1 và TRIS điều khiển hoạt động của các chân ADC. Đối với các chân cần được quy định là ngõ vào Analog thì các bit tương ứng trong thanh ghi TRIS phải được set, nếu các bit trong thanh ghi TRIS bị xóa (output) thì các ngõ ra số

(VOH hoặc VOL) sẽ được chuyển đổi. Hoạt động của bộ ADC sẽ phụ thuộc vào trạng thái của các bit CHS2:CHS0 và các bit trong thanh ghi TRIS.

4.7 Chuyển đổi ADC:

Việc xóa bit GO/DONE trong quá trình chuyển đổi sẽ bỏ qua chuyển đổi hiện tại. Cặp thanh ghi kết quả chuyển đổi ADC sẽ không được cập nhật những mẫu chuyển đổi ADC đã hoàn tất. Do đó, cặp thanh ghi ADRESH và ADRESL sẽ chứa giá trị của lần chuyền đổi hoàn tất cuối cùng ( hoặc giá trị được ghi cuối cùng vào 2 thanh ghi này).

Sau khi một chuyển đổi ADC bị bỏ qua, việc lấy mẫu tiếp theo dựa trên kênh ADC

đã chọn sẽ tựđộng diễn ra. Sau đó bit GO/DONE có thểđược set để bắt đầu chuyển đổi ADC.

Chú ý: Bit GO/DONE không nên được set trong cùng một lệnh với lệnh mở

module ADC.

Cặp thanh ghi ADRESH và ADRESL dùng để lưu kết quả ADC 10 bit. Module ADC cho phép ta lựa chọn việc canh trái hay canh phải kết quả 10 bit trong thanh ghi kết quả bằng cách xóa hoặc set bit ADFM. Các bit còn lại mang giá trị là 0.

4.8 Hoạt động của module ADC trong chếđộ ngủ:

Module ADC có thể hoạt động trong chếđộ ngủ (Sleep). Điều này yêu cầu nguồn xung clock cung cấp cho ADC phải từ dao động RC (ADCS1:ADCS0 = 11). Khi xung clock RC được chọn, module ADC sẽ đợi một chu kỳ máy trước khi bắt đầu tiến hành chuyển đổi ADC. Điều này cho phép lệnh SLEEP có thể được thực thi mà không gây nhiễu đến quá trình ADC. Khi chuyển đổi ADC hoàn tất, bit GO/DONE sẽ bị xóa và kết quảđược lưu vào cặp thanh ghi ADRESH, ADRESL. Nếu ngắt ADC được cho phép, nó sẽ làm VĐK thoát khỏi chếđộ ngủ. Nếu ngắt không được cho phép, module ADC sau đó sẽ bị tắt mặc dù bit ADCON vẫn còn ở mức cao.

Khi nguồn xung clock khác được chọn chứ không phải RC, lệnh SLEEP sẽ làm cho chuyển đổi ADC hiện tại bị bỏ qua và module ADC sẽ bị tắt dù bit ADCON vẫn còn

đang ở mức 1.

4.9 Ảnh hưởng của Reset:

Một reset thiết bị sẽ buộc tất cả các thanh ghi rơi vào trạng thái Reset của chúng.

Điều này buộc module ADC bị tắt và bất kỳ chuyển đổi ADC nào cũng bị bỏ qua. Tất cả (adsbygoogle = window.adsbygoogle || []).push({});

các chân ngõ vào A/D sẽđược cấu hình là các ngõ vào Analog.

Giá trị trong cặp thanh ghi ADRESH:ADRESL không bị thay đổi trong một Reset Power-on. Cặp thanh ghi này sẽ chứa một giá trị không biết trước sau reset Power-on.

CHƯƠNG V : ĐIN TH THAM CHIU VÀ CÁC B SO

SÁNH ĐIN

5.1 Module Comparator:

5.1.1 Giới thiệu module comparator :

Module so sánh (Compararor) chứa 2 bộ so sánh tương tự. Ngõ vào của bộ so sánh

được đa hợp với các chân xuất nhập từ RA0 đến RA3 trong khi ngõ ra lại đa hợp với các chân RA4 và RA5. Điện thế trên chip cũng có thểđưa vào ngõ vào của bộ so sánh.

Thanh ghi CMCON điều khiển ngõ vào và ngõ ra của bộ so sánh.

Bit 7 C2OUT: Bit cho biết kết quả ngõ ra của bộ so sánh 2 Khi C2INV = 0: 1: Nếu C2Vin+ > C2Vin- 0: Nếu C2Vin+ < C2Vin- Khi C2INV = 1: 1: Nếu C2Vin+ < C2Vin- 0: Nếu C2Vin+ > C2Vin- Bit 6 C1OUT : Bit ngõ ra bộ so sánh 1

Khi C1INV = 0: 1: Nếu C1Vin+ > C1Vin- 0: Nếu C1Vin+ < C1Vin- Khi C1INV = 1: 1: Nếu C1Vin+ < C1Vin- 0: Nếu C1Vin+ > C1Vin- Bit 5 C2INV : Bit đảo ngõ ra bộ so sánh 2

1: Ngõ ra C2 đảo

0: Ngõ ra C2 không đảo Bit 4 C1INV: Bit đảo ngõ ra bộ so sánh 1

1: Ngõ ra C1 đảo

0: Ngõ ra C1 không đảo

Bit 3 CIS: Bit chuyển đổi ngõ vào bộ so sánh Khi CM2:CM0 = 110:

1: C1 Vin- nối với chân RA3/AN3 C2 Vin- nối với chân RA2/AN2 0: C1 Vin- nối với chân RA0/AN0 C1 Vin- nối với chân RA1/AN1

Bit 2-0 CM2:CM0: Bit chọn chếđộ hoạt động của bộ so sánh.

5.1.2 Cài đặt chếđộ cho bộ so sánh:

Có 8 chế độ hoạt động của bộ so sánh, thanh ghi CMCON được sử dụng để lựa chọn những chế độ này. Thanh ghi TRIS điều khiển các chân I/O của bộ so sánh trong mỗi chế độ. Nếu chế độ so sánh bị thay đổi, ngõ ra của bộ so sánh sẽ không còn chính xác nữa.

Lưu ý: Các ngắt do bộ so sánh sinh ra nên được cấm trong suốt quá trình thay đổi chếđộ hoạt động, nếu không các ngắt ngoài ý muốn có thể sinh ra.

Một bộ so sánh đơn được trình bày trong hình bên cạnh đây, nó cho chúng ta biết sự thay đổi trạng thái logic ngõ ra tương ứng với trạng thái tín hiệu Analog ngõ vào.

Khi VIN+ > VIN- thì ngõ ra lên mức cao và ngược lại.

Tại những cạnh này ngõ ra không biết chắc chắn.

5.1.3 Nguồn tham chiếu của bộ so sánh:

Một nguồn tham chiếu nội hoặc ngoại có thể được sử dụng. Việc lựa chọn nguồn

Một phần của tài liệu Đề tài Kit thực tập PIC 16F877A (Trang 52)