Ảng 2.8 Thiếtlập thanh gh iA điều khiển Timer/Counter1

Một phần của tài liệu đề tài thiết bị thực tập lập trình vi điều khiển AVR (Trang 43)

IV. NGÀY HỒN THÀNH NHI ỆM VỤ:

B ảng 2.8 Thiếtlập thanh gh iA điều khiển Timer/Counter1

0 0 Timer/counter1 ngắt ra khỏi chân lối ra OC1X

0 1 Kim tra (toglle) lối ra OC1X 1 0 Xĩa lối ra OC1X thành 0 1 1 Đặt lối ra OC1X thành 1

Bit 3,2 : Là các bit dự trữ trong AT90S8515và luơnđược đọc giá trị 0.

Bit 1,0 : Các bit lựa chọn bộ điều chế độ rộng xung (Pulse Width Modulator). Các bit này lựa chọn thao tác PWM của bộ timer/counter1 được cho ở bảng sau:

PWM11 PWM10 Description

0 0 Thao tác PWM của timer/counter bị cấm 0 1 PWM 8 bit

1 0 PWM 9 bit 1 1 PWM 10 bit

b. Thanh ghi B điều khiển Timer/counter1

Hình 2.22 Cấu trúc thanh ghi A điều khiển Timer/Counter1

Bit 7 : Khi bit ICNC1 bit bị xĩa thành 0 chức năng input capture trigger noise canceler bị cấm. Mạch input capture được lật trạng thái ở sườn dương/ âm đầu tiên được lấy mẫu trên chân ICP (input capture pin) nhưđược chỉ định. Khi bit ICNC1 được đặt thành 1, 4 mẫu đãđuợc lấy trọn vẹn được đo trên chân ICP và tất cả các mẫu cần phải phù hợp về mức High/Low với thơng số kỹ thuật về input capture trigger quy định cho bit ICES. Tần số lấy mẫu hiện thời là tần số đồng hồ XTAL.

Bit 6 : Lựa chọn sườn input capture 1. Khi bit ICES1 được xĩa thành 0, nội dungcủa bộ timer/counter1 được truyền đến thanh ghi ICR1 (input capture register), trên sườn âm của chân ICP (input capture pin). Khi bit ICES1 được đặt thành 1 thì nội dung của bộ timer/counter1 được truyền đến thanh ghi ICR1 (input capture) trên sườn dương của chân ICP.

Bit 5,4 : Là các bit dự trữ trong AT90S8515 và luơnđược đọc giá trị là 0

Bit 3 : Xĩa timer/counter1 theo lần so sánh (clear timer/counter1 on compare match). Khi bit điều khiển CTC1 được đặt thành 1 bộ timer/counter1 được Reset về $0000 trong chu trìnhđồng hồ sau một lần so sánh. Nếu bit điều khiển CTC1 bị xĩa, thì bộ timer/counter1 tiếp tục đếm và khơng bị ảnh hưởng bởi kết quả sau lần so sánh. Bởi vì mỗi lần so sánh được phát hiện trong chu kỳ đồng hồ CPU kế tiếp theo lần trước, nên chức năng này sẽ thực hiện một cách khĩ khăn khi số chia tần số cao hơn 1 được sử dụng cho bộ định thời. Khi số chia tần số bằng 1 được sử dụng và thanh ghi so sánh A

đuợc đặt thành C thì bộ timer sẽ được thiết lập nhưsau : …|C-2|C-1| C | 0 | 1 |…

Khi mà bộ chia tần được đặt số chia thành 8, bộ định thời sẽ đếm giống nhưsauđây : …|C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2|C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1| C,0 ,0,0,0,0,0,0|…

Bit 2,1,0 : là các bit lựa chọn nguồn chia tần số của bộ timer/counter1 Bảng2.9 Thiết lập thanh ghi B điều khiển Timer/Counter1

CS12 CS11 CS10 Description

0 0 0 Stop the timer/counter1 is stopped

0 0 1 CK

0 1 0 CK/8

0 1 1 CK/64

1 0 0 CK/256

1 0 1 CK/1024

1 1 0 External Pin T1, falling edge 1 1 1 External Pin T1, rising edge

c. Thanh ghi Timer/counter1 TCNT1 (gồm TCNT1H và TCNT1L)

Thanh ghi 16 bit này chứa giá trị được đem chia tần số của bộ timer/counter 16 bit. Để

đảm bảo rằng cả hai byte High và Low được đọc và ghi đồng thời khi khối CPU try nhập các thanh ghi này, việc truy nhập được thực hiện bằng cách sử dụng một thanh ghi tạm thời 8 bit (TEMP). Thanh ghi tạm thời này cũng được sử dụng khi truy nhập OCR1A và ICR1. Nếu chương trình chính và cả đoạn chương trình ngắt cũng thực hiện việc truy nhập đến các thanh ghi bằng cách sử dụng TEMP, thì các ngắt cần phải bị cấm (disable) trong khoảng thời gian truy nhập từ chương trình chính hoặc các ngắt truy nhập nếu các ngắt đượccho phép lại

TCNT1 Timer/Counter1 write : khi CPU ghi vào byte cao (High) TCNT1H, dữ liệu đã ghi được đặt vào trong thanh ghi TEMP. Tiếp theo khi khối CPU ghi byte thấp TCNT1L, byte dữ liệu nàyđược kết hợp với byte dữ liệu trong thanh ghi TEMP, và tồn bộ 16 bit được ghi đồng thời vào thanh ghi TCNT1 Timer/Counter1. Do đĩ byte High TCNT1H cần phải được truy cập trước tiên đối với thao tác ghi trọn vẹn thanh thi 16 bit.

TCNT1 Timer/Counter1 read : khi khối CPU đọc byte thấp TCNT1L, dữ liệu của byte thấp TCNT1L được gửi tới CPU và dữ liệu của byte cao TCNT1H bị thay thế trong thanh ghi TEMP. Khi khối CPUđọc dữ liệu trong byte High TCNT1H thì CPU nhận dữ liệu trong thanh ghi TEMP. Do đĩ byte thấp TCNT1L cần phải được truy nhập trước tiên đối với thao tác đọc trọn vẹn thanh ghi 16 bit. Bộ timer/counter1 được thiết kế để hoạt động nhưmột bộ đếm tiến hoặc tiến/lùi (trong chế độ PWM) với thao tác truy nhập đọc và ghi. Nếu bộ timer/counter1 được ghi vào và một nguồn xung nhịp

được lựa chọn thì bộ timer/counter1 tiếp tục đếm trong chu trìnhđồng hồ định thời sau khi nĩđược đặt trước (Reset) bằng giá trị đãđược ghi.

d. Thanh ghi so sánh-A ngõ ra của Timer/counter1 OCR1A (gồm OCR1AH và OCR1AL)

Thanh ghi so sánh lỗi ra (output compare register) là một thanh ghi đọc/ghi 16 bit. Thanh ghi OCR bộ timer/counter1 chứa dữ liệu cần được so sánh liên tục với bộ timer/counter1. Diễn biến của những lần so sánh (actions on compare matches) được chỉ định trên thanh ghi điều khiển và trạng thái timer/counter1.

Bởi vì thanh ghi so sánh lối ra OCR1A là một thanh ghi 16 bit nên một thanh ghi tạm thời TEMP được sử dụng khi ghi vào OCR1A để bảo đảm rằng cà hai byte được cập nhật đồng thời. Khi CPU ghi byte cao OCR1AH dữ liệu được lưu trữ tạm thời trong thanh ghi. Khi khối CPU ghi byte thấp OCR1AH thanh ghi TEMPđược ghi đồng thời vào OCR1AH. Do đĩ byte cao OCR1AH cần phải được ghi trước tiên đối với một thao tác ghi trọn vẹn thanh ghi 16 bit. Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và ICR1. Nếu chương trình chính và đoạn chương trình ngắt (routine) cũng thực hiện thao tác truy nhập lên các thanh ghi bằng cách sử dụng TEMP, các ngắt cần phải bị cấm trong thời gian xảy ra quá trình truy nhập từ chương trình chính hoặc các ngắt truy nhập nếu các ngắt được cho phép lại.

e. Thanh ghi so sánh-B ngõ ra của Timer/counter1 OCR1B (gồm OCR1BH và OCR1BL)

Các thanh ghi so sánh lối ra (output compare) là các thanh ghi đọc/ghi 16 bit. Các thanh ghi so sánh lối ra bộ timer/counter1 chứa dữ liệu được so sánh liên tục với timer/counter1.

Diến biến của những lần so sánh được chỉ định trong thanh ghi điều khiển và trạng thái timer/counter1. Một lần so sánh chỉ xảy ra nếu timer/counter1 đếm đến giá trị OCR.

Hình 2.25 Cấu trúc thanh ghi so sánh A ngõ ra của Timer/Counter1 - OCR1A

Một phần mềm thực hiện thao tác ghi, đặt TCNT1 và OCR1A hoặc OCR1B thành cùng giá trị, sẽ khơng tạo ra một lần so sánh.

Một lần so sánh sẽ đặt cờ ngắt so sánh trong chu kỳ đồng hồ CPU kế tiếp theo sự kiện so sánh. Bởi vì các thanh ghi so sánh lối ra OCR1A và OCR1B là các thanh ghi 16 bit, nên một thanh ghi tạm thời TEMP được sử dụng khi OCR1A/B được ghi để bảo đảm là cả hai byte được cập nhật đồng thời. Khi CPU ghi byte cao OCR1AH hoặc OCR1BH dữ liệu được lưu trữ tạm thời vào thanh ghi TEMP. Khi khối CPU ghi byte thấp, OCR1AL hoặc OCR1BH thanh ghi TEMP ghi đồng thời vào OCR1AH hoặc OCR1BH. Do đĩ byte cao OCR1AH hoặc OCR1BH cần phải được ghi trước tiên đối với một thao tác ghi trọn vẹn thanh ghi 16 bit.

f. Thanh ghi bắt sống ngõ vào Timer/counter1 ICR1H và ICR1L)

Thanh ghi Iput capture là một thanhghi 16 bit chỉ để đọc. Khi sườn dương hoặc sườn âm (phù hợp với việc thiết lập sườn input capture, ICES1) của tín hiệu ở chân input capture - ICP, được phát hiện giá trị hiện thời của bộ timer/counter1 được truyền đến thanh ghi input capture – ICR1. Đồng thời cờ input capture ICF1 được đặt thành 1. Bởi vì thanh ghi input capture ICR1 là một thanh ghi 16 bit, nên một thanh ghi tạm thời TEMP được sử dụng để khi ICR1 được đọc cĩ thể đảm bảo rằng cả hai byte được

đọc đồng thời. Khi CPU đọc byte thấp ICR1L, dữ liệu được gửi đến khối CPU và dữ liệu của byte cao ICR1H được đặt vào thanh ghi TEMP. Khi khối CPU đọc dữ liệu trong byte cao ICR1H khối CPU nhận dữ liệu trong thanh ghi TEMP. Do đĩ byte thấp ICR1H cần phải được truy nhập trước tiên đối với một thao tác đọc trọn vẹn thanh ghi 16 bit. Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và OCR1A. Nếu chương trình chính và cả đoạn chương trình ngắt thực hiện việc truy nhập đến các thanh ghi bằng cách sử dụng TEMP, thì các ngắt cần phải bị cấm trong thời gian truy nhập từ chương trình chính hoặc các ngắt truy nhập nếu các ngắt được cho phép lại.

g. TIMER/COUNTER1 trong chế độ điều chếđộ rộng xung

Khi chế độ PWM được chọn, bằng cách thiết lập Timer/counter1, thanh ghi so sánh ngõ ra OCR1A và thanh ghi so sánh ngõ ra OCR1B, các chân ngõ ra PD5 (OC1A) /PD4 (OC1B) cĩ thể xuất ra xung được điều chế PWM đúng pha hoặc chạy khơng đều hoặc chạy tự do 8bit, 9bit hoặc 10 bit. Timer/counter1 hoạt động nhưmột bộ đếm lên/xuống, đếm lên từ giá trị $0000 đến giá trị TOP (xem bảng sau), vàkhi đĩ nĩ quay trở lại đếm về zero trước khi chu kỳ nàyđược lặp lại. Khi giá trị đếm bằng giá trị 10

bit cĩ trọng số thấp nhất trong thanh ghi OCR1A hoặc OCR1B, Các chân PD5(OC1A)/PD4(OC1B) được thiết lập lên một hoặc xố về 0 tuỳ thuộc vào cách thiết lập các bit COM1A1/COM1A0 hoặc COM1B1/COM1B0 trong thanh ghi điều khiển Timer/counter1 (TCCR1A).

Bảng 2.10 Giá trịTOP và tần số PWM

FTCK1chính là tần số xung nhịp của Timer/counter1.

Chú ý rằng nếu thanh ghi so sánh chứa giá trị TOP và bộ chia khơng được sử dụng (khi đĩ tần số đếm của bộ định thời là CK bằng cách thiết lập : CS12 CS11 CS10 = 001), ngõ ra PWM sẽ khơng sinh ra bất kỳ xung nào bởi vì giá trị đếm lên và đếm xuống được tiến đến ngay tức thì. Khi bộ chia được sử dụng (CS12 CS11 CS10 ≠ 001 hoặc 000), ngõ ra PWM được kích hoạt khi bộ đếm tiến đến giá trị TOP nhưng trong so sánh khi đếm xuống (lúc bộ đếm tiến đến giá trị TOP) thì khơng trùng khớp thời gian với lúc bộ đếm gặp giá trị TOP khi đếm lên nên một chu kỳ xung PWM được phát sinh. Đây là vấn đề hơi khĩ hiểu, nhưng nếu ta ngẫm nghĩ kỉ và xem lại phần thanh ghiđiều khiển Timer/counter1 TCCR1B thì ta sẽ thấy điều này hồn tồnđúng. Chọn chế độ so sánh 1 trong PWM

Bảng 2.11 Thiết lập chế độ so sánh 1 trong PWM

Chú ý :X = A hoặc B

Một điểm lưu ý khác là trong chế độ PWM, 10 bits cĩ trọng số thấp trong thanh ghi OCR1A/OCR1B, khi viết, được truyền đến một địa chỉ tạm thời. Chúng được chốt khi Timer/counter1 tiến đến giá trị TOP. Điều này ngăn chặn sự phát sinh một xung PWM “thừa” (khơng đều, khơng mong muốn) do sự vận hành ghi giá trị lên các thanh ghi OCR1A/OCR1B khơngđược đồng bộ.

Xem hình bên dưới nhưmột ví dụ: Synchronized : Đồng bộ

Unsynchronized : khơngđồng bộ. Counter value : giá trị bộ đếm (timer)

Compare value : giá trị so sánh

Compare value changes : thayđổi giá trị so sánh PWM Output OC1X : chân ngõ ra PWM

Trong suốt thời gian giữa hai sự vận hành viết và chốt, khi ta đọc giá trị từ thanh ghi OCR1A/OCR1B thì giá trị đọc được sẽ là nội dung của địa chỉ tạm.

Khi thanh ghi OCR1A/OCR1B chứa giá trị $0000 hoặc TOP, ngõ ra OC1A/OC1B

được cập nhật (updated) đến mức cao hoặc thấp vào lần so sánh tiếp theo tuỳ thuộc cách thiết lập của

COM1A1/COM1A0 hoặc COM1B1/COM1B0. Điều nàyđược thể hiện trong bảng sau :

Chú ý :X = A hoặc B

Trong chế độ PWM, Cờ tràn Timer/counter1 TOV1 được thiết lập lên 1 khi bộ đếm tiến về giá trị $0000. Ngắt do tràn Timer1 vẫn hoạt động nhưtrong chế độ Timer/counter bình thường. Chương trình ngắt do tràn timer1 sẽ được thi hành nếu cờ TOV1được thiết lập lên 1, bit cho phép ngắt do tràn Timer/counter1 TOIE1 được thiết lập lên 1 và bit cho phép ngắt toàn cục I được thiết lập lên 1.

2.5. Watchdog Timer

Thanh ghiđiều khiển bộ định thời WATCHDOG :

Bit 7..5 :đây là các bit dự trữ trong AT90S8515 và luơnđược đọc giá trị là 0

Bit 4 : (Watchdog turn off enable) bit này được sử dụng chung với bit WDE. Bit này

được đặt thành 1 khi WDE bị xĩa thành 0để cấm mạch watchdog timer. Bộ xử lý xĩa bit này sau 4 chu kỳ đồng hồ.

Bit 3 : (Watchdog enable) khi đặt thành 1 mạch watchdog timer được cho phép. Để cấm mạch watchdog, bit này bị xĩa thành 0 và WDTOE được đặt thành 1. Để cấm mạch watchdog timer, thủ tục sau đây được sửdụng : trong một thao tác đơn lẻ, đặt WDTOE và WDE thành 1. Xĩa WDE thành 0 trong 4 chu kỳ đồng hồ tiếp theo. Sau

đĩ thao tác này sẽ cấm mạch watchdog timer.

Bit 2..0: Giá trị chia tần số (watchdog timer prescaler). Các bit này được sử dụng để lựa chọn mạch watchdog timer timeouts,được cho theo bảng dưới đây :

Bảng 2.12 Thiết lập bộ định thời Watchdog

Hình 2.28 Sơđồ bộ định thời Watchdog

2.6. Truy xuất ghi/đọc EEPROM

Thời gian truy cập viết lên bộ nhớ EEPROM nằm trong khoảng 2.5 – 4 ms, phụ thuộc vàođiện áp nguồn nuơi. Để viết dữ liệu lên EEPROM người dùng được khuyên là nên kiểm tra xem EEPROM đã sẵn sàng để nhận giá trị mới chưa. Khi CPU được đọc, CPUđược tạm dừng 4 chu kỳ trước khi câu lệnh kế tiếp được thi hành. Khi EEPROM

được viết, CPU được tạm nghỉ 2 chu kỳ trước khi câu lệnh tiếp theo được thi hành.

2.6.1. Thanh ghi địa chỉ EEPROM – EEARH và EEARL (EEPROM Adress Register)

Thanh ghi địa chỉ EEPROM (EEAR) định địa chỉ trong khoảng 512-byte EEPROM. Giá trị của thanh ghi địa chỉ EEAR nằm tuyến tính trong khoảng từ 0 đến 511.

2.6.2. Thanh ghi dữ liệu EEPROM – EEDR (EEPROM Data Register)

Thanh ghi này sẽ chứa dữ liệu khi EEPROM được đọc/viết. Khi vận hành viết, thanh ghi EEDR chứa dữ liệu được viết đến EEPROM tại địa chỉ chứa trong thanh ghi

Hình 2.31 Cấu trúc thanh ghi dữ liệu EEPROM - EEDR Hình 2.30 Cấu trúc thanh ghi địa chỉ EEPROM

EEAR. Khi vận hànhđọc, thanh ghi EEDR chứa dữ liệu đọc ra từ EEPROM tại địa chỉ chứa trong thanh ghi EEAR.

2.6.3. Thanh ghiđiều khiển EEPROM – EECR (EEPROM Control Register)

Bit 7..4 – Res (Reserved Bits)

Đây là những bit dữ trữ trong AT90S8515 và giá trị đọc luơn bằng 0. Bit 3 – EERIE (EEPROM Ready Interrupt Enable)

Khi bit I trong thanh ghi SREGđược thiết lập lên 1 và EERIE được thiết lập lên 1, ngắt do EEPROM sẵn sàng được cho phép. Khi bit này bằng 0 thì ngắt này bị cấm. Ngắt do EEPROM sẵn sàng phát ra một hằng số ngắt khi EEWE bị xố về 0.

Bit 2 – EEMWE (EEPROM Master Write Enable)

Bít này quyđịnh sự thiết lập bít EEWE =1 cĩ là nguyên nhân để EEPROM được viết hay khơng. Khi bit EEMWE được thiết lập lên 1, nếu EEWE được thiết lập lên 1 thì dữ liệu sẽ được ghi vào EEPROM tại địa chỉ đã chọn. Nếu bit EEWE khơng được thiết lập lên 1(hay bị xố = 0) thì mặc dù EEWE được thiết lập lên 1 thì sự thiết lập này vẫn khơng cĩ một ảnh hưởng nào hết. Bit EEMWE phải được thiết lập lên 1 bằng phần mềm, phần cứng sẽ tự động xố bit này về 0 sau 4 chu kỳ xung clock.

Bit 1 – EEWE: EEPROM Write Enable

Khi dữ liệu đãđược nạp, vàđịa chỉ được thiết lập đúng, bit EEWE phải được thiết lập lên 1 để viếtEEPROM. Phải chắc chắn rằng bit EEMWE phải được thiết lập lên 1, trước khi viết giá trị đến EEWE. Các bước sau cần được quan tâm khi thực hiện viết dữ liệu đến EEPROM.

1. Đợi cho đến khi EEWE về 0.

Một phần của tài liệu đề tài thiết bị thực tập lập trình vi điều khiển AVR (Trang 43)

Tải bản đầy đủ (PDF)

(181 trang)