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

Vi điều khiển AVR.........

75 470 0

Đ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 1,75 MB

Nội dung

Chuyên ngành: Kỹ thuật Công nghệ ĐiệnĐiện tửViễn thông Điện tử Sơ lược: 1 – Giới thiệu AVR MCU ATMEL I – Tổng quan về AVR II – Một số dòng AVR phổ biến 2 – ATMEGA16 – Kiến trúc tổng quan I – Ưu điểm II – Kiến trúc III – Các khối chính 3 – Các module điều khiển trong ATMEGA16 I – Input Ouput II – Timer Counter III – Interrupt IV – ADC V – USART VI – SPI VII – TWII2C Kết luận

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

BÁO CÁO ĐỀ TÀI VI ĐIỀU KHIỂN AVR

Huỳnh Thanh Long MSSV: 07520588 KTMT02

GVHD: ThS Lê Hoài Nghĩa

Tp Hồ Chí Minh 20/055/2010

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 xuất 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ê Hồi Nghĩa và sẽ cố gắng hồn thiện trong những lần báo cáo sau

Thay mặt nhĩm

Võ Đình Chinh

Trang 3

MỤC LỤC

&1 – GIỚI THIỆU AVR MCU ATMEL ………01

I – Tổng quan về AVR ……… 01

1 Giới thiệu ……….01

2 Ưu thế của MCU AVR ………01

3 Một số dòng AVR ……… 02

II – Một số dòng AVR phổ biến ……… 03

&2 – ATMEGA16 – KIẾN TRÚC TỔNG QUAN ……….05

I – Ưu điểm ………05

II – Kiến trúc ……….05

1 Sơ đồ chân ……… 05

2 Sơ đồ khối ………06

3 Các port xuất nhập ……… 06

4 Các chân khác ……… 07

III – Các khối chính ……… 07

1 CPU ……….07

2 Con trỏ ngăn xếp SP ………09

3 Memory ……… 10

4 Quá trình thực thi lệnh ……….12

&3 – CÁC MODULE ĐIỀU KHIỂN TRONG ATMEGA16….13 I – Input & Ouput ……….13

1 Giới thiệu ……….13

2 Cấu tạo chân ……….14

Trang 4

3 Thiết lập truy xuất I/O ……….……….15

II – Timer & Counter ………16

1 Giới thiệu ……… 16

2 Cấu trúc bộ định thời 8 bit Timer 0 ……… 16

3 Mô tả chi tiết các thanh ghi của bộ định thời ………19

4 Sử dụng timer/counter ……… 21

5 Các chế độ hoạt động của Timer 0 ………21

6 Các bước sử dụng Timer ……… 24

III – Interrupt ……….25

1 Giới thiệu ……… 25

2 Ngắt ngoài ATMEGA16 ……… 26

3 Các thanh ghi phục vụ ngắt ……… 27

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

IV – ADC ………30

1 Giới thiệu ……… 30

2 Cấu trúc ……….30

3 Các thanh ghi điều khiển ADC ……….31

4 Quá trình chuyển đổi ADC ……… 37

5 Các bươc lập trình điều khiển ADC ……….38

V – USART ……….39

1 Giới thiệu ……… 39

2 Cấu trúc của một USART ……….40

3 Tạo xung clock cho USART ……….41

4 Một số khái niệm liên quan đến USART ……… 42

5 Các thanh ghi điều khiển USART ……….44

6 Sử dụng USART ……… 49

VI – SPI ……… 51

Trang 5

3 Các thanh ghi điều khiển SPI ………55

4 Sử dụng SPI ……… 59

VII – TWI-I2C ……… 61

1 Giới thiệu ……… 61

2 Cấu trúc của một I2C ………64

3 Các thanh ghi điều khiển I2C ………65

4 Sử dụng TWI-I2C ……….68

Kết luận ……… 70

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, AT91 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 là 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

• 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 Port xuất nhập

• 8 bits, 16 bits timer/counter tích hợp PWM

• Các bộ chuyển đối Analog – Digital phân giải 10 bits

• Analog comparator

• Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232)

• 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

• 1–8 kB program memory

• 6–32-pin package

• Limited peripheral set

* megaAVR — the ATmega series

• 4–256 kB program memory

• 28–100-pin package

• Extended instruction set (Multiply instructions and instructions for handling larger program memories)

Trang 8

• Extensive peripheral set

* XMEGA — the ATxmega series

• 16–384 kB program memory

• 44–64–100-pin package (A4, A3, A1)

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

• Extensive peripheral set with DACs

* Application specific AVR

• megaAVRs with special features not found on the other members of the AVR family, such as LCD controller, USB controller, advanced

PWM, CAN etc

II Một số dòng AVR phổ biến:

− AT90S1200

− AT90S2313

− AT90S2323 and AT90S2343

− AT90S2333 and AT90S4433

− AT90S4414 and AT90S8515

− AT90S4434 and AT90S8535

− AT90C8534

− ATtiny10, ATtiny11 and ATtiny12

− ATtiny15

− ATtiny22

Trang 10

&2 ATMEGA16 – KIẾN TRÚC TỔNG QUAN

I Ưu điểm:

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

− Kiến trúc 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 đa 16MIPS ở 16Mhz xung clock

− Dung lượng bộ nhớ: 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/85oC-100 năm 25oC

− Giao tiếp chuẩn JTAG hỗ trợ debug, Lock, Fuse bit

− 2 bộ Timer 16 bit, 1 bộ timer 16 bit

− 4 kênh PWM

− 8 kênh ADC 10 bit

− 32 port xuất 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:

Trang 11

1 Sơ đồ chân:

Trang 12

2 Sơ đồ khối:

3 Các Port xuất nhập:

a Port A:

− Port A là bên cạnh là Port xuất nhập thông thường 8 bit còn được thiết

kế cho bộ ADC chuyển đổi tương tự số Port A thiết kế với điện trở nội treo lên ở mức cao

b Port B:

Trang 13

− 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

a ALU:

Trang 14

− 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 và theo bit

b Thanh ghi trạng thái:

− Đây là 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

• C: Carry Flag Æ cờ nhớ

• Z: Zero Flag ÆCờ zero

• N: Negative Flag Æ kết quả phép toán âm

• V: Two’s complement overflow Æ cờ bù 2

• S For signed tests (S=N XOR V) Æ kiểm tra 2 cờ N và V

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

• T: Transfer bit used by BLD and BST instructionsÆđược sử dụng làm nơi trung gian trong các lệnh BLD,BST

• I: 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 15

− Một 8 bit output toán hạng và một 8 bit cho input kết quả

− Hai 8 bit output toán hạng và một 8 bit cho input kết quả

− Hai 8 bit cho output kết quả và một 16 bit cho input kết quả

− 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:

− Là một thanh ghi 16 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 của stack gọi là 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 với lệnh PUSH và hai khi có Subroutine hoặc Interrupt được gọi Con trỏ tăng địa chỉ lên 1 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

Trang 16

3 Memory:

a Bộ nhớ chương trình Flash:

− Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình với độ rộng 16 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 phần là 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 17

b Bộ nhớ dữ liệu 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:

• Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu bao gồm 32 thanh

General Purpose Rgegister – GPR Tất cả các thanh ghi này đều là các thanh ghi 8 bits Tất cả 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ị dương từ 0 đến 255 hoặc các giá trị có dấu

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 phần, 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 còn

gọi là vùng nhớ IO Vùng nhớ I/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 sử dụng instruction truy xuất

SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ

Trang 18

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

• Phần 3: 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:

− ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và đượ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 thi lệnh:

− Giản đồ xung:

− 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 vào 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 19

&3.CÁC MODULE ĐIỀU KHIỂN TRONG ATMEGA 16

I Input & Output:

1 Giới thiệu:

Vi điều khiểnATmega16có 32 đường vào ra chia làm bốn Port: PORTB-PORTC-PORTD mỗi Port 8bit 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

PORTA-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 thì 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 20

− Đâ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:

− Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng 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à vài uA

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

Trang 21

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

3 Thiết lập truy xuất I/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 dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit)

Trang 22

#include <avr/interrupt.h>

#include <util/delay.h>

int main(void){

DDRB=0xFF; //PORTB la output PORT

Bộ định thời (timer/counter0) là một module định thời/đếm 8 bit/16 bit,

Atmega 16 có 4 bộ định thời là Timer 0-Timer 2 8 bit và Timer 1 16 bit dùng

để định thời gian và đếm sự kiện với các đặc điểm sau:

Trang 23

a Sơ đồ khối:

b Các thanh ghi:

− TCNT0 và OCR0 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 TIFR 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ó

− Ngõ ra của khối chọn xung clock được xem là xung clock của bộ định thời (clkT0) Thanh ghi OCR0 luôn được so sánh với giá trị của bộ định thời/bộ đếm Kết quả so sánh có thể được sử dụng để tạo ra PWM hoặc biến đổi tần

số ngõ ra tại chân OC0

c Đơn vị đếm:

− Phần chính của bộ định thời 8 bit là một đơn vị đếm song hướng có thể lập

trình được Cấu trúc của nó như hình dưới đây:

Trang 24

• count: tăng hay giảm TCNT0 1

• direction: lựa chọn giữa đếm lên và đếm xuống

• clear: xóa thanh ghi TCNT0

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

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

• BOTTOM: báo hiệu bộ định thời đã giảm đến giá trị nhỏ nhất (0)

d Đơn vị so sánh ngõ ra:

− 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 1 vào chu kỳ xung clock tiếp theo Nếu được kích hoạt (OCIE0=1), cờ OCF0

Trang 25

3 Mô tả chi 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 TCCR0:

− Bit 7-FOC0: So sánh ngõ ra bắt buộc Bit này chỉ tích cực khi bit

WGM00 chỉ định chế độ làm việc không có PWM Khi đặt bit này 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-WGM01: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

Trang 26

− Bảng trạng thái:

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

− 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 đọc và ghi giá trị một cách trực tiếp

c Thanh ghi ngõ ra so sánh OCR:

− Thanh ghi này chứa một giá trị 8 bit 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:

− 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 bit số 0 (bit đầu tiên) trong thanh ghi này là liên

Trang 27

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

• Bit 1-OCIE0: Cho phép ngắt báo hiệu so sánh

• Bit 0-TOIE0: Cho phép ngắt tràn bộ đếm

e Thanh ghi cờ ngắt bộ định thời:

− 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

• Bit 1-OCF0: Cờ so sánh ngõ ra 0

• Bit 0-TOV0: Cờ tràn bộ đếm

4 Sử dụng timer/Counter:

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

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

Trang 28

− Đâ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ị xoá đ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 bất

cứ lúc nào

b Chế Độ So Sánh (CTC):

− Đâ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 bằng 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 29

c Chế Độ Fast PWM:

− Cho phép tạo ra sóng với tần số cao.Sự khác biệt cơ bản giữa Fast PWM với các loại PWM khác là nó chỉ sử dụng 1 sườn dố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 1 khi giá trị đạt Bottom Trong chế độ đảo ,đầu ra đảo sẽ được set lên 1 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ộ chi phí cho hệ thống

Trang 30

d Chế độ Phase correct PWM:

− 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 Timer:

− 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

Trang 31

− 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;

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

đã 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ỏ

Trang 32

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 lại lấy 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:

2 Ngắt ngoài Atmega 16:

a Quá trình ngắt:

Trang 33

• Low level - Điện áp ở chân ngắt xuống mức logic 0 V

• Any change - Bất kì sự 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ó 1 sườn điện áp lên (0V->5V) Sau đó 1 cờ ngắt sẽ dự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 Các thanh ghi phục vụ ngắt:

a MCUCR – MCU Control Register:

− Thanh ghi MCUCR chứa các bits cho phép chúng ta chọn 1 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 dùng cho Power manager và Sleep Mode) Bốn bit thấp là các bit Interrupt Sense Control (ISC) trong đó 2 bit ISC11:ISC10 dùng cho INT1

và 2 bit ISC01:ISC00 dùng cho INT0 Bảng chân trị cho các bit ISC01, ISC00 hoàn toàn tương tự

Trang 34

b MCUCSR – MCU Control and Status Register:

− Bit 6 – ISC2: Interrupt Sense Control 2: là bit quan trọng nhất trong thanh ghi này dùng ghi và xóa cờ ngắt INT2

c GICR – General Interrup Control Register:

− GICR cũng là 1 thanh ghi 8 bit nhưng chỉ có 2 bit cao (bit 6 và bit 7) là được sử dụng cho điều khiển ngắt Bit 7 – INT1 gọi là bit cho phép ngắt 1(Interrupt Enable), set bit này bằng 1 nghĩa bạn cho phép ngắt INT1 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 và INTF0 là các bit trạng thái (hay bit cờ - Flag) của 2 ngắt INT1 và INT0 Nếu có 1 sự kiện ngắt phù hợp xảy ra trên chân INT1, bit INTF1 được tự động set bằng 1 (tương tự cho trường hợp của INTF0), 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:

− Step 1: chọn chế độ ngắt trong than ghi MCUCR

− 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 trạng thái SREG

− Code Example:

#include <avr/io.h>

Trang 35

volatile int8_t val=0 int main(void){

DDRD=0x00; //khai báo PORTD là Input để sử dụng 2 chân ngắt

PORTD=0xFF; //sử dụng điện trở nội kéo lên

MCUCR|=(1<<ISC11)|(1<<ISC01); //cả 2 ngắt là ngắt cạnh xuống

GICR |=(1<<INT1)|(1<<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 là Output

while (1){ //vòng lặp vô tận PORTC++; //quét PORTC

_delay_loop_2(60000);

} return 0;

}

//Trình phục vụ ngắt của INT0ISR(INT0_vect){

val++; //nếu có ngắt INT0 xảy ra, tăng val thêm 1

if (val>9) val=0; //giới hạn không vượt quá 9

PORTB=val;

}

IV ADC:

1 Giới thiệu:

Trang 36

− 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-260μs

• 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 37

a Sơ đồ khối:

3 Các thanh ghi điều khiển ADC:

Có 4 thanh trong bộ 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

− 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

• Bit 7:6- REFS1:0 (Reference Selection Bits): là các bit chọn điện áp

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

Ngày đăng: 27/09/2016, 11:42

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w