1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài vi điều khiển AVR - ĐH quốc gia TP Hồ Chí Minh

75 419 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đ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 75
Dung lượng 17,45 MB

Nội dung

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHƠ HỖ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BAO CAO DE TAI VI DIEU KHIEN AVR VES Fd I FY 0 I YS 00d Thanh vién: V6 Dinh Chinh MSSV: 07520456 KTMT02 Phạm Hoài Phước MSSV:07520292 KTMT02 Trần Minh Tính MSSV: 07520362 KTMT02

| Huỳnh Thanh Long MSSV: 07520588 KTMT02

GVHD: ThS Lê Hoài Nghĩa

Trang 2

LỜI GIỚI THIỆU

Từ khi công nghệ chế tạo loại vi mạch lập trình ra đời đã đem đến các kỹ thuật điều khiến hiện đại có nhiều ưu điểm hơn so với việc sử dụng các mạch điều khiển lắp ráp bằng các linh kiện rời như kích thước nhỏ, giá thành rẻ, độ làm việc tin cậy, công suất tiêu thụ nhỏ Hàng loạt nhà sản xuất MCU ra đời như Atmel, Philip, Motorola

với hàng loạt chip với nhiều tính năng vô cùng phong phú và đa dạng

Ngày nay, lĩnh vực điều khiển đã được ứng dụng rộng rãi trong các thiết bị, sản phẩm phục vụ cho nhu cầu sinh hoạt hàng ngày của con người như máy giặt, đồng hồ báo giờ đã giúp cho đời sống cuả chúng ta ngày càng hiện đại và tiện nghi hơn

Trong số những nhà sản xuat MCU 8 bit thì Atmel đã trở nên quá quen thuộc với giới sinh viên, kỹ thuật Việt Nam Nhóm chúng em tìm hiểu đề tài về MCU AVR — một trong những MCU được sử dụng rất rộng rãi trong kỹ thuật điều khiển Vì kiến thức có hạn nên trong nội dung đề tài chắc chắn không tránh khỏi thiếu sót Nhóm chúng em xin gửi lời cám ơn đến thầy Lê Hoài Nghĩa và sẽ cố gắng hoàn thiện trong

những lần báo cáo sau

Thay mặt nhóm

Trang 3

MỤC LỤC

&1 — GIỚI THIEU AVR MCU ATMEL 01

T— Tong quan vé AVR 0.00 cee ce eccceccccce cece ccccceccenetsnseeeeeceecccecesenseeasd 01 1 Giới thiỆU S2 nQTSn HH n TS TT KT kg kh nên 01 2 Ưu thế của MCU AVR L1 2222211112221 111 15112111111 01

3 M6t s6 dong AVR .cccccccccesccecssseeceeceeeeesecceeeessseeeeeeeeeeeeesaes 02

II— Một số dòng AVR pho bién oo cece ceeceeeeeceeeseneneass 03

&2 —- ATMEGA16 - KIÊN TRÚC TỎNG QUAN 05

I— Ưu điểm . - Q Q00 2Q 2122212121211 111 111111 HS n ng x1 xxy 05

I'8‹c trite n adaa 05 1 Sơ đồ chân cL Q12 2111 1121211111111 1 1111501111112 1 11 ru 05 ”N 7 0 06 E911 04/5⁄(räHiaiiiiaầaầaấếể 06 4 Các chân khác .c c0 0n 2n SH SH ng n vn ren 07 II — Các khối chính .- 22122222211 111122211 11155581111 07 Le CPU 22.2.0000222220001111121 1111111111111 1511111 E 15111111 n nà 07 2 Con trỏ ngăn xếp SP 01022222011 11112211 111158 111kg 09 3 MGImOFY nọ nh HH nh nh nh nh nh nà ni chư 10 4 Quá trình thực thi lệnh .-. - 222cc 2S *++ 12 I— Input & Ouput .ccẶĂSẰSSẰ 13 1 Giới thiỆU SH TT TT TT nh nh th kh 13

2 Cấu tạo chân cv vn ng TT TT nên 14

Trang 4

TE — Timer & Counfer .c.ccĂ Sky 16

TL GiGi 8 16 2 Céu trúc bộ định thời 8 bit Timer Ú 2222511122222 c+ssssxe l6 3 Mô tả chỉ tiết các thanh ghi của bộ định thời . ccc c5: 19 4 Sử dụng timer/COUn€T -.- c2 S222 S3 vs vs 21 5 Các chế độ hoạt động của Time ( cc + csssts+ S2 21 6 Các bước sử dụng TImer cà Set 24

THI — Interrupt " ¬-

1 Giới thiệu 25

2 Ngắt ngoài ATMEGAI6 L 22 222111112211 1111521111111 1xe 26 3 Các thanh ghi phục vụ ngắt 1111111 Enn vn xsg 27 4 Thiết lập ngắt ngoài .-LL TQ 02022222 222222211 1111111 nn ng 22x 28 TV_— ADC 22 00000 2222111111 1221111111011 1 111 1111 1xx key 30 DL GiGi 8 30 bo 4(Ả 30 3 Các thanh ghi điều khiển ADC - S11 SE SSS S222 555111 111112 31

4 Qua trinh chuyén d6i ADC 0.00.0 cc ccccceccc eee ccceceeeccceteesseeeeeeeeeeeesues 37

5 Cac bwoc lập trình điều khién ADC 0.0.0 cece ceeeccceceeeeeeneessseeeeeeeees 38 V~USART 2 200002 22201011 1122111111111 1111151111111 1xx 39

Ám‹ 8n HH 39

Trang 5

4 Sử dụng SPI nọ HS nh HT KT nh nh nhờn 59 VID = TWI-I2C Q.2 002201111211 11 1121115211112 1111011111111 1 1x ra 61

1 GiGi thiGu ằẼŠẼŠằ 61

Trang 6

&1 GIỚI THIỆU AVR MCU ATMEL

I Tổng quan về AVR:

1 Giới thiệu:

AVR là một họ vi điều khiển do hãng Atmel sản xuất Atmel cung cấp các vi điều khiển phổ biến như 8051, AT9I ARM7, Atmel AVR 8-bit

RISC, và mới đây là DSP dual-CPU AT57 Atmel AVR32 là một vi

điều khiển lai DSP với 7 tầng pipeline và khả năng thực thi song song AVR la chip vi điều khiển 8 bits với cấu trúc tập lệnh đơn giản hóa- RISC(Reduced Instruction Set Computer), một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí

Hình vẽ:

2 Ưu thế của MCU AVR:

Kết nối phần cứng cho AVR đơn giản với những linh kiện thông dụng

như điện trở, tụ điện, thạch anh Dòng ra điều khiển Port lớn và không cần dùng điện trở kéo

Thiết kế mạch nạp cho AVR khá đơn giản giao tiếp qua cổng LPT, COM, USB Hỗ trợ ISP lập trình trực tiếp trên mạch

Hỗ trợ lập trình trên nền ngôn ngữ ASM, C với nhiều công cụ hỗ trợ

như CodeVision, AVR Studio

Trang 7

© Xung External OSC lên đến 16Mhz và Internal OSC 8Mhz e_ Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và

dung lượng lớn có thế ghi và xóa trên 1000 lần Bên cạnh đó bộ

nhớ EEPROM có thể lập trình được

© 32 Portxuất nhập

e 8 bits, 16 bits timer/counter tich hop PWM

e Cac bé chuyén déi Analog — Digital phân giải 10 bits e Analog comparator

© Giao diện nối tiếp USART (tương thích chuan ndi tiép RS-232) e_ Giao diện nối tiếp Two —Wire -Serial (tương thích chuẩn I2C)

Master và Slaver

¢ Giao dién néi tiép Serial Peripheral Interface (SPI) 3 Một số dòng AVR:

Nhìn chung AVR có các dòng chính sau: * tinyAVR — the ATtiny series

e 1-8 kB program memory e 6-32-pin package

e Limited peripheral set

* megaAVR — the ATmega series e 4-256 kB program memory e 28-100-pin package

Trang 8

e Extensive peripheral set * XMEGA — the ATxmega series

e 16-384 kB program memory

e 44-64-100-pin package (A4, A3, Al)

e Extended performance features, such as DMA, "Event System", and cryptography support

e Extensive peripheral set with DACs * Application specific AVR

e megaAVRs with special features not found on the other members of

the AVR family, such as LCD controller, USB controller, advanced

PWM, CAN etc

IL M6t sé dong AVR phé bién: AT90S1200

AT90S2313

Trang 10

&2 ATMEGA16 — KIEN TRUC TONG QUAN

I Uu diém:

- Téc độ xử lý cao, tiêu thụ điện năng thấp

— Kién tric 131 tập lệnh thưc thi hầu hết trong mỗi chu kỳ xung clock — 32x8§ thanh ghi đa dụng

— — Đạt tốc độ tối da 16MIPS & 16Mhz xung clock

— Dung lugng bo nho: 16Kb Flash, 512 EEPROM, 1kb Internal SRAm — _ Khả năng ghi và xóa có thể đạt đến 10000 lần, lưu trữ trong thời gian

dài trên 20 năm/85°C-100 năm 25°C

—_ Giao tiếp chuẩn JTAG hỗ trợ debug, Lock, Fuse bit — 2b6 Timer 16 bit, 1 b6 timer 16 bit

— 4kénh PWM

— 8 kênh ADC 10 bít — 32 port xuat nhập

— _ Hỗ trợ gioa tiếp I2C, USART, SPI — _ Hoạt động tốt ở hiệu điện thế 4.5-5.5 II.Kiến trúc: I Sơ đồ chân: PDIP LS TOFPIQFNIMLF XCK/T0) PB0O LÍ 1 4o B PAO (ADCO) (71) PB1 Gq 2 39 PAI (ADC1)

(INTZ/AINO) PB2 C] 3 38 PA2 (ADC2) (OCW/AIN1) PB3 LÍ 4 37 PA3 (ADC3)

(ŠŠ) PB4 CỊ 5 36 1 P44 (ADC4)

(mos!) P85 LÍ 6 35 B PAS (ADCS) (MISO) PBS C] 7 34 B Pas (ADCS)

(SCK) PB7 C 8 33 |) PA7 (ADC7) fees cl Be aoc oss q 9 ` B AREF (sck) p87 fas (ADCS)

10 1 GND Reset 5 a7 (a0c7)

GND 11 30 B avec ae Bap

XTAL2 C12 29 b PC7 (TOSC2) x42 CỈ B Acc

XTAL1 CÍ 13 2s b Pcs (rosc+) XTAL+ CỈ B Fer crosce) (exo) Poo | B Pos (rose:

Gxo) Por {is 26 B pes FOO) nto) poz i) 658 ca 5 cs (r00)

(INTO) PD2 CJ 16 25 | PC3 (MS) (428 914'516171 8! 9207 "22

(INT1) PD3 LÍ 17 24 B PC2 (TCK) UUUUUUUUUUU ©C1B) PD4 CỈ 18 23 PC! (SDA) ⁄

Trang 11

2 Sơ đồ khối: veo wee om —— -2 e-s = z PORTSOIGTAL INTERFACE 3 Các Port xuất nhập: a Port A:

Trang 12

—._ Là port xuất nhập thông thường 8 bit Bên cạnh đó Port C còn có một số chân giao tiếp JTAG PC5-TDI, PC3-TMS, PC2 —TCK d PORTD: — Là port xuất nhập thông thường 8 bit 4 Các chân khác: — VCC, AVCC, AREF, XTALI, XTAL2, RESET IH Các khối chính: 1 CPU:

Block Diagram of the AVR MCU Architecture

< Data Bus 8-bit Program Status pons —| Counter l | and Control | Memory Interrupt Instruct: instruction Công Xem Lon eral _ Instruction Watchdog Decoder al Timer i i 1 toes Control Lines 3 = ‘Comparator š| š 3] 3 sa, bk} Lemna] —— VO Lines Ỳ

AVR có cấu trúc Harvard, trong đó đường truyền cho bộ nhớ đữ liệu (data memory bus) và đường truyền cho bộ nhớ chương trình (program memory bus) được tách riêng Data memory bus chỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, với register file Trong khi đó program memory bus có độ rong 16 bits va chi phuc vu cho instruction registers

a ALU:

Trang 13

— ALU làm việc trực tiếp với các thanh ghi chức năng chung Các phép toán được thực hiện trong một chu kỳ xung clock Hoạt động của ALU được chia làm 3 loại: đại SỐ, logic va theo bit

b Thanh ghi trang thai:

— Day la thanh ghi 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic The AVR Status Register- SREG - is defined as: Bit 7 6 5 4 3 2 1 0 } 1 | t |] 4H [ s | vi] Nn | 7 | C€ | $RES ReadWrite RW RW RW RW RW RW RMR Initial Value 0 0 0 0 0 0 0 0 e C: Carry Flag cờ nhớ

e Z: Zero Flag >Co zero

© N: Negative Flag > két qua phép toán âm e V: Two’s complement overflow > co bu 2

¢ S For signed tests (S=N XOR V) > kiém tra 2 cd N va V

e _H: Half Carry Flag > được sử dụng trong BCD cho một số toán hạng

e T: Transfer bit used by BLD and BST instructions>dugc sử dụng làm nơi trung gian trong các lệnh BLD,BST

e1: Global Interrupt Enable/Disable Flag ->ây là bit cho phép toàn cục ngắt Nếu bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ

c Thanh ghi chức năng chung:

Atmega 16 có 32 thanh ghi chức năng chung thực thi nhiều tác vụ trong

Trang 14

Figure 4 AVR CPU General Purpose Working Registers 7 0 Ader soo Sot $02 $0D SOE SOF $10 sit General Purpose Working Registers

R26 SIA X-register Low Byte Ra $18 X-register High Byte R28 sic Yeregister Low Byte Rao $ip Y-register High Byte Ra) sie Zregister Low Byte Rat SIF register High Byte

— Một § bit output tốn hạng và một 8 bit cho input két qua — Hai 8 bit output toán hạng và một 8 bit cho input két qua — Hai 8 bit cho output két qua và một 16 bit cho input két qua — Mét 16 bit cho output toán hạng và một 16 bit cho input kết quả 2 Con trồ ngăn xếp SP: Bit 15 14 13 12 11 10 9 8 Fe SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH ‘SP7 SP6 SP5 ‘SP4 SP3 SP2 SP1 SPO SPL 7 6 5 4 3 2 1 0 Read/Write RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW Initial Value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

—_ Là một thanh ghi ló bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit dùng để lưu trữ biến trong quá trình tính toán

Stack được hiểu như là 1 “tháp” dữ liệu, dữ liệu được chứa vào stack ở đỉnh “tháp” và dữ liệu cũng được lấy ra từ đỉnh Kiểu truy cập dữ liệu cua stack goi la LIFO

— _ Khia báo SP tại một vùng nhớ trong SRAM với địa chỉ của SP thiết lập >$60 Con trỏ giảm địa chỉ xuống 1 khi dữ liệu được đưa vào Stack voi lệnh PUSH và hai khi có Subroutine hoặc Interrupt được gọi Con trỏ tăng địa chỉ lên I khi có lệnh POP dữ liệu thực hiện và lên hai khi trả dữ liệu về cho chương trình con

a

Trang 15

3 Memory: a Bộ nhớ chương trình Flash: Figure 8 Program Memory Map Application Flash Section —— Boot Flash Section $0000 S1FFF

Bộ nhớ Flash I6KB của ATmegal6 dùng để lưu trữ chương trình với độ

rộng l6 bit Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiéu 8KX16

Bộ nhớ chương trình chỉ gồm 1 phan la Application Flash Section nhưng trong các chip AVR mới chúng ta có thêm phần Boot Flash

section Boot Section Thực chất, application section bao gồm 2 phần: phần chứa các instruction và phần chứa interrupt vectors Các vector ngắt nằm ở phần đầu của application section từ địa chỉ 0x0000 và dài

đến bao nhiêu tùy thuộc vào loại chip và phần chứa instruction nằm liền

sau đó Các chương trình được viết sau địa chỉ đó

Trang 16

b Bộ nhớ dữ liệu SRAM:

Figure 9 Data Memory Map

Register File Data Address Space

Internal SRAM

Đây là phần chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho chip phần lớn là truy cập bộ nhớ này và bộ nhớ này gồm các phần

Sau:

Phan 1: 1a phan đầu tiên trong bộ nhớ đữ liệu bao gồm 32 thanh General Purpose Rgegister — GPR Tat ca cc thanh ghi này đều là các thanh ghi 8 bits Tat ca các chip trong họ AVR đều bao gồm 32 thanh ghi Register File có địa chỉ tuyệt đối từ 0x0000 đến 0x001F Mỗi thanh ghi có thể chứa giá trị đương từ 0 đến 255 hoặc các giá trị có dau từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31 Chúng được chia thành 2 phan, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31

Phần 2: là phần nằm ngay sau SFR bao gồm 64 thanh ghi IO hay con gọi là vùng nhớ IO Vùng nhớ T/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi Vàng nhớ I/O có thể được truy cập như S

RAM hay như các thanh ghi I/O Néu sit dung instruction truy xuất SRAM dé truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ

Trang 17

0x0020 đến 0x005F Nhưng nếu truy xuất như các thanh ghỉ 1/O thì dia chỉ của chúng đựơc tinh từ 0x0000 đến 0x003F

e_ Phần3: internal SRAM là vùng không gian cho chứa các biến trong

lúc thực thi chương trình

c Bộ nhớ dữ liệu EEPROM:

— _ ATmegaló6 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, va được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một EEPROM được tách riêng và có địa chỉ tính từ 0x0000H 4 Quá trình thực thỉ lệnh: — Giản đồ xung: Figure 7 Single Cycle ALU Operation T1 T2 T3 T4 CPU : ' '

Total Execution Time —4 + |,

Register Operands Fetch ——< —>———————————

ALU Operation Execute

Result Write Back : <>

'

— _ Các instruction được chứa trong bộ nhớ chương trình Flash memory dưới dạng các thanh ghi 16 bit Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung clock và 1 instruction chứa trong program memory sẽ được load vao trong instruction register, instruction register tác động và lựa chọn register file cũng như RAM cho ALU thực thi Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi được quyết định bởi một bộ đếm chương trình — PC (Program counter) Hầu hết các instruction đều được thực thi trong 1 chu kỳ xung clock

Trang 18

&3.CAC MODULE DIEU KHIEN TRONG ATMEGA 16

I Input & Output: 1 Giới thiệu:

Vi điều khiểnATmegal6có 32 đường vào ra chia làm bốn Port: PORTA- PORTB-PORTC-PORTD mỗi Port §bit có thể tương tác điều khiển từng bit một Các công ra có điện trở nội kéo lên nên khi dùng chức năng input ta không cần dùng điện trở kéo lên ở bên ngoài Các Port được điều khiển bởi các bô thanh ghi sau: thanh ghi dữ liệu công PORT, thanh ghi dữ liệu điều khiển công DDR và cuối cùng là địa chỉ chân vào của công PIN

a Thanh ghi DDR:

~ Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều khiển hướng cổng PORT (tức là cổng ra hay công vào) Nếu như một bit trong thanh ghi này được set thi bit tương ứng đó trên PORT được định nghĩa như một cổng ra Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORT được định nghĩa là công vào

b Thanh ghi PORT:

~ Đây cũng là thanh ghi 8 bit (các bit có thé đọc và ghi được) nó là thanh ghi dữ liệu của cổng P và trong trường hợp nếu cổng được định nghĩa là công

ra thì khi ta ghi một bit lên thanh ghi này thì chân tương ứng trên port đó

cũng có cùng mức logic Trong trường hợp mà cổng được định nghĩa là công vào thì thanh ghi này lại mang dữ liệu điều khiến công Cụ thể nếu bit nào đó của thanh ghi này được set (đưa lên mức 1) thì điện trở kéo lên (pull-up) của chân tương ứng của port đó sẽ được kích hoạt Ngược lại nó

sẽ ở trạng thái hi-Z Thanh ghi này sau khi khởi động Vi điều khiểnsẽ có giá trị là 000

c Thanh ghi PIN:

Trang 19

—_ Đây là thanh ghi 8 bit chứa dữ liệu vào của PORT (trong trường hợp PORT

được thiết lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi vào được 2 Cấu tạo chân:

Figure 22 /O Pin Equivalent Schematic Logic See Figure 23 "General Digital I/O" for Details TS

— Cấu trúc chân của AVR có thê phân biệt rõ chức năng (vào ra) trang thái (0 1) từ đó ta có 4 kiểu vào ra cho một chân của avr Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) Đặc biệt nguồn từ chân của AVR đủ khoẻ đề điều khiển Led trực tiếp (mA) còn 89 chỉ là vai uA

— Bảng trạng thái truy xuất I/O:

Table 20 Port Pin Configurations

DDxn | PORTxn | (in ee vo Pull-up | Comment 0 0 xX Input No Tri-state (Hi-Z)

Pxn will source current if ext pulled 1 0 Input Yes low

1 1 Input No Tri-state (Hi-Z) 0 x Output No Output Low (Sink) 4 1 xX Output No Output High (Source)

Trang 20

— Giản đồ xung khi truy cập chân:

Figure 24 Synchronization when Reading an Externally Applied Pin Value SYSTEM CLK INSTRUCTIONS SYNC LATCH PINxn r17 Figure 25 Synchronization when Reading a Software Assigned Pin Value SYSTEM CLK ƒ | | L_ r16 i OFF: INSTRUCTIONS at PORTx, 16 x nop x in 17, PINx SYNC LATCH 0 PINxn CC Tem r17 0x00 9xFE 3 Thiết lập truy xuất 1/O: a Read:

— Đưa dữ liệu ra thanh ghi điều khiển DDRxn đề đặt cho PORTx (hoặc bit n

trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit)

— Kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit) — Cuối cùng đọc đữ liệu từ địa chỉ PINxn (trong đó x: là công và n là bit)

b Write:

— Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx (hoặc bit n trong port) đó là đầu ra (xóa thanh ghi DDRx hoặc bit)

— Xuat gia tri ra Port

c Code Example: #include <avr/io.h>

Trang 21

#include <avr/interrupt.h> #include <util/delay.h> int main(void) { DDRB=0xFF; //PORTB la output PORT PORTB=0x00; DDRD=0x00; //PORTD la input PORT PORTB=OxFF; while (1){ //vong lap v6 tan //do nothing } return 0; } H.Timer&Counter: 1 Giới thiệu:

Trang 22

a Sơ đồ khối: Figure 27 8-bit Timer/Counter Block Diagram TCCRa DATABUS b Các thanh ghi:

— TCNTO va OCRO là các thanh ghi 8 bit Các tín hiệu yêu cầu ngắt đều nằm trong thanh ghi TIER Các ngắt có thê được che bởi thanh ghi TIMSK Bộ định thời có thể sử dụng xung clock nội thông qua bộ chia hoặc xung clock ngoài trên chân T0 Khối chọn xung clock điều khiển việc bộ định thời/bộ đếm sẽ dùng nguồn xung nào để tăng giá trị của nó

Trang 23

Figure 28 Counter Unit Block Diagram TOVn (int Req.) DATA BUS [—” tre | Cock Select count Edge = Detector ° TCNTn rection £28" _| contro! Logic bg (From Prescsier )

© count: tang hay giam TCNTO 1

e đirection: lựa chọn giữa đếm lên và đếm xuống e clear: xóa thanh ghi TCNT0

e clkT0: xung clock của bộ định thời

e TOP: báo hiệu bộ định thời đã tăng đến giá trị lớn nhất

se BOTTOM: báo hiệu bộ định thời đã giảm đến giá trị nhỏ nhất (0) Đơn vị so sánh ngõ ra: Figure 29 Output Compare Unit, Block Diagram DATA BUS OcRn TCNTn (6-bt Comparator) OCFn (Int Rea.) ——+| Waveform Generator - [5= rocn WGMn1:0 COMn1:0

Bộ so sánh 8 bit liên tục so sánh giá trị TCNT0 với giá trị trong thanh ghi so sánh ngõ ra (OCR0) Khi giá trị TCNT0 bằng với OCR0, bộ so sánh sẽ tạo một báo hiệu Báo hiệu này sẽ đặt giá trị cờ so sánh ngõ ra (OCF0) lên I vào chu kỳ xung clock tiếp theo Nếu được kích hoạt (OCIE0=1), cờ OCF0

sé tao ra mot ngat so sánh ngõ ra và sẽ tự động được xóa khi ngắt được thực

thi Cờ OCF0 cũng có thể được xóa bằng phần mềm

Trang 24

3 Mô tả chỉ tiết các thanh ghi của bộ định thời:

Có 4 thanh ghi được thiết kế riêng cho hoạt động và điều khiến T/C0, đó là: a Thanh ghi điều khiến bộ định thời/bộ đếm TCCRO0: Ba 7 6 5 4 3 2 1 9 [Foco | wamoo | como: | comoo | wamo: | CS02 | CS01 | CS00 | TCCRO Read/Write Ww RW RW RW RW RW RW RW Initial Valve 9 9 9 9 9 9 9 9

— Bit 7-FOCO: So sánh ngõ ra bắt buộc Bit nay chi tích cực khi bit

WGM00 chi định chế độ làm việc không có PWM Khi dat bit nay lên 1,

một báo hiệu so sánh bắt buộc xuất hiện tại đơn vị tạo dạng sóng — Bit 6, 3-WGM0I:0: Chế độ tạo dạng sóng Các bit này điều khiển đếm

thứ tự của bộ đếm, nguồn cho giá trị lớn nhất của bộ đếm (TOP) và kiểu tạo dạng sóng sẽ được sử dụng Table 38 Waveform Generation Mode Bit Description'”’

WGM01 | WGM00 | Timer/Counter Mode Update of | TOV0 Flag

Mode | (CTC0) | (PWM0) | ofOperation TOP OCRO Set-on 0 L) 0 Normal OxFF Immediate | MAX 1 oO 1 PWM, Phase Correct OxFF TOP BOTTOM

4 0 CTC OCRO | Immediate | MAX 1 1 Fast PWM OxFF BOTTOM MAX

Note: 1 The CTCO and PWMO bit definition names are now obsolete Use the WGM01:0 definitions

However, the functionality and location of these bits are compatible with previous versions of the timer

— Bit 5:4-COMO01:0: Chế độ báo hiệu so sánh ngõ ra Các bit này diéu khién hoạt động của chân OC0 Nếu một hoặc cá hai bit COM01:0 được đặt lên

1, ngõ ra OCO0 sẽ hoạt động

— Bit 2:0: CS02:0: Chon xung déng hé

Trang 25

— Bang trang thai:

Table 42 Clock Select Bit Description cso2 cso1 €§00 | Description 0 0 0 No clock source (Timer/Counter stopped) 0 0 1 clk,,„{No prescaling)

0 1 0 clk,,o8 (From prescaler)

0 1 1 clk,;o84 (From prescaler)

1 0 0 clk,,c/256 (From prescaler)

1 0 1 clk,,o/1024 (From prescaler)

1 1 0 External clock source on TO pin Clock on falling edge 1 1 1 External clock source on TO pin Clock on rising edge

b Thanh ghi bộ định thời/ đếm TCNTO:

Bit 7 6 5 4 3 2 1 0

I TCNT0[7:0] | TCNTo

Read/Write RW RW RW RW RAW RW RW RW

Initial Value 0 0 0 0 0 0 0 0

—_ Là I thanh ghi 8 bit chứa giá trị vận hành của T/C0 Thanh ghi này cho phép đọc và ghi giá trị một cách trực tiếp

c _ Thanh ghi ngõ ra so sánh OCR: Bit 7 6 5 4 3 2 1 0 | OCR0(7:0] | ocRo Read/Write RW RW RW RW RW RW RW RW Initial Value 0 0 0 0 0 0 0 0 — Thanh ghi này chứa một giá trị 8 bít và liên tục được so sánh với giá trị của bộ đếm d Thanh ghi mặt nạ ngắt TIMSK: Bit 7 6 5 4 3 2 1 0 | OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 | TIMSK Read/Write RW RW RW RW RW RW RW RW Initial Value 0 0 9 0 0 0 0 0

— Là thanh ghi mặt nạ cho ngắt của tất cả các T/C trong Atmega 16, trong đó chỉ có bit TOIE0 tức bít 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

Trang 26

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

e_ Bit I-OCIE0: Cho phép ngắt báo hiệu so sánh e_ Bit0-TOIE0: Cho phép ngắt tràn bộ đếm e _ Thanh ghi cờ ngắt bộ định thời: Bit 7 6 5 4 3 2 1 0 | OCF2 | tov2 | icr1 | OCFIA | OCFB | TOVI | ocFo | TOvo | TIFR Read/Write RW Rw RW RW RW RW RW RW Initial Value 0 0 0 0 0 0 0 0

— _ 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

e Bit 1-OCFO: Cờ so sánh ngõ ra 0

¢ Bit 0-TOVO: Cờ tràn bộ đếm

4 Sử dụng timer/Counter:

Một số giá trị cần lưu ý khi sử đụng Timer/Counter:

— BOTTOM: la giá trị thấp nhất mà một T/C có thể đạt được, giá trị này luôn

là 0

— MAX: la gid 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 bít 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)

— 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ố lon 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

5 Các chế độ hoạt động của Timer 0: a Normal Mode:

Trang 27

Đây là chế độ hoạt động đơn giản nhất của Timer Bộ đếm sẽ liên tục đếm tăng lên cho đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được khởi động lại tại giá trị Bottom.Trong các hoạt động thông thường thì cờ tràn sẽ được thiết lập khi giá trị trong Timer đạt giá trị khơng và khơng bị xố đi.Tuy nhiên nếu mà ngắt tràn được chấp nhận thì cờ ngắt sẽ tự động bị xoá khi ngắt được thực hiện.Giá trị trong Timer có thé được viết vào bat cứ lúc nào b Chế Độ So Sánh (CTC): Figure 31 CTC Mode, Timing Diagram ⁄ Yo tử t ⁄ A TCNTn 4 T trụ Khi LI (COMn1:0 = 1) Period | 1 | 2 | a—.} 4 |

Đây là chế độ mà giá trị trong Timer luôn được so sánh với giá trị trong thanh ghi ORC Khi giá trị trong Timer bang giá trị trong thanh ghi ORC thì giá trị trong Timer sẽ bị xoá đi Giá trị trong ORC đóng vai trò là giá trị TOP cho bộ đếm Chế độ này cũng cho phép tạo ra tần số so sánh ở đầu ra.Tuy nhiên trong chế độ này nếu giá trị mới ghi vào thanh ghi ORC mà nhỏ hơn giá trị tức thời của bộ đếm thì thì 1 so sánh sẽ bị lỡ, khi đó bộ

đếm sẽ đếm đến giá trị lớn nhất sau đó rơi xuống giá trị 0 trước khi so

sánh tiếp theo xuất hiện

Trang 28

c Ché D6 Fast PWM: Figure 32 Fast PWM Mode, Timing Diagram OCRn Interrupt Flag Set

OCRn Update and TOVn Interrupt Flag Set (COMn1:0 = 2) (COMn1:0 = 3) mới Jt ape fpf fe

Cho phép tạo ra sóng với tần số cao.Sự khác biệt cơ ban gitta Fast PWM với các loại PWM khác là nó chỉ sử dụng I sườn đốc Bộ đếm sẽ đếm từ Bottom đến Max sau đó khởi động lại từ bottom Trong chế độ không đảo đầu ra của chân so sánh OCx sẽ bị xoá khi có phép toán so sánh giữa TCNTx và thanh ghi ORC là bằng nhau Và sẽ được sét lên I khi giá trị đạt Bottom Trong chế độ đảo „đầu ra đảo sẽ được set lên I khi sự so sánh

giữa thanh ghi ORC và giá trị trong Timer bằng nhau và sẽ bị xoá khi giá

trị đạt Bottom

Trong cả hai trường hợp này tần số của chế đô Fast PWM đều gấp đôi so với chế độ phase correct PWM sử dụng hai sườn dốc Với tần số cao này chế độ độ Fast PWM rất tốt cho các ứng dụng như ADC hay chỉnh lưu.Ngoài ra với tần số cao giúp làm giảm kích thước của thiết bị ngoài như cuộn dây tụ từ đó giúp làm giảm toàn bộ chỉ phí cho hệ thống

Trang 29

d Ché dé Phase correct PWM: Figure 33 Phase Correct PWM Mode, Timing Diagram ! OC Interrupt Flag Set | | | OCRa Upeate | Ị |_| Tovn Interrupt Fiag Set Ỷ Ỷ 3 | Ự^ 4 1 7 TCNTn ~ NY) NS + + Mn1:O = cn L (comnt:0 = 2) Sen TT T1 Ƒ (COMn1:o= 3) Period ——:——+——:z——+——s——A

Chế độ này hoạt động dựa trên hai sườn lên xuống.Bộ đếm sẽ đếm liên tục từ giá trị BOTTOM đến giá trị MAX và sau đó từ giá trị MAX đến giá trị BOTTOM Trong chế độ so sánh không đảo chân so sánh (OCx) sẽ bị xóa khi giá trị TCNTx bằng giá trị OCRx trong quá trình đếm lên và sẽ được set bằng 1 khi giá trị so sánh xuất hiện trong quá trình đếm xuống Chế độ so sánh đảo thì các giá trị là ngược lại

Với hoạt động hai sườn xung này thì chế độ này không tạo ra được tần số nhỏ như chế độ một sườn xung Nhưng do tính cân đối của hai sườn xung thì nó tốt hơn cho điều khiển động cơ Chế độ phase correct PWM hoạt động có định là 8 bit Trong chế độ này bộ đếm sẽ tăng cho đến khi đạt giá trị MAX ,khi đó nó sẽ đổi chiều đếm

6 Các bước sử dụng Tỉmer:

Step 1: Set pin Timer là output bằng cách set giá trị trong thanh ghi DDRn.X

Step 2: chọn chế độ Timer bằng cách set thanh ghi TCCRX Step 3: chọn xung clock bằng cách set thanh ghi TCCRX Step 4: chọn giá trị của thanh ghi OCRX-TCNTX Step 5: bắt đầu Timer

Trang 30

— Code Example: #include <avr/io.h> #include <avr/interrupt.h> #include <until/delay.h> int main(void) { DDRB=0xFF; //PORTB la output PORT PORTB=0x00; TCCRO=(1<<CS01);// CS02=0, CSO1=1, CSO0=0: chon Prescaler = 8

TCNT0=131; //gan gia tri khoi tao cho T/CO TIMSK=(1<<TOIE0);//cho phep ngat khi co tran o T/C0 sei(); //set bit I cho phep ngat toan cuc while (1){ //vong lap v6 tan //do nothing } return 0; } II Interrupt: 1 Giới thiệu:

— Ngat la một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình

trạng sẵn sàng cho đổi dữ liệu của mình.Ví dụ: Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC,hoặc khi nó đã truyền được một byte thì cờ TX được thiết lập

—_ Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và

lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ

mm ————>—_—-==>mmm——————————

Trang 31

tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lai lay PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên Atmega 16 có các ngắt sau: Table 18 Reset and Interrupt Vectors Program

Vector No | Address'2' Source Interrupt Definition

1 $000"? RESET External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset, and JTAG AVR Reset

2 $002 INTO External Interrupt Request 0 3 $004 INT1 External Interrupt Request 1 4 $006 TIMER2 COMP | Timer/Counter2 Compare Match

5 $008 TIMER2 OVF Timer/Counter2 Overflow 6 §00A TIMER1 CAPT | Timer/Counter1 Capture Event 7 §00C TIMER1 COMPA | Timer/Counter1 Compare Match A

8 §00E TIMER1 COMPB | Timer/Counter1 Compare Match B

9 $010 TIMER1 OVF Timer/Counter1 Overflow 10 $012 TIMERO OVF Timer/Counter0 Overflow 11 $014 SPI, STC Serial Transfer Complete 12 $016 USART, RXC USART, Rx Complete 13 $018 USART, UDRE_ | USART Data Register Empty 14 SO1A USART, TXC USART, Tx Complete

15 §01C ADC ADC Conversion Complete

16 SO1E EE_RDY EEPROM Ready

17 $020 ANA_COMP Analog Comparator 18 $022 Ti Two-wire Serial Interface

19 $024 INT2 External Interrupt Request 2 20 $026 TIMERO COMP | Timer/Counter0 Compare Match

21 $028 SPM_RDY Store Program Memory Ready

2 Ngắt ngoài Atmega 16:

a Quá trình ngắt:

Atmegal6 có 3 ngắt ngoài INT0(PORTD.2) INTI(PORTD.3) và

Trang 32

Low level - Điện áp ở chân ngắt xuống mức logic 0 V Any change - Bat ki sy thay đối điện áp từ chân ngắt Falling Edge - Khi có 1 sườn điện áp xuống (5V->0V) Rising Edge -Khi có l sườn điện áp lên (0V->5V)

Sau đó 1 cờ ngắt sẽ đựng lên 1 và báo cho biết có ngắt , nhảy đến

chương trình con thực hiện ngắt 3 Cac thanh ghi phuc vụ ngắt:

a MCUCR-—MCU Control Register: Bt 7 6 5 4 3 2 1 9 | SM2 | SE | smi [{ smo | isci1 | iscto | scot | Iscoo | mcucR ResdWrte RW RW RW RW RAV RW RW RW Initia! Valoe 9 9 ° 9 9 9 9 9

— Thanh ghi MCUCR chứa các bits cho phép chúng ta chọn | trong 4 MODE trên cho các ngắt ngoài MCUCR là một thanh ghi 8 bit nhưng đối với hoạt động ngắt ngoài, chúng ta chỉ quan tâm đến 4 bit thấp của nó (4 bit cao đùng cho Power manager và Sleep Mode) Bốn bit thấp là các bit

Tnterrupt Sense Control (ISC) trong đó 2 bit ISC1 1:ISC10 dùng cho INT1

và 2 bít ISC01:ISC00 dùng cho INTO Bang chan tri cho cac bit ISCO1, ISCO00 hoàn toàn tương tự

Table 34 Interrupt 1 Sense Control §C11 1SC10 | Description 0 0 The low level of INT1 generates an interrupt request 0 Any logical change on INT1 generates an interrupt request 1

0 1 The falling edge of INT1 generates an interrupt request

1 The rising edge of INT1 generates an interrupt request

Trang 33

Table 35 Interrupt 0 Sense Control C01 ISC00 | Description

0 0 The low level of INT0 generates an interrupt request 0 1 Any logical change on INTO generates an interrupt request 1 0 The falling edge of INTO generates an interrupt request 1 1 The rising edge of INTO generates an interrupt request b _MCUCSR-—MCU Control and Status Register: Bit 7 6 5 4 3 2 1 9 [sro | isc2 | - | JTRP | WORF | BORF | EXTRF | PORF | MCUCSR ResdWrite RW RW R RW RW RW RW RW

Initia! Valve 9 9 9 See Bit Description

— Bit 6 —ISC2: Interrupt Sense Control 2: 1a bit quan trong nhat trong thanh ghi này dùng ghi và xóa cờ ngắt INT2

c GICR-— General Interrup Control Register: Bit 7 6 5 4 3 2 1 9 ND | No | N2 | - | - | — | MSEL | VCE | GICR ResdWrite RW RW RW R R R RW RW hnitis! Valve 9 9 ° 9 9 9 9 9

— _ GICR cũng là I thanh ghi 8 bit nhưng chỉ có 2 bít cao (bit 6 va bit 7) là được sử dụng cho điều khiển ngắt Bit 7 — INTI gọi là bit cho phép ngắt

1(Interrupt Enable), set bit nay bằng 1 nghĩa bạn cho phép ngắt INTI hoạt động, tương tự, bit INT0 điều khiển ngắt INT0

— Thanh ghi cờ ngắt chung — GIFR (General Interrupt Flag Register) có 2

bit INTF1 va INTFO la cac bit trang thai (hay bit cờ - Flag) của 2 ngắt INT1 va INTO Néu cé 1 su kién ngat phù hợp xảy ra trên chân INTI, bit INTF1 dugc tu dong set bang 1 (tương tự cho trường hợp cua INTFO), chúng ta có thể sử dụng các bit này để nhận ra các ngắt, tuy nhiên điều này là không cần thiết nếu chúng ta cho phép ngắt tự động, vì vậy thanh ghi này thường không được quan tâm khi lập trình ngắt ngoài

4 Thiết lập ngắt ngoài:

Trang 34

—._ Step 2: cho phép ngắt toàn cục trên thanh ghi GICR —. Step 3: cho phép ngắt trong thanh ghi trang thai SREG — Code Example: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/delay.h> volatile int8_t val=0 int main(void) { DDRD=0x00; //khai báo PORTD là Input dé str dung 2 chân ngắt PORTD=0xFF; //su dụng điện trở nội kéo lên MCUCRIE(I<<ISC11)|(1<<ISC01); /cả 2 ngắt là ngắt cạnh xuống

GICR |EẨ(1<<[INTI)|(I<<INT0); //cho phép 2 ngắt hoạt động sei(); //set bit I cho phép ngắt toàn cục

DDRC=0xFF; //PORTC la Output

while (1){ //vong lap v6 tan

Trang 35

IV ADC:

PORTB=val;

1 Giới thiệu:

— Hầu hết trong tự nhiên các tín hiệu cần xử lý ở dạng tương tự như nhiệt độ, ánh sáng Các hệ thông số chỉ làm việc ở các mức logic do đó ta cần chuyển đổi từ tín hiệu tương tự sang tín hiệu số ADC là một bộ chuyên đổi tương tự sang số được sử dụng nhiều trong các hệ thống điều khiến

— Atmega 16 tích hợp sẵn Module ADC được input ở PORTA Đây là bộ ADC với những đặc điểm sau:

Độ phân giải 10 bit Sai số tuyến tính: 0.5LSB Độ chính xác +/-2LSB

Thời gian chuyên đôi:65-260us 8 Kênh đầu vào có thể được lựa ch Có hai chế độ chuyên đổi free run Có nguồn báo ngắt khi hoàn thành

Loại bỏ nhiễu trong chế độ ngủ

2 Cấu trúc:

Trang 36

a Sơ đồ khối: Figure 98 Analog & Digital Converter Block Schematic RECOVERS ‘COMPLETE RO ON BESTE CEE,

3 Các thanh ghi diéu khién ADC:

Có 4 thanh trong b6 ADC trén AVR trong đó có 2 thanh ghi data chứa dữ liệu sau khi chuyển đổi, 2 thanh ghi điều khiển và chứa trạng thái của ADC a ADMUX (ADC Multiplexer Selection Register): Bit 7 6 5 4 3 2 1 0 REFS1 | REFS0 | ADLAR | MUX4 MUX3 MUX2 MUX1 MUXO ADMUX Read/Write RW RW RW RW RW RW RW RIW initial Value 0 0 0 0 0 0 0 0

Là 1 thanh ghi 8 bit điều khiển việc chọn điện áp tham chiếu, kênh và chế độ hoạt động của ADC

e Bit 7:6- REFS1:0 (Reference Selection Bits): 1a cac bit chon dién ap tham chiếu cho ADC, 1 trong 3 nguồn điện áp tham chiếu có thê được chọn là: điện áp ngoài từ chân VREF, điện áp tham chiếu nội 2.56V

mm ——————_—-Ỷ-«==—————————————

Trang 37

hoặc điện áp AVCC Bảng 2 tóm tắt giá trị các bit và điện áp tham chiếu tương ứng

Table 83 Voltage Reference Selections for ADC REFS1 | REFSO | Voltage Reference Selection

0 0 AREF, Internal Vref turned off

0 1 AVCC with external capacitor at AREF pin

1 0 Reserved

1 1 Internal 2.56V Voltage Reference with external capacitor at AREF pin

e Bit 5-ADLAR (ADC Left Adjust Result): 1a bit cho phép higéu chinh trai kết quả chuyên đối Sở di cé bit nay 1a vi ADC trén AVR cé d6 phan giải 10 bit, nghĩa là kết quả thu được sau chuyền đổi là 1 số có độ dai 10 bit (tối đa 1023), AVR bố trí 2 thanh ghi data 8 bit để chứa giá trị sau chuyên đổi Như thế giá trị chuyên đổi sẽ không lắp đầy 2 thanh ghi data, trong một số trường hợp người dùng muốn 10 bit kết quả nằm lệch về phía trái trong khi cũng có trường hợp người dùng muốn kết quả nằm về phía phải Bit ADLAR sẽ quyết định vị trí của 10 bít kết quả trong 16 bit của 2 thanh ghi data Nếu ADLAR=0 kết quả sẽ được hiệu chỉnh về phía phải (thanh ghi ADCL chứa trọn 8 bit thấp và thanh ghi ADCH chứa 2 bit cao trong 10 bit kết quả), và nếu ADLAR=I thì kết quả được hiệu chỉnh trái (thanh ghi ADCH chứa trọn 8 bít cao nhất, các bit từ 9

đến 2, và thanh ADCL chứa 2 bit thấp nhất trong 10 bit kết quả (bạn

xem hình cách bố trí 2 thanh ghi ADCL và ADCH bên dưới đẻ hiểu rõ

hơn)

e Bits 4:0-MUX4:0 (Analog Channel and Gain Selection Bits): là 5 bit cho phép chọn kênh, chế độ và cả hệ số khuyếch đại cho ADC Do bộ ADC trên AVR có nhiều kênh và cho phép thực hiện chuyển đổi ADC kiểu so sánh (so sánh điện áp giữa 2 chân analog) nên trước khi thực hiện chuyên đổi, chúng ta cần set các bit MUX để chọn kênh và chế độ cần sử dụng Bảng 3 tóm tắt các chế độ hoạt động của ADC thông qua

mm ————>———>-=>>mmmm—————————

Trang 38

các giá trị của các bit MUX Trong bảng này, ứng với các giá trị từ 00000 đến 00111 (nhị phân), các kênh ADC được chọn ở chế độ đơn kênh (tín hiéu input lay trực tiếp từ các chân analog và so sánh với 0V), giá trị từ 01000 đến 11101 tương ứng với chế độ chuyên đổi so sánh 33

Single Ended Positive Differential Negative Differential

Trang 39

11101 ADCS ADC2 1x 11110 1.22 V (Vag) NIA 11111 0V(GND) b ADCSRA (ADC Control and Status RegisterA): Bit 7 6 5 4 3 2 1 0 | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 ADPSO | ADCSRA Read/Write RW RW RW RW RW RW RW RW Initial Value 0 0 0 0 0 0 0 0 —._ Là thanh ghi chính điều khiển hoạt động và chứa trạng thái cia module ADC

¢ Bit 7- ADEN(ADC Enable): viét gid tri 1 vao bit nay ttre ban da cho phép module ADC dugc sử dụng Tuy nhiên khi ADEN=I không có nghĩa là ADC đã hoạt động ngay, bạn can set một bit khác lên 1 dé bat đầu quá trình chuyên đổi, đó là bit ADSC

¢ Bit 6 - ADSC(ADC Start Conversion): set bit nay lén 1 1a bat đầu khởi động quá trình chuyền đổi Trong suốt qua trinh chuyén déi, bit ADSC sẽ được giữ nguyên giá trị 1, khi quá trình chuyền đổi kết thúc (tự động), bit này sẽ được trả về 0 Vì vậy bạn không cần và cũng không nên viết giá trị 0 vào bit này ở bắt kỳ tình huống nào Đề thực hiện một

chuyền đối, thông thường chúng ta sẽ set bit ADEN=I trước và sau đó

set ADSC=1

Trang 40

¢ Bit 4—ADIF(ADC Interrupt Flag): cờ báo ngắt Khi một chuyển đổi kết thúc, bit này tự động được set lên 1, vì thế người dùng cần kiểm tra giá trị bit này trước khi thực hiện đọc giá trị chuyên đổi để đảm bảo quá trình chuyên đổi đã thực sự hoàn tất

e Bit 3— ADIE(ADC Interrupt Enable): bit cho phép ngắt, nếu bit này được set bằng 1 và bit cho phép ngắt toàn cục (bit I trong thanh ghi trạng thái của chip) được set, một ngắt sẽ xảy ra khi một quá trình chuyền đổi ADC kết thúc và các giá trị chuyển đổi đã được cập nhật (các giá trị chuyên đổi chứa trong 2 thanh ghi ADCL và ADCH) e Bit 2:0 — ADPS2:0(ADC Prescaler Select Bits): các bit chọn hệ số chia

xung nhịp cho ADC ADC, cũng như tất cả các module khac trén AVR, cần được giữ nhịp bằng một nguồn xung clock Xung nhịp này được lấy từ nguồn xung chính của chip thông qua một hệ số chia Các bit ADPS cho phép người dùng chọn hệ số chia từ nguồn clock chính đến ADC Tham khảo bảng 4 để biết cách chọn hệ số chia

Table 85 ADC Prescaler Selections

Ngày đăng: 22/05/2014, 17:02

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w