Lý thuyết AVR
lượt xem 231
download
Đây là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết những bài toán điều khiển trên nền vi xử lý. +Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn trong việc thay thế và sửa chữa hệ thống lúc cần. +Giá thành của dòng Vi Điều Khiển này khá phải chăng +Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống....
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lý thuyết AVR
- TÌM HIỂU VỀ AVR I.Tổng quan về AVR : 1. Giới thiệu AVR: +Đây là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết những bài toán điều khiển trên nền vi xử lý. +Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn trong việc thay thế và sửa chữa hệ thống lúc cần. +Giá thành của dòng Vi Điều Khiển này khá phải chăng +Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống. Sơ đồ khối của vi điều khiển:
- 2.Sơ lược về vi điều khỉển: Đây là lọai vi điều khiển 8 bit,các lệnh được xử lý nhanh hơn,tiêu thụ năng lượng thấp. - Atmega có cấu trúc RISC với: +131 lệnh,hầu hết được thực thi trong 1 chu kì xung nhịp. +32x8 thanh ghi đa dụng +Full static operation +Tốc độ làm việc 16MPIS,với thạch anh 16MHz +On_chip 2 cycle Multiplier -Bộ nhớ: +16 KB ISP Flash với khả năng 10.000lần ghi/xóa +512Byte EEROM +1KB SRAM ngọai
- -Giao tiếp JTAG: +Khả năng quét toàn diện theo chuẩn JTAG +Hỗ trợ khả năng Debug on-chip +Hỗ trợ lập trình Flash,EEROM,fuse… +Lock bit qua giao tiếp JTAG -Ngọai vi: +2 timer/counter 8 bit với các mode :so sánh và chia tần số +1 timer/counter 16 bit với các mode:so sánh,chia tần số,capture,PWM +1 timer thời gian thực(Real time clock) với bộ dao động riêng biệt +4 kênh PWM(họăc nhiều hơn trong các VĐK khác thuộc họ này) +8 kênh biến đổi ADC 10bit +Hỗ trợ giao tiếp I2C +Bộ giao giao tiếp nối tiếp lập trình được USART +Giao tiếp SPI +Watch_dog timer với bộ dao động on-chip riêng biệt -Những thuộc tính đặc biệt:: +Power On reset và Brown-out detection +chế độ hiệu chỉnh bộ sai số cho bộ dao động RC On-chip +Các chế độ ngắt ngoài và trong đa dạng +6 mode sleep:Idle,ADC noise reduction,tiết kiệm năng lượng,power-down, standby,extended standby -I/O port: +32 chân I/O(Atmega16) và 21 chân I/O (Atmega8) lập trình được +vỏ 40 chân (Atmega16) ,28 chân(Atmega8),64 chân(AT90can128); Đều có 3 địa chỉ vào ra đi kèm, địa chỉ vào ra được cần đến để đặt cấu hình cho các bit riêng biệt thành lối vào hoặc thành lối ra; địa chỉ khác được cần đến để xuất ra dữ liệu tới các bit (hoặc tất cả) được đặt cấu hình thành lối ra và địa chỉ thứ 3 được cần đến để đọc dữ liệu từ các chân (hoặc tất cả) được cấu hình thành lối vào. -Nguồn cấp: 2,7->5.5 V với ATmega16L 4.5->5.5V với ATmega16H -Tiêu hao năng lượng: +Khi họat động tiêu thụ dòng 1,1mA +Ở mode Idle tiêu thụ dòng 0.35mA +Ở chế độ Power_down tiêu thụ dòng nhỏ hơn 1uA -Đây là những chức năng cơ bản thường thấy trong các Vi điều khiển AVR,ngoài ra trong các vi điều khiển khác thuộc dòng vi điều khiển này thì thường được hỗ trợ thêm những chức năng đặc biệt.Ví dụ AT90can128 hỗ trợ thêm bộ giao tiếp mạng Can bus on-chip
- 3. Các phần mềm lập trình cho AVR: + AVRStuido (free), Code Vision. Các phần mềm này có hỗ trợ phần nạp và debug on chip + Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic800... II. Vi điều khiển AVR AT90S8535 : Vi điều khiển AT90S8535 là loại có kiến trúc RISC(Reduced Intruction Set Computer) phức tạp. Đây là kiến trúc phổ biến của các bộ vi điều khiển hiện đại. Có chỉ tiêu chất lượng cao và tiêu thụ năng lượng ít, nhiều bộ phận ngoại vi được thiết kế ngay trên chip. AT90S8535 còn nổi bật với cấu trúc Hardvard cải tiến là cấu trúc có bộ nhớ chương trình và bộ nhớ dữ liệu riêng. Bên trong gồm có: + 8 kbyte Ram Flash với giao diện nối tiếp SPI giúp lập trình được ngay trên hệ thống, chịu được khoảng 100000 lần ghi/xoá. + 118 lệnh mạnh, hầu hết được thực hiện trong một chu kỳ xung nhịp. + Bộ nhớ EEPROM 512 bytes. + Bộ nhớ SRAM bên trong 512 bytes. + Bộ chuyển đổi ADC 8 kênh, 10 bit. + 32x8 thanh ghi làm việc đa năng. + Bộ đếm thời gian thực với bộ dao động và chế độ đếm tách biệt. + Hai bộ đếm/định thời 8 bit với chế độ so sánh và chia tần số tách biệt. + Một bộ đếm/định thời 16 bit với chế độ so sánh, chia tần số tách biệt và chế độ bắt mẫu. 1.Kiến trúc RISC của AT90S8535:
- 2.Cấu tạo chân của AT90S8535 :
- 3.Tổ chức vùng nhớ AVR AT90S8535 : Các bộ vi xử lí AVR có cấu trúc Harvard nghĩa là có bộ nhớ chương trình và bộ nhớ dữ liệu riêng. Boä nhôù chöông Boä nhôù Boä nhôù trình döõ lieäu döõ lieäu $00 $000 $00 32 thanh 0 0 0 ghi ña $001 muïc ñích F Boä nhôù Flash 64 thanh ghi (4K x 16) EEPRROM Input/Outp (512 x 8) ut $005 F $1FF SRAM noäi (512 x 8) $025 F $FFF Bộ nhớ chương trình là loại bộ nhớ Flash, 16 bit, có dung lượng 8Kbyte. Bộ nhớ chương trình được truy nhập theo từng chu kỳ đồng hồ và một lệnh được ghi vào thanh ghi lệnh. Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ, còn chứa các vectơ ngắt ở đầu địa chỉ(xem phần ngắt). Chương trình hiện tại sẽ bắt đầu ở phía bên kia vùng cho các vectơ ngắt. Bộ nhớ dữ liệu: có 4 vùng khác nhau + Vùng tập thanh ghi: gồm 32 thanh ghi có độ rộng 8 bit. + Vùng các thanh ghi vào ra: gồm 64 thanh ghi vào ra, mỗi thanh ghi có độ rộng 8 bit. Các thanh ghi này thực chất là một phần của bộ nhớ SRAM trên chip và cũng có thể được truy nhập như bộ nhớ SRAM có địa chỉ từ $20 -> $5F hoặc như các thanh ghi I/O có địa chỉ từ $00 -> $3F. Hầu hết các thanh ghi này được trao đổi như các thanh ghi I/O chứ không phải như SRAM. + Vùng nhớ SRAM bên trong(RAM đa dụng): gồm 512 byte. Bộ nhớ SRAM sử dụng cho ngăn xếp cũng như để lưu trữ các biến.
- + Vùng EEPROM: gồm 512 byte và được truy nhập theo bản đồ bộ nhớ tách biệt. Địa chỉ bắt đầu của bộ nhớ EEPROM là $0000. Bộ nhớ này có thể được đọc/ghi bằng phần mềm. Hoạt động của các bộ phận trên AVR AT90S8535 + Bộ nhớ EEPROM: được truy nhập qua các thanh ghi truy nhập EEPROM, cụ thể là: thanh ghi địa chỉ EEPROM [EEAR], thanh ghi dữ liệu EEPROM [EEDR] và thanh ghi điều khiển EEPROM [EECR], Để truy nhập EEPROM ta phải trải qua các trình tự sau: cho địa chỉ cần truy nhập (vào thanh ghi địa chỉ) -> đọc hay ghi (vào thanh ghi điều khiển) -> dữ liệu cần đọc hoặc ghi (qua thanh ghi dữ liệu). + Bộ nhớ SRAM: được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu trực tiếp hoặc gián tiếp qua các con trỏ X,Y,Z. Thời gian truy nhập bộ nhớ SRAM bằng 2 chu kỳ xung đồng hồ. 4. Bộ UART: Bộ truyền nhận UART: Việc truyền dữ liệu được khởi tạo bằng cách ghi dữ liệu vào thanh ghi dữ liệu I/O UART [UDR]. a.Bộ truyền UART : Sơ đồ khối:
- Quaù trình truyeàn döõ lieäu ñöôïc khôûi ñoäng baèng caùch vieát döõ lieäu caàn truyeàn ñeán thanh ghi döõ lieäu I / Ocuûa boä UART, goïi laø thanh ghi UDR. Döõ lieäu ñöôïc truyeàn töø thanh ghi UDR ñeán thanh ghi dòch phaùt khi : • Moät kí töï môùi ñöôïc vieát ñeán UDR sau khi bit stop cuûa kí töï tröôùc ñoù ñaõ ñöôïc dòch ra ngoaøi. Thanh ghi dòch seõ ñöôïc naïp giaù trò môùi ngay laäp töùc. • Moät kí töï môùi ñöôïc vieát ñeán UDR tröôùc khi bit stop töø kí töï tröôùc ñoù ñöôïc dòch ra ngoaøi. Thanh ghi dòch seõ ñöôïc naïp khi bit stop cuûa kí töï hieän ñang truyeàn ñöôïc dòch ra ngoaøi. Neáu thanh ghi dòch phaùt 10(11)-bit laø roãng, döõ lieäu ñöôïc truyeàn töø thanh ghi UDR ñeán thanh ghi dòch. Khi ñoù Bit côø thanh ghi döõ lieäu roãng UDRE(UART Data Register Empty) trong thanh ghi traïng thaùi UART, USR (UART Status Register) ñöôïc set. Khi bit naøy ñöôïc set (baèng 1) thì UART saün saøng nhaän kí töï tieáp theo. Vaøo cuøng thôøi ñieåm döõ lieäu ñöôïc truyeàn töø UDR ñeán thanh ghi dòch 10(11)-bit, bit 0 cuûa thanh ghi dòch ñöôïc xoùa (bit start) vaø bit 9 hoaëc 10 ñöôïc set (bit stop). Neáu ta muoán truyeàn döõ lieäu 9 bit (bit döõ lieäu 9 coù theå laø bit kieåm tra chaün /leû), thì bit CHR9 trong thanh ghi ñieàu khieån UART: UCR (UART control register) phaûi ñöôïc set. Vaø bit TXB8 trong thanh ghi UCR ñöôïc truyeàn ñeán bit 9 trong thanh ghi dòch phaùt. Nhö vaäy bit döõ lieäu 9 phaûi ñöôïc chöùa trong bit TXB8 trong thanh ghi UCR. Theo nhòp ñoàng hoà toác ñoä baud cung caáp cho thanh ghi dòch phaùt, bit start ñöôïc dòch ra ngoaøi ñaàu tieân treân chaân TXD. Theo sau laø caùc bit döõ lieäu, trong ñoù bit coù troïng soá thaáp seõ ñöôïc dòch ra tröôùc.Vaø cuoái cuøng laø bit stop ñöôïc dòch ra. Khi bit stop ñöôïc dòch ra ngoaøi, thanh ghi dòch seõ ñöôïc naïp giaù trò môùi neáu nhö coù baát kyø döõ lieäu naøo ñöôïc vieát ñeán thanh ghi UDR trong suoát thôøi gian truyeàn. Trong thôøi gian naïp giaù trò (load), bit UDRE ñöôïc set (leân 1). Neáu khoâng coù döõ lieäu môùi trong thanh ghi UDR ñeå truyeàn ñi khi bit stop ñöôïc dòch ra ngoaøi, côø UDRE seõ duy trì traïng thaùi set cho ñeán khi thanh ghi UDR ñöôïc vieát giaù trò moät laàn nöõa. Khi khoâng coù döõ lieäu môùi ñöôïc ghi vaø bit stop ñaõ ôû treân chaân TXD ñuùng moät chieàu daøi bit, côø phaùt hoøan thaønh TXC (TX Complete) trong thanh ghi USR ñöôïc set. Bit TXEN trong thanh ghi UCR khi set (baèng1) thì boä phaùt UART môùi ñöôïc cho pheùp. Khi bit naøy bò xoùa (traïng thaùi maëc ñònh) thì boä phaùt UART khoâng ñöôïc cho pheùp vaø chaân TXD chæ coù theå söû duïng nhö muïc ñích I/O thoâng thöôøng. Khi bit TXEN ñöôïc set, boä phaùt UART seõ ñöôïc keát noái ñeán chaân TXD (PD1), vaø chaân TXD trôû thaønh chaân ngoõ ra, baát keå söï thieát laäp höôùng cuûa bit DDD1 trong thanh ghi DDRD.
- b.Bộ nhận UART: Sơ đồ khối: Boä nhaän döõ lieäu chöùa khoái logic front-end coù nhieäm vuï laáy maãu tín hieäu treân chaân RXD vôùi taàn soá laáy maãu baèng 16 laàn toác ñoä baud. Khi ñöôøng truyeàn ôû traïng thaùi nghæ (möùc logic 1), neáu coù söï chuyeån veà "0" thì noù ñöôïc xem laø caïnh xuoáng cuûa moät bit start vaø tuaàn töï phaùt hieän bit start ñöôïc khôûi ñoäng. Vì boä nhaän chöùa khoái logic front-end laáy maãu ôû taàn soá baèng 16 laàn toác ñoä baud neân moät bit seõ ñöôïc laáy
- maãu 16 laàn. Trong tröôøng hôïp naøy, khi coù söï chuyeån möùc töø traïng thaùi nghæ cuûa ñöôøng truyeàn xuoáng möùc "0", thì tuaàn töï phaùt hieän bit start seõ laø : neáu trong ba laàn laáy maãu 8, 9 vaø 10 cuûa bit start maø hai (hoaëc ba) laàn laø möùc logic "1", thì bit start naøy bò loïai boû vaø ñöôïc xem nhö moät tín hieäu nhieãu, boä nhaän baét ñaàu tìm söï chuyeån traïng thaùi töø 1-ñeán-0 ( 1 laø traïng thaùi sau cuûa bit stop chôù khoâng phaûi laø bit döõ lieäu) tieáp theo. Tuy nhieân, khi bit start ñöôïc xem laø hôïp leä, vieäc laáy maãu cuûa caùc bit döõ lieäu theo sau bit start seõ ñöôïc thöïc hieän. Vaø caùc bit naøy cuõng ñöôïc laáy maãu taïi ba maãu 8, 9 vaø 10. Neáu 2 hoaëc ba laàn giaù trò logic laø gioáng nhau thì giaù trò ñoù ñöôïc xem laø giaù trò hôïp lyù. Taát caû caùc bit ñöôïc dòch vaøo thanh ghi dòch cuûa boä truyeàn gioáng nhö chuùng ñaõ ñöôïc laáy maãu. Khi bit stop ñöôïc ñöa vaøo boä nhaän, thì hai hoaëc ba trong 3 laàn laáy maãu phaûi laø 1 ñeå nhaän bit stop hôïp leä. Neáu trong ba laàn laáy maãu, maø nhieàu hôn hai laàn laø möùc logic "0", thì côø loãi khung truyeàn FE (Framing Error) trong thanh ghi traïng thaùi UART( USR) ñöôïc set (baèng 1). Tröôùc khi ñoïc döõ lieäu töø thanh ghi döõ lieäu UART (UDR), ngöôøi söû duïng neân kieåm tra bit FE ñeå phaùt hieän loãi khung truyeàn. Coù hoaëc khoâng coù giaù trò bit stop ñöôïc phaùt hieän laø hôïp leä thì döõ lieäu cuõng seõ ñöôïc truyeàn ñeán UDR vaø côø nhaän hoaøn thaønh RXC ñöôïc set. Thanh ghi UDR thöïc chaát laø hai thanh ghi taùch bieät veà maët vaät lyù, moät cho döõ lieäu truyeàn vaø moät cho döõ lieäu nhaän. Khi thanh ghi UDR ñöôïc ñoïc thì thanh ghi döõ lieäu nhaän (the Receive Data register) ñöôïc truy caäp, ngöôïc laïi, khi thanh ghi UDR ñöôïc ghi thì thanh ghi döõ lieäu phaùt (The transmit data register) ñöôïc truy caäp. Neáu ta muoán truyeàn döõ lieäu 9 bit, thì bit CHR9 trong thanh ghi ñieàu khieån UART (UCR) phaûi ñöôïc set, vaø bit RXB8 trong thanh ghi USR seõ ñöôïc naïp vaøo bit 9 trong thanh ghi dòch phaùt khi döõ lieäu ñöôïc truyeàn ñeán thanh ghi UDR. Bit döõ lieäu thöù 9 naøy seõ ñöôïc nhaän taïi bit RXB8 trong thanh ghi USC.
- c. Ñ EÀU KH EÅN UART : I I Thanh ghi döõ lieäu I/O UART : UDR (UART I/O Data Register) Thanh ghi UDR thöïc chaát laø hai thanh ghi rieâng leû veà maët vaät lyù nhöng cuøng chia seû ñòa chæ I/O gioáng nhau. Khi vieát ñeán thanh ghi naøy thì thanh ghi döõ lieäu truyeàn UART ñöôïc truy caäp. Coøn khi ñoïc thanh ghi naøy thì thanh ghi döõ lieäu nhaän UART ñöôïc truy caäp. Thanh ghi traïng thaùi UART : USR (UART Status Register) Ñaây laø thanh ghi chæ cho pheùp söï truy caäp ñoïc, cung caáp thoâng tin veà traïng thaùi UART. Thanh ghi ñieàu khieån UART: UCR (UART Control Register): Thanh ghi taïo toác ñoä baud : UBRR Ñaây laø thanh ghi 8 bit coù theå ñoïc/vieát vaø ñöôïc söû duïng ñeå taïo ra toác ñoä baud cho UART nhö mieâu taû tröôùc ñoù. 5.Bộ so sánh Analog :
- Bộ so sánh Analog: so sánh các giá trị điện áp ở lối vào AIN0 (AC+) và AIN1 (AC-) với nhau. Nếu như điện áp lối vào AIN0 lớn hơn AIN1 thì lối ra bộ so sánh Analog (AC0) được đặt lên mức “1”. Lối ra này có thể sử dụng cho bộ Timer/Counter 1 để Trigger hoặc xoá ngắt bộ so sánh Analog. 6.Bộ ADC: Bộ biến đổi tương tự sang số (ADC): với độ phân giải 10 bit/1 kênh. Bộ biến đổi ADC có bộ dồn kênh 8 lối vào, mỗi lối có thể dẫn riêng lẻ tới ADC. Thời gian thực hiện cho tất cả các chuyển đổi từ 65 ms đến 260 ms. Bộ biến đổi ADC được thực hiện qua 4 thanh ghi ADMUX, ADCSR, ADCH, ADCL và có thể hoạt động trong 2 chế độ: quá trình biến đổi được người dùng khởi động (Single Conversion Mode), quá trình biến đổi diễn ra liên tục (Free Running). 7.Bộ định thời WATCHDOG TIMER :
- Boä ñònh thôøi Watchdog ñöôïc ngöôøi duøng söû duïng nhieàu nhaát vôùi muïc ñích choáng “treo”cho vi ñieàu khieån. Trong quaù trình laäp trình coù nhöõng tình huoáng ta khoâng ñoaùn tröôùc ñöôïc caùc söï kieän, ta ñaõ laäp trình ñeå vi ñieàu khieån chôø ñôïi moät söï kieän naøo ñoù maø thöïc teá söï kieän ñoù khoâng xaûy ra hoaëc ta laäp trình bò loãi voøng laëp hoaëc nhieàu lí do khaùc khieán cho heä thoáng bò treo, khoâng hoaït ñoäng. Khi ñoù boä ñònh thôøi watchdog coù leõ laø coâng cuï höõu hieäu ñeå giaûi quyeát tröôøng hôïp naøy. Boä ñònh thôøi watchdog söû duïng moät boä dao ñoäng rieâng treân chip. Baèng caùch ñieàu khieån boä chia taàn ta coù theå coù ñöôïc caùc khoaûng thôøi gian reset watchdog khaùc nhau. Moät caùch ñôn giaûn ñeå hieåu veà laäp trình watchdog laø : ta ñònh moät khoaûng thôøi ñeå chuoãi caùc söï kieän dieãn ra bình thöôøng laø tn, ta choïn thôøi gian reset watchdog laø tw > tn. Trình töï nhö sau : + Cho pheùp watch dog hoaït ñoäng vôùi khoaûng thôøi gian reset laø tW + Chuoãi caùc coâng vieäc, söï kieän ... + Khoùa Watchdog laïi. Roõ raøng neáu caùc coâng vieäc söï kieän dieãn ra bình thöôøng thì tn < tw vaø watchdog bò khoùa, reset do watchdog khoâng xaûy ra. Coøn neáu caùc coâng vieäc, söï kieän bò “truïc traëc” rôi vaøo voøng ñôïi hoaëc laëp thì khi tn vöôït quaù tW , watchdog khoâng bò khoùa, reset xaûy ra vaø vi ñieàu khieån quay veà traïng thaùi khôûi taïo taïi ñòa chæ vector reset.
- Chuù yù : Boä dao ñoäng Watchdog treân chip phuï thuoäc vaøo nguoàn nuoâi, do ñoù tuyø theo giaù trò nguoàn nuoâi maø ta choïn giaù trò thích hôïp. Leänh WDR (Watchdog reset) neân luoân luoân ñöôïc thi haønh tröôùc khi Watchdog ñöôïc cho pheùp hoaït ñoäng. Ñieàu naøy ñaûm baûo raèng chu kyø reset seõ phuø hôïp caùc thieát laäp cuûa boä chia taàn cho watchdog. Bôûi vì neáu boä Watchdog ñöôïc cho pheùp “chaïy” maø khoâng ñöôïc reset tröôùc (duøng leänh WDR) thì raát coù theå noù seõ ñeám töø moät soá khoâng phaûi laø zero. Ñeå traùnh caùc Reset khoâng mong muoán do Watchdog, thì boä ñònh thôøi Watchdog neân ñöôïc caám (khoaù) hoaëc ñöôïc reset (duøng leänh WDR) tröôùc khi ta choïn giaù trò boä chia cho watchdog. 8.Bộ TIMER/COUNTER: Caáu taïo vaø lyù thuyeát chung : Vi ñieàu khieån AT90S8535 coù taát caû ba timer/counter khaùc nhau goàm : hai timer/counter 8 bit vaø moät timer/counter 16 bit. Timer/counter2 coù theå ñöôïc choïn nguoàn clock khoâng ñoàng boä töø dao ñoäng beân ngoaøi. Dao ñoäng naøy ñöôïc toái öu hoaù khi söû duïng thaïch anh ñoàng hoà 32.768 Khz, khi ñoù Timer/counter2 ñöôïc söû duïng nhö moät ñoàng hoà thôøi gian thöïc (RTC : real timer clock). Timer/counter 0 vaø 1 coù boä chia taàn soá rieâng, noù coù theå chia taàn soá gaàn nhö moät boä chia taàn soá 10bit. Timer/counter 2 thì coù moät boä chia rieâng cuûa noù. Caû ba Timer/counter naøy coù theå ñöôïc söû duïng nhö moät boä ñònh thôøi (timer) vôùi neàn xung clock beân trong cuûa heä thoáng hoaëc coù theå söû duïng nhö boä ñeám (counter) vôùi nguoàn xung kích (trigger) beân ngoaøi. Hoaït ñoäng cuûa Timer/counter trong AT90S8535 +Hoaït ñoäng ñònh thôøi +So saùnh ngoõ ra +Baét soáng ngoõ vaøo +Ñieàu cheá ñoä roäng xung. a. Timer/counter 0: Timer/counter 0 laø Timer/counter 8 bit, coù theå choïn nguoàn xung clock töø CK, boä chia taàn soá CK hoaëc töø moät chaân beân ngoaøi. Ta cuõng coù theå cho döøng Timer/counter 0 nhö baûng mieâu taû chöùc naêng cuûa thanh ghi ñieàu khieån Timer/counter 0, TCCR0. Côø traïng thaùi traøn Timer/counter 0 thì coù theå tìm thaáy trong thanh ghi TIFR. Tín hieäu ñieàu khieån Timer/counter 0 ta coù theå thieát laäp trong thanh ghi TCCR0. Ñeå thieát laäp ngaét trong Timer/counter 0 ta coù theå thieát laäp caùc bit trong thanh ghi TIMSK.
- Khi Timer/counter 0 laáy nguoàn clock töø beân ngoaøi, tín hieäu beân ngoaøi naøy seõ ñöôïc ñoàng boä vôùi taàn soá cuûa CPU. Ñeå ñaûm baûo söï laáy maãu chính xaùc tín hieäu beân ngoaøi, taàn soá xung clock toái ña beân ngoaøi laø CK/2. Tín hieäu xung clock beân ngoaøi ñöôïc laáy maãu ôû caïnh leân cuûa xung clock CPU. Timer/counter 0 laø Timer/counter ñôn giaûn nhaát trong ba Timer/ counter bôûi vì noù khoâng coù chöùc naêng naøo khaùc ngoaøi vieäc ñònh thôøi vaø ñeám xung. Sô ñoà caáu taï o Ti m count er 0 er/ Ñaây laø thanh ghi chöùa giaù trò cuûa Timer/counter 0. Timer/counter 0 ñöôïc xem nhö moät boä ñeám leân vôùi söï truy caäp ñoïc / vieát. Neáu Timer/counter 0 ñöôïc vieát moät giaù trò naøo ñoù vaø nguoàn clock ñöôïc choïn (TCCR0 khaùc 0), Timer/counter 0 seõ tieáp tuïc ñeám leân cho ñeán khi noù ñeán giaù trò maxval=$ff vaø
- noù seõ bò traøn vaø giaù trò Timer/counter 0 bò reset veà $00 ( khi ñoù côø TOV0 seõ ñöôïc set ). b. Timer/counter 1 (Timer/counter 16 bits): Coù leõ ñaây laø Timer/counter phöùc taïp vaø khoù söû duïng nhaát trong ba Timer/counter. Timer/counter 1 coù theå choïn nguoàn clock töø CK, boä chia taàn soá CK hoaëc töø moät chaân beân ngoaøi. Khi ñoù ta coù theå duøng Timer/counter1 nhö mieâu taû chöùc naêng trong thanh ghi ñieàu khieån Timer/counter1 (TCCR1A vaø TCCR1B). Caùc côø traïng thaùi khaùc nhau (côø traøn TOV1, Côø so saùnh OCF1A, OCF1B vaø côø baét soáng ngoõ vaø ICF1) coù theå tìm thaáy trong thanh ghi TIFR. Tín hieäu ñieàu khieån Timer/counter1 coù theå ñöôïc thieát laäp trong TCCR1A vaø TCCR1B. Ñeå thieát laäp caùc ngaét do Timer/counter1 ta thieát laäp caùc bit trong thanh ghi TIMSK. Khi Timer/counter1 söû duïng nguoàn clock beân ngoaøi, ñeå ñaûm baûo söï laáy maãu chính xaùc taàn soá toái ña cuûa nguoàn clock beân ngoaøi laø CK/2. Timer/counter1 hoå trôï hai chöùc naêng so saùnh ngoõ ra söû duïng thanh ghi OCR1A vaø OCR1B nhö nguoàn döõ lieäu ñeå so saùnh vôùi
- noäi dung chöùa trong thanh ghi Timer/counter1: TCNT1 (goàm TCNT1H vaø TCNT1L) Timer/counter1 coøn cung caáp moät chöùc naêng ñaëc bieät khaùc ñoù laø chöùc naêng baét soáâng ngoõ vaøo. Treân vi ñieàu khieån AVR coù moät chaân ñeå kích (trigger) söï kieän baét soáng ngoõ vaøo ICP (Input Capture Pin). Söï thay ñoåi möùc tín hieäu treân chaân naøy seõ laøm cho giaù trò hieän haønh trong timer ñöôïc ñoïc vaø löu tröõ trong thanh ghi baét soáng ngoõ vaøo ICR1(input capture register). Vaøo thôøi ñieåm naøy, côø baét soáng ngoõ vaøo ICF1 trong thanh ghi TIFR seõ ñöôïc set. Ñieàu naøy cöïc kyø höõu ích trong vieäc ño ñoä roäng cuûa xung beân ngoaøi. Ngoaøi ra, boä so saùnh Analog cuõng coù theå ñöôïc set ñeå trigger söï kieän baét soáng ngoõ vaøo. Neáu chöùc naêng choáng nhieãu ñöôïc cho pheùp, ñieàu kieän ñeå trigger söï baét soáng ngoõ vaøo laø boán chu kyø laáy maãu lieân tieáp ñoä roäng xung ngoõ vaøo phaûi gioáng nhau, khi ñoù côø baét soáng ngoõ vaøo môùi ñöôïc set. Tín hieäu chaân ngoõ vaøo ñöôïc laáy maãu taïi taàn soá xung CK cuûa heä thoáng. * Thanh ghi Timer/counter1 : TCNT1 (goàm TCNT1H vaø TCNT1L)
- Thanh ghi TCNT1 laø thanh ghi 16 bit chöùa giaù trò cuûa Timer/counter1. Ñeå ñaûm baûo caû byte cao vaø byte thaáp ñöôïc ñoïc vaø ghi ñoàng thôøi khi CPU truy caäp ñeán nhöõng thanh ghi naøy, söï truy caäp ñöôïc thöïc thi nhôø vaøo vieäc söû duïng moät thanh ghi taïm TEMP 8 bits. Thanh ghi TEMP naøy cuõng ñöôïc söû duïng khi truy caäp caùc thanh ghi OCR1A, OCR1B vaø ICR1. Neáu chöông trình chính vaø chöông trình ngaét cuøng thöïc hieän söï truy caäp ñeán nhöõng thanh ghi coù söû duïng thanh ghi TEMP thì caùc ngaét phaûi bò caám trong suoát quaù trình truy caäp töø chöông trình chính ( vaø töø chöông trình ngaét neáu ngaét ñöôïc cho pheùp töø trong chöông ngaét). * Moät soá chuù yù quan troïng khi truy caäp ñeán thanh ghi Timer/counter1: - Khi vieát döõ lieäu vaøo Timer/counter1: Khi CPU vieát ñeán byte cao TCNT1H, döõ lieäu vieát ñöôïc ñaët trong thanh ghi TEMP. Tieáp theo CPU vieát ñeán byte thaáp TCNT1L, byte naøy cuûa döõ lieäu keát hôïp vôùi byte döõ lieäu trong thanh ghi TEMP, vaø taát caû 16 bits cuûa döõ lieäu ñöôïc vieát ñeán thanh ghi TCNT1 moät caùch ñoàng thôøi. Nhö vaäy, theo tuaàn töï byte cao TCNT1H seõ ñöôïc vieát tröôùc, sau ñoù vieát tieáp ñeán byte thaáp TCNT1L ñeå ñaûm baûo cho söï vaän haønh vieát ñaày ñuû cuûa thanh ghi 16 bits. - Khi ñoïc döõ lieäu töø TCNT1 Khi CPU ñoïc byte ñoïc byte thaáp TCNT1L, döõ lieäu cuûa byte thaáp TCNT1L ñöôïc gôûi ñeán CPU vaø döõ lieäu byte cao TCNT1H ñöôïc ñaët trong thanh ghi TEMP. Khi CPU ñoïc döõ lieäu trong byte cao TCNT1H, CPU nhaän döõ lieäu trong thanh ghi TEMP. Nhö vaäy, theo tuaàn töï TCNT1L phaûi ñöôïc ñoïc tröôùc, sau ñoù TCNT1L ñöôïc sau. Timer/counter1 ñöôïc xem nhö laø moät ñeám leân hoaëc boä ñeám leân/xuoáng ( trong cheá ñoä PWM) vôùi söï truy caäp ñoïc vaø vieát. Neáu Timer/counter1 ñöôïc naïp giaù trò vaø nguoàn xung clock ñöôïc choïn, Timer/counter1 seõ tieáp tuïc ñeám töø giaù trò naïp trong Timer/counter1 taïi chu kyø xung clock cung caáp cho timer sau ñoù.
- Nhöõng thanh ghi so saùnh ngoõ ra laø thanh ghi 16 bits coù theå ñoïc/vieát. Thanh ghi so saùnh ngoõ ra chöùa noäi dung ñöôïc so saùnh lieân vôùi giaù trò Timer/counter1. Taùc ñoäng cuûa traän so saùnh ñöôïc xaùc ñònh trong caùc thanh ghi ñieàu khieån vaø thanh ghi traïng thaùi cuûa Timer/counter1. Traän so saùnh chæ vaän haønh khi Timer/counter1 ñeám ñeán giaù trò chöùa trong thanh ghi OCR1. Khi trong phaàn meàm ta vieát giaù trò cuûa Timer/counter1 vaø giaù trò OCR1A (hoaëc OCR1B) baèng nhau, thì traän so saùnh seõ khoâng ñöôïc phaùt sinh(xaûy ra). Traän so saùnh seõ set côø ngaét so saùnh vaøo chu kyø xung clock CPU tieáp theo sau söï kieän so saùnh. Khi naïp giaù trò vaøo caùc thanh ghi so saùnh naøy thì ta phaûi naïp giaù trò cuûa byte cao (OCR1AH hoaëc OCR1BH) tröôùc. Ngöôïc laïi, khi ñoïc giaù trò cuûa nhöõng thanh ghi so saùnh naøy thì byte thaáp (OCR1AL hoaëc OCR1BL) phaûi ñöôïc ñoïc tröôùc. Toùm laïi, söï truy nhaäp ñeán caùc thanh ghi OCRx töông töï söï truy caäp thanh ghi TCNT1.
- Thanh ghi baét soáng ngoõ vaøo laø moät thanh ghi 16 bits chæ cho pheùp ñoïc. Khi caïnh leân hoaëc caïnh xuoáng (tuyø thuoäc caïnh ngoõ vaøo ñöôïc choïn bôûi bit ICES1) cuûa tín hieäu taïi chaân ICP ñöôïc phaùt hieän, giaù trò hieän haønh cuûa Timer/counter1 ñöôïc truyeàn ñeán thanh ghi ICR1. Vaøo cuøng thôøi ñieåm naøy, côø baét soáng ngoõ vaøo ICF1 cuõng ñöôïc set. Söï truy caäp thanh ghi ICR1 töông töï söï truy caäp Timer/counter1. * TIMER/COUNTER1 TRONG CHEÁ ÑOÄ ÑIEÀU CHEÁ ÑOÄ ROÄNG XUNG : Khi cheá ñoä PWM ñöôïc choïn, baèng caùch thieát laäp Timer/counter1, thanh ghi so saùnh ngoõ ra OCR1A vaø thanh ghi so saùnh ngoõ ra OCR1B, caùc chaân ngoõ ra PD5 (OC1A) /PD4 (OC1B) coù theå xuaát ra xung ñöôïc ñieàu cheá PWM ñuùng pha hoaëc chaïy khoâng ñeàu hoaëc chaïy töï do 8bit, 9bit hoaëc 10 bit. Timer/counter1 hoaït ñoäng nhö moät boä ñeám leân/xuoáng, ñeám leân töø giaù trò $0000 ñeán giaù trò TOP (xem baûng sau), vaøkhi ñoù noù quay trôû laïi ñeám veà zero tröôùc khi chu kyø naøy ñöôïc laëp laïi. Khi giaù trò ñeám baèng giaù trò 10 bit coù troïng soá thaáp nhaát trong thanh ghi OCR1A hoaëc OCR1B, Caùc chaân PD5(OC1A)/PD4(OC1B) ñöôïc set leân moät hoaëc xoaù veà 0 tuyø thuoäc vaøo caùch thieát laäp caùc bit COM1A1/COM1A0 hoaëc COM1B1/COM1B0 trong thanh ghi ñieàu khieån Timer/counter1 (TCCR1A). d. Timer/counter2 (Timer/counter 8 bits): Sô ñoà nguyeân lyù Timer/counter2:
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình lý thuyết điều khiển AVR Atmega 128
377 p | 623 | 273
-
Các bộ vi xử lý trên thực tế
121 p | 271 | 151
-
đồ án thiết kế chế tạo và điều khiển tay máy, chương 3-4
20 p | 228 | 95
-
BIẾN ĐỔI VỀ VỊ TRÍ VÀ VỊ THẾ TIM ẢNH HƯỞNG TRÊN ĐIỆN TÂM ĐỒ
27 p | 123 | 28
-
Lý thuyết điện tử công suất: Phần 2
51 p | 11 | 6
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn