intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

TÌM HIỂU VỀ AVR

Chia sẻ: Vu Duy Tu | Ngày: | Loại File: DOC | Số trang:27

368
lượt xem
167
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: TÌM HIỂU VỀ AVR

  1. 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. 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
  3. -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
  4. 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:
  5. 2.Cấu tạo chân của AT90S8535 :
  6. 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 EEPRROM Boä nhôù Flash $002 64 thanh (512 x 8) (4K x 16) 0 ghi Input/Outp ut $005 F $1FF $006 0 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.
  7. + 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:
  8. 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/O cuûa boä UART , goïi laø thanh ghi U DR. Döõ lieäu ñöôïc truyeàn töø thanh ghi U DR ñeán thanh ghi dòch phaùt khi : • Moät kí töï môùi ñöôïc vieát ñeán U DR sau khi bit s t o p 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 U DR tröôùc khi bit s t o p töø kí töï tröôùc ñoù ñöôïc dòch ra ngoaøi. Thanh ghi dòch seõ ñöôïc naïp khi bit s t o p 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 U DR ñeán thanh ghi dòch. Khi ñoù Bit côø thanh ghi döõ lieäu roãng U DRE (UART Data Register Empty) trong thanh ghi traïng thaùi UART, U SR (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öø U DR ñ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 U DR trong suoát thôøi gian truyeàn. Trong thôøi gian naïp giaù trò (load), bit U DRE ñöôïc set (leân 1). Neáu khoâng coù döõ lieäu môùi trong thanh ghi U DR ñeå truyeàn ñi khi bit stop ñöôïc dòch ra ngoaøi, côø U DRE seõ duy trì traïng thaùi set cho ñeán khi thanh ghi U DR ñöôï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 U SR ñöôï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 D DD1 trong thanh ghi D DRD .
  9. 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
  10. 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( U SR ) ñöôï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 U DR vaø côø nhaän hoaøn thaønh RXC ñöôïc set. Thanh ghi U DR 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 U DR ñöôï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 U DR ñöôï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 U SR 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 U DR . Bit döõ lieäu thöù 9 naøy seõ ñöôïc nhaän taïi bit RXB8 trong thanh ghi U SC .
  11. c .ÑIEÀU KHIEÅN UART : Thanh ghi döõ lieäu I/O UART : UDR (UART I/O Data Register) Thanhghi UDR thöïc chaátlaø hai thanhghi rieângleû veàmaëtvaätlyù nhöng cuøngchia seûñòachæI/O gioángnhau.Khi vieátñeánthanhghi naøythì thanhghi döõ lieäutruyeànUART ñöôïc truy caäp.Coøn khi ñoïc thanhghi naøythì thanhghi döõ lieäunhaänUART ñöôïc truy caäp. Thanh ghi traïng thaùi UART : USR (UART Status Register) Ñaâylaø thanhghi chæcho pheùpsöï truy caäpñoïc, cungcaápthoângtin veà traïngthaùi UART. Thanh ghi ñieàu khieån UART: UCR (UART Control Register): Thanh ghi taïo toác ñoä baud : UBRR Ñaâylaø thanhghi 8 bit coù theåñoïc/vieátvaøñöôïc söû duïngñeåtaïo ra toác ñoäbaudcho UART nhömieâutaûtröôùcñoù. 5.Bộ so sánh Analog :
  12. 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 :
  13. Boä ñònhthôøi Watchdogñöôïc ngöôøi duøngsöû duïngnhieàu nhaátvôùi muïc ñích choáng“treo”chovi ñieàukhieån.Trongquaùtrình laäptrìnhcoù nhöõngtình huoángta khoângñoaùntröôùcñöôïc caùc söï kieän,ta ñaõlaäptrìnhñeåvi ñieàukhieånchôøñôïi moätsöï kieän naøoñoù maøthöïc teásöï kieänñoù khoângxaûyra hoaëcta laäp trìnhbò loãi voønglaëphoaëcnhieàulí do khaùckhieáncho heäthoáng bò treo, khoânghoaïtñoäng.Khi ñoù boäñònhthôøi watchdogcoù leõ laø coângcuï höõuhieäuñeågiaûi quyeáttröôønghôïp naøy.Boä ñònh thôøi watchdogsöûduïngmoätboädaoñoängrieângtreânchip. Baèng caùchñieàukhieånboächia taànta coù theåcoù ñöôïc caùckhoaûng thôøi gianresetwatchdogkhaùcnhau.Moät caùchñôn giaûnñeåhieåu veàlaäptrìnhwatchdoglaø : ta ñònhmoätkhoaûngthôøi ñeåchuoãi caùcsöï kieändieãnra bìnhthöôønglaø t n, 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àukhieånAT90S8535coù taátcaûba timer/counterkhaùcnhaugoàm: hai timer/counter8 bit vaø moättimer/counter16 bit. Timer/counter2coù theåñöôïc choïn nguoànclock khoângñoàngboätöø daoñoängbeânngoaøi. Dao ñoängnaøyñöôïc toái öu hoaùkhi söû duïngthaïchanhñoànghoà32.768Khz, khi ñoùTimer/counter2ñöôïc
  14. söû duïngnhömoätñoànghoàthôøi gianthöïc (RTC : real timerclock). Timer/counter0 vaø 1 coù boächia taànsoárieâng,noù coù theåchia taànsoágaànnhömoätboächia taànsoá10bit. Timer/counter2 thì coù moätboächia rieângcuûanoù. Caû ba Timer/counternaøycoù theåñöôïc söûduïngnhömoätboäñònhthôøi (timer)vôùi neàn xungclock beântrongcuûaheäthoánghoaëccoù theåsöû duïngnhöboäñeám(counter) vôùi nguoànxungkích (trigger)beânngoaøi. Hoaït ñoäng cuûa Timer/counter trong AT90S8535 +Hoaïtñoängñònhthôøi +Sosaùnhngoõra +Baétsoángngoõvaøo +Ñieàucheáñoäroängxung. a. Timer/counter 0: Timer/counter0 laø Timer/counter8 bit, coù theåchoïn nguoànxungclock töø CK, boächia taànsoáCK hoaëctöø moätchaânbeânngoaøi. Ta cuõngcoù theåcho döøng Timer/counter0 nhöbaûngmieâutaûchöùcnaêngcuûathanhghi ñieàukhieån Timer/counter0, TCCR0. Côø traïngthaùi traønTimer/counter0 thì coù theåtìm thaáy trongthanhghi TIFR. Tín hieäuñieàukhieånTimer/counter0 ta coù theåthieátlaäp trongthanhghi TCCR0. ÑeåthieátlaäpngaéttrongTimer/counter0 ta coù theåthieát laäpcaùcbit trongthanhghi TIMSK. Khi Timer/counter0 laáynguoànclock töø beânngoaøi, tín hieäubeânngoaøi naøyseõñöôïc ñoàngboävôùi taànsoácuûaCPU. Ñeåñaûmbaûosöï laáymaãuchính xaùctín hieäubeânngoaøi, taànsoáxungclock toái ña beânngoaøi laø CK/2. Tín hieäu xungclock beânngoaøi ñöôïc laáymaãuôû caïnhleâncuûaxungclock CPU. Timer/counter0 laø Timer/counterñôn giaûnnhaáttrongba Timer/counterbôûi vì noùkhoângcoù chöùcnaêngnaøokhaùcngoaøi vieäcñònhthôøi vaøñeámxung. Sô ñoà caáu taïo Timer/counter 0
  15. Ñaâylaø thanhghi chöùagiaùtrò cuûaTimer/counter0. Timer/counter0 ñöôïc xemnhömoätboäñeámleânvôùi söï truy caäpñoïc / vieát.NeáuTimer/counter0 ñöôïc vieátmoätgiaùtrò naøoñoù vaønguoànclock ñöôïc choïn (TCCR0 khaùc0), Timer/counter0 seõtieáptuïc ñeámleâncho ñeánkhi noù ñeángiaùtrò maxval=$ffvaø noùseõbò traønvaøgiaùtrò Timer/counter0 bò resetveà$00( khi ñoù côø TOV0 seõ ñöôïc set). b. Timer/counter 1 (Timer/counter 16 bits): Coù leõ ñaâylaø Timer/counterphöùctaïp vaøkhoùsöû duïngnhaáttrongba Timer/counter.
  16. Timer/counter1 coù theåchoïn nguoànclock töø CK, boächia taànsoáCK hoaëc töø moätchaânbeânngoaøi. Khi ñoù ta coù theåduøngTimer/counter1nhömieâutaû chöùcnaêngtrongthanhghi ñieàukhieånTimer/counter1(TCCR1A vaøTCCR1B). Caùccôø traïngthaùi khaùcnhau(côø traønTOV1, Côø so saùnhOCF1A, OCF1B vaø côø baétsoángngoõvaø ICF1) coù theåtìm thaáytrongthanhghi TIFR. Tín hieäuñieàu khieånTimer/counter1coù theåñöôïc thieátlaäptrongTCCR1A vaø TCCR1B. Ñeå thieátlaäpcaùcngaétdo Timer/counter1ta thieátlaäpcaùcbit trongthanhghi TIMSK. Khi Timer/counter1söûduïngnguoànclock beânngoaøi, ñeåñaûmbaûosöï laáy maãuchínhxaùctaànsoátoái ña cuûanguoànclock beânngoaøi laø CK/2. Timer/counter1hoåtrôï hai chöùcnaêngso saùnhngoõra söû duïngthanhghi OCR1A vaø OCR1B nhönguoàndöõ lieäuñeåso saùnhvôùi noäi dungchöùatrongthanhghi Timer/counter1:TCNT1 (goàmTCNT1H vaøTCNT1L) Timer/counter1coøncungcaápmoätchöùcnaêngñaëcbieätkhaùcñoù laø chöùc naêngbaétsoáângngoõvaøo. Treânvi ñieàukhieånAVR coù moätchaânñeåkích (trigger)söï kieänbaétsoángngoõvaøoICP (InputCapturePin). Söï thayñoåi möùctín hieäutreânchaânnaøyseõlaømcho giaùtrò hieänhaønhtrongtimerñöôïc ñoïc vaø löu tröõ trongthanhghi baétsoángngoõvaøoICR1(inputcaptureregister).Vaøo thôøi ñieåmnaøy, côø baétsoángngoõvaøoICF1 trongthanhghi TIFR seõñöôïc set.Ñieàu naøycöïc kyø höõuích trongvieäcño ñoäroängcuûaxungbeânngoaøi. Ngoaøi ra, boä so saùnhAnalog cuõngcoù theåñöôïc setñeåtriggersöï kieänbaétsoángngoõvaøo.
  17. Neáuchöùcnaêngchoángnhieãuñöôïc cho pheùp,ñieàukieänñeåtriggersöï baét soángngoõvaøolaø boánchu kyø laáymaãulieântieápñoäroängxungngoõvaøophaûi gioángnhau,khi ñoù côø baétsoángngoõvaøomôùi ñöôïc set.Tín hieäuchaânngoõ vaøoñöôïc laáymaãutaïi taànsoáxungCK cuûaheäthoáng. * Thanh ghi Timer/counter1 : TCNT1 (goàm TCNT1H vaø TCNT1L) Thanhghi TCNT1 laø thanhghi 16 bit chöùagiaùtrò cuûaTimer/counter1.Ñeå ñaûmbaûocaûbytecaovaøbytethaápñöôïc ñoïc vaø ghi ñoàngthôøi khi CPU truy caäpñeánnhöõngthanhghi naøy,söï truy caäpñöôïc thöïc thi nhôøvaøovieäcsöû duïngmoätthanhghi taïmTEMP 8 bits. Thanhghi TEMP naøycuõngñöôïc söû duïng khi truy caäpcaùcthanhghi OCR1A, OCR1B vaøICR1. Neáuchöôngtrìnhchínhvaø chöôngtrìnhngaétcuøngthöïc hieänsöï truy caäpñeánnhöõngthanhghi coù söû duïng thanhghi TEMP thì caùcngaétphaûi bò caámtrongsuoátquaùtrìnhtruy caäptöø chöôngtrìnhchính( vaøtöø chöôngtrìnhngaétneáungaétñöôïc cho pheùptöø trong chöôngngaét).
  18. * Moät soá chuù yù quan troïng khi truy caäp ñeán thanh ghi Timer/counter1: - Khi vieátdöõ lieäuvaøoTimer/counter1: Khi CPU vieátñeánbytecaoTCNT1H, döõ lieäuvieátñöôïc ñaëttrongthanhghi TEMP. TieáptheoCPU vieátñeánbytethaápTCNT1L, bytenaøycuûadöõ lieäukeát hôïp vôùi bytedöõ lieäutrongthanhghi TEMP, vaøtaátcaû16 bits cuûadöõ lieäuñöôïc vieátñeánthanhghi TCNT1 moätcaùchñoàngthôø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äutöø TCNT1 Khi CPU ñoïc byteñoïc bytethaápTCNT1L, döõ lieäucuûabytethaápTCNT1L ñöôïc gôûi ñeánCPU vaødöõ lieäubytecaoTCNT1H ñöôïc ñaëttrongthanhghi TEMP. Khi CPU ñoïc döõ lieäutrongbytecaoTCNT1H, CPU nhaändöõ lieäutrongthanhghi TEMP. Nhö vaäy, theo tuaàn töï TCNT1L phaûi ñöôïc ñoïc tröôùc, sau ñoù TCNT1L ñöôïc sau. Timer/counter1ñöôïc xemnhölaø moätñeámleânhoaëcboäñeámleân/xuoáng ( trongcheáñoäPWM) vôùi söï truy caäpñoïc vaø vieát.NeáuTimer/counter1ñöôïc naïp giaùtrò vaønguoànxungclock ñöôïc choïn, Timer/counter1seõtieáptuïc ñeámtöø giaùtrò naïp trongTimer/counter1taïi chukyø xungclock cungcaápcho timersauñoù. Nhöõngthanhghi so saùnhngoõra laø thanhghi 16 bits coù theåñoïc/vieát.Thanhghi so saùnhngoõra chöùanoäi dungñöôïc so saùnhlieânvôùi giaùtrò Timer/counter1. Taùc ñoängcuûatraänso saùnhñöôïc xaùcñònhtrongcaùcthanhghi ñieàukhieånvaø thanhghi traïngthaùi cuûaTimer/counter1.Traänso saùnhchævaänhaønhkhi Timer/counter1ñeámñeángiaùtrò chöùatrongthanhghi OCR1. Khi trongphaànmeàm
  19. ta vieátgiaùtrò cuûaTimer/counter1vaøgiaùtrò OCR1A (hoaëcOCR1B) baèngnhau, thì traänso saùnhseõkhoângñöôïc phaùtsinh(xaûyra). Traänso saùnhseõsetcôø ngaétso saùnhvaøochu kyø xungclock CPU tieáptheosau söï kieänso saùnh.Khi naïpgiaùtrò vaøocaùcthanhghi so saùnhnaøythì ta phaûi naïp giaùtrò cuûabytecao(OCR1AH hoaëcOCR1BH) tröôùc.Ngöôïc laïi, khi ñoïc giaùtrò cuûanhöõngthanhghi so saùnh naøythì bytethaáp(OCR1AL hoaëcOCR1BL) phaûi ñöôïc ñoïc tröôùc.Toùmlaïi, söï truy nhaäpñeáncaùcthanhghi OCRx töôngtöï söï truy caäpthanhghi TCNT1. Thanhghi baétsoángngoõvaøolaø moätthanhghi 16 bits chæcho pheùpñoïc. Khi caïnhleânhoaëccaïnhxuoáng(tuyøthuoäccaïnhngoõvaøoñöôïc choïn bôûi bit ICES1) cuûatín hieäutaïi chaânICP ñöôïc phaùthieän,giaùtrò hieänhaønhcuûa Timer/counter1ñöôïc truyeànñeánthanhghi ICR1. Vaøo cuøngthôøi ñieåmnaøy,côø baétsoángngoõvaøoICF1 cuõngñöôïc set.Söï truy caäpthanhghi ICR1 töôngtöï söï truy caäpTimer/counter1. * TIMER/COUNTER1 TRONG CHEÁ ÑOÄ ÑIEÀU CHEÁ ÑOÄ ROÄNG XUNG : Khi cheáñoäPWM ñöôïc choïn, baèngcaùchthieátlaäpTimer/counter1,thanhghi so saùnhngoõra OCR1A vaøthanhghi so saùnhngoõra OCR1B, caùcchaânngoõra PD5 (OC1A) /PD4 (OC1B) coù theåxuaátra xungñöôïc ñieàucheáPWM ñuùngphahoaëc chaïy khoângñeàuhoaëcchaïy töï do 8bit, 9bit hoaëc10 bit. Timer/counter1hoaït ñoäng nhömoätboäñeámleân/xuoáng,ñeámleântöø giaùtrò $0000ñeángiaùtrò TOP (xem baûngsau), vaøkhi ñoùnoùquaytrôûlaïi ñeámveàzerotröôùckhi chukyø naøyñöôïc laëplaïi. Khi giaùtrò ñeámbaènggiaùtrò 10 bit coù troïngsoáthaápnhaáttrongthanh ghi OCR1A hoaëcOCR1B, CaùcchaânPD5(OC1A)/PD4(OC1B) ñöôïc setleânmoät hoaëcxoaùveà0 tuyøthuoäcvaøocaùchthieátlaäpcaùcbit COM1A1/COM1A0 hoaëc COM1B1/COM1B0 trongthanhghi ñieàukhieånTimer/counter1(TCCR1A). d. Timer/counter2 (Timer/counter 8 bits): Sô ñoànguyeânlyù Timer/counter2:
  20. Timer/counter2coù theåchoïn nguoànclock töø PCK2 (maëcñònhnoái vôùi CK cuûaheäthoáng),hoaëcboächia PCK2. Noù coù theåñöôïc döøngnhömieâutaûtrong baûngchöùcnaêngcuûathanhghi ñieàukhieånTimer/counter2(TCCR2). Traïngthaùi cuûacôø traønTOV2, côø so saùnhOCF2 ñöôïc tìm trongthanhghi côø ngaétTimer/counter(TIFR). Tín hieäuñieàukhieånñöôïc thieátlaäptrongthanhghi TCCR2. Söï cho pheùp/khoângcho pheùpngaétdo Timer/counter2ñöôïc tìm thaáytrong thanhghi TIMSK. Timer/counter2hoåtrôï moätchöùcnaêngso saùnhngoõra söûduïngthanhghi so saùnhOCR2 nhönguoàndöõ lieäuñöôïc so saùnhvôùi noäi dungTimer/counter2. Chöùcnaêngso saùnhngoõra coù theåcho pheùpta xoaùboäñeámkhi coù traänso saùnh,vaø taùcñoängleânchaânngoõra PD7 (OC2) khi coù traänso saùnh. Timer/counter2coù theåsöûduïngnhömoätboäñieàucheáñoäroängxung8- bit. Khi ñoù Timer/counter2vaøthanhghi so saùnhngoõra OCR2 ñöôïc phuïc vuï cho cheáñoäPWM.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2