1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Cùng học AVR - AVR4 Timer và chuyển đổi ADC potx

21 405 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 782,2 KB

Nội dung

AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com CÙNG HC AVR AVR4–TIMER/COUNTER VÀ CHUYN I ADC Tho thun: tài liu này thuc quyn s hu ca tác gi, bn có th t do tham kho tài liu nhng không đc phép s dng đ in thành sách báo, đng lên các din đàn hay website, nhng bn có th dùng đng link http://www.dieukhientudong.net đ hng ti tài liu. Liên h tác gi qua email: thanhtam.h@gmail.com. I. Bn s đi đn đâu. Trong bài 3 tôi đã gii thiu khái quát phng pháp lp trình bng ngôn ng C cho AVR vi WinAVR và cách s dng ngt trong AVR. Bài 4 này chúng ta s kho sát các ch đ hot đng ca phng pháp điu khin các b đnh thi, đm (Timer/Counter) trong AVR. Công c phc v cho bài này vn là b công c WinAVR và phn mm mô phng Proteus. Tôi vn dùng chip Atmega8 đ làm ví d. Mt đi u không may mn là không phi tt c các b Timer/Counter trên tt c các dòng chip AVR là nh nhau, vì th nhng gì tôi trình bày trong bài này có th s không đúng vi các dòng AVR khác nh AT90S…Tuy nhiên tôi cng s c gng ch ra mt s đim khác bit c bn đ các bn có th t mình điu khin các chip khác. Sau bài này, tôi hy vng bn s: - 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 các b Timer/Counter trên chip Atmega8. 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 Atmega8 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 Atmega8: Timer/Counter0: là mt b đnh thi, đm đn gin vi 8 bit. Gi là đn gin vì b này ch có 1 ch đ hot đng (mode) so vi 5 ch đ ca b Timer/Counter1. Ch đ hoat đng ca Timer/Counter0 thc cht có th coi nh 2 ch đ nh (và cng là 2 chc nng c bn) đó là t o ra mt khong thi gian và đm s kin. Chú ý là trên các chip AVR dòng mega sau này nh Atmega16,32,64…chc nng ca Timer/Counter0 đc nâng lên nh các b Timer/Counter1… Timer/Counter1: là b đnh thi, đm đa nng 16 bit. B Timer/Counter này có 5 ch đ hot đng chính. Ngoài các chc nng thông thng, Timer/Counter1 còn đc dùng đ to ra AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com xung điu rng PWM dùng cho các mc đích điu khin. Có th to 2 tín hiu PWM đc lp trên các chân OC1A (chân 15) và OC1B (chân 16) bng Timer/Counter1. Các b Timer/Counter kiu này đc tích hp thêm khá nhiu trong các chip AVR sau này, ví d Atmega128 có 2 b, Atmega2561 có 4 b… Timer/Counter2: tuy là mt module 8 bit nh Timer/Counter0 nhng Timer/Counter2 có đn 4 ch đ hot đng nh Timer/Counter1, ngoài ra nó nó còn đc s dng nh mt module canh chnh thi gian cho các ng dng thi gian thc (ch đ asynchronous). Trong phm vi bài 4 này, tôi ch y u hng dn cách s dng 4 ch đ hot đng ca các Timer/Counter. Ch đ asynchronous ca Timer/Counter2 s đc b qua vì có th ch đ này không đc s dng ph bin. Trc khi kho sát hot đng ca các Timer/Counter, chúng ta thng nht cách gi tt tên gi ca các Timer/Counter là T/C, ví d T/C0 đ ch Timer/Counter0… III. S dng Timer/Counter. Có mt s đnh ngha quan trng mà chúng ta c n nm bt trc khi s dng các T/C trong AVR: - BOTTOM: là giá tr thp nht mà mt T/C có th đt đc, giá tr này luôn là 0. - MAX: là giá tr ln nht mà mt T/C có th đt đc, giá tr này đc quy đnh bi bi giá tr ln nht mà thanh ghi đm ca T/C có th cha đc. Ví d vi mt b T/C 8 bit thì giá tr MAX luôn là 0xFF (tc 255 trong h thp phân), vi b T/C 16 bit thì MAX bng 0xFFFF (65535). Nh th MAX là giá tr không đi trong mi T/C. - 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 MAX 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 T/C1. 1. Timer/Counter0 Thanh ghi: có 4 thanh ghi đc thit k riêng cho hot đng và điu khin T/C0, đó là: - TCNT0 (Timer/Counter Register): là 1 thanh ghi 8 bit cha giá tr vn hành ca T/C0. Thanh ghi này cho phép bn đc và ghi giá tr mt cách trc tip. - TCCR0 (Timer/Counter Control Register): là thanh ghi điu khin hot đng ca T/C0. Tuy là thanh ghi 8 bit nhng thc cht ch có 3 bit có tác dng đó là CS00, CS01 và CS02. Các bit CS00, CS01 và CS02 gi là các chip chn ngun xung nhp cho T/C0 (Clock Select). Chc nng các bit này đc mô t trong bng 1. Bng 1: chc nng các bit CS0X AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com - TIMSK (Timer/Counter Interrupt Mask Register): là thanh ghi mt n cho ngt ca tt c các T/C trong Atmega8, trong đó ch có bit TOIE0 tc bit s 0 (bit đu tiên) trong thanh ghi này là liên quan đn T/C0, bit này có tên là bit cho phép ngt khi có tràn  T/C0. Tràn (Overflow) là hin tng xy ra khi b giá tr trong thanh ghi TCNT0 đã đt đn MAX (255) và li đm thêm 1 ln na. Khi bit TOIE0=1, và bit I trong thanh ghi trng thái đc set (xem li bài 3 v điu khin ngt), nu mt “tràn” xy ra s dn đn ngt tràn. - TIFR (Timer/Counter Interrupt Flag Register): là thanh ghi c nh cho tt c các b T/C. Trong thanh ghi này bit s 0, TOV0 là c ch th ngt tràn ca T/C0. Khi có ngt tràn xy ra, bit này t đng đc set lên 1. Thông thng trong điu khin các T/C vai trò ca thanh ghi TIFR không quá quan trng. Hot đng: T/C0 hot đng rt đn gi n, hot đng ca T/C đc “kích” bi mt tín hiu (signal), c mi ln xut hin tín hiu “kích” giá tr ca thanh ghi TCNT0 li tng thêm 1 đn v, thanh ghi này tng cho đn khi nó đt mc MAX là 255, tín hiu kích tip theo s làm thanh ghi TCNT0 tr v 0 (tràn), lúc này bit c tràn TOV0 s t đng đc set bng 1. Vi cách thc hot đng nh th có v T/C0 “vô dng” vì c tng t 0 đn 255 ri li quay v không và quá trình lp li. Tuy nhiên, yu t to s khác bit chính là “tính hiu kích” và ngt tràn, kt hp 2 yu t này chúng ta có th to ra 1 b đnh thi gian hoc 1 b đm s kin. Trc ht bn hãy nhìn li bng 1 v các bit chn xung nhp cho T/C0. Xung nhp cho T/C0 chính là tín hiu kích cho T/C0, xung nhp này có th to bng ngun to dao đng ca chip (thch anh, dao đng ni trong chip…). Bng cách đt giá tr cho các bit CS00, CS01 và CS02 c a thanh ghi điu khin TCCR0 chúng ta s quyt đnh “bao lâu” thì s kích T/C0 mt ln. Ví d mch ng dng ca bn có ngun dao đng clk I/O = 1MHz tc chu k 1 nhp là 1us ( 1 micro giây), bn đt TCCR0=5 (SC02=1, CS01=0, CS00=1), cn c theo bng 1 tín hiu kích cho T/C0 s bng clk I/O /1024 ngha là sau 1024us thì T/C0 mi đc “kích” 1 ln, nói cách khác giá tr ca TCNT0 tng thêm 1 sau 1024us (chú ý là tn s đc chia cho 1024 thì chu k s tng 1024 ln). Quan sát 2 dòng cui cùng trong bng 1 bn s thy rng tín hiu kích cho T/C0 có th ly t bên ngoài (External clock source), AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com đây chính là ý tng cho hot đng ca chc nng đm s kin trên T/C0. Bng cách thay đi trng thái chân T0 (chân 6 trên chip Atmega8) chúng ta s làm tng giá tr thanh ghi TCNT0 hay nói cách khác T/C0 có th dùng đ đm s kin xy ra trên chân T0. Di đây chúng ta s xem xét c th cách điu khin T/C0 theo 1 ch đ đnh thi gian và đm. - B đnh thi gian : 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 tat hay đi trng thái chân PB0. Tôi minh ha ý tng nh trong hình 1. 1ms 1ms 1ms CPU runs CPU runs CPU runs Timer/Counter 1ms 1ms 1ms CPU nop CPU nop CPU nop PB0 on DELAY PB0 off PB0 on Overflow PB0 on Overflow PB0 on Overflow PB0 off PB0 off Overflow PB0 off Hình 1. So sánh 2 cách làm vic (CPU nop: CPU không làm gì c) Mt vn đ ny sinh lúc này, nh tôi trình bày trong phn trc, 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à clk I/O =1MHz tc là 1 nhp mt 1us, nu chúng ta đ prescaler=1, tc là tn s ca T/C0 (tm gi là f T/C0 ) cng bng clk I/O =1MHz, c 1us 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 1us=256us, giá tr này nh hn 1ms mà ta mong mun. Nu chn prescaler=8 (xem bng 1) ngha là c sau 8 nhp (8us) thì TCNT0 mi tng 1 đn v, kh nng ln nht mà T/C0 đm đc là 256 x 8us=2048us, ln hn AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com 1ms, vy ta hoàn toàn có th s dng prescaler=8 đ 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=8 chúng ta đã bit là c 8us thì TCNT0 tng 1 đn v, d dàng tính đc b đm cn đm 1000/8=125 ln đ ht 1ms, do đó giá tr ban đu ca TCNT0 phi là 256-125=131. Bn có th quan sát hình 2 đ hiu thu đáo h n. 131 132 254 255 0 1 2 count 125 times x 8us =1000us Overflow interrupt count more set TCNT0=131 Hình 2. Quá trình thc hin. Hãy to 1 Project bng Programmer Notepad vi tên gi TIMER0 và vit đon code cho Project này nh trong list 1. List 1. nh thì 1ms vi T/C0 #include <avr/io.h> #include <avr/interrupt.h> #include <avr/delay.h> int main(void){ DDRB=0xFF; //PORTB la output PORT PORTB=0x00; TCCR0=(1<<CS01); // CS02=0, CS01=1, CS00=0: chon Prescaler = 8 TCNT0=131; //gan gia tri khoi tao cho T/C0 TIMSK=(1<<TOIE0); // cho phep ngat khi co tran o T/C0 sei(); //set bit I cho phep ngat toan cuc while (1){ //vòng lp vô tn //do nothing } return 0; } //trinh phuc vu ngat tran T/C0 ISR (TIMER0_OVF_vect ){ PORTB ^=1; //doi trang thai Bit PB0 TCNT0=131; //gan gia tri khoi tao cho T/C0 } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com on code rt đn gin, bn ch cn chú ý đn 3 dòng khai báo cho T/C0 (dòng 9, 10, 11). Vi dòng 9: TCCR0=(1<<CS01) là 1 cách set bit CS01 trong thanh ghi điu khin TCCR0 lên 1, 2 bit CS02 và CS00 đc đ giá tr 0 (bn xem li bài 3 v cách set các bit đc bit trong các thanh ghi), tóm li dòng này tng đng TCCR0=2, giá tr Prescaler đc chn bng 8 (tham kho bng 1). Dòng 10 chúng ta gán giá tr khi to cho thanh ghi TCNT0. Và dòng 11 set bit TIOE0 lên 1 đ cho phép ngt xy ra khi có tràn  T/C0. Trong trình phc v ngt tràn T/C0, chúng ta s thc hin đi trng thái chân PB0 bng toán t XOR (^), chú ý đn ý ngha ca toán t XOR: nu XOR mt bit vi s 1 thì bit này s chuyn trng thái (t 0 sang 1 và ngc li). Cui cùng và quan trng là chúng ta cn gán li giá tr khi to cho T/C0. Bn có th v môt mch đin mô phng đn gin dùng 1 Oscilloscope nh trong hình 3 đ kim tra hot đng ca đon code. Hình 3. Mô phng đnh thì ca T/C0. - B đm s kin : nh tôi trình bày trong phn hot đng ca T/C0, chúng ta có th dùng T/C0 nh mt b đm (counter) đ đm các s kin (s thay đi trng thái) xy ra trên chân T0. Bng cách đt giá tr cho thanh ghi TCCR0 = 6 (CS02=1, CS01=1, CS00=0) cho phép đm “cnh xung” trên chân T0, nu TCCR0 = 7 (CS02=1, CS01=1, CS00=1) thì “cnh lên” trên chân T0 s đc đm. Có s dng ngt hay không ph thuc vào mc đích s dng. Kho sát 1 ví d đn gin gn ging vi ví d đm trong bài AVR2 nhng s  dng T/C0 và ch đm 1 chiu tng. Kt ni mch đin nh trong hình 4, mi ln Button 1 đc nhn, giá tr đm tng thêm 1. Button 2 dùng reset giá tr đm v 0. on code cho ví d th 2 này đc trình bày trong List 2. AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com Hình 4. m 1 chiu bng T/C0. List 2. nh thì 1ms vi T/C0 (ví d không s dng ngt) #include <avr/io.h> #include <avr/interrupt.h> int main(void){ DDRB=0xFF; //PORTB la output PORT PORTB=0x00; DDRD=0x00; //khai bao PORTD la input de ket noi Button kich vao chan T0 PORTD=0xFF; //su dung dien tro keo len cho PORTD TCCR0=(1<<CS02)|(1<<CS01); // CS02=1, CS01=1, CS00=0: xung nhip tu //chan T0, canh xuong TCNT0=0x00; while (1){ //vòng lp vô tn if (TCNT0==10) TCNT0=0; PORTB=TCNT0; //xuat gia tri dem ra led 7 doan if (bit_is_clear(PIND,7)) TCNT0=0; //Reset bo dem neu chan PD7=0 } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Ni dung trong chng trình chính là khai báo các hng giao tip cho các PORT, PORTB là ouput đ xut kt qu đm ra led 7 đon, PORTD đc khái báo input vì các button đc ni vi PORT này. T/C0 đc khai báo s dng ngun kích ngoài t T0, dng cnh xung thông qua dòng TCCR0=(1<<CS02)|(1<<CS01), bn cng có th khai báo tng đng là TCCR0=6 (tham kho bng 1). Giá tr ca b đm s đc xut ra PORTB đ kim tra. im chú ý trong đon chng trình này là macro “bit_is_clear”, đây là mt macro đc đnh ngha trong file “sfr_defs.h” dùng đ kim tra 1 bit trong mt thanh ghi đc bit có đc xóa (bng 0) hay không, trong trng hp ca đon code trên: “if(bit_is_clear(PIND,7)) TCNT0=0;” ngha là kim tra xem nu chân PD7 đc kéo xung 0 (button 2 đc nhn) thì s reset b đm v 0. AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com Nh vy vic s dng T/C0 là tng đi đn gin, bn ch cn khai báo các giá tr thích hp cho thanh ghi điu khin TCCR0 bng cách tham kho bng 1, sau đó khi to giá tr cho TCNT0 (nu cn thit), khai báo có s dng ngt hay không bng cách set hay không set bit TOIE0 trong thanh ghi TIMSK là hoàn tt. 2. Timer/Counter1 (T/C1) 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 – thng dùng đ điu khin đng c). Thanh ghi: có khá nhiu thanh ghi liên quan đn T/C1. Vì là T/C 16 bits trong khi đ rng b nh d liu ca AVR là 8 bit (xem li bài 2) nên đôi khi cn dùng nhng cp thanh ghi 8 bits to thành 1 thanh ghi 16 bit, 2 thanh ghi 8 bits s có tên k t thúc bng các ký t L và H trong đó L là thanh ghi cha 8 bits thp (LOW) và H là thanh ghi cha 8 bits cao (High) ca giá tr 16 bits mà chúng to thành. - 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 này cho phép bn đc và ghi giá tr mt cách trc tip. 2 thanh ghi đc kt hp nh sau: - 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 đng ca T/C1 đu đc xác đnh thông qua các bit trong 2 thanh ghi này. Tuy nhiên, đây không phi là 2 byte cao và thp ca mt thanh ghi mà là 2 thanh ghi hoàn toàn đc lp. Các bit trong 2 thanh ghi này bao gm các bit chn mode hay chn dng sóng (Waveform Generating Mode – WGM), các bit quy đnh dng ngõ ra (Compare Output Match – COM), các bit chn giá tr chia prescaler cho xung nhp (Clock Select – CS)…Cu trúc ca 2 thanh ghi đc trình bày nh bên di. AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com Nhìn chung đ “thuc” ht cách phi hp các bit trong 2 thanh ghi TCCR1A và TCCR1B là tng đi phc tp vì T/C1 có rt nhiu mode hot đng, chúng ta s kho sát chúng trong phn các ch đ hot đng ca T/C1 bên di.  đây, trong thanh ghi TCCR1B có 3 bit khá quen thuc là CS10, CS11 và CS12. ây là các bit chn xung nhp cho T/C1 nh truong T/C0. Bng 2 s tóm tt các ch đ xung nhp trong T/C1. Bng 2: chc nng các bit CS12, CS11 và CS10 - OCR1A và OCR1B (Ouput Compare Register A và B): có mt s khái nim mi mà chúng ta cn bit khi làm vic vi T/C1, mt trong s đó là Ouput Compare (sorry, I don’t wanna translate it to Vietnamese). Trong lúc T/C hot đng, giá tr thanh ghi TCNT1 tng, giá tr này đc liên tc so sánh vi các thanh ghi OCR1A và OCR1B (so sánh đc lp vi tng thanh ghi), vic so sánh này trên AVR gi là gi là Ouput Compare. Khi giá tr so sánh bng nhau thì 1 “Match” xy ra, khi đó mt ngt hoc 1 s thay đi trên chân OC1A (hoc/và chân OC1B) xy ra (đây là cách to PWM bi T/C1). Ti sao li có A và B? ó là vì ng i thit k AVR mun m rng kh nng ng dng T/C1 cho bn. A và B đi din cho 2 kênh (channel) và B. Cng vì điu này mà chúng ta có th to 2 kênh PWM bng T/C1. Tóm li, c bn 2 thanh ghi này cha các giá tr đ so sánh, chc nng và các ch đ hot đng c th ca chúng s đc kho sát trong các phn sau. AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com - ICR1 (InputCapture Register 1): khái nim mi th 2 ca T/C1 là Input Capture. Khi có 1 s kin trên chân ICP1 (chân 14 trên Atmega8), thanh ghi ICR1s “capture” giá tr ca thanh ghi đm TCNT1. Mt ngt có th xy ra trong trng hp này, vì th Input Capture có th đc dùng đ cp nht giá tr “TOP” ca T/C1. - TIMSK (Timer/Counter Interrupt Mask Register): các b T/C trên AVR dùng chung thanh ghi mt n ngt, vì th TIMSK cng đc dùng đ quy đnh ngt cho T/C1. Có điu lúc này chúng ta ch quan tâm đn các bit t 2 đn 5 ca TIMSK. Có tt c 4 loi ngt trên T/C1 (nh li T/C0 ch có 1 loi ngt tràn) Bit 2 trong TIMSK là TOIE1, bit quy đnh ngt tràn cho thanh T/C1 (tng t trng hp ca T/C0). Bit 3, OCIE1B là bit cho phép ngt khi có 1 “Match” xy ra trong vic so sánh TCNT1 vi OCR1B. Bit 4, OCIE1A là bit cho phép ngt khi có 1 “Match” xy ra trong vic so sánh TCNT1 vi OCR1A. Bit 5, TICIE1 là bit cho phép ngt trong trng hp Input Capture đc dùng. Cùng vi vic set các bit trên, bit I trong thanh ghi trng thái phi đc set nu mun s dng ngt (xem li bài 3 v điu khin ngt). - TIFR (Timer/Counter Interrupt Flag Register): là thanh ghi c nh cho tt c các b T/C. Các bit t 2 đn 5 trong thanh ghi này là các c tr ng thái ca T/C1. [...]... chip atmega8 còn có b timer2 8 bits có PWM và asynchronous operation V m t ch c n ng timer2 gi ng nh phiên b n 8 bit c a timer1 ( phân gi i th p h n nh ng có cùng ch và ph ng th c ho t ng) i m khác bi t và c ng là i m c bi t c a Timer2 là kh n ng ho t ng không ng b v i chip, nó gi ng nh vi c b n tách timer2 ra thành 1 chip timer riêng, vì th c n cung c p 1 ngu n xung clock khác cho timer này (1 th ch... tr c Dòng 11 và 12 th c hi n set các bit i u khi n Timer1 , tr c h t là các bit COM B n th y tôi ch set 2 bit COM1A1 và COM1B1: (1 . 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. -. AUTO.NLU For more details and questions, contact me: thanhtam.h@gmail.com CÙNG HC AVR AVR4 TIMER/ COUNTER VÀ CHUYN I ADC Tho thun: tài liu này thuc quyn s hu ca tác gi, bn có th. ng C cho AVR vi WinAVR và cách s dng ngt trong AVR. Bài 4 này chúng ta s kho sát các ch đ hot đng ca phng pháp điu khin các b đnh thi, đm (Timer/ Counter) trong AVR. Công

Ngày đăng: 01/08/2014, 20:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w