50
VI ĐIỀU KHIỂN AVR – ATMEGA88 Loại vi điều khiển họ AVR RISC là do công ty Atmel sản suất, với kiến trúc RISC (Reduce Instruction Set Computer). Với những ưu điểm được nêu ra sau đây, loại chip này đang được dùng rộng dãi trong các hệ thống nhúng. Các đặc điểm chính: 1-Kiến trúc RISC với hầu hết các lệnh có chiều dài cố định, truy nhập bộ nhớ nạp – lưu trữ và 32 thanh nghi đa năng. 2- Có nhiều bộ phận ngoại vi ngay trên chip, bao gồm: Cổng và/ra số, bộ biến đổi ADC, bộ nhớ EEFROM, bộ định thời, bộ điều chế độ rộng xung (PWM), … 3- Hầu hết các lệnh đều thực hiện trong một chu kỳ xung nhịp. 4- Hoạt động với chu kỳ xung nhịp cao, có thể lên đến 20 MHz tuỳ thuộc từng loại chip cụ thể. 5- Bộ nhớ chương trình va bộ nhớ dữ liệu được tích hợp ngay trên chip. 6- Khả năng lập trình được trong hệ thống, có thể lập trình được ngay khi đang được cấp nguồn trên bản mạch không cần phải nhấc chip ra khỏi bản mạch. 7- Hỗ trợ cho việc lập trình bằng ngôn ngữ bậc cao – ngôn ngữ C. Sau đây là các đặc tính của loại vi điều khiển Atmega88.

Vdk Avr Atmega88

Embed Size (px)

Citation preview

Page 1: Vdk Avr Atmega88

VI ĐIỀU KHIỂN AVR – ATMEGA88Loại vi điều khiển họ AVR RISC là do công ty Atmel sản suất, với kiến

trúc RISC (Reduce Instruction Set Computer). Với những ưu điểm được

nêu ra sau đây, loại chip này đang được dùng rộng dãi trong các hệ thống

nhúng.

Các đặc điểm chính:

1-Kiến trúc RISC với hầu hết các lệnh có chiều dài cố định, truy nhập bộ

nhớ nạp – lưu trữ và 32 thanh nghi đa năng.

2- Có nhiều bộ phận ngoại vi ngay trên chip, bao gồm: Cổng và/ra số, bộ

biến đổi ADC, bộ nhớ EEFROM, bộ định thời, bộ điều chế độ rộng xung

(PWM), …

3- Hầu hết các lệnh đều thực hiện trong một chu kỳ xung nhịp.

4- Hoạt động với chu kỳ xung nhịp cao, có thể lên đến 20 MHz tuỳ thuộc

từng loại chip cụ thể.

5- Bộ nhớ chương trình va bộ nhớ dữ liệu được tích hợp ngay trên chip.

6- Khả năng lập trình được trong hệ thống, có thể lập trình được ngay khi

đang được cấp nguồn trên bản mạch không cần phải nhấc chip ra khỏi

bản mạch.

7- Hỗ trợ cho việc lập trình bằng ngôn ngữ bậc cao – ngôn ngữ C.

Sau đây là các đặc tính của loại vi điều khiển Atmega88.

1.1 CÁC ĐẶC TÍNH:

- Hiệu năng cao, tiêu thụ năng lượng ít

- Kiến trúc RISC

o 131 lệnh mạnh, hầu hết các lênh thực hiện trong một chu kỳ

o 32 Thanh ghi 8-bit đa năng

o Tốc độc thực hiện lên tới 20 triệu lệnh trong 1 giây với tần số

20MHz

o Có 2 bộ nhân, mỗi bộ thực hiện trong thời gian 2 chu kỳ

- Các bộ nhớ chương trình và dữ liệu cố định

o 8 Kb bộ nhớ flash có khả năng tự lập trình trong hệ thống

Có thể thực hiện được 10.000 lần ghi/xoá

o Vùng mã Boot tuỳ chọn với những bit khoá độc lập

Lập trình trên trong hệ thống bởi chương trình on-chip Boot

Page 2: Vdk Avr Atmega88

Thao tác đọc trong khi nghi thực sự

o 512 bytes EEFROM

Có thể thực hiện 100.000 lần ghi /xoá

o 1Kb SRAM bên trong

o Lập trình Khoá an ninh phần mềm

- Ghép nối ngoại vi

o 2 bộ định thời/ bộ đếm 8 bit với các chế độ tỷ lệ định trước và

chế độ so sánh.

o 1 bộ định thời/ bộ đếm 16 bit với các chế độ tỷ lệ định trước

riêng biệt, chế độ so sánh và chế độ bắt giữ

o Bộ thời gian thực với bộ tạo dao động riêng biệt

o 6 kênh PWM

o 6 kênh, ADC 10 bit

o Giao điện nối tiếp 2 dây hướng tới byte

o Bộ truyền tin nối tiếp USART khả trình

o Giao diện SPI chủ / tớ

o Watchdog Timer khả trình với bộ tạo dao động bên trong riêng

biệt

o Máy so mẫu tương tự bên trong

o Ngắt và đánh thức theo sự thay đổi của các chân.

- Các đặc điểm đặc biệt khác.

o Power-on Reset và dò Brown-out khả trình.

o Bộ tạo dao động được định cỡ bên trong.

o Các nguồn ngắt bên trong và bên ngoài.

o 5 chế độ ngủ: Nhàn rỗi, giảm ồn ADC, tiết kiệm năng lượng,

giảm năng lượng tiêu thụ, chờ

- I/O và các loại.

o 23 đường I/O khả trình.

- Điện áp hoạt động.

o 1.8 – 5.5 V

- Nhiệt độ hoạt động: -40oC-85oC

- Các tốc độ.

o 0-4 MHz khi điện áp 1.8-5.5V, 0-10 MHz khi điện áp 2.7-5.5V

- Tiêu thụ năng lượng tại 1 MHz, 3V, 25oC đối với ATmega32L.

Page 3: Vdk Avr Atmega88

o Hoạt động tích cực:

1MHz, 1.8V: 240A

32 kHz, 1.8V: 15A (bao gồm cả bộ dao động)

o Chế độ năng lượng thấp: 1 A khi điện áp 1.8V

Sơ đồ khối, Hình 1.1

Hình 1.1 Sơ đồ khối vi điều khiển AVR

Cốt lõi của AVR là sự kết hợp tập lệnh đầy đủ với các thanh ghi đa năng

32 bit. Tất cả các thanh ghi 32 bit này liên kết trực tiếp với khối xử lý số học

và logic (ALU) cho phép 2 thanh ghi độc lập được truy cập trong một lệnh

Page 4: Vdk Avr Atmega88

đơn trong 1 chu kỳ đồng hồ. Kết quả là tốc độ nhanh gấp 10 lần các bộ vi

điều khiển CISC thường.

Với các tính năng đã nêu, chế độ nghỉ (Idle) CPU trong khi cho phép bộ

truyền tin nối tiếp đồng bộ USART, giao tiếp 2 dây, chuyển đổi A/D,

SRAM, bộ đếm bộ định thời, cổng SPI và hệ thống các ngắt vẫn hoạt động.

Chế độ Power-down lưu giữ nội dung của các thanh ghi nhưng làm đông

lạnh bộ tạo dao động, thoát khỏi các chức năng của chip cho đến khi có ngắt

ngoài hoặc là reset phần cứng. Chế độ Power-save đồng hồ đồng bộ tiếp tục

chạy cho phép chương trình sử dụng giữ được đồng bộ thời gian nhưng các

thiết bị còn lại là ngủ. Chế độ ADC Noise Reduction dừng CPU và tất cả

các thiết bị còn lại ngoại trừ đồng hồ đồng bộ và ADC, tối thiểu hoá

switching noise trong khi ADC đang hoạt động. Trong chế độ standby, bộ

tạo dao động (thuỷ tinh thể/bộ cộng hưởng) chạy trong khi các thiết bị còn

lại ngủ. Các điều này cho phép bộ vi điều khiển khởi động rất nhanh trong

chế độ tiêu thụ công suất thấp.

Thiết bị được sản xuất sử dụng công nghệ bộ nhớ cố định mật độ cao của

Atmel. Bộ nhớ On-chip ISP Flash cho phép lập trình lại vào hệ thống qua

giao diện SPI bởi bộ lập trình bộ nhớ cố đinh truyền thống hoặc bởi chương

trình On-chip Boot chạy trên lõi AVR. Chương trình boot có thể sử dụng bất

cứ giao điện nào để download chương trình ứng dụng trong bộ nhớ Flash

ứng dụng. Phần mềm trong vùng Boot Flash sẽ tiếp tục chạy trong khi vùng

Application Flash được cập nhật, cung cấp thao tác Read-While-Write thực

sự. Bằng việc kết hợp 1 bộ 8-bit RISC CPU với In-System Self-

Programmable Flash trong chỉ nguyên vẹn 1 chip Atmel Atmega88 là một

bộ vi điều khiển mạnh có thể cung cấp giải pháp có tính linh động cao, giá

thành rẻ cho nhiều ứng dụng điều khiển nhúng. Atmega88 AVR được hỗ trợ

bởi bộ chương trình đầy đủ và các tool để phát triển hệ thống, báo gồm: Bộ

biên dịch C, macro assemblers, program debugger/simulators, in-circuit

emulators và evaluation kits.

Page 5: Vdk Avr Atmega88

1.2 SƠ ĐỒ CÁC CHÂN

Hình 1.2 Sơ đồ chân

Mô tả các chân

VCC Điện áp cung cấp số.

GND Chân nối đất.

Port B (PB7:0) Port B là cổng I/O 8-bit hai chiều với các điện trở

pull-up bên trong (được lựa chọn cho mỗi bit). Bộ đệm đầu ra

của Port B có đặc tính điều kiển cân đối với cả tín hiệu source

và sink. Khi là tín hiệu đầu vào, các chân của cổng B sẽ tiêu thụ

dòng nếu các điện trở pull-up bên trong được kích hoạt. Các

chân của Port B là 3 trạng thái khi có tín hiệu reset được kích

hoạt, thậm chí đồng hồ không chạy.

- Tuỳ thuộc việc đặt các cầu chì lựa chọn xung nhịp, chân PB6

có thể được sử như là đầu vào bộ khuyếch đại dao động đảo và

đầu vào mạch thao tác xung nhịp bên trong.

- Tuỳ thuộc việc đặt các cầu chì lựa chọn xung nhịp, chân PB67

có thể được sử như là đầu ra từ bộ khuyếch đại dao động đảo.

- Nếu như bộ dao động RC định cỡ bên trong đưoc sử dụng

nhw là nguồn xung nhịp của chíp bên trong thì PB7..6 được sử

Page 6: Vdk Avr Atmega88

dụng như là đầu vào TOSC2..1 cho Timer/Counter2 nếu như

bit AS2 trong thanh ghi ASSR được đặt.

Port C (PC5:0) Port C là cổng I/O 7-bit hai chiều với các điện trở

pull-up bên trong (được lựa chọn cho mỗi bit). Bộ nhớ đệm đầu

ra của Port C có đặc tính điều kiển cân đối với cả tín hiệu

source và sink. Khi là các tín hiệu đầu vào, các chân của cổng

C sẽ tiêu thụ dòng nếu các điện trở pull-up bên trong được kích

hoạt. Các chân của Port C là 3 trạng thái khi có tín hiệu reset

được kích hoạt, thậm chí đồng hồ không chạy.

- PC6/Reset: Nếu cầu chì RSTDISBL được lập trình, PC6 được

sử dụng như là một chân I/O. Chú ý rằng đặc tính về điện của

PC6 khác với các chân PC khác.

- PC6/Reset: Nếu cầu chì RSTDISBL không được lập trình,

PC6 được sử dụng như là một chân đầu vào Reset. Khi tín hiệu

ở mức thấp dài hơn độ dài của xung nhỏ nhất sẽ gây ra Reset

thậm chí các xung nhịp không còn.

Port D (PD7:0) Port D à cổng I/O 8-bit hai chiều với các điện trở pull-

up bên trong (được lựa chọn cho mỗi bit). Bộ đệm đầu ra của

Port D có đặc tính điều kiển cân đối với cả tín hiệu source và

sink. . Khi là các tín hiệu đầu vào, các chân của cổng C sẽ tiêu

thụ dòng nếu các điện trở pull-up bên trong được kích hoạt.

Các chân của Port C là 3 trạng thái khi có tín hiệu reset được

kích hoạt, thậm chí đồng hồ không chạy.

AVCC AVCC là chân cấp điện cho cổng A và bộ biến đổi A/D, PC3:0.

và ADC7:6. Nó được nối nội bộ đến VCC ngay cả trong trường

hợp ADC không được sử dụng. Nếu ADC được sử dụng, nó

phải được nối với VCC qua bộ lọc thông thấp. Chú ý rằng

PC6:4 được sử dụng điện áp VCC.

AREF AREF là chân tín hiệu tham chiếu analog nối vào bộ biến đổi

A/D.

1.3 KIẾN TRÚC TỔNG QUAN

Page 7: Vdk Avr Atmega88

Hình 1.3 Sơ đồ kiến trúc AVR

Để tối đa hoá hiệu năng tính năng và song song, AVR sử dụng kiến

trúc Harvard với bộ nhớ riêng biệt và các BUS cho chương trình và dữ liệu.

Các câu lệnh trong bộ nhớ chương trình được hoạt với một đường ống lệnh

mức đơn. Trong khi một lênh đang thực hiện, lệnh tiếp theo sẽ được nạp

trước vào từ bộ nhớ chương trình. Điều này làm cho các lệnh được thực hiện

trong mọi chu kỳ đồng hồ. Bộ nhớ chương trình là bộ nhớ In-System

Reprogrammable Flash. Tập thanh ghi truy cập nhanh bao gồm 32 thanh ghi

đang năng 8 bit với thời gian ttruy cập là 1 chu kỳ đơn. Điều này cho phép

ALU hoạt động trong một chu kỳ đơn. Một thao tác điển hình với 2 toán

hạng được của ALU, 2 toán hạng được lấy ra từ tệp thanh ghi để thực hiện,

và và kết quả được lưu trữ lại trong tệp thanh ghi trong một chu kỳ đồng hồ.

6 trong số 32 thanh ghi có thể sử dụng như là 3 thanh ghi con trỏ địa chỉ

gián tiếp 16 bit để chỉ vào vùng dữ liệu phục vụ cho tính toán địa chỉ hiệu

dụng. Một trong các con trỏ địa chỉ này cũng có thể được sử dụng làm con

trỏ địa chỉ trỏ vào bảng dữ liệu trong bộ nhớ chương trình Flash. Các thanh

ghi này là X, Y và Z.

ALU thực hiện các phép toán logíc và số học giữa các thanh ghi hoặc

giữa thanh ghi với một hằng số. Cũng có thể thao tác với các thanh thanh

Page 8: Vdk Avr Atmega88

ghi đơn trong ALU. Sau khi thực hiện phép toán số học, các thanh ghi trạng

thái được cập nhật các thông tin về kết quả thực hiện.

Dòng chương trình được điều khiển bởi các phép nhảy có điều kiện

hoặc không điều kiện đến các lệnh được gọi, và chỉ đến các địa chỉ trực tiếp

trong không gian địa chỉ. Hầu hết các lệnh AVR đều thực hiện với dữ liệu

16 bit. Mỗi địa chỉ bộ nhớ chương trình đều chứa 1 lệnh 32 bit hoặc 16 bit.

Không gian bộ nhớ chương trình Flash được chia thành 2 vùng, vùng

chương trình boot và vùng chương trình ứng dụng, cả hai vùng này đều có

bit khoá chuyên dụng để bảo vệ cho việc ghi và đọc/ghi. Lệnh SPM dùng để

ghi vào vùng bộ nhớ ứng dụng phải có trong vùng chương trình boot. Trong

khi thực hiện các ngắt và các thường trình, địa chỉ trở về của bộ đếm chương

trình (PC) được lưu trữ trong stack. Nhìn chung stack được định vị trong

SRAM, và do vậy kích cỡ stack được giới hạn bởi kích cỡ toàn bộ của

SRAM, và cách sử dụng của SRAM. Tất cả các chương trình của người sử

dụng phải khởi tạo SP trong thường trình reset (trước khi thường trình hoặc

ngắt được thược hiện). SP có thể trỏ được vào không gian I/O. SRAM có

thể được truy cập một cách dễ dàng thông qua 5 chế độ địa chỉ khác nhau hỗ

trợ bởi kiến trúc AVR.

Không gian bộ nhớ trong kiến trúc AVR là bản đồ bộ nhớ thông

thường và tuyến tính.

Một module ngắt linh động có các thanh ghi điều khiển của nó trong

không gian I/O cùng với thêm vào bit khởi tạo ngắt toàn cục trong thanh ghi

trạng thái. Tất cả các ngắt có vector ngắt riêng biệt trong bảng vector ngắt.

Các ngắt này có mức độ ưu tiên theo vị trí của vector ngắt tương ứng. Mức

có địa chỉ càng thấp thì có quyền ưu tiên càng cao.

Không gian bộ nhớ I/O có 64 địa chỉ cho các chức năng ngoại vi của

CPU như là các thanh ghi điều khiển, SPI, và các chức năng I/O khác. Bộ

nhớ I/O có thể truy cập trực tiếp, hoặc như là vị trí không gian dữ liệu theo

chúng của tệp thanh ghi, $20-$5F. Thêm vào đó, nó có không gian I/O mở

rộng từ $60 đến $FF trong SRAM, các không gian này chỉ có các lệnh

ST/STS/STD và LD/LDS/LĐ có thể sử dụng.

Page 9: Vdk Avr Atmega88

1.3.1 ALU – Arithmetic Logic Unit - Đơn vị xử lý số học và logic

AVR ALU hiệu năng cao tác động trựuc tiếp tới 32 thanh ghi đa

năng. Trong vòng 1 chu kỳ, các toán hạng số học thực hiện giữa các thanh

ghi đa năng hoặc giữa một thanh ghi và một toán hạng tức thời. Các toán tử

của ALU được chia làm 3 loại chính: Số học, logic, và xử lý bit. Một số

phép xử lý của kiến trúc này cũng cung cấp bộ nhân số có dấu và không có

dấu và dạng phân số.

1.3.2 Status Register – Thanh ghi trạng thái

Thanh ghi trạng thái chứa thông tin về kết quả thưc hiện của hầu hết

các lệnh số học. Các thông tin này có thể được sử dụng để điều khiển

chương trình. Chú ý rằng các thanh ghi trạng thái được cập nhật sau tất cả

các hoạt động của ALU. Trong nhiều trường hợp, điều này sẽ bỏ đi những

cần thiết khi sử dụng câu lệnh so sánh chuyên dụng, kết quả nhanh hơn và

đoạn chương trình ngắn gọn hơn.

Thanh ghi trạng thái không tự động lưu trữ khi đang nhập vào môt thường

trình ngắt và lưu trữ khi trở về tự một ngắt. Điều này phải được quản lý

bằng phần mềm. Thanh ghi trạng thái AVR – SREG - được định nghĩa như

sau:

• Bit 7 – I: Global Interrupt Enable- bit cho phép ngắt toàn cục

Bit cho phép ngắt toàn cục phải được đặt để cho các ngắt có thể hoạt

động. Điều khiển hoạt động của các ngắt riêng biệt được thực hiện trong các

thanh ghi điều khiển riêng biệt. Nếu thanh ghi cho phép ngắt toàn cục được

xóa, không có một ngắt riêng biệt nào được hoạt động. Bit I được xóa bởi

phần cứng sau khi một ngắt xảy ra và được đặt bởi lệnh RETI để cho các

phép các ngắt tiếp theo hoạt động. Bit I cũng có thể được đặt và xóa bởi câu

lệnh SEI và CLI trong các ứng dụng.

Page 10: Vdk Avr Atmega88

• Bit 6 – T: Bit Copy Storage

Các câu lệnh copy bit BLD (Bit LoaD) và BST (Bit STore) sử dụng

bit T như là đích hoặc nguồn cho bit hoạt động. 1 bit từ một thanh ghi trong

tệp thanh ghi có thể được copy vào bit T bằng lệnh BST và một bit trong T

có thể được copy vào 1 bit trong thanh ghi trong tệp thanh ghi bằng lệng

BLD.

• Bit 5 – H: Half Carry Flag

Cờ nhớ một nửa dùng cho các toàn hạng hạng một nửa byte trong các

phép toán số học. Cờ H sử dụng phép toán số học với số BDC .

• Bit 4 – S: Sign Bit, S = N V – bit dấu

Bit S là phép XOR giữa cờ âm và cờ tràn V .

• Bit 3 – V: Two’s Complement Overflow Flag – cờ tràn mã bù 2

Cờ tràn V hỗ trợ phép toán số bù 2.

• Bit 2 – N: Negative Flag – cờ âm

Cờ âm N hiển thị kết quả âm của phép toán logic hoặc số học.

• Bit 1 – Z: Zero Flag

Cờ Zero Z hiển thị kết quả bằng 0 của phép toán logic hoặc số học.

• Bit 0 – C: Carry Flag

Cờ nhớ C hiển thị số nhớ trong phép toán logic hoặc số học.

1.3.3 General Purpose Register File – tệp các thanh ghi đa năng

Page 11: Vdk Avr Atmega88

Hình 1.4 Tệp thanh ghi đâ năng của AVR CPU

Hầu hết các lệnh thực hiện với tệp thanh ghi có truy cập trực tiếp tới tất

cả các thanh ghi, và hầu hết chúng là lệnh đơn chu kỳ. Mỗi một thanh ghi

được chỉ định bởi một địa chỉ bộ nhớ dữ liệu, bố trí chúng trực tiếp vào 32

vị trí đầu tiên của không gian dữ liệu người sử dụng.

Mặc dù không phải là thực hiện theo luật như các vị trí của SRAM, tổ

chức bộ nhớ này cho phép linh động cao khi truy cập các thanh ghi, như là

thanh ghi con trỏ X,Y,Z có thể được đặt vào danh mục của mọi thanh ghi

trong tệp.

The X-register, Y-register and Z-register

Các thanh ghi R26..R31 có thêm các chức năng ngoài việc sử dụng

như là một thanh gh đa năng. Các thanh ghi này là các con trỏ địa chỉ 16 bit

cho chế độ địa chỉ gián tiếp của không gian dữ liệu. 3 thanh ghi địa chỉ gián

tiếp X, Y, Z được mô tả như như hình 3.5.

Trong các chế độ địa chỉ khác, các thanh ghi địa chỉ này có các chức

năng như là độ lệch cố định, tự động tăng và tự động giảm.

Page 12: Vdk Avr Atmega88

Hình 1.5 Các thanh ghi X, Y và Z

1.3.4 Stack Pointer – ngăn xếp

Stack thường được sử dụng để chứa dữ liệu tạm thời, cho việc lưu trữ

các biến địa phương và cho việc lưu trữ địa chỉ trở về sau khi gọi các thường

trình và các ngắt. Thanh ghi con trỏ thường trỏ tới đỉnh của stack. Chú ý

rằng stack được thực hiện khi tăng thêm từ địa chỉ cao đến địa chỉ thấp, điều

này nói lên rằng khi thực hiện lệnh PUSH thì con trỏ sẽ tự động giảm. Con

trỏ trỏ đến vùng ngăn xếp dữ liệu SRAM . Không gian ngăn xếp trong

SRAM phải được định nghĩa bằng chương trình trước khi bất cứ thường

trình hoặc ngắt được thực hiện. Con trỏ ngăn xếp phải được set để trỏ tới

địa chỉ trên $0100. Con trỏ ngăn xếp được giảm đi 1 khi dữ liệu được cất

vào ngăn xếp và được giảm đi 2 khi cất địa chỉ trở về của thường trình hoặc

ngắt. SP được tăng lên khi dữ liệu được lấy ra.

AVR SP được thực hiện với 2 thanh ghi 8 bit trong không gian I/O.

Số các bit thực tế sử dụng là tuỳ thuộc. Chú ý rằng không gian dữ liệu trong

một số thực thi của kiến trúc AVR rất nhỏ, chỉ SPL là cần. Trong trường

hợp này SPH không sử dụng.

Hình 1.6 Sơ đồ các thanh ghi của con trỏ

1.3.5 Reset and Interrupt Handling - điều khiển ngắt và reset

AVR cung cấp 1 vài nguồn ngắt khác nhau. Các ngắt này và vector

reset riêng biệt có vector chương trình riêng biệt nằm trong không gian nhớ

chương trình. Tất cả các ngắt được chỉ định bởi các bit cho phép riêng biệt

mà các bit này phải được ghi mức logic 1 cùng với bit cho phép ngắt toàn

cục trong thanh ghi trạng thái để cho phép ngắt. Phụ thuộc vào giá trị PC,

Page 13: Vdk Avr Atmega88

các ngắt này phải được tự động loại bỏ khi các bit Boot Lock - BLB02 or

BLB12 - được lập trình. Yếu tố này cải thiện độ an toàn phần mềm.

Địa chỉ thấp nhất trong không gian bộ nhớ chương trình được mặc

định là Reset và Interrupt Vectors. Bảng vector ngắt – bảng 3.1.

Bảng 1.1 Bảng vector ngắt và reset

Khi địa chỉ càng nhỏ thì thứ tự ưu tiên càng cao.

Các vector ngắt có thể được chuyển sang đầu của vùng Boot Flash

bằng cách đặt bit IVSEL trong thanh ghi điều khiển ngắt (MCUCR). Reset

Vector có thể được chuyển sang đầu của vùng Boot Flash bằng cách lập

trình BOOTRST fuse.

Khi một ngắt xảy ra, bit I (bit cho phép ngắt toàn cục) được xóa và tất

cả các ngắt được loại bỏ. Phần mềm sử dụng có thể ghi mức logic 1 vào bit I

để cho phép các ngắt tiếp theo. Tất cả các ngắt được kích hoạt có thể ngắt

Page 14: Vdk Avr Atmega88

những thường trình ngắt hiện tại. Bit I được đặt tự động khi trở về từ lệnh

RETI của ngắt.

Có 2 loại ngắt cơ bản.

+ Loại thứ nhất được gây ra bởi sự kiện mà đặt cờ ngắt. Đối với loại

ngắt này, PC được hướng tới Interrupt Vector tương ứng để thực hiện

thường trình phục vụ ngắt và phần cứng xoá cờ ngắt tương ứng. Các cờ ngắt

cũng có thể được ghi mức logic 1 vào vị trí bit cờ để được xoá. Nếu một

điều kiện ngắt xảy ra trong khi bit cho phép ngắt tương ứng bị xoá, thì cờ

ngắt sẽ được đặt và được nhớ cho đến khi ngắt được thực hiện, hoặc là cờ

ngắt được xoá bởi phần mềm. Tương tự nếu 1 hoặc nhiều điều kiện ngắt xảy

ra trong khi cờ cho phép ngắt toàn cục bị xoá thì các cờ ngắt tương ứng sẽ

được đặt và nhớ cho đến khi cờ cho phép ngắt toàn cục được đặt và nó sẽ

được thực hiện theo thứ tự ưu tiên.

+ Loại ngắt thứ 2 sẽ kích hoạt kéo dài trong thời gian điều kiện ngắt

tồn tại. Các ngắt này không cần thiết phải có cờ ngắt. Nếu điều kiện ngắt

mất đi trước khi ngắt được cho phép, thì ngắt sẽ không xảy ra.

Khi AVR thoát khỏi từ một ngắt, nó sẽ luôn trở về chương trình chính

và thực hiện một hoặc nhiều lệnh trước khi một ngắt nào đó còn đợi đó được

phục vụ.

Chú ý rằng các thanh ghi trạng thái không tự động lưu trữ khi nhập

vào một thường trình ngắt, và cũng không lưu trữ lại khi trở về từ một

thường trình ngắt. Điều này phải được thực hiện bởi phần mềm.

Khi sử dụng câu lệnh CLI để cấm ngắt, các ngắt sẽ không được tác

động ngay lập tức. Không có ngắt nào được thực hiện sau khi thực hiện lệnh

CLI, thậm chí nó xảy ra cùng lúc với lệnh CLI.

Thời gian đáp ứng của 1 ngắt

Việc thực hiện ngắt trong ít nhất 4 chu kỳ đồng hồ với tất cả các ngắt.

Sau 4 chu kỳ đồng hồ, địa chỉ vector chương trình tương ứng với thường

trình điều khiển ngắt thực sự được khởi tạo. Trong thời gian 4 chu kỳ này,

PC được cất vào trong ngăn xếp. Vector thường là lệnh nhảy đến thường

trình ngắt và lệnh nhảy này mất 3 chu kỳ đồng hồ. Nếu một ngắt xảy ra

trong khi thực hiện một lệnh nhiều chu kỳ thì lệnh được hoàn thành trước

khi ngắt được phục vụ. Nếu một ngắt xảy ra khi MCU đang trong chế độ

Page 15: Vdk Avr Atmega88

ngủ thì thời gian đáp ứng ngắt sẽ tăng thêm 4 chu kỳ. Thời gian tăng thêm

này là thời gian để khởi động lại từ chế độ ngủ.

Sự trở về từ một thường trình điều khiển ngắt mất 4 chu kỳ xung nhịp.

Trong thời gian 4 chu kỳ này, PC (2 bytes) được lấy ra từ ngăn xếp, SP được

tăng lên 2, và bit I trong SREG được đặt.

1.3.6 AVR Atmega88 Memories – bộ nhớ

Kiến trúc AVR có 2 không gian bộ nhớ chính bao gồm bộ nhớ

chương trình và bộ nhớ dữ liệu. Thêm vào đó, Atmega88 có một bộ nhớ

EEPROM để lưu trữ dữ liệu. Tất cả 3 không gian này là tuyến tính và như

thường lệ.

1.3.6.1 In-System Reprogrammable Flash Program Memory – bộ nhớ

chương trình Flash có thể lập trình lại nằm bên trong vi xử lý.

Atmega88 chứa 8K bytes bộ nhớ Flash có thể lập trình lại được nằm

trong chip để chứa chương trình. Từ khi tất cả các lệnh của AVR là 16 hoặc

32 bit thì Flash được tổ chức thành 4Kx16. Vì lý do an toàn phần mềm nên

bộ nhớ chương trình Flash được chia thành 2 vùng: Vùng nạp chương trình

boot và vùng chương trình ứng dụng.

Bộ nhớ Flash có thể thực hiện ghi/xoá ít nhất 10.000 lần. Bộ đếm

chương trình (PC) là 12 bit , nó có thể địa chỉ hoá được 4K bộ nhớ chương

trình.

Bảng hằng số có thể được đặt trong không gian bộ nhớ chương trình.

Bản đồ bộ nhớ chương trình như hình 3.7.

Page 16: Vdk Avr Atmega88

Hình 1.7 Bản đồ bộ nhớ chương trình

1.3.6.2 SRAM Data Memory – bộ nhớ dữ liệu SRAM

Bản đồ bộ nhớ dữ liệu SRAM được chỉ ra trên hình 3.8.

Hình 1.8 Bản đồ bộ nhớ dữ liệu SRAM

ATmega88 là bộ vi điều khiển hoàn chỉnh hỗ trợ nhiều thiết bị ngoại

vi trong 64 vị trí được đặt trước trong mã lệnh IN/OUT. Đối với các không

gian vào ra mở rộng từ 0x60 đến 0xFF trong SRAM thì chỉ có các lệnh

ST/STS/STD và LD/LDS/LDD mới được sử dụng.

5 chế độ địa chỉ khác nhau cho bộ nhớ dữ liệu bao gồm: Trực tiếp,

gián tiếp với độ lệch, gián tiếp, gián tiếp với độ lệch giảm, và gián tiếp với

độ lệch tăng lên. Trong tệp thanh ghi, các thanh ghi từ R26 đến R31 dùng để

làm các thanh ghi con trỏ địa chỉ gián tiếp.

Địa chỉ trực tiếp chỉ tới toàn bộ không gian dữ liệu.

Chế độ gián tiếp với độ lệch chỉ đến 63 vị trí từ địa chỉ cơ sở được

đưa ra bởi thanh ghi Y hoặc Z.

Khi sử dụng các chế độ địa chỉ gián tiếp thanh ghi với độ giảm hay

tăng tự động, thanh ghi địa chỉ X, Y và Z được giảm hoặc được tăng.

Page 17: Vdk Avr Atmega88

1.3.6.3 EEPROM Data Memory – bộ nhớ dữ liệu EEPROM

ATmega88 chứa 512 byte bộ nhớ dữ liệu EEPROM. Nó được tổ chức

thành không gian dữ liệu riêng biệt, trong chúng các byte đơn có thể được

đọc và ghi. EEPROM có thể đọc ghi được ít nhất 100.000 lần.

EEPROM Read/Write Access – đọc/ghi vào EEPROMass

Các thanh ghi truy nhập EEPROM có thể được thực hiện trong

không gian I/O.

Thanh ghi địa chỉ EEPROM – EEARH và EEARL

• Bits 15..9 – Res: Các bit dự phòng

Các bit này được đặt dự phòng trong Atmega88 và sẽ luôn là 0.

• Bits 8..0 – EEAR9..0: Địa chỉ EEPROM

Giá trị khởi tạo của EEAR là không xác định. Giá trị thích hợp phải

được ghi trước khi EEPROM có thể được truy cập.

Thanh ghi dữ liệu EEPROM – EEDR

• Bits 7..0 – EEDR7.0: Dữ liệu EEPROM

Để ghi EEPROM, thanh ghi dữ EEDR chứa dữ liệu được ghi vào trong

EEPROM với địa chỉ được chỉ ra trong thanh ghi EEAR. Khi đọc

Page 18: Vdk Avr Atmega88

EEPROM, thanh ghi EEDR chứa dữ liệu đọc ra từ EEPROM tại địa chỉ chỉ

ra tại EEAR.

Thanh ghi trạng thái EEPROM – EECR

• Bits 7..6 – Res: Các bit dự phòng

Các bit này được đặt dự phòng trong Atmega88 và sẽ luôn là 0.

• Bit 5..4 – EEPM1 và EEPM0: Các bit chế độ lập trình EEPROM

• Bit 3 – EERIE: EEPROM Ready Interrupt Enable

• Bit 2 – EEMWE: EEPROM Master Write Enable

• Bit 1 – EEWE: EEPROM Write Enable

• Bit 0 – EERE: EEPROM Read Enable

Phòng ngừa sai lệch dữ liệu EEPROM

Trong thời gian nguồn điện VCC bị sụt dữ liệu của EEPROM có thể

bị sai bởi vì điện áp cung cấp quá thấp cho CPU và EEPROM làm việc

đúng. Điều này cũng tương tự đối với các hệ thống bản mạch sử dụng

EEPROM, và các giải pháp thiết kế tương tự nên được ứng dụng.

Một sự sai khác dữ liệu của EEPROM có thể bi gây ra bởi 2 yếu tố

khi mà điện áp quá thấp: Đầu tiên là sự liên tiếp ghi vào EEPROM đòi hỏi

một điện áp tối thiểu để hoạt động một cách đúng đắn. Thứ 2 là CPU có thể

tự thực hiện sai câu lệnh nếu điện áp cung cấp qua thấp.

1.3.6.3 Bộ nhớ I/O

Tất cả các I/O và thiết bị ngoại vi được đặt vào không gian I/O. Vị trí

I/O được truy truy nhập bởi lệnh LD/LDS/LDD và lệnh ST/STS/STD,

chuyển đổi dữ liệu giữa 32 thanh ghi đa năng và không gian I/O. Các thanh

ghi I/O trong vùng địa chỉ $00-$1F có thể truy cập trực tiếp các bit bằng

cách sử dụng câu lệnh SBI và CBI. Trong các thanh ghi này, giá trị của các

bit đơn có thể được kiểm tra bằng cách sử dụng các câu lệnh SBIS và SBIC.

Page 19: Vdk Avr Atmega88

Khi sử dụng các lệnh xác định I/O IN và OUT, địa chỉ I/O $00 - $3F phải

được sử dụng. Khi đánh địa chỉ I/O các thanh ghi như là vùng dữ liệu sử

dụng lệnh LD và ST,và phải thêm $20 vào các địa chỉ này.

Để tương thích với các thiết bị trong tương lai, các bit dự phòng được đặt là

0 nếu được truy cập. Các địa chỉ bộ nhớ I/O dự phòng không nên ghi.

Một vài cờ trạng thái được xoá bằng việc ghi 1 vào chúng.

Các thanh ghi I/O đa năng

ATmega 88 có 3 thanh ghi I/O đa năng, các thanh ghi này có thể sử

dụng để chứa mọi thông tin, đặc biệt có thể hiệu dụng để chứa các biến toàn

cục và các cờ trạng thái. Các thnah ghi này có địa chỉ từ 0x1F có thể truy

nhập trực tiếp đến các bit bằng cách sử dụng các câu lệnh SBI, CBI và

SBIC.

Bao gồm các thanh ghi: GPIOR2, GPIOR1, GPIOR0

1.3.7 Xung nhịp hệ thống và các lựa chọn xung nhịp.

1.3.7.1 Hệ thống xung nhịp và sử dụng chúng.

Tất cả các xung nhịp cần phải không được kích hoạt tại một thời

điểm. Để giảm tiêu thụ năng lượng, các xung nhịp dùng cho các modul

không được sử dụng có thể bị treo bởi các chế độ ngủ khác nhau.

Page 20: Vdk Avr Atmega88

Hình 1.9 Sơ đồ phân phối xung nhịp

Xung nhịp cho CPU – clkCPU

Xung nhịp CPU được gửi đến các vùng các nhau của hệ thống có liên

quan tới các hoạt động của các bộ phận chính của AVR. Ví dụ như tệp thanh

ghi, thanh ghi trạng thái và các vùng nhớ để chứa con trỏ stack.

Xung nhịp I/O – clkI/O

Xung nhịp I/O được sử dụng cho đa số các module I/O, như là các bộ

đếm / bộ định thời, SPI, và USART. xung nhịp I/O cũng được sử dụng cho

module ngắt ngoài, nhưng chú ý rằng một số ngắt ngoài được tìm thấy bằng

logic đồng bộ, cho phép các ngắt này được tìm thấy ngay cả khi đồng hồ I/O

bị treo. Cũng phải chú ý rằng việc tìm ra điều kiện khởi động trong modul úI

được thực hiện không đồng bộ khi clkI/O bị treo, địa chỉ TWI cũng được

nhận ra trong tất cả các chế độ ngủ.

Xung nhịp Flash – clkFLASH

clkFLASH điều khiển hoạt động giao diện Flash. clkFLASH thường

xuyên đồng thời với xung nhịp CPU.

Asynchronous Timer Clock – clkASY

Asynchronous Timer clock cho phép Asynchronous Timer/Counter

được chạy trực tiếp từ xung nhịp bên ngoài hoặc thạch anh tạo xung 32 kHz

bên ngoài. Xung nhịp cho phép sử dụng Timer/Counter như là bộ đếm thời

gian thực, thậm chí khi thiết bị trong chế độ ngủ.

Xung nhịp ADC – clkADC

Page 21: Vdk Avr Atmega88

Bộ chuyển đổi ADC được cung cấp với xung nhịp khác. Điều này cho

phép treo xung nhịp CPU và xung nhịp I/O để giảm nhiễu gây ra bởi mạch

số. Điều này cho kết quả chuyển đổi ADC chính xác hơn.

1.3.7.2 Các nguồn tạo xung nhịp

Bộ vi điều khiển có các nguồn đồng hồ tuỳ chọn sau đây, được lựa

chọn bằng các bit Flash Fuse như chỉ ra trong bảng 3.2.Tín hiệu xung nhịp

từ các nguồn được chọn được lấy từ các bộ phát xung nhịp của AVR, và đi

đến các module thích hợp.

Bảng 1.2 Các nguồn tạo xung nhịp và cách lựa chọn

Nguồn xung nhịp mặc định

Bộ tạo dao động RC bên trong với tần số 8.0MHz cùng với cầu chì

CKDIV8 đã được đặt cho ta xung nhịp 1.0MHz. Thời gian khởi động được

đặt tối đa và chu kỳ time-out được kích hoạt (CKSEL = “0010”, SUT = “10”

và CKDIV8=”0”). Sự cài đặt mặc định này đảm bảo rằng tất cả các sử dụng

có thể tạo nên nguồn đồng hồ mong muốn khi sử dụng bất cứ giao diện lập

trình hiện có nào.

1.3.8 Quản lý năng lượng và các chế độ ngủ

Các chế độ ngủ kích họat ứng dụng để tắt những module không sử

dụng trong MCU, do đó năng lượng được tiết kiệm. AVR cung cấp các chế

độ ngủ khác nhau cho phép sử dụng hợp lý tiêu thụ năng lượng ứng với các

yêu cầu ứng dụng.

Để nhập vào 1 trong 6 chế độ ngủ, bit SE trong MCUCR phải được

ghi là 1 và câu lệnh SLEEP phải được chạy. Các bit SM2, SM1, và SM0

Page 22: Vdk Avr Atmega88

trong thanh ghi MCUCR lựa chọn chế độ ngủ (nhàn rỗi, giảm nhiễu ADC,

giảm năng lượng, tiết kiệm năng lượng, chờ). Xem tổng kết ở bảng 3.3.

Bảng 1.3 Lựa chọn chế độ ngủ

Nếu xảy ra ngắt trong khi MCU đang ngủ thì MCU thức dậy. MCU

treo thêm trong vòng 4 chu kỳ để khởi động, nó thực hiện thường trình ngắt,

và dành lại việc thực hiện lệnh SLEEP tiếp theo. Nội dung của tệp thanh

ghi và SRAM là còn nguyên khi thiết bị tỉnh dậy từ trạng thái ngủ. Nếu

Reset xảy ra trong khi ngủ, thì MCU tỉnh dậy và thực hiện từ vector reset.

Thanh ghi điều khiển MCU –MCUCR

Thanh ghi trạng thái điều khiển MCU chứa các bit điều khiển để quản lý

năng lượng.

• Bit 7..4 – Res: Dự phòng

• Bits 6...4 – SM2..0: Lựa chọn chế độ ngủ

1.3.9 Điều khiển hê thống và Reset

1.3.9.1 Resetting AVR

Page 23: Vdk Avr Atmega88

Trong khi reset, tất cả các thanh ghi I/O được đặt giá trị khởi tạo của

nó, và chương trình bắt đầu hoạt động từ vectơ reset. Câu lệnh được đặt

trong vectơ reset phải là RJMP – nhảy liên quan - tới thường trình kiểm soát

reset. Nếu chương trình không bao giờ kích hoạt 1 nguồn ngắt, vectơ ngắt

không được sử dụng, mã chương trình bình thường có thể được đặt tại các vị

trí này. Điều này cũng là trường hợp nếu vector reset nằm trong vùng ứng

dụng trong khi các vector ngắt nằm trong vùng boot hoặc vice versa. S

Hình 3.10 chỉ ra ligic reset. Bảng 3.4 mô tả thông số về điện của

mạch reset.

Bảng 1.4 Đặc tính của Reset

Các nguồn Reset

ATmega88 có 4 nguồn Reset:

* Power-on Reset: MCU được reset khi nguồn điện áp cung cấp ở dưới mức

ngưỡng Power-on Reset.

* Reset bên ngoài: MCU được reset khi 1 mức thấp hiện diện tại chân

RESET trong thời gian dài hơn xung nhỏ nhất.

* Watchdog Reset: MCU được reset khi giai đoạn Watchdog Timer kết thúc

và chế độ Watchdog system reset được cho phép.

* Brown-out Reset: MCU được reset khi nguồn điện áp VCC ở mức dưới

ngưỡng Brown-out Reset (VBOT) và đầu dò Brown-out được cho phép.

Page 24: Vdk Avr Atmega88

Hình 1.10 Logic reset

Thanh ghi trạng thái và điều khiển MCU – MCUCSR

Thanh ghi trạng thái và điều khiển MCU cung cấp thông tin mà dựa vào

nó nguồn reset gây ra 1 reset MCU.

• Bit 7..4 – Res: Dự phòng

• Bit 3 – WDRF: Cờ reset hệ thống Watchdog

• Bit 2 – BORF: Cờ reset Brown-out

• Bit 1 – EXTRF: Cờ reset từ bên ngoài

• Bit 0 – PORF: Cờ reset Power-on

1.3.9.2 Internal Voltage Reference- tham chiếu điện áp bên trong

Sự tham chiếu được sử dụng cho việc thăm dò Brown-out, và nó có

thể được sử dụng như là một đầu vào của bộ so sánh tương tự hoặc ADC.

1.3.9.3 Watchdog Timer

Có những đặc điểm chính như sau:

• Được cung cấp xung nhịp từ một bộ tạo dao động trên chip.

• Có 3 chế độ hoạt động.

Page 25: Vdk Avr Atmega88

Ngắt

Reset hệ thống

Ngắt và reset hệ thống

• Chu kỳ time-out được lựa chon từ 6ms đến 8s.

• Cầu chì phần cứng Watchdog luôn được bật.

Hình 1.11 Watchdog Timer

Thanh ghi điều khiển Watchdog Timer

• Bits 7-WDIF: Cờ ngắt Watchdog

• Bit 6 – WDIE: Kích hoạt Watchdog

• Bit 4 – WDCE: Kích hoạt thay đổi Watchdog

• Bits 5,2..0 – WDP3..0, WDP1, WDP0: Chọn Watchdog Timer với tỷ lệ 2,

1 và 0

1.3.10 Interrupt Vectors trong ATmega88

Địa chỉ vector ngắt và Reset – bảng 3.6

Bảng vector ngắt – bảng 3.7

Page 26: Vdk Avr Atmega88

Bảng 1.6 Địa chỉ của vector ngắt và Reset

Di chuyển các ngắt giữa vùng chương trình ưng dụng và Boot

Thanh ghi điều khiển MCU điều khiển vị trí của bảng vector ngắt.

Thanh ghi điều khiển ngắt – MCUCR

• Bit 1 – IVSEL: Lựa chọn vector ngắt

• Bit 0 – IVCE: Cho phép thay đổi vector ngắt

Page 27: Vdk Avr Atmega88

Bảng 1.7 Các vector ngắt và Reset

1.3.11 Các ngắt ngoài

Các ngắt ngoài được kích hoạt bởi chân INT0 và INT1 hoặc bởi các

chân PCINT23..0 . Cần phải chú ý rằng, khi được cho phép, các ngắt này sẽ

kích hoạt thậm chí nếu các chân INT0, INT1 và INT23..0 được cấu hình như

các chân ra. Yếu tố này cung cấp cho chúng ta một cách để sinh ra ngắt

phần mềm. Ngắt PC12 sẽ kích hoạt nếu một trong số các chân được phép

PCINT23..16 chốt. Ngắt PC11 sẽ kích hoạt nếu một trong số các chân được

phép PCINT14..8 chốt. Ngắt PC10 sẽ được kích hoạt nếu một trong số các

chân được phép PCINT7..0 chốt. Các thanh ghi PCMSK0, PCMSK1

PCMSK3 điều khiển các chân góp phần tạo nên các ngắt thay đổi chân. Các

ngắt thay đổi chân từ PCINT23..0 được nhận ra một cách đồng bộ. Điều này

gợi ý rằng các ngắt cũng có thể được sử dụng cho việc đánh thức các phần

đang trong chế độ ngủ sâu hơn chế độ nhàn dỗi.

Các ngắt INT1, INT0 có thể được kích hoạt bằng xườn lên hoặc xườn

xuống hoặc mức thấp. Điều này được điều khiển trong thanh ghi A-EICRA.

Khi các ngắt này được phép hoàt động và được cấu hình để kích hoạt theo

mức, thì các ngắt này sé kích trong thời gian chừng nào chân còn giữ ở mức

thấp.

1.3.11.1 Sơ đồ thời gian ngắt do thay đổi trên chân.

Page 28: Vdk Avr Atmega88

Hình 1.12 Giản đồ thời gian của các ngắt do thay đổi trên chân

1.3.11.2 Thanh ghi điều khiển ngắt ngoài A - EICRA

1.3.11.3 Thanh ghi mặt nạ ngắt ngoài - EIMSK

1.3.11.4 Thanh ghi cờ ngắt ngoài - EIFR

1.3.11.5 Thanh ghi điều khiển ngắt thay đổi trên chân - PCICR

1.3.11.6 Thanh ghi mặt nạ ngắt thay đổi trên chân 2 – PCMSK2

1.3.11.7 Thanh ghi mặt nạ ngắt thay đổi trên chân 1 – PCMSK1

1.3.11.8 Thanh ghi mặt nạ ngắt thay đổi trên chân 0 – PCMSK0

Page 29: Vdk Avr Atmega88

1.3.12 Các cổng I/O

Tất cả các cổng AVR đều có chức năng Read-Modify-Write thực sự, khi

sử dụng chúng như cổng I/O số. Điều này có nghĩa là hướng của chân của

một cổng có thể được thay đổi không cần phải thay đổi hướng của bất kỳ

chân nào với câu lệnh SBI và CBI. Điều tương tự cũng được ứng dụng khi

thay đổi giá trị điều khiển (nếu cấu hình như là đầu vào) loạt kích hoạt hoặc

loại bỏ các điện trở pull_up (Nếu được cấu hình như đầu vào). Mỗi một bộ

đệm đầu ra có đặc tính điều khiển đối xứng với cả khả năng sink và source

cao. Chân điều khiển đủ khoẻ để điều khiển hiển thị các LED trực tiếp. Tất

cả các chân I/O đều có diot bảo vệ cở cả đầu VCC và đất như trên hình 3.13.

Hình 1.13 Sơ đồ chân I/O

Các cổng là cổng I/O 2 chiều với sự lựa chọn các pull-ups bên trong.

Hình 3.14 chỉ ra 1 mô tả các khối chức năng của 1 chân cổng I/O, ta gọi

chung là Pxn.

Page 30: Vdk Avr Atmega88

Hình 1.14 Sơ đồ các khối chức năng của 1 chân I/O

Đặt cấu hình cho mỗi châncổng bao gồm 3 bit thanh ghi: DDxn,

PORTxn, và PINxn. Các bit DDxn trong thanh ghi DDRx lựa chọn hướng

của chân. Nếu các bit DDRx là 1 thì Pxn là chân ra, ngược lại là 0 thì là

chân vào.

Nếu các bit PORTxn là 1 khi chân được cầu hình là chân vào thì các

điệc trở pull-up được kích hoạt. Để tắt các điện trở này các bit PORTxn phải

đặt lại là 0 hoặc chân ra phải được đặt là chân ra. Khi có reset các chân cổng

trở về dạng 3 trạng thái ngay cả khi không có xung nhịp.

Nếu các bit PORTxn là 1 khi chân được đặt là chân ra thì chân cổng

được đặt ở mức cao. Nếu các bit PORTxn là 0 khi chân cổng được đặt là

chân ra thì chân cổng được đặt ở mức 0. Đặt cấu hình cho chân cổng theo

bảng 3.8

Page 31: Vdk Avr Atmega88

Bảng 1.8 Đặt cấu hình cho chân cổng

1.3.13 8-bit Timer/Counter0 với PWM

Bộ Timer/Counter0 nhìn cung được sử dụng như Timer/Counter 8 bit

đa năng với 2 đơn vị so sánh đầu ra độc lập cùng với hỗ trợ PWM. Nó cho

phép định thời một cách chính xác và phát sóng, với các chức năng chính

sau đây:

+ 2 bộ so sánh đầu ra độc lập

+ Các thanh ghi bộ so sánh đầu ra đệm đôi

+ Xoá bộ đếm khi đạt đến mức so sánh (tự động nạp lại)

+ Điều chế độ rộng xung

+ Máy phát tần số

+ 3 nguồn ngắt độc lập (TOV0, OCF0A, và OCF0B)

1.3.14 16-bit Timer/Counter0 với PWM

16-bit Timer/Counter cho phép định thời thực hiện chương trình

chính xác (quản lý sự kiện), phát sóng, và đo lường định thời tín hiệu. Các

yếu tố chính là:

+ Thiết với 16 bit (ví dụ cho phép điều chế độ rộng xung 16 bit)

+ 2 bộ so sánh đầu ra độc lập

+ Các thanh ghi bộ so sánh đầu ra đệm đôi

+ Xoá bộ đếm khi đạt đến mức so sánh (tự động nạp lại)

+ Điều chế độ rộng xung

+ Máy phát tần số

+ 4 nguồn ngắt độc lập (TOV1, OCF1A, OCF1B và ICF1)

+ 1 bộ Capture đầu vào

+ Lọc nhiễu

+ Đếm sự kiện ngoài

1.3.15 Serial Peripheral Interface (SPI) – giao diện kết nối ngoại vi nối

tiếp

Page 32: Vdk Avr Atmega88

SPI Cho phép truyền dữ liệu đồng bộ tốc độ cao giữa ATmega88 và

các thiết bị ngoại vi hoặc giữa các thiết bị AVR. Bao gồm các đặc trưng sau:

• Song công, dữ liệu đồng bộ 3 dây

• Hoạt động chủ hoặc tớ

• Truyền LSB trước hoặc MSB trước

• 7 tốc độ bit có thể lập trình được

• Cờ ngắt khi truyền xong

• Bảo vệ xung đột ghi

• Đánh thức từ chế độ nhàn dỗi

• Chế độ SPI chủ tốc độ đôi

Sơ đồ khối SPI như hình 3.15.

Hình 1.15 Sơ đồ khối của SPI

1.3.16 USART

Page 33: Vdk Avr Atmega88

Bộ truyền và nhận tín hiệu nối tiếp đồng bộ và không đồng bộ vạn

năng là thiết bị kết nối nối tiếp có độ linh động cao. Các đặc trưng chính

sau:

• Hoạt động song công

• Hoạt động đồng bộ hoặc không đồng bộ

• Hoạt động đồng bộ theo xung nhịp chế độ chủ hoặc tớ

• Bộ phát tốc độ truyền có độ phân giải cao

• Hỗ trợ khung truyền với 5, 6, 7, 8, hoặc 9 Bit dữ liệu và 1 hoặc 2

Stop Bits

• Phát và kiểm tra chẵn lẻ được hỗ trợ bởi phần cứng

• Phát hiện OverRun dữ liệu

• Phát hiện lỗi khung truyền

• Loạc nhiễu bao gồm phát hiện bit start sai và bộ lọc thông thấp số.

• 3 ngắt riêng biệt khi TX hoàn thành, thanh ghi dữ liệu TX rỗng, và

RX hoàn thành.

• Chế độ Multi-processor kết nối

• Chế độ kết nối không đồng bộ tốc độ đôi

Một sơ đồ đơn giản của bộ truyền USART được đưa ra như hình 3.16

Page 34: Vdk Avr Atmega88

Hình 1.16 Sơ đồ khối của USART

1.3.17 Two-wire Serial Interface – giao tiếp nối tiếp 2 dây

Các đặc trưng:

• Hỗ trợ cả chế độ hoạt động chủ và tớ

• Có thể hoạt động như bộ thu hoặc phát

• Không gian địa chỉ 7-bit cho phép đánh địa chỉ được 128 thiết bị tớ

• Hỗ trợ phân xử nhiều chủ

• Tốc độ chuyển đổi dữ liệu lên đến 400 kHz

• Nhận dạng địa chỉ và đánh thức khi AVR trong chế độ ngủ

1.3.18 Bộ chuyển đổi Analog sang Digital

Các đặc trưng cơ bản:

• Độ phân giải 10-bit

Page 35: Vdk Avr Atmega88

• Độ chình xác tuyệt đối: ±2 LSB

• Thời gian chuyển đổi 13 - 260 s

• Lên tới 15 kSPS khi độ phân giải cao nhất

• Phạm vi điện áp đầu vào: 0 - V CC

• Điện áp tham chiếu 2.56V có thể lựa chọn

• Ngắt khi chuyển đổi hoàn thành

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

1.3.19 Hệ thống gỡ lỗi On-chip debugWARE

Các đặc trưng:

• Điều khiển hoàn toàn dòng chương trình

• Hoạt động với thời gian thực

• Hệ thống cấu hình tự động

• Hoạt động tốc độ cao

• Lập trình bộ nhớ cố định

Hệ thống gỡ lỗi On-chip debugWARE sử dụng 1 dây, giao diện 2

hướng để điều khiển dòng chương trình, thực hiện các câu lênh AVR trong

Cpu và lập trình các bộ nhớ cố định khác nhau.

1.3.20 Hỗ trợ Boot Loader– Read-While-Write Self- Programming

Hỗ trợ bộ nạp chương trình boot cung cấp kỹ thuật tự lập trình Read-

While-Write thực sự cho việc downloading và uploading code chương trình

của MCU. Yếu tố này cho phép ứng dụng linh hoạt phần mềm cập nhật

được điều khiển bởi MCU sử dụng 1 chương trình Boot Loader. Chương

trình Boot Loader có thể sử dụng mọi giao diện dữ liệu hiện có và giao thức

bổ trợ để đọc mã và ghi chương trình hoặc mã đó vào bộ nhớ Flash, hoặc

đọc mã từ bộ nhớ chương trình. Mã chương trình bên trong vùng Boot

Loader có khả năng ghi vào Flash khối, bao gồm bộ nhớ Boot Loader. Do

vậy Boot Loader có thể tự thay đổi, và nó có thể tự xoá mã nếu không cần

đến. Kích thước của bộ nhớ Boot Loader được cấu hình với các cầu chì và 2

bộ các bit Boot Lock tách biệt có thể được đặt một cách độc lập. Điều này

Page 36: Vdk Avr Atmega88

cho người sử dụng 1 sự linh hoạt đồng bộ để lựa chọn các mức độ bảo vệ

khác nhau.

Các đặc trưng:

• Tự - lập trình Read-While-Write

• Kích thước bộ nhớ Boot linh động

• An ninh cao (các bit khoá Boot riêng biệt cho bảo vệ một cách linh

hoạt)

• Cầu chì riêng biệt để lực chọn Reset Vector

• Optimized Page (1) Size

• Code Efficient Algorithm

• Hỗ trợ Read-Modify-Write một các hiệu quả