Đặc điểm của họ vi điều khiển AVR AVR là tên của một loạt các bộ vi điều khiển do công ty Atmel sản xuất, cókiến trúc RISC Reduced Instruction Set Computer là một kiến trúc phổ biến tro
Trang 1Đặc điểm, cấu trúc phần cứng của họ vi điều khiển AVR
4.1 Đặc điểm của họ vi điều khiển AVR
AVR là tên của một loạt các bộ vi điều khiển do công ty Atmel sản xuất, cókiến trúc RISC (Reduced Instruction Set Computer) là một kiến trúc phổ biến trongcủa các bộ xử lý hiện đại với những đặc tính sau:
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 ghi đa năng
2 Kiến trúc bộ nhớ kiểu đường ống cho phép làm tăng tốc độ xử lý lệnh
3 Có chứa bộ phận ngoại ngay trên chip bao gồm các cổng I/O số, các bộ biến đổiADC, bộ nhớ EEFROM, bộ định thời UART, bộ định thời RTC, bộ điều chế độrộng xung PWM,.v.v Đặc điểm này được xem là nổi bật so với nhiều vi điềukhiển khác vì trong khi các bộ vi xử lý khác phải tự tạo ra bộ truyền nhận
UART hoặc giao diện SPI bằng phần mềm thì trên vi điều khiển AVR đã đượctích hợp sẵn:
Có 48 đường dẫn I/O lập trình được
bộ truyền nhận UART lập trình được
Một giao diện SPI đồng bộ
bộ timer/Counter 8 bit
Một bộ timer/Counter 16 bit với chức năng so sánh và bắt mẫu
Gồm bốn lối ra điều biến độ rộng xung PWM
Một đồng hồ thời gian thực (RTC-Timer)
Một bộ biến đổi ADC 10 bit có đến 8 kênh lối vào
Một bộ phát hiện trạng thái sụt điện áp nguồn nuôi
Một bộ so sánh Analog
Một bộ định thời Watchdog
4 Hầu hết các lệnh chỉ trừ lệnh nhảy và nạp/lưu trữ đều được thực hiện trong mộtchu kì xung nhịp
Trang 25 Hoạt động với tốc độ đồng hồ đến 20 MHz So với các họ vi điều khiển khác thì
vi điều khiển họ ATMEL có tần số xung nhịp cho phép tương đối cao, cụ thể là
từ 0 đến 20MHz tùy theo từng loại cụ thể Xung nhịp do bộ dao động tạo racũng chính là xung nhịp của hệ thống, không hề phải qua bộ chia tần như trongtrường hợp các vi điều khiển ra đời trước đó, nên kéo theo tốc độ xử lý lệnh cao
6 Khả năng thực hiện lệnh trong một chu kì xung nhịp, AVR có khả năng đạt đếntốc độ xử lý 20 MPIS (triệu lệnh trong một giây)
Hình 4.1 So sánh thời gian thực thi lệnh giữa các bộ vi xử lý
Các vi điều khiển SX cũng có tần số xung nhịp cao hơn ở các vi điều khiểnAVR nhưng lại có dòng tiêu thụ tương đối lớn, ngoài ra lại không có các bộ phậnngoại vi trên chíp rất tiện dụng cho người dùng như vi điều khiển AVR Chính các
bộ phận ngoại vi tích hợp đã góp phần làm tăng tốc độ xử lý lệnh tính chung cho cả
hệ thống
7 Bộ nhớ chương trình và dữ liệu được tích hợp ngay trên chíp AVR có tới 3 côngnghệ bộ nhớ khác nhau:
Bộ nhớ EPROM xóa được kiểu Flash (luôn luôn lập trình mới được) dùng cho
mã chương trình mà người dùng có thể lập trình được
Bộ nhớ EPROM hay PROM xóa được bằng điện, nhưng nội dung bộ nhớ vẫngiữ nguyên sau khi tắt điện áp nguồn Chương trình người dùng có thể được lậptrình trong thời gian thựckhi hệ thống đang hoạt động
Trang 3Bộ nhớ RAM tĩnh (SRAM) dùng cho các biến, nội dung của bộ nhớ sẽ mất đikhi tắt điện áp nguồn Ngoài ra, vi điều khiển AVR có tới 32 thanh ghi làm việc đanăng, tất cả đều được nối trực tiếp với khối ALU (đơn vị logic số học) và được traođổi trực tiếp trên vùng địa chỉ bộ nhớ, cụ thể là 32 ô đầu tiên của bộ nhớ (0x00 đến0xFF) tương ứng với thanh ghi làm việc đa năng R0-R31
8 Khả năng lập trình được trong hệ thống do cách thiết kế và công nghệ bộ nhớđược sử dụng mà các vi điều khiển có thể được lập trình ngay khi đang còn cấpnguồn trên bản mạch Không cần phải nhấc vi điều khiển ra ngoài bản mạch nhưnhiều họ vi điều khiển khác Các cổng giao tiếp RS-232 và SPI cho phép thaotác dễ dàng thực hiện trên hệ thống
9 Có tốc độ xử lý lớn hơn 12 lần so với các vi điều khiển CISC thông thường
10 Hỗ trợ cho việc lập trình bằng ngôn ngữ bậc cao, chẳng hạn như ngôn ngữ C
11 Tất cả các vi điều khiển đang lưu hành trên thị trường đều được chế tạo bằngcông nghệ CMOS 0.6 μm m
12 Điện áp làm việc cho phép từ 2.7V đến 6V
13 Một kiến trúc đơn giản và hợp lý sẽ giúp người dùng tìm hiểu dễ dàng trong thờigian ngắn
14 Tập lệnh AVR có tới 113 lệnh cho phép lập trình một cách dễ dàng và đơn giảnbằng hợp ngữ, nhưng cấu trúc của bộ xử lý Atmel còn cho phép lập trình bằngngôn ngữ C
4.2 Cấu trúc phần cứng của họ vi điều khiển AVR
4.2.1 Tổng quan về kiến trúc
Các thanh ghi đa năng truy cập nhanh gồm 32 thanh ghi 8 bit được truy cậptrong một chu kì xung nhịp Điều này có nghĩa là trong 1 chu kì xung nhịp ALUthực hiện được một phép toán: hai toán hạng được xuất từ các thanh ghi đa năng,phép toán được thực hiện và kết quả được lưu trở lại vào tập các thanh ghi 6 trong
số 32 thanh ghi này có thể dùng làm con trỏ địa chỉ gián tiếp 16 bit để định địa chỉkhông gian dữ liệu và cho phép tính địa chỉ hiệu dụng Một trong 3 con trỏ địa chỉ
Trang 4cũng được dùng làm con trỏ địa chỉ cho chức năng tìm kiếm bảng hằng số Cácthanh ghi có chức năng bổ xung này là các thanh ghi 16 bit X,Y,Z
ALU: Hỗ trợ các chức năng số học và chức năng logic giữa các thanh ghi Cácphép toán trong thanh ghi cũng được thực hiện trong ALU
Hình 4.2 Kiến trúc của bộ xử lý AVR
Ngoài chế độ định địa chỉ gián tiếp thanh ghi, chế độ định địa chỉ bộ nhớthông thường cũng có thể được dùng trong tập các thanh ghi đa năng Nguyên nhân
là các thanh ghi đa năng được gán 32 địa chỉ thấp nhất trong không gian dữ liệu từ
$00 đếm $1F nên chúng được truy cập những vị trí thông thường
Không gian bộ nhớ vào ra chứa 64 bit địa chỉ cho các chức năng ngoại vi củaCPU như các thanh ghi điều khiển, bộ Timer/Counter, bộ ADC và chức năng I/Okhác Bộ nhớ I/O có thể truy cập trực tiếp hoặc như các vị trí trong không gian dữliệu ngay sau các vị trí của tập các thanh ghi đa năng từ địa chỉ $20 đến $5F
Trang 5AVR sử dụng kiến trúc Harvard với bộ nhớ và bus riêng biệt cho chương trình
và dữ liệu Bộ nhớ chương trình được thực thi với một đường ống hai tầng Trongkhi một lệnh đang được thực thi thì lệnh tiếp theo được nhập vào bộ nhớ chươngtrình Giải pháp này cho phép vác lệnh được thực thi trong mọi chu kì xung nhịp
Bộ nhớ chương trình là bộ nhớ Flash lập trình được
Trong quá trình gọi ngắt và chương trình con, địa chỉ trở về của bộ đếm lệnhhay bộ đếm chương trình PC được đưa vào ngăn xếp Ngăn xếp được cấp pháttrong bộ lưu dữ liệu SRAM nên kích thước chỉ bị giới hạn bởi dung lượng vàkhông gian đã sử dụng của bộ nhớ SRAM Tất cả chương trình của người dùngphải khởi tạo con trỏ ngăn xếp SP (Stack Pointer) khi bắt đầu chương trình (trướckhi chương trình con và ngắt được thực thi) Con trỏ ngăn xếp 16 bit SP được truycập để đọc/ghi trong không gian vào/ra Bộ nhớ SRAM có thể được truy cập dễdàng thông qua 5 chế độ định địa chỉ được cung cấp trong kiến trúc AVR
Khối ngắt mềm dẻo có các thanh ghi điều khiển trong không gian vào ra vàmột bit cho phép ngắt toàn cục trong thanh ghi trạng thái Mỗi ngắt đều có mộtvector ngắt riêng Các ngắt có thứ tự ưu tiên tương ứng với thứ tự vector ngắt củachúng, địa chỉ của vector ngắt càng thấp thì thứ tự ưu tiên càng cao
4.2.2 Các thanh ghi đa dụng
Tất cả các bộ vi điều khiển AVR đều có 32 thanh ghi đa năng Một số trongcác thanh ghi này còn có các chức năng bổ xung Tất cả thanh ghi được đặt tên từR0 đến R31, tệp thanh ghi được tách thành hai phần, mỗi phần có 16 thanh ghiđánh số từ R0 đến R15 và R16 đến R31 Tất cả các lệnh thao tác trên các thanh ghiđều có thể truy cập trực tiếp và truy cập trong chu trình đơn đến tất cả các thanhghi, nhưng có một ngoại lệ là các lệnh SBCI, SUBI, CPI, ANDI và ORI cũng như
WI, các lệnh này chỉ tác động đến các thanh ghi từ R16 đến R31
Các thanh ghi R0 và R26 đến R31 có các chức năng bổ sung Thanh ghi R0được sử dụng trong các lệnh nạp bộ nhớ chương trình LPM (Load ProgramMemory), trong khi các thanh ghi R26 đến R31 được sử dụng làm các thanh ghi
Trang 6con trỏ như trong hình minh họa bên dưới Các thanh ghi con trỏ này được sử dụngtrong nhiều lệnh gián tiếp trong thanh ghi
Hình 4.3 Tập thanh ghi của vi điều khiển AVR 4.2.3 Cổng ra vào
Tất cả các vi điều khiển AVR đều có một lượng lớn các cổng vào ra nằm trongkhoảng 3 bit trên vi điều khiển loại 90S2313 đến 48 bit Mega103 Tất cả các cổngvào/ra của vi điều khiển AVR đều chịu được dòng điện đến 20mA nên rất thíchhợp với việc điều khiển trực tiếp các led vì không cần đến các mạch đệm bổ sung Tất cả các cổng vào/ra đều có 3 địa chỉ vào/ra đi kèm với chúng, ba địa chỉ vào
ra đều cần được đặt cấu hình cho các bít riêng biệt thành lối vào hoặc thành lối ra,địa chỉ khác được cần đến để xuất dữ liệu và địa chỉ thứ 3 dùng để đọc dữ liệu về(lối vào)
Các cổng được đánh số DDRx, PORTx, PINx cho một cổng x cho trước
Để đọc dữ liệu của phần lối vào của một cổng, ta sử dụng thanh ghi PINx Thanh ghi PINx được nối tiếp với chân của cổng Chân của cổng có thể cấp tínhiệu để duy trì trạng thái theo mức điện áp cao (pull up) bên trong bằng cách ghigiá trị “1” vào bit cổng ở vị trí PORTx Các điện trở pull up có giá trị 30kΩ đến
Trang 7150kΩ Giá trị tương úng của dòng điện là 160 μm A đến 33μm A
Bộ nhớ SRAM cũng được sử dụng cho ngăn xếp, thời gian truy nhập vào bộ nhớSRAM bằng 2 chu kì đồng hồ
Giao tiếp với bộ nhớ SRAM ngoài
Trên các bộ vi điều khiển AVR cỡ lớn đều có khả năng kết nối với bộ nhớSRAM ở bên ngoài Để cho phép truy nhập bộ nhớ SRAM ngoài trên PortA vàPortC của các bộ điều khiển cũng như tín hiệu ALE dùng cho việc phân kênh địachỉ/dữ liệu, bit SRE (bit 7) trong thanh ghi MCUCR được đặt lên “1” Thời giantruy nhập mặc định đối với quá trình nhập lên SRAM ngoài là bằng 3 chu kì đồng
hồ Thời gian này có thể làm tăng lên 4 chu kì đồng hồ bằng cách thiết lập bit SRW
Trang 8(bit6) trong thanh ghi MCUCR Hình sau minh họa chu trình truy nhập mở rộngvới một trạng thái chờ bổ sung thêm
Hình 4.5 Kết nối SRAM ngoài với bộ vi điều khiển
4.2.5 Cấu trúc ngắt
Ngắt là một cơ cấu điều khiển dòng lệnh, cơ cấu này được thiết kế trên hầu hếtcác bộ vi điều khiển Trong quá trình giao tiếp của hệ thống bộ vi xử lý với thế giớibên ngoài, nhiều sự việc xảy ra theo cách không đồng bộ, điều này gây khó khăncho bộ xử lý khi mà phải kiểm tra tất cả các thiết bị để giám sát sự di chuyển của
dữ liệu Ngược lại, sẽ trở nên tốt hơn nếu các thiết bị này có thể loan báo sự đếnnơi của dữ liệu Đây là cả những gì mà cơ cấu ngắt phải thực hiện Thiết bị ngoại vi
sẽ ngắt việc thực thi chương trình chính và bộ xử lý tạm ngừng việc thực thichương trình bình thường để kiểm tra nguồn ngắt và thực hiện những thao tác đápứng cần thiết Sau khi đã hoàn thành những thao tác cần thiết, việc thực thi chươngtrình đã bị ngắt sẽ tiếp tục Chương trình ngắt chỉ đơn giản giống hệt như mộtchương trình con chỉ ngoại trừ một đặc điểm là việc thực thi của đoạn chương trìnhngắt này không bị bộ xử lý chặn trước là sẽ xuất hiện vào thời điểm cụ thể nào
Bộ vi điều khiện AVR có rất nhiều cấu trúc ngắt Khả năng ngắt đã được chucấp cho hầu hết các thiết bị ngoại vi sao cho chương trình chính không cần phảithường xuyên kiểm tra các thiết bị này
Trang 91 Thiết bị ngoại vi ngắt bộ xử lý
2 Việc thực thi lệnh hiện tại được hoàn thành
3 Địa chỉ của lệnh tiếp theo được lưu trữ trên ngăn xếp (thuộc phần cứng hoặcphần mềm)
4 Địa chỉ ISR (đoạn chương trình ngắt) được nạp vào bộ đếm chương trình
5 Bộ xử lý ISR
6 Việc hoàn thành các thao tác thực thi ISR được chỉ báo bằng lệnh RETI
7 Bộ xử lý nạp bộ đếm chương trình với giá trị được lưu trữ trên ngăn xếp vàviệc thực thi chương trình bình thường lại được tiếp tục
4.2.6 Bộ so sánh analog
Bộ so sánh analog so sánh các giá trị điện áp lối vào, cụ thể là ở lối vào AINO(AC+) và AIN1 (AC-) với nhau Nếu như điện áp ở lối vào AIN0 lớn hơn AIN1 thìlối ra của bộ so sánh analog ACO (Analog Computer Output) được đặt lên mức 1 Lối ra này có thể cho bộ Timer/Counter 1 để trigger xóa ngắt bộ so sánh analog
Hình 4.6 Sơ đồ khối của bộ so sánh Analog
Bộ so sánh analog được điều khiển thông qua thanh ghi điều khiển và trạngthái so sánh analog, thường viết tắt là ACSR, tại địa chỉ $08 trong vùng địa chỉ I/Ohoặc địa chỉ nhớ $28 trong vùng địa chỉ nhớ dữ liệu
Trang 10Bảng 4.1 Sắp xếp các chân của bộ so sánh Analog
4.2.7 Bộ biến đổi A/D bên trong
Các vi điều khiển AVR loại AT90S4434/8535 và Atmega 103/603 có một bộ biến đổi ADC với độ phân giải là 10 bit
Ngoài bộ ADC còn có bộ dồn kênh lối vào, mỗi lối có thể được dẫn riêng lẻ tới bộhiển thị ADC
Trang 11Hình 4.7 Sơ đồ khối bộ biến đổi ADC Bảng 4.2 Các thanh ghi điều khiển bộ biến đổi ADC
Thanh ghi điều khiển bộ dồn kênh ADC
Trang 12Thanh ghi dữ liệu ADC (HIGH)
- Quá trình biến đổi được người dùng khởi động
- Quá trình biến đổi diễn ra liên tục
Bảng 4.3 Sự sắp xếp các chân lối vào của bộ biếm đổi ADC
Tín hiệu AT90S8535/4434 ADC0
ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
Việc kết thúc quá trình biến đổi nghĩa là thời điểm mà một tín hiệu analog đãđược số hóa và sẵn sàng chờ xử lý tiếp tục, sẽ được báo hiệu qua một cờ trongthanh ghi trạng thái ADC (ADCSR) Trong thanh ghi ADCSR này người dùng cóthể lựa chọn một trong hai chế độ Kết quả của quá trình biến đổi A/D được đặt ởcác thanh ghi ADCH (bit 8 và 9) và ADCL (bit 0 đến 7)
4.2.8 Bộ định thời watchdog bên trong
Bộ định thời Watchdog là bộ định thời điều khiển được và được sử dụng làmthiết bị đánh thức trong trường hợp phần mềm bị rơi vào một hoặc một số vòng lặp
Trang 13vô tận hoặc trong trường hợp việc thực thi chương trình bị mắc lỗi Bộ định thờiwatchdog có một lối ra, có khả năng đặt lại bộ điều khiển Hình bên dưới
Mạch định thời watchdog timer được giữ nhịp từ một bộ dao động RC riêngbiệt trên chip Bằng cách điều khiển mạch chia tần số timer, khoảng thời gian resetmạch Watchdog có thể điều chỉnh như hình minh họa trong bảng sau các khoảng reset,mạch Watchdog cũng phụ thuộc vào điện áp nguồn nuôi
Hình 4.8 Sơ đồ khối của bộ định thời Watchdog
Chế độ hoạt động tiết kiệm năng lượng:
Bộ vi xử lý AVR có nhiều khả năng làm giảm năng lượng tiêu thụ để chuyểnsang trạng thái ngủ (sleep mode), bit SE trong MCUCR (mở thanh ghi điều khiển
bộ xử lý) phải được đặt lên “1”, một lệnh sleep cần phải được thực thi Nếu mộtngắt đã được cho phép xuất hiện trong khi MCU đang ở trạng thái ngủ, thì MCU sẽthức dậy thực thi đoạn chương trình (routine) ngắt, và lại tiếp tục thực thi từ lệnh
kế tiếp theo lệnh sleep Nội dung của tập thanh ghi, SRAM, và bộ nhớ I/O vẫnđược giữ nguyên Nếu một tín hiệu reset xuất hiện trong trạng thái ngủ thì MCU sẽthức dậy và thực thi từ vector reset
Khi SM bị xóa về không thì lệnh sleep bắt buộc MCU chuyển sang chế độnghỉ, làm ngưng hoạt động của CPU nhưng cho phép bộ Timer/Counter Watchdog
và ngắt hệ thống tiếp tục hoạt động Đặc tính này cho phép MCU đánh thức và ngắtđược trigger từ bên ngoài cũng như ngắt bên trong giống như ngắt tràn bộ định thời
Trang 14và đặt lại Watchdog Nếu như sự đánh thức từ ngắt bộ so sánh analog không đượcyêu cầu, thì bộ so sánh analog có thể bị ngắt nguồn nuôi bằng cách đặt bit ACDvào thanh ghi điều khiển và trạng thái analog ACSR Biện pháp này làm giảm dòngtiêu thụ trong chế độ nghỉ
Khi MCU bị đánh thức khỏi chế độ nghỉ, đơn vị CPU khởi động chương trìnhchấp hành ngay lập tức
Khi bit SM được đặt lên “1”, lệnh sleep bắt buộc MCU chuyển sang chế độ tiếtkiệm năng lượng hay giảm dòng tiêu thụ Trong chế độ này bộ dao động ngoài bịngưng hoạt động, trong khi các ngắt ngoài và Watchdog (nếu đang ở trạng thái chophép) hoạt động Chỉ thao tác đặt lại (reset) bên ngoài
Thao tác đặt lại Watchdog (nếu đang ở trạng thái cho phép hoạt động) hoặcngắt theo mức ngoài lên INT0 hoặc INT1 mới có thể đánh thức MCU Chú ý rằngmột khi ngắt trigger theo nức được sử dụng cho việc đánh thức khỏi trạng thái tiếtkiệm năng lượng thì mức thấp hơn cần năng lượng giữ trong khoảng thời gian dàihơn thời gian làm trễ dài nhất (Time out) đối với thao tác reset TOUT Nếu khôngthì thiết bị sẽ không thức dậy
4.3 Giới thiệu họ vi điều khiển Atmega 16
4.3.1 Đặc điểm
Atmega16 là bộ vi điều khiển RISC 8 bit tiêu thụ ít năng lượng dựa trên kiếntrúc RISC AVR Bằng việc thực hiện các lệnh mạnh trong một chu kì xung nhịp,Atmega16 đạt đên tốc độ xử lý lệnh lên đến 1 triệu lệnh/giây ở tần số 1MHz Viđiều khiển này còn cho phép người thiết kế hệ thống tối ưu hóa mức độ tiêu thụnăng lượng mà vẫn đảm bảo tốc độ xử lý
Phần cốt lỏi của AVR kết hợp tập lệnh phong phú về số lượng với 32 thanh ghilàm việc đa năng Toàn bộ 32 thanh ghi đều được nối với ALU cho truy cập haithanh ghi độc lập bằng một lệnh đơn trong một chu kì xung nhịp Kiến trúc đạt tốc
độ xủ lý nhanh gấp 10 lần so với vi điều khiển CISC (Complex Instruction SetComputer ) thông thường