sử dụng timer counter

22 1.2K 4
sử dụng timer counter

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Timer/Counter I, Mở đầu Phần này, chúng ta sẽ học và nắm được các vấn đề sau: • Nắm bắt cơ bản các bộ Timer/Counter có trên AVR. • Sử dụng các Timer/Counter như các bộ định thời. • Sử dụng các Timer/Counter như các bộ đếm. • Sử dụng các Timer/Counter như các bộ tạo xung điều rộng PWM. • Viết một ví dụ điều khiển động cơ RC servo bằng PWM. II, Tổng quan về các bộ timer/counter trên chip atmega16 Timer/Counter là các module độc lập với CPU. Chức năng chính của các bộ Timer/Counter, như tên gọi của chúng, là định thì (tạo ra một khoảng thời gian, đếm thời gian…) và đếm sự kiện. Trên các chip AVR, các bộ Timer/Counter còn có thêm chức năng tạo ra các xung điều rộng PWM (Pulse Width Modulation), ở một số dòng AVR, một số Timer/Counter còn được dùng như các bộ canh chỉnh thời gian (calibration) trong các ứng dụng thời gian thực. Các bộ Timer/Counter được chia theo độ rộng thanh ghi chứa giá trị định thời hay giá trị đếm của chúng, cụ thể trên chip Atmega16 có 2 bộ Timer 8 bit (Timer/Counter0 và Timer/Counter2) và 1 bộ 16 bit (Timer/Counter1). Chế độ hoạt động và phương pháp điều khiển của từng Timer/Counter cũng không hoàn toàn giống nhau, ví dụ ở chip Atmega16: Timer/counter0: Là một bộ định thời/đếm đa năng 8 bit. Gồm các tính năng: - Bộ đếm đơn kênh (Single Channel Counter). - Xóa timer khi xảy ra bằng trong so sánh (Clear Timer On Compare Math- Auto Reload). - Bộ tạo xung điều rộng (Glitch – Free, Phase Correct Pulse Width Modulator- PWM). - Bộ định thời (Frequency Generator). - Bộ đếm sự kiện ngoài (External Event Counter). - Bộ đếm gộp 10 bit (10-bit Prescaler). - Ngắt tràn và ngắt so sánh (Overflow And Compare Math Interrupt Source- TVO0 and OCF0). Timer/counter1: Là một bộ định thời/đếm đa năng 16 bit. Gồm các tình năng: - Chuẩn thiết kế 16 bit (True 16-bit Design). - 2 bộ so sánh đầu ra độc lập ( Two Independent Output Compare Units). - Các thanh ghi so sánh đầu ra kép (Double Buffered Output Compare Registers). - 1 bộ bắt giữ đầu vào (One Input Capture Unit). - Bộ khử nhiễu đầu vào (Input Capture Noisy Canceler). - Xóa timer khi sảy ra bằng trong so sánh (Clear Timer On Compare Math- Auto Reload). - Bộ tạo xung điều rộng (Glitch – Free, Phase Correct Pulse Width Modulator- PWM). - Variable PWM period. - Bộ định thời (Frequency Generator). - Bộ đếm sự kiện ngoài (External Event Counter). - 4 Ngắt độc lập (TOV1, OCF1A, OCF1B, and ICF1). Timer/counter2: Là bộ định thời/đếm đa năng 8 bit. Gồm các tính năng: - Bộ đếm đơn kênh (Single Channel Counter). - Xóa timer khi sảy ra bằng trong so sánh (Clear Timer On Compare Math- Auto Reload). - Bộ tạo xung điều rộng (Glitch – Free, Phase Correct Pulse Width Modulator- PWM). - Bộ định thời (Frequency Generator). - Bộ đếm gộp 10 bit (10-bit Prescaler). - Ngắt tràn và ngắt so sánh (Overflow And Compare Math Interrupt Source- TVO0 and OCF0). - Cho phép xung nhịp ngoài 32 kHz hoạt động độc lập với xung nhịp I/O (Ứng dụng thời gian thực). III, Sử dụng timer/counter. Một số định nghĩa quan trọng cần nắm bắt trước khi sử dụng timer/counter. − BOTTOM: Giá trị thấp nhất mà một T/C có thể đạt được, luôn là 0. − MAX: Giá trị lớn nhất mà một T/C có thể đạt được, tùy mỗi T/C. VD: T/C0, T/C 2 là các T/C 8 bit nên MAX = 0xFF = 255 = 2^8 – 1. T/C1 là T/C 16 bit nên MAX = 0xFFFF = 65525 = 2^16 – 1. − TOP: là giá trị mà khi T/C đạt đến nó sẽ thay đổi trạng thái, giá trị này không nhất thiết là số lơn nhất 8 bit hay 16 bit như MAX, giá trị của TOP có thể thanh đổi bằng cách điều khiển các bit điều khiển tương ứng hoặc có thể nhập trừ tiếp thông qua một số thanh ghi. Chúng ta sẽ hiểu rõ về giá trị TOP trong lúc khảo sát hoạt động của T/C. 1, Timer/Counter0. Để điều khiển hoạt động của T/C0 ta dùng đến 5 thanh ghi: TCCR0, TCNT0, OCR0, TIFR, TIMSK. 1.1, Thanh ghi điều khiển T/C0 – TCCR0 (Timer/Counter Control Register). − Bit 7 – FOC0: Force Output Compare. Bit FOC0 chỉ hoạt động khi bit WGM00 được sét ở chế độ non-PWM. Tuy nhiên, Để đảm bảo tính tương thích, bit này phải được sét về 0 khi TCCR0 được ghi ở chế độ PWM. − Bit 6, 3 – WGM00, WGM01: Waveform General Mode Các bit điều khiển quá trình hoạt động của bộ đếm, giá trị lớn nhất (TOP) của bộ đếm, và dạng tín hiệu được sử dụng. Các phương thức hoạt động của timer/counter gồm có: Chế độ bình thường (Normal Mode), Chế độ xóa timer khi sảy ra bằng trong so sánh (TCT), và 2 chế độ tạo xung điều rộng (PWM). Bảng các phương thức hoạt động: − Bit 5, 4 – COM01, COM00: Compare Math Ouput Mode. Các bit điều khiển kiểu so sánh. Nếu một trong hai bit được sét, đầu ra OC0 sẽ ghi đè lên chức năng của cổng được kết nối. Tuy nhiên, cần chú ý bit thanh ghi hướng dữ liệu (DDR) của chân kết nối phải là chân ra. Compare Output Mode, non-PWM Mode : Compare Output Mode, Fast PWM Mode: Compare Output Mode, Phase Correct PWM Mode: − Bit 2:0 – CS02:0: Clock select: 3 bit dùng để chọn xung nhịp hoạt động cho Timer/Counter0. Clock Select Bit Description : Nếu chế độ dùng xung ngoài được chọn, thì chân T0 sẽ được nối với xung ngoài và dùng để đếm sự kiện nếu nó được cài đặt là chân ra (bộ đếm sự kiện). 1.2, Thanh ghi Timer/Counter – TCNT0 (Timer/Counter Register). Thanh ghi TCNT0 cho phép truy cập trực tiếp, cả đọc và ghi. 1.3, Thanh ghi so sánh đầu ra – OCR0 (Output Compare Register). Thanh ghi OCR0 chứa một giá trị 8 bit để so sánh với giá trị của thanh ghi TCNT0. Nó có thể dùng để tạo ra một tín hiệu ngắt, hoặc một dạng tín hiệu ra ở chân OC0. 1.4, Thanh ghi mặt nạ ngắt T/C – TIMSK (Timer/Counter Interrupt Mask Register). − Bit 1 - OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable Khi bit OCIE0 được ghi lên 1, và bit I của thanh ghi SREG được sét, ngắt so sánh của T/C0 được bật. các ngắt tương ứng được thực thi nếu một so sánh phù hợp trong Timer/Counter0 xảy ra, tức là, khi bit OCF0 được sét trong thanh ghi cờ ngắt T/C – TIFR. − Bit 0 - TOIE0: Timer/Counter0 Overflow Interrupt Enable Khi bit TOIE0 được viết lên 1, và bit I của thanh ghi SREG được set, Ngắt tràn của T/C0 sẽ được bật. Các ngắt tương ứng được thực thi nếu sảy ra tràn trong T/C0, tức là, khi bit TOV0 được set trong thanh ghi cờ ngắt T/C – TIFR. 1.5, Thanh ghi cờ ngắt T/C – TIFR (Timer/Counter Interrupt Flag Register). - Bit 1 – OCF0: Output Compare Flag 0 Bit OCF0 được sét khi sảy ra bằng trong so sánh giữa giá trị của T/C0 và dữ liệu ở OCR0 (Output Compare Register0). OCF0 bị xóa khi đang sử lí vector ngắt tương ứng hoặc viết một giá trị logic vào cờ. Khi bit I ở thanh ghi SREG, bit OCIE0 và bit OCF0 được set, Ngắt so sánh của T/C0 được bật. - Bit 0 – TOV0: Timer/Counter0 Overflow Flag Bit TOV0 được sét khi có một sự kiện tràn sảy ra ở T/C0. Bit TOV0 bị xóa khi đang sử lí vector ngắt tương ứng hoặc ghi một giá trị logic vào cờ. Khi bit I ở thanh ghi SREG, bit TOIE0 và bit TOV0 được set, Ngắt tràn của T/C0 được bật. Ở chế độ Phase Correct PWM, bit này được set khi T/C0 đổi chiều đếm ở 0x00. 1.6, Thanh ghi chức năng vào/ra đặc biệt – SFIOR (Special Function I/O Register) Bit 0 – PSR10: Prescaler Reset Timer/Counter1 and Timer/Counter0 Khi bit này được ghi lên 1, bộ đếm gộp T/C1 và T/C0 sẽ được reset. Bit bị xóa sau khi quá trình thực hiện hoàn thành. Ghi giá trị 0 vào bit này sẽ không có tác dụng gì. Chú ý: T/C1 và T/C2 có bộ đếm gộp giống nhau và một reset của bộ đếm gộp sẽ tác động lên cả 2. Bit này luôn bằng 0. 1.7, Bộ định thời Chúng ta có thể tạo ra 1 bộ định thì để cài đặt một khoảng thời gian nào đó. Ví dụ bạn muốn rằng cứ sau chính xác 1ms thì chân PB0 thay đổi trạng thái 1 lần (nhấp nháy), bạn lại không muốn dùng các lệnh delay như trước nay vẫn dùng vì nhược điểm của delay là “CPU không làm gì cả” trong lúc delay, vì thế trong nhiều trường hợp các lệnh delay rất hạn chế được sử dụng. Bây giờ chúng ta dùng T/C0 để làm việc này, ý tưởng là chúng ta cho bộ đếm T/C0 hoạt động, khi nó đếm đủ 1ms thì nó sẽ tự kích hoạt ngắt tràn, trong trình phục vụ ngắt tràn chúng ta hay đổi trạng thái chân PB0. Tôi minh họa ý tưởng như trong hình 1 Hình 1: so sánh 2 cách làm việc. (CPU nop: trong khoảng thời gian này CPU không làm gì cả) Một vấn đề nảy sinh lúc này, T/C0 chỉ đếm từ 0 đến 255 rồi lại quay về 0 (xảy ra 1 ngắt tràn), như thế dường như chúng ta không thể cài đặt giá trị mong muốn bất kỳ cho T/C0? Câu trả lời là chúng ta có thể bằng cách gán trước một giá trị cho thanh ghi TCNT0, khi ấy T/C0 sẽ đếm từ giá trị mà chúng ta gán trước và kết thúc ở 255. Tuy nhiên do khi tràn xảy ra, TCNT0 lại được tự động trả về 0, do đó việc gán giá trị khởi tạo cho TCNT0 phải được thực hiện liên tục sau mỗi lần xảy ra tràn, vị trí tốt nhất là đặt trong trình phục vụ ngắt tràn. Việc còn lại và cũng là việc quan trọng nhất là việc tính toán giá trị chia (prescaler) cho xung nhịp của T/C0 và việc xác định giá trị khởi đầu cần gán cho thanh ghi TCNT0 để có được 1 khoảng thời gian định thì chính xác như mong muốn. Trước hết chúng ta sẽ chọn prescaler sao cho hợp lí nhất (chọn giá trị chia bằng cách set 3 bit CS02,CS01,CS00). Giả sử nguồn xung clock “nuôi” chip của chúng ta là clkI/O=8MHz tức là 1 nhịp mất 1/8us, nếu chúng ta để prescaler=1, tức là tần số của T/C0 (tạm gọi là fT/C0) cũng bằng clkI/O=8MHz, cứ 1/8us T/C0 được kích và TCNT0 sẽ tăng 1 đơn vị. Khi đó giá trị lớn nhất mà T/C0 có thể đạt được là 256 x 1/8us=32us, giá trị này nhỏ hơn 1ms mà ta mong muốn. Nếu chọn prescaler=32 (xem bảng 1) nghĩa là cứ sau 32 nhịp (4us) thì TCNT0 mới tăng 1 đơn vị, khả năng lớn nhất mà T/C0 đếm được là 256 x 4us=1024us, lớn hơn 1ms, vậy ta hoàn toàn có thể sử dụng prescaler=32 để tạo ra một khoảng định thì 1ms. Bước tiếp theo là xác định giá trị khởi đầu của TCNT0 để T/C0 đếm đúng 1ms (1000us). Ứng với prescaler=32 chúng ta đã biết là cứ 4us thì TCNT0 tăng 1 đơn vị, dễ dàng tính được bộ đếm cần đếm 1000/4=250 lần để hết 1ms, do đó giá trị ban đầu của TCNT0 phải là 256- 250=6. Đầu tiên hãy mắc mạch điện như hình vẽ: int ms = 0,ss = 0,mm = 0,hh = 0; // bien ngoai // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) // ngat tran khi TCNT0 tran { // Reinitialize Timer 0 value TCNT0=0x79; // set gia tri bot cua TCNT0 la 0x79 = 121 // Place your code here ms++; } Đoạn code cho timer trong hàm main: TCCR0=0x03; // prescaler la xung nhip cua chip chia cho 64 TCNT0=0x79; // set gia tri bot cua TCNT0 la 0x79 = 121 OCR0=0x00; TIMSK=0x01; // Bat ngat cua timer/counter0 ACSR=0x80; // set bit I len 1 lcd_clear(); lcd_putnum(hh); // ham hien thi so tren LCD (tu viet). lcd_putchar(':'); lcd_putnum(mm); lcd_putchar(':'); lcd_putnum(ss); while (1) { // Place your code here if(ms >= 999) { ss++; ms = 0; lcd_clear(); lcd_putnum(hh); lcd_putchar(':'); lcd_putnum(mm); lcd_putchar(':'); lcd_putnum(ss); } if(ss >= 59) { mm++; ss = 0; } if(mm >= 59) { hh++; mm = 0; } if(hh >= 23) hh = 0; }; Ở đây chúng ta có 1 số lưu ý nhỏ: - Thứ nhất: theo datasheet thì TCCR0 = 0x03 ứng với mode prescaler là xung hệ thống chia cho 32 nhưng trong codevision thì lại là chia cho 64 nên giá trị BOT của T/C0 phải tính lại đó là 256 – 1000/64 = 121 = 0x79 - Thứ hai: việc khai báo sử dụng LCD tôi đã nói ở bài trước, nếu bạn nào quên thì đọc lại. - Thứ ba: hàm lcd_putnum(so) không phải là 1 hàm được định nghĩa sẵn trong thư viện lcd.h mà phải tự xây dựng. 1.8. Bộ đếm sự kiện Như đã trình bày ở trên, T/C0 còn có thể được dùng như là một bộ đếm sự kiện sảy ra từ bên ngoài bằng cách sử dụng xung kích bên ngoài TCCR0 = 0x06 (đếm cạnh xuống) hoặc TCCR0 = 0x07 (đếm cạnh lên). Chân nhận xung kích từ bên ngoài đó là chân T0. Khi có 1 tín hiệu kích vào ở T0 thì TCNT0 sẽ tự động được tăng lên 1. Việc sử dụng ngắt hay không là tùy vào mục đích sử dụng. Chúng ta sẽ khảo sát ví dụ sau: nối một nút ấn vào chân T0 để tạo tín hiệu kích, dùng LCD để hiển thị giá trị của TCNT0 lên màn hình, một nút reset để đưa giá trị TCNT0 về 0. Code: PORTB=0xFF; // dung dien tro keo len ben trong DDRB=0x00; // PB la cong vao TCCR0=0x06; // dem canh xuong TCNT0=0x00; OCR0=0x00; TIMSK=0x00; // khong dung ngat while (1) { lcd_clear(); lcd_putnum(TCNT0); delay_ms(100); if(!PINB.3) TCNT0 = 0; }; Ở đây cần lưu ý một điều đó là T0 là chân nhận tín hiệu vào vì vậy nó phải được xét là chân vào, ở đây tôi set cả PB là cổng vào và dùng điện trở kéo bên trong. Vì ta không dùng đến ngắt nên TIMSK = 0x00. 1.9. Phase correct PWM (Điều rộng xung với pha chính xác). Đây là mode hoạt động rất quan trọng của các bộ timer, thường được dùng trong các ứng dụng điều khiển động cơ. Khi mode này được kích hoạt, một tín hiệu dạng xung sẽ được xuất ra ở chân OC0, tín hiệu này phụ thuộc vào các giá trị mà ta sét cho nó. Thanh ghi TCNT0 tự động tăng lên từ giá trị BOTTOM đến TOP và tự động giảm từ giá trị TOP về BOTTOM, tốc độ đếm của TCNT0 ở chế độ này cũng giống với chế độ hoạt động của bộ định thời. Giá trị của TCNT0 sẽ được so sánh với giá trị của thanh ghi OCR0 để điều khiển tín hiệu ra ở chân OC0. Bit 5, 4 – COM01, COM00 dùng để điều khiển các chế độ làm việc của mode Phase correct PWM (khi mode này đang được dùng). • COM01 = 0, COM00 = 0: disconnect OC0, không xuất tín hiệu ra chân OC0. • COM01 = 0, COM00 = 1: Reserved, chế độ chờ. • COM01 = 1, COM00 = 0: Xóa OC0 về 0 nếu sảy ra bằng trong so sánh khi đếm lên, và sét lên 1 nếu sảy ra bằng trong so sánh khi đếm xuống. • COM01 = 1, COM00 = 1: Sét OC0 lên 1 nếu sảy ra bằng trong so sánh khi đếm lên, và xóa về 0 nếu sảy ra bằng trong so sánh khi đếm xuống. Khi sử dụng mode Phase correct PWM ta chủ yếu sử dụng 2 chế độ hoạt động cuối của nó (COM01 = 1). Đoạn chương trình sau dùng để khởi tạo C/T0 ở chế độ Phase correct PWM: DDRB=0x08; TCCR0=0x63; TCNT0=0x00; OCR0=0x00;  Dòng đầu tiên sét chân PB3/OC0 là chân ra.  Dòng thứ 2 gồm có WGM00 = 1, WGM01 = 0 dùng để chọn mode cho T/C0 là Phase correct PWM, COM01 = 1, COM00 = 0 chọn chế độ hoạt động, CS02 = 0, CS01 = 1, CS00 = 1 tương ứng với Prescaler là chia cho 32 (Codevision là 64).  Dòng 3 là giá trị ban đầu của TCNT0  Dòng 4 là giá trị của thanh ghi OCR0 dùng để so sánh với TCNT0. Điều cần chú ý ở đây là giá trị OCR0 là thanh ghi 8 bít, giá trị của thanh ghi có thể thay đổi trực tiếp, trong lập trình ta sẽ thay đổi giá trị của thanh ghi này để tạo các xung điều rộng khác nhau. Bây giờ chúng ta sẽ làm một ví dụ nhỏ để hiểu rõ phương thức hoạt động của chế độ Phase correct PWM. Mạch mô phỏng: [...]... 3 – WGM20, WGM21: Waveform General Mode Các bit điều khiển quá trình hoạt động của bộ đếm, giá trị lớn nhất (TOP) của bộ đếm, và dạng tín hiệu được sử dụng Các phương thức hoạt động của timer/ counter gồm có: Chế độ bình thường (Normal Mode), Chế độ xóa timer khi sảy ra bằng trong so sánh (TCT), và 2 chế độ tạo xung điều rộng (PWM) Bảng các phương thức hoạt động: − Bit 5, 4 – COM21:0: Compare Math Ouput... TCCR0=0x0E; // Su dung che do CTC, tin hieu kich tu ben ngoai canh xuong TCNT0=0x00; OCR0=0x07; // Gia tri dung de so sanh voi TCNT0 while (1) { PORTC = TCNT0; // Xuat gia tri cua TCNT0 ra PC }; 2, Timer/ Counter1 Timer/ Counter1 là bộ T/C 16 bits, đa chức năng Đây là bộ T/C rất lý tưởng cho lập trình đo lường và điều khiển vì có độ phân giải cao (16 bits) và có khả năng tạo xung điều rộng PWM (Pulse Width Modulation... và H là thanh ghi chứa 8 bits cao (High) của giá trị 16 bits mà chúng tạo thành Các thanh ghi sử dụng cho T/C1: TCNT1, OCR1A/B, ICR1 là các thanh ghi 16 bit TCCR1A/B là cá thanh ghi 8 bít, ngoài ra còn có thanh ghi cờ ngắt TIFR và thanh ghi mặt nạ ngắt TIMSK dùng chung cho các bộ T/C • TCCR1A và TCCR1B (Timer/ Counter Control Register): là 2 thanh ghi điều khiển hoạt động của T/C1 Tất cả các mode hoạt... hiệu kích là cạnh xuống, và khi ICES1 bằng 1 tín hiệu kích là cạnh lên  CS12:0: Select Clock Nếu chế độ xung ngoài được sử dụng cho T/C1, chân T1 sẽ được dùng để nhận tín hiệu xung từ bên ngoài vào Tính năng này được dùng để đếm sự kiện sảy ra bên ngoài • TCNT1H và TCNT1L (Timer/ Counter Register): là 2 thanh ghi 8 bit tạo thành thanh ghi 16 bits (TCNT1) chứa giá trị vận hành của T/C1 Cả 2 thanh ghi... Math” sẽ sảy ra và reset TCNT0 về 0, đồng thời một ngắt có thể sảy ra nếu đã được kích hoạt trước đó Cách thức hoạt động của nó giống bộ định thời nếu tín hiệu kích sử dụng là xung nhịp chip và giống bộ đếm sự kiện nếu tín hiệu kích sử dụng là xung từ bên ngoài Ví dụ: PORTB=0x01; // su dung dien tro keo len cho PB0 DDRB=0x00; // PB la cong nhan tin hieu PORTC=0x00; DDRC=0xFF; // PC la cong xuat tin... chuyển sang chế độ bất đồng bộ: đợi TCN2UB, OCR2UB, TCR2UB o Xóa các cờ ngắt T/C2 o Bật các ngắt nếu cần thiết  Dao động sử dụng là một thạch anh tần số 32.768 KHz Gắn một xung nhịp ngoài vào chân TOSC1 có thể dùng để kết nối với T/C2 Xung nhịp của chip phải lớn hơn 4 lần Dao động sử dụng  Khi ghi một trong số các thanh ghi TCNT2, OCR2, TCCR2, giá trị phải được chuyển vào thanh ghi lưu trữ tạm, và được... ghi 16 bit nên giá trị MAX của nó là 0xFFFF T/C1 có 2 chế độ điều rộng xung (PWM) giống T/C0 nhưng có nhiều độ phân giải khác nhau và có 2 kênh tạo xung riêng biệt tương ứng ở 2 chân OC1A và OC1B 3, Timer/ Counter2 T/C2 cũng là bộ đếm/định thời 8 bit giống T/C0, các chế độ hoạt động của T/C2 cũng tương tự như của T/C0 để điều khiển hoạt động của T/C2 cần dùng các thanh ghi sau: TCCR2, TCNT2, OCR2, TIFR,... Dạng ngõ ra OC1A/OC1B biến đổi theo sự cài đặt các bit COM1A1:0/COM1B1:0  WGM13:0: Waveform Generation Mode Các bit này điều khiển trình tự đếm của bộ đếm, Giá trị đỉnh của bộ đếm (TOP), và dạng sóng sử dụng Các chế độ được cho dưới bảng sau:  ICNC1: Input Capture Noise Canceler Set ICNC1 lên 1 để kích hoạt bộ khử nhiễu đầu vào (the input capture noise canceler) Khi bộ khử nhiễu được kích hoạt, tín... chân ra Compare Output Mode, non-PWM Mode: Compare Output Mode, Fast PWM Mode: Compare Output Mode, Phase Correct PWM Mode: − Bit 2:0 – CS02:0: Clock select: 3 bit dùng để chọn xung nhịp hoạt động cho Timer/ Counter2 Clock Select Bit Description • TCNT2: Thanh ghi T/C2 Thanh ghi chứa giá trị vận hành của T/C2 • OCR2: Thanh ghi so sánh đầu ra T/C2 Thanh ghi chứa giá trị dùng để so sánh với giá trị thanh... chân OC1A và OC1B tương ứng • ICR1H và ICR1L (Input Capture Register 1) The Input Capture được cập nhật với giá trị bộ đếm mỗi lần một sự kiện xuất hiện trên chân ICP1, The Input Capture có thể được sử dụng làm giá trị TOP cho bộ đếm • TIMSK  Bit 5 – TICIE1: T/C1, Input Capture Interrupt Enable Khi TICIE1 được set lên 1 và bit I của SREG được bật, ngắt Input Capture của T/C1 được bật  Bit 4 – OCIE1A: . Timer/ Counter I, Mở đầu Phần này, chúng ta sẽ học và nắm được các vấn đề sau: • Nắm bắt cơ bản các bộ Timer/ Counter có trên AVR. • Sử dụng các Timer/ Counter như các bộ định thời. • Sử dụng. hoạt động độc lập với xung nhịp I/O (Ứng dụng thời gian thực). III, Sử dụng timer/ counter. Một số định nghĩa quan trọng cần nắm bắt trước khi sử dụng timer/ counter. − BOTTOM: Giá trị thấp nhất mà. dụng các Timer/ Counter như các bộ đếm. • Sử dụng các Timer/ Counter như các bộ tạo xung điều rộng PWM. • Viết một ví dụ điều khiển động cơ RC servo bằng PWM. II, Tổng quan về các bộ timer/ counter

Ngày đăng: 06/07/2014, 09:01

Tài liệu cùng người dùng

Tài liệu liên quan