+Đây là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết những bài toán điều khiển trên nền vi xử lý. +Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn trong việc thay thế và sửa chữa hệ thống lúc cần. +Giá thành của dòng Vi Điều Khiển này khá phải chăng +Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống.
Trang 1TÌM HIỂU VỀ AVR I.Tổng quan về AVR :
1 Giới thiệu AVR:
+Đây là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết những bài toán điều khiển trên nền vi xử lý
+Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn trong việc thay thế và sửa chữa hệ thống lúc cần
+Giá thành của dòng Vi Điều Khiển này khá phải chăng
+Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống
Sơ đồ khối của vi điều khiển:
Trang 22.Sơ lược về vi điều khỉển:
Đây là lọai vi điều khiển 8 bit,các lệnh được xử lý nhanh hơn,tiêu thụ năng lượng thấp
- Atmega có cấu trúc RISC với:
+131 lệnh,hầu hết được thực thi trong 1 chu kì xung nhịp
+32x8 thanh ghi đa dụng
+Full static operation
+Tốc độ làm việc 16MPIS,với thạch anh 16MHz
+On_chip 2 cycle Multiplier
-Bộ nhớ:
+16 KB ISP Flash với khả năng 10.000lần ghi/xóa
+512Byte EEROM
+1KB SRAM ngọai
Trang 3-Giao tiếp JTAG:
+Khả năng quét toàn diện theo chuẩn JTAG
+Hỗ trợ khả năng Debug on-chip
+Hỗ trợ lập trình Flash,EEROM,fuse…
+Lock bit qua giao tiếp JTAG
-Ngọai vi:
+2 timer/counter 8 bit với các mode :so sánh và chia tần số
+1 timer/counter 16 bit với các mode:so sánh,chia tần số,capture,PWM
+1 timer thời gian thực(Real time clock) với bộ dao động riêng biệt
+4 kênh PWM(họăc nhiều hơn trong các VĐK khác thuộc họ này)
+8 kênh biến đổi ADC 10bit
+Hỗ trợ giao tiếp I2C
+Bộ giao giao tiếp nối tiếp lập trình được USART
+Giao tiếp SPI
+Watch_dog timer với bộ dao động on-chip riêng biệt
-Những thuộc tính đặc biệt::
+Power On reset và Brown-out detection
+chế độ hiệu chỉnh bộ sai số cho bộ dao động RC On-chip
+Các chế độ ngắt ngoài và trong đa dạng
+6 mode sleep:Idle,ADC noise reduction,tiết kiệm năng lượng,power-down,
standby,extended standby
-I/O port:
+32 chân I/O(Atmega16) và 21 chân I/O (Atmega8) lập trình được
+vỏ 40 chân (Atmega16) ,28 chân(Atmega8),64 chân(AT90can128);
Đều có 3 địa chỉ vào ra đi kèm, địa chỉ vào ra được cần đến để đặt cấu hình cho các bit riêng biệt thành lối vào hoặc thành lối ra; địa chỉ khác được cần đến để xuất ra dữ liệu tới các bit (hoặc tất cả) được đặt cấu hình thành lối ra và địa chỉ thứ 3 được cần đến
để đọc dữ liệu từ các chân (hoặc tất cả) được cấu hình thành lối vào
-Nguồn cấp:
2,7->5.5 V với ATmega16L
4.5->5.5V với ATmega16H
-Tiêu hao năng lượng:
+Khi họat động tiêu thụ dòng 1,1mA
+Ở mode Idle tiêu thụ dòng 0.35mA
+Ở chế độ Power_down tiêu thụ dòng nhỏ hơn 1uA
-Đây là những chức năng cơ bản thường thấy trong các Vi điều khiển AVR,ngoài ra trongcác vi điều khiển khác thuộc dòng vi điều khiển này thì thường được hỗ trợ thêm những chức năng đặc biệt.Ví dụ AT90can128 hỗ trợ thêm bộ giao tiếp mạng Can bus on-chip
3 Các phần mềm lập trình cho AVR:
Trang 4+ AVRStuido (free), Code Vision Các phần mềm này có hỗ trợ phần nạp và debug on chip
+ Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic800
II Vi điều khiển AVR AT90S8535 :
Vi điều khiển AT90S8535 là loại có kiến trúc RISC(Reduced Intruction Set
Computer) phức tạp Đây là kiến trúc phổ biến của các bộ vi điều khiển hiện đại Có chỉ tiêu chất lượng cao và tiêu thụ năng lượng ít, nhiều bộ phận ngoại vi được thiết
kế ngay trên chip.
AT90S8535 còn nổi bật với cấu trúc Hardvard cải tiến là cấu trúc có bộ nhớ chương trình
và bộ nhớ dữ liệu riêng Bên trong gồm có:
+ 8 kbyte Ram Flash với giao diện nối tiếp SPI giúp lập trình được ngay trên hệ thống, chịu được khoảng 100000 lần ghi/xoá
+ 118 lệnh mạnh, hầu hết được thực hiện trong một chu kỳ xung nhịp
+ Bộ nhớ EEPROM 512 bytes
+ Bộ nhớ SRAM bên trong 512 bytes
+ Bộ chuyển đổi ADC 8 kênh, 10 bit
+ 32x8 thanh ghi làm việc đa năng
+ Bộ đếm thời gian thực với bộ dao động và chế độ đếm tách biệt
+ Hai bộ đếm/định thời 8 bit với chế độ so sánh và chia tần số tách biệt
+ Một bộ đếm/định thời 16 bit với chế độ so sánh, chia tần số tách biệt và chế độ bắt mẫu
1.Kiến trúc RISC của AT90S8535:
Trang 52.Cấu tạo chân của AT90S8535 :
Trang 63.Tổ chức vùng nhớ AVR AT90S8535 :
Các bộ vi xử lí AVR cĩ cấu trúc Harvard nghĩa là cĩ bộ nhớ chương trình và bộ nhớ dữ
liệu riêng
Bộ
nhớ chương trình là loại bộ nhớ Flash, 16 bit, cĩ dung lượng 8Kbyte Bộ nhớ chương
trình được truy nhập theo từng chu kỳ đồng hồ và một lệnh được ghi vào thanh ghi lệnh
Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ, cịn chứa các vectơ ngắt ở đầu địa
chỉ(xem phần ngắt) Chương trình hiện tại sẽ bắt đầu ở phía bên kia vùng cho các vectơ
ngắt
Bộ nhớ dữ liệu: cĩ 4 vùng khác nhau
+ Vùng tập thanh ghi: gồm 32 thanh ghi cĩ độ rộng 8 bit
+ Vùng các thanh ghi vào ra: gồm 64 thanh ghi vào ra, mỗi thanh ghi cĩ độ rộng 8 bit
Các thanh ghi này thực chất là một phần của bộ nhớ SRAM trên chip và cũng cĩ thể được
truy nhập như bộ nhớ SRAM cĩ địa chỉ từ $20 -> $5F hoặc như các thanh ghi I/O cĩ địa
chỉ từ $00 -> $3F Hầu hết các thanh ghi này được trao đổi như các thanh ghi I/O chứ
khơng phải như SRAM
+ Vùng nhớ SRAM bên trong(RAM đa dụng): gồm 512 byte Bộ nhớ SRAM sử dụng
cho ngăn xếp cũng như để lưu trữ các biến
+ Vùng EEPROM: gồm 512 byte và được truy nhập theo bản đồ bộ nhớ tách biệt Địa chỉ
bắt đầu của bộ nhớ EEPROM là $0000 Bộ nhớ này cĩ thể được đọc/ghi bằng phần mềm
32 thanh ghi
đa mục đích
64 thanh ghi Input/Output
SRAM nội (512 x 8)
EEPRROM (512 x 8)
Bộ nhớ chương trình Bộ nhớ dữ liệu Bộ nhớ dữ liệu
Bộ nhớ Flash(4K x 16)
Trang 7Hoạt động của các bộ phận trên AVR AT90S8535
+ Bộ nhớ EEPROM: được truy nhập qua các thanh ghi truy nhập EEPROM, cụ thể là: thanh ghi địa chỉ EEPROM [EEAR], thanh ghi dữ liệu EEPROM [EEDR] và thanh ghi điều khiển EEPROM [EECR], Để truy nhập EEPROM ta phải trải qua các trình tự sau: cho địa chỉ cần truy nhập (vào thanh ghi địa chỉ) -> đọc hay ghi (vào thanh ghi điều khiển) -> dữ liệu cần đọc hoặc ghi (qua thanh ghi dữ liệu)
+ Bộ nhớ SRAM: được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu trực tiếp hoặc gián tiếp qua các con trỏ X,Y,Z Thời gian truy nhập bộ nhớ SRAM bằng 2 chu
Trang 8Quá trình truyền dữ liệu được khởi động bằng cách viết dữ liệu cần truyền đến
thanh ghi dữ liệu I/O của bộ UART, gọi là thanh ghi UDR Dữ liệu được truyền từ thanh ghi UDR đến thanh ghi dịch phát khi :
Một kí tự mới được viết đến UDR sau khi bit stop của kí tự trước đó đã được
dịch ra ngoài Thanh ghi dịch sẽ được nạp giá trị mới ngay lập tức
Một kí tự mới được viết đến UDR trước khi bit stop từ kí tự trước đó được dịch
ra ngoài Thanh ghi dịch sẽ được nạp khi bit stop của kí tự hiện đang truyền
được dịch ra ngoài
Nếu thanh ghi dịch phát 10(11)-bit là rỗng, dữ liệu được truyền từ thanh ghi
UDR đến thanh ghi dịch Khi đó Bit cờ thanh ghi dữ liệu rỗng UDRE(UART Data
Register Empty) trong thanh ghi trạng thái UART, USR (UART Status Register) được set Khi bit này được set (bằng 1) thì UART sẵn sàng nhận kí tự tiếp theo Vào cùng thời điểm dữ liệu được truyền từ UDR đến thanh ghi dịch 10(11)-bit, bit 0 của thanh
ghi dịch được xóa (bit start) và bit 9 hoặc 10 được set (bit stop) Nếu ta muốn truyền
dữ liệu 9 bit (bit dữ liệu 9 có thể là bit kiểm tra chẵn /lẻ), thì bit CHR9 trong thanh ghi điều khiển UART: UCR (UART control register) phải được set Và bit TXB8 trong thanh ghi UCR được truyền đến bit 9 trong thanh ghi dịch phát Như vậy bit dữ liệu 9 phải được chứa trong bit TXB8 trong thanh ghi UCR.
Theo nhịp đồng hồ tốc độ baud cung cấp cho thanh ghi dịch phát, bit start được
dịch ra ngoài đầu tiên trên chân TXD Theo sau là các bit dữ liệu, trong đó bit có
trọng số thấp sẽ được dịch ra trước.Và cuối cùng là bit stop được dịch ra Khi bit stop được dịch ra ngoài, thanh ghi dịch sẽ được nạp giá trị mới nếu như có bất kỳ dữ liệu
nào được viết đến thanh ghi UDR trong suốt thời gian truyền Trong thời gian nạp giá trị (load), bit UDRE được set (lên 1) Nếu không có dữ liệu mới trong thanh ghi UDR để truyền đi khi bit stop được dịch ra ngoài, cờ UDRE sẽ duy trì trạng thái set cho đến khi thanh ghi UDR được viết giá trị một lần nữa Khi không có dữ liệu mới được ghi và bit stop đã ở trên chân TXD đúng một chiều dài bit, cờ phát hòan thành TXC (TX Complete) trong thanh ghi USR được set.
Bit TXEN trong thanh ghi UCR khi set (bằng1) thì bộ phát UART mới được cho phép Khi bit này bị xóa (trạng thái mặc định) thì bộ phát UART không được cho phép và chân TXD chỉ có thể sử dụng như mục đích I/O thông thường Khi bit TXEN được set, bộ phát UART sẽ được kết nối đến chân TXD (PD1), và chân TXD trở thành chân ngõ ra, bất kể sự thiết lập hướng của bit DDD1 trong thanh ghi DDRD.
Trang 9b.Bộ nhận UART:
Sơ đồ khối:
Bộ nhận dữ liệu chứa khối logic front-end có nhiệm vụ lấy mẫu tín hiệu trên
chân RXD với tần số lấy mẫu bằng 16 lần tốc độ baud Khi đường truyền ở trạng thái
nghỉ (mức logic 1), nếu có sự chuyển về "0" thì nó được xem là cạnh xuống của một bit start và tuần tự phát hiện bit start được khởi động Vì bộ nhận chứa khối logic front-end lấy mẫu ở tần số bằng 16 lần tốc độ baud nên một bit sẽ được lấy mẫu 16 lần Trong trường hợp này, khi có sự chuyển mức từ trạng thái nghỉ của đường truyền xuống mức "0", thì tuần tự phát hiện bit start sẽ là : nếu trong ba lần lấy mẫu 8, 9 và
10 của bit start mà hai (hoặc ba) lần là mức logic "1", thì bit start này bị lọai bỏ và được xem như một tín hiệu nhiễu, bộ nhận bắt đầu tìm sự chuyển trạng thái từ 1-đến-0( 1 là trạng thái sau của bit stop chớ không phải là bit dữ liệu) tiếp theo
Trang 10Tuy nhiên, khi bit start được xem là hợp lệ, việc lấy mẫu của các bit dữ liệu theo sau bit start sẽ được thực hiện Và các bit này cũng được lấy mẫu tại ba mẫu 8, 9 và 10 Nếu 2 hoặc ba lần giá trị logic là giống nhau thì giá trị đó được xem là giá trị hợp lý Tất cả các bit được dịch vào thanh ghi dịch của bộ truyền giống như chúng đã được lấy mẫu.
Khi bit stop được đưa vào bộ nhận, thì hai hoặc ba trong 3 lần lấy mẫu phải là 1 để nhận bit stop hợp lệ Nếu trong ba lần lấy mẫu, mà nhiều hơn hai lần là mức logic
"0", thì cờ lỗi khung truyền FE (Framing Error) trong thanh ghi trạng thái UART(
USR) được set (bằng 1) Trước khi đọc dữ liệu từ thanh ghi dữ liệu UART (UDR),
người sử dụng nên kiểm tra bit FE để phát hiện lỗi khung truyền
Có hoặc không có giá trị bit stop được phát hiện là hợp lệ thì dữ liệu cũng sẽ
được truyền đến UDR và cờ nhận hoàn thành RXC được set Thanh ghi UDR thực
chất là hai thanh ghi tách biệt về mặt vật lý, một cho dữ liệu truyền và một cho dữ
liệu nhận Khi thanh ghi UDR được đọc thì thanh ghi dữ liệu nhận (the Receive Data register) được truy cập, ngược lại, khi thanh ghi UDR được ghi thì thanh ghi dữ liệu
phát (The transmit data register) được truy cập
Nếu ta muốn truyền dữ liệu 9 bit, thì bit CHR9 trong thanh ghi điều khiển
UART (UCR) phải được set, và bit RXB8 trong thanh ghi USR sẽ được nạp vào bit 9
trong thanh ghi dịch phát khi dữ liệu được truyền đến thanh ghi UDR Bit dữ liệu thứ 9 này sẽ được nhận tại bit RXB8 trong thanh ghi USC.
c.ĐIỀU KHIỂN UART :
Thanh ghi dữ liệu I/O UART : UDR (UART I/O Data Register)
Thanh ghi UDR thực chất là hai thanh ghi riêng lẻ về mặt vật lý nhưng cùng chia sẻ địa chỉ I/O giống nhau Khi viết đến thanh ghi này thì thanh ghi dữ liệu truyền
Trang 11UART được truy cập Còn khi đọc thanh ghi này thì thanh ghi dữ liệu nhận UART được truy cập.
Thanh ghi trạng thái UART : USR (UART Status Register)
Đây là thanh ghi chỉ cho phép sự truy cập đọc, cung cấp thông tin về trạng thái UART
Thanh ghi điều khiển UART: UCR (UART Control Register):
Thanh ghi tạo tốc độ baud : UBRR
Đây là thanh ghi 8 bit có thể đọc/viết và được sử dụng để tạo ra tốc độ baud cho UART như miêu tả trước đó
5.Bộ so sánh Analog :
Bộ so sánh Analog: so sánh các giá trị điện áp ở lối vào AIN0 (AC+) và AIN1 (AC-) với nhau Nếu như điện áp lối vào AIN0 lớn hơn AIN1 thì lối ra bộ so sánh Analog(AC0) được đặt lên mức “1” Lối ra này cĩ thể sử dụng cho bộ Timer/Counter 1 để Trigger hoặc xố ngắt bộ so sánh Analog
Trang 126.Bộ ADC:
Bộ biến đổi tương tự sang số (ADC): với độ phân giải 10 bit/1 kênh Bộ biến đổi ADC cĩ bộ dồn kênh 8 lối vào, mỗi lối cĩ thể dẫn riêng lẻ tới ADC Thời gian thực hiện cho tất cả các chuyển đổi từ 65 ms đến 260 ms Bộ biến đổi ADC được thực hiện qua 4 thanh ghi ADMUX, ADCSR, ADCH, ADCL và cĩ thể hoạt động trong 2 chế độ: quá trình biến đổi được người dùng khởi động (Single Conversion Mode), quá trình biến đổi diễn ra liên tục (Free Running)
7.Bộ định thời WATCHDOG TIMER :
Bộ định thời Watchdog được người dùng sử dụng nhiều nhất với mục đích chống
“treo”cho vi điều khiển Trong quá trình lập trình có những tình huống ta không đoán trước được các sự kiện, ta đã lập trình để vi điều khiển chờ đợi một sự kiện nào đó màthực tế sự kiện đó không xảy ra hoặc ta lập trình bị lỗi vòng lặp hoặc nhiều lí do khác khiến cho hệ thống bị treo, không hoạt động Khi đó bộ định thời watchdog có lẽ là công cụ hữu hiệu để giải quyết trường hợp này Bộ định thời watchdog sử dụng một
Trang 13bộ dao động riêng trên chip Bằng cách điều khiển bộ chia tần ta có thể có được các khoảng thời gian reset watchdog khác nhau Một cách đơn giản để hiểu về lập trình watchdog là : ta định một khoảng thời để chuỗi các sự kiện diễn ra bình thường là tn,
ta chọn thời gian reset watchdog là tw > tn Trình tự như sau :
+ Cho phép watch dog hoạt động với khoảng thời gian reset là tW
+ Chuỗi các công việc, sự kiện
+ Khóa Watchdog lại
Rõ ràng nếu các công việc sự kiện diễn ra bình thường thì tn < tw và watchdog bị khóa,reset do watchdog không xảy ra Còn nếu các công việc, sự kiện bị “trục trặc” rơi vàovòng đợi hoặc lặp thì khi tn vượt quá tW , watchdog không bị khóa, reset xảy ra và vi điều khiển quay về trạng thái khởi tạo tại địa chỉ vector reset
Chú ý : Bộ dao động Watchdog trên chip phụ thuộc vào nguồn nuôi, do đó tuỳ
theo giá trị nguồn nuôi mà ta chọn giá trị thích hợp
Lệnh WDR (Watchdog reset) nên luôn luôn được thi hành trước khi Watchdog được cho phép hoạt động Điều này đảm bảo rằng chu kỳ reset sẽ phù hợp các thiết lập của bộ chia tần cho watchdog Bởi vì nếu bộ Watchdog được cho phép
“chạy” mà không được reset trước (dùng lệnh WDR) thì rất có thể nó sẽ đếm từ một số không phải là zero Để tránh các Reset không mong muốn do Watchdog, thì bộ định thời Watchdog nên được cấm (khoá) hoặc được reset (dùng lệnh WDR) trước khi
ta chọn giá trị bộ chia cho watchdog
8.Bộ TIMER/COUNTER:
Cấu tạo và lý thuyết chung :
Vi điều khiển AT90S8535 có tất cả ba timer/counter khác nhau gồm : hai timer/counter 8 bit và một timer/counter 16 bit Timer/counter2 có thể được chọn nguồn clock không đồng bộ từ dao động bên ngoài Dao động này được tối ưu hoá khi sử dụng thạch anh đồng hồ 32.768 Khz, khi đó Timer/counter2 được sử dụng như một đồng hồ thời gian thực (RTC : real timer clock) Timer/counter 0 và 1 có bộ chia tần số riêng, nó có thể chia tần số gần như một bộ chia tần số 10bit Timer/counter 2 thì có một bộ chia riêng của nó Cả ba Timer/counter này có thể được sử dụng như một bộ định thời (timer) với nền xung clock bên trong của hệ thống hoặc có thể sử dụng như bộ đếm (counter) với nguồn xung kích (trigger) bên ngoài
Hoạt động của Timer/counter trong AT90S8535
+Hoạt động định thời
+So sánh ngõ ra
+Bắt sống ngõ vào
+Điều chế độ rộng xung