Tải bản đầy đủ (.doc) (55 trang)

43515194-bao-cao-đồ-an-đo-lường-2 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (909.74 KB, 55 trang )

LỜI NÓI ĐẦU
Ngày nay, khoa học kỹ thuật luôn không ngừng phát triển và đổi mới
từng ngày, từng giờ, tác động trực tiếp đến đời sống con người. Các hệ
thống điện tử đã tham gia vào công nghiệp làm tăng năng suất lao động,
giảm bớt sức lao động của con người. Có thể nói, điện tử là một trong những
nghành nghề phát triển mũi nhọn, có những bước tiến vượt bậc về công nghệ
cũng như ứng dụng trong cuộc sống.
Trong lĩnh vực sản xuất cũng như trong đời sống hàng ngày , việc đo
lường các đại lượng vật lý luôn đóng một vai trò quan trọng vì từ đó người
sử dụng có thể biết được các thông số mình đang làm việc và từ đó sẽ khống
chế và điều khiển chúng cho phù hợp với mụch đích của mình.
Hiện là sinh viên năm thứ 4 của trường Đại học Bách Khoa Hà Nội,
chúng em đã có những cái nhìn sâu hơn, tổng quát hơn về ngành mình đã lựa
chọn từ đó đã có thể thiết kế những bo mạch cụ thể có ứng dụng thực tế hơn
trong cuộc sống hàng ngày để sau khi ra trường có thể ứng dụng chúng
nhiều hơn vào thực tế.
Với mục đích tìm hiểu và thiết kệ một hệ thống đo lường, chúng em
đã chọn đề tài: “ Thiết kế một hệ thống đo lường cơ bản gồm đo nhiệt độ
sử dụng cảm biến nhiệt Ds18b20 và đo tốc độ động cơ sử dụng motor –
encoder” làm đề tài cho đồ án môn học của mình.
Mặc dù được sự chỉ dẫn tận tình của giảng viên hướng dẫn , chúng em
đã rất cố gắng nhưng khối lượng kiến thức và thời gian có hạn , sẽ không
tránh khỏi những thiếu sót mong thầy cô thông cảm. Chúng em mong được
đón nhận những ý kiến từ các thầy cô và các bạn để có thể tiếp tục mở rộng
hướng nghiên cứu cho đề tài của mình.
CHƯƠNG I
GIỚI THIỆU CHUNG VỀ BỘ VI ĐIỀU KHIỂN
GIỚI THIỆU CHUNG
Bộ vi điều khiển viết tắt là Micro – controller, là mạch tích hợp trên
một con chip và có thể lập trình được , dùng để điều khiển hoạt động của
một hệ thống . Theo các tập lệnh của nhà sản xuất , người sử dụng có thể lập


trình để vi điều khiển tiến hành đọc, giải mã, lưu trữ thông tin, xử lý thông
tin, và từ đó sẽ thực hiện một công việc của một cơ cấu nào đó.
Trong thiết bị điện , điện tử dân dụng , các bộ vi điều khiển điều
khiển hoạt động của TV, đầu đọc laser, điện thoại, lò vi song . Trong hệ
thống công nghiệp tự động, chúng được sử dụng trong Robot, dây truyền
băng tự động. Các hệ thống càng thông minh thì bộ vi điều khiển càng đóng
vai trò quan trọng.

I. GIỚI THIỆU TỔNG QUAN VỀ VI ĐIỀU KHIỂN ATMEGA 16
ATmega16 là vi điều khiển chuẩn CMOS 8 bit tiết kiệm năng lượng,
được chế tạo dựa trên cấu trúc AVR RISC (Reduced Instruction Set
Computer), đây là cấu trúc có tốc độ xử lý cao hơn nhiều so với cấu trúc
CISC (Complex Instruction Set Computer). Tần số hoạt động của vi điều
khiển AVR bằng với tần số của thạch anh, trong khi với họ vi điều khiển
theo cấu trúc CISC như họ 8051 thì tần số hoạt động bằng tần số thạch anh
chia cho 12. Hầu hết các lệnh được thực thi trong một chu kỳ xung nhịp, do
đó ATmega16 có thể đạt được tốc độ xử lý đến một triệu lệnh mỗi giây (với
tần số 1MHz). Đặc điểm này cho phép người thiết kế có thể tiết kiệm tối đa
mức độ tiêu thụ năng lượng mà vẫn đảm bảo tốc độ xử lý.
Sau đây là các đặc tính của ATmega16:
- Hiệu năng cao, tiêu thụ ít năng lượng.
- Kiến trúc RISC:
o 131 lệnh – hầu hết các lệnh thực thi trong một chu kỳ máy.
o 32 thanh ghi 8 bit đa năng.
o Tốc độ thực hiện lên tới 16 triệu lệnh trong 1 giây (tần số
16MHz).
- Các bộ nhớ chương trình và bộ nhớ dữ liệu:
o 16Kbyte bộ nhớ Flash có khả năng tự lập trình trong hệ thống.
Có thể thực hiện được 1.000 lần ghi xóa.
o Vùng mã Boot tùy chọn với những bit khóa độc lập.

o Lập trình trong hệ thống bởi chương trình on-chip boot.
o Thao tác đọc ghi trong khi nghỉ.
o 512 Byte EEPROM.
Có thể thực hiện 100.000 lần ghi xóa.
o 1Kbyte SRAM nội.
o Lập trình khóa an toàn phần mềm.
- Ghép nối ngoại vi:
o 2 bộ định thời/bộ đếm 8 bit với bộ chia tần số độc lập và chế độ
so sánh.
o 1 bộ định thời/bộ đếm 16 bit với bộ chia tần số, chế độ so sánh
và chế độ bắt mẫu (Capture).
o Bộ đếm thời gian thực với bộ dao động độc lập.
o Bốn kênh PWM.
o Bộ ADC 8 kênh 10 bit.
o Bộ truyền dữ liệu đồng bộ/bất đồng bộ USART.
o Bộ truyền dữ liệu chuẩn SPI.
o Watchdog timer khả trình với bộ dao động nội riêng biệt.
o Bộ so sánh Analog.
- Các đặc điểm khác:
o Power-on Reset và phát hiện Brown-out khả trình.
o Bộ tạo dao động nội.
o Nguồn ngắt nội và ngoại.
o 6 chế độ ngủ: Idle, ADC noise reduction, Power-save, Power-
down, Standby và Extended Standby.
- Ngõ vào/ra: có 32 ngõ vào ra.
- Điện áp hoạt động:
o 2.7V – 5.5V đối với ATmega16L.
o 4.5V – 5.5V đối với ATmega16.
- Tần số hoạt động:
o 0 – 8MHz đối với ATmega16L.

o 0 – 16MHz đối với ATmega16.
2.2. Cấu trúc bên trong ATmega16:
Hình 2.1 – Sơ đồ cấu trúc bên trong Atnega16
Phần lõi AVR kết hợp tập lệnh phong phú với 32 thanh ghi đa dụng.
Toàn bộ 32 thanh ghi này đều kết nối trực tiếp với ALU (Arithmetic Logic
Unit), cho phép truy cập 2 thanh ghi độc lập với 1 lệnh thực thi trong 1 chu
kỳ xung nhịp. Cấu trúc đạt được có tốc độ xử lý nhanh gấp 10 lần so với vi
điều khiển CISC thông thường.
Với các tính năng đã nêu trên, khi ở chế độ nghỉ (Idle), CPU vẫn cho
phép các chức năng khác hoạt động như: USART, giao tiếp 2 dây, chuyển
đổi A/D, SRAM, bộ đếm/bộ định thời, cổng SPI và các chế độ ngắt. Chế độ
Power-down lưu giữ nội dung các thanh ghi nhưng làm ngừng 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
reset phần cứng. Trong chế độ Power-save, đồng hồ đồng bộ tiếp tục chạy
cho phép chương trình có thể giữ được sự đồng bộ về thời gian nhưng các
thiết bị còn lại ở trong trạng thái 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, giảm
thiểu nhiễu khi ADC hoạt động. Ở chế độ Standby, bộ tạo dao động chạy
trong khi các thiết bị còn lại ở trạng thái ngủ. Những đặc điểm 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.
AVR đượ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 thông
qua giao diện SPI bởi bộ lập trình bộ nhớ cố định 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 diện nào để download chương trình ứng dụng trong bộ nhớ
Flash. 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, giúp tạo ra thao tác Read-While-Write
thực sự. Nhờ việc kết hợp một bộ 8bit RISC CPU với In-System Self-
Programmable Flash chỉ trong một chip, ATmega32 là một vi điều khiển
mạnh có thể cung cấp những 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. ATmega32 được hỗ trợ đầy đủ với
các công cụ hỗ trợ phát triển cũng như lập trình, bao gồm: trình biên dịch C,
macro assembler, mô phỏng/dò lỗi lập trình, mô phỏng mạch điện và các bộ
kit thí nghiệm.
2.3. Sơ đồ chân của ATmega16:
Hình 2.2 – Sơ đồ chân của ATmega16
- GND: chân nối mass.
- VCC: điện áp nguồn.
- Port A (PA0…PA7): ngõ vào/ra Port A.
Các chân Port A cũng là ngõ vào analog của bộ chuyển đổi A/D
Chân Chức năng
PA7 ADC7 (Ngõ vào ADC 7)
PA6 ADC6 (Ngõ vào ADC 6)
PA5 ADC5 (Ngõ vào ADC 5)
PA4 ADC4 (Ngõ vào ADC 4)
PA3 ADC3 (Ngõ vào ADC 3)
PA2 ADC2 (Ngõ vào ADC 2)
PA1 ADC1 (Ngõ vào ADC 1)
PA0 ADC0 (Ngõ vào ADC 0)
- Port B (PB0…PB7): ngõ vào/ra Port B.
Các chức năng khác của Port B:
Chân Chức năng
PB7 SCK (Chân Clock của SPI)
PB6 MISO (Master Input / Slave Output của SPI)
PB5 MOSI (Master Output / Slave Input của SPI)
PB4 SS (Ngõ vào chọn Slave của SPI)
PB3 AIN1 (Ngõ vào Negative của bộ so sánh analog).
OC0 (Ngõ ra so sánh của Timer/Counter 0).
PB2 AIN0 (Ngõ vào Possitive của bộ so sánh analog).
INT2 (Ngõ vào ngắt ngoài 2)

PB1 T1 (Ngõ vào của bộ đếm ngoài counter 1)
PB0 T0 (Ngõ vào của bộ đếm ngoài counter 0)
XCK (Chân I/O Clock của USART)
- Port C (PC0…PC7): ngõ vào/ra Port C.
Các chức năng khác của Port C:
Chân Chức năng
PC7 TOSC2 (Chân 2 bộ dao động của Timer)
PC6 TOSC1 (Chân 1 bộ dao động của Timer)
PC5 TDI (Chân data in Test JTAG)
PC4 TDO (Chân data out Test JTAG)
PC3 TMS (Chân chọn Mode Test JTAG)
PC2 TCK (Chân Clock Test JTAG)
PC1 SDA (Chân data I/O của giao thức Two-wire)
PC0 SCL (Chân clock của giao thức Two-wire)
- Port D (PD0…PD7): ngõ vào/ra Port D.
Các chức năng khác của Port D:
Chân Chức năng
PD7 OC2 (Ngõ ra so sánh của Timer/Counter2)
PD6 ICP1 (Chân bắt mẫu của Timer/Counter1)
PD5 OC1A (Ngõ ra so sánh A của Timer/Counter1)
PD4 OC1B (Ngõ ra so sánh B của Timer/Counter1)
PD3 INT1 (Ngõ vào ngắt ngoài 1)
PD2 INT0 (Ngõ vào ngắt ngoài 0)
PD1 TXD (Ngõ ra USART)
PD0 RXD (Ngõ vào USART)
- Reset: Chân ngõ vào. Khi đặt vào chân này điện áp mức thấp trong
thời gian xác định (xem trong datasheet) thì sẽ reset chương trình.
Nếu thời gian ngắn hơn thì việc reset không thành công.
- XTAL1: ngõ vào khuếch đại dao động đảo và cũng là ngõ vào mạch
tạo xung nội.

- XTAL2: ngõ ra của mạch khuếch đại dao động đảo.
- AVCC: là chân nguồn cấp cho Port A và bộ chuyển đổi A/D. Nên nối
chân này với chân VCC ngay cả khi không sử dụng ADC. Nếu dùng
ADC thì nên nối chân này với chân VCC qua 1 tụ lọc thông thấp.
- AREF: chân tham chiếu điện áp analog của bộ chuyển đổi A/D.
2.4. Bộ nhớ của Atmega16:
2.4.1. Bộ nhớ chương trình ISP Flash:
Vi điều khiển ATmega16 có bộ nhớ Flash tới 16Kbyte để lưu giữ
chương trình. Do tất cả các lệnh của AVR đều là 16 hoặc 32 bit nên bộ nhớ
Flash được tổ chức theo kiểu 8K x 16. Nhằm đảm bảo phần mềm được an
toàn, bộ nhớ chương trình Flash được chia thành 2 phần: phần chương trình
Boot (Boot Program Sector) và phần chương trình ứng dụng (Application
Program Sector).
Bộ nhớ Flash có thể ghi xóa được đến 1.000 lần. Bộ đếm chương trình
của ATmega16 có kích thước 13bit để ghi địa chỉ cho bộ nhớ chương trình
8K.
Bảng phân chia 2 phần của bộ nhớ:
Hình 2.3 – Sơ đồ phân chia bộ nhớ
2.4.2. Bộ nhớ dữ liệu SRAM:
Hình 2.4 – Sơ đồ địa chỉ bộ nhớ
Hình trên là địa chỉ của bộ nhớ dữ liệu của các thanh ghi R0 – R31, bộ
nhớ IO và bộ nhớ SRAM. 63 địa chỉ đầu là của các thanh ghi R và IO, còn
bộ nhớ SRAM chiếm 1024 địa chỉ còn lại.
2.4.3.Bộ nhớ dữ liệu EEPROM:
Vi điều khiển ATmega16 có bộ nhớ EEPROM với kích thước 512
byte. Nó được phân chia thành một khu vực riêng và có thể truy cập đến
từng byte. Bộ nhớ EEPROM có thể ghi xóa đến 100.000 lần.
2.5. Xung nhịp của hệ thống và việc lựa chọn xung nhịp:
Vi điều khiển ATmega16 có nhiều lựa chọn trong việc thiết lập xung
nhịp cho hệ thống. Xung nhịp có thể do mạch tạo dao động bên trong vi điều

khiển, cũng có thể do mạch dao động bên ngoài.
Hình 2.5 – Sơ đồ khối hệ thống xung nhịp
Việc lựa chọn nguồn xung nhịp được thực hiện thông qua quá trình thiết
lập các bit CKSEL3…0 (lựa chọn nguồn xung cũng như cả tần số của nguồn
xung).
Các nguồn xung CKSEL3…0
Extenal Crystal / Ceramic Resonator 1111 – 1010
External Low-frequency Crystal 1001
External RC Oscillator 1000 – 0101
Calibrated Internal RC Oscillator 0100 – 0001
External Clock 0000
Sau đây là một số cách kết nối với nguồn xung nhịp bên ngoài:
Kết nối với thạch anh Nguồn RC bên ngoài Nguồn xung clock bên
ngoài
Bảng 2.1 – Kết nối với nguồn xung bên ngoài
2.6. Giới thiệu về Timer/Counter của ATmega16:
2.6.1. Timer/Counter0:
Các chức năng chính:
- Kênh đếm so sánh đơn.
- Xóa giá trị timer khi đạt tới giá trị so sánh (Auto Reload).
- Chế độ PWM.
- Đếm sự kiện bên ngoài.
- Bộ chia tần số 10bit.
- Ngắt khi tràn hoặc tại giá trị so sánh.
Hình 2.6 – Sơ đồ khối của Timer/Counter0
Các chế độ hoạt động của Timer/Counter0:
- Chế độ bình thường.
- Chế độ xóa giá trị Timer khi đạt tới giá trị so sánh.
- Chế độ Fast PWM.
- Chế độ PWM.

Trong đề tài này, Timer/Counter0 được dùng để tạo xung PWM. Vì thế,
phần này chỉ đề cập đến chế độ hiệu chỉnh PWM của Timer/Counter0.
Chế độ hiệu chỉnh xung PWM giúp tạo ra dạng xung PWM với độ phân
giải cao. Chế độ này dựa trên hoạt động dual-slope (dạng hai sườn lên xuống
theo giá trị thanh ghi). Bộ đếm đếm liên tục từ giá trị BOTTOM đến MAX
rồi đếm từ MAX xuống BOTTOM. Nếu chọn ngõ ra dạng không đảo (non-
inverting), chân OC0 ở mức 0 tại giá trị so sánh giữa OCR0 với TCNT0 khi
đếm lên, và ở mức 1 tại giá trị so sánh khi đếm xuống. Nếu chọn ngõ ra dạng
đảo (inverting), chân OC0 sẽ hoạt động ngược lại. Chế độ hoạt động dual-
slope có tần số thấp hơn so với chế độ single-slope. Tuy nhiên, do đặc tính
đối xứng nên kiểu dual-slope thích hợp hơn cho các ứng dụng điều khiển
động cơ.
Độ phân giải của chế độ PWM này là 8bit. Bộ đếm sẽ tăng dần đến giá trị
MAX. Khi đạt tới MAX, bộ đếm sẽ đảo chiều và đếm xuống tới BOTTOM.
Như vậy, một chu kỳ của timer bằng thời gian giữa hai lần giá trị TCNT0
đạt MAX.
Hình 2.7 - Giản đồ thời gian của chế độ PWM
Cờ tràn TOV0 được set mỗi lần bộ đếm đạt tới giá trị BOTTOM. Khi
timer đạt tới giá trị này, ta có thể sử dụng để kích hoạt chương trình ngắt qua
cờ báo ngắt.
Xung PWM được đưa ra trên chân OC0. Việc thiết lập ngõ ra dạng đảo
(inverting) hay không đảo (non-inverting) được thực hiện qua hai bit
COM01 và COM00. Giá trị thực sự của OC0 chỉ có thể thấy được khi ta đặt
OC0 là ngõ ra.
Tần số của xung PWM được tính toán dựa vào công thức sau:
Trong đó, N là giá trị của bộ chia tần số (1, 8, 64, 256,1024).
Thanh ghi OCR0 sẽ đạt tới cực trị (cực đại hoặc cực tiểu) thay cho các
trường hợp đặc biệt khi phát ra dạng xung PWM. Trong chế độ không đảo,
nếu OCR0 được đặt giá trị BOTTOM, ngõ ra luôn ở mức thấp và nếu OCR0
được đặt giá trị MAX thì ngõ ra luôn ở mức cao. Đối với chế độ đảo thì hoạt

động ngược lại.
2.6.2. Timer/Counter1:
Các chức năng chính:
- Thiết kế 16bit thực sự (cho phép tạo ra xung PWM 16bit).
- 2 bộ so sánh ngõ ra độc lập.
- 1 bộ bắt mẫu từ ngõ vào.
- 1 bộ giảm nhiễu ngõ vào.
- Chế độ xóa timer khi đạt tới giá trị so sánh.
- Tạo tần số.
- Tạo xung PWM có thể thay đổi giá trị.
- Đếm sự kiện ngoài.
- 4 nguồn ngắt độc lập (TOV1, OCF1A, OCF1B và ICF1).
Hình 2.8 - Sơ đồ khối của timer/counter1
Các chế độ hoạt động:
- Chế độ bình thường.
- Chế độ xóa timer khi đạt tới giá trị so sánh.
- Chế độ Fast PWM.
- Chế độ PWM (Phase Correct PWM).
- Chế độ Phase and Frequency Correct PWM.
- Giới thiệu về chế độ đếm sự kiện ngoài:
- Chân ngõ vào T1: tác động cạnh lên hoặc xuống (tùy lựa chọn).
Trong chế độ này, bộ đếm luôn đếm lên, khi đạt tới giá trị MAX
(0xFFFF) thì tự động reset về BOTTOM (0x0000).
2.6.3. Giới thiệu timer/counter2:
Các chức năng chính:
- Kênh đếm so sánh đơn.
- Xóa timer khi đạt tới giá trị so sánh (Auto Reload).
- Chế độ PWM.
- Đếm sự kiện bên ngoài.
- Bộ chia tần số 10bit.

- Ngắt khi tràn hoặc tại giá trị so sánh.
Hình 2.9 - Sơ đồ khối của timer/counter2
Các chế độ hoạt động của Timer/Counter2:
- Chế độ bình thường.
- Chế độ xóa timer khi đạt tới giá trị so sánh.
- Chế độ Fast PWM.
- Chế độ PWM.
Giới thiệu chế độ xóa giá trị Timer khi đạt tới giá trị so sánh (CTC):
Trong chế độ này, thanh ghi OCR2 được dùng để thiết lập độ phân giải
cho bộ đếm. Khi TCNT đạt tới giá trị bằng với OCR2, bộ đếm được xóa về
0. Thanh ghi OCR2 xác định giá trị lớn nhất và cũng là độ phân giải của
Timer2.
Hình 2.10 - Giản đồ thời gian của chế độ CTC
Khi bộ đếm đạt tới giá trị TOP, cờ OCF2 kích hoạt chương trình ngắt.
Khi đã được kích hoạt, chương trình ngắt có thể được sử dụng để cập nhật
giá trị TOP.
Chu kỳ của Timer trong chế độ CTC có thể tính như sau:
Với công thức trên, ta có thể tính thời gian lấy mẫu như sau: Timer 8bit,
giá trị MaxVal đặt trong OCR = 155, nguồn xung clock 16MHz, chia tần số
1024 thì thời gian lấy mẫu là 10ms.
2.7. Bộ truyền nhận dữ liệu USART:
USART (The Universal Synchronous and Asynchronous serial Receiver
and Transmitter – Bộ truyền nhận nối tiếp tổng hợp đồng bộ và bất đồng bộ)
Đặc điểm:
- Hoạt động song công.
- Cho phép làm việc ở các chế độ : đồng bộ hay bất đồng bộ.
- Bộ phát tốc độ baud (BAUD RATE) với độ phân giải cao.
- Hỗ trợ Format khung truyền nối tiếp : 5,6,7,8, hay 9 Data Bits và 1
hoặc 2 bit Stop.
- Hỗ trợ kiểm tra bit chẵn , lẻ bằng phần cứng.

- Có thể phát hiện Data bị tràn , khung truyền bị lỗi.
- Có 3 cờ báo ngắt : TX complete, TX Data Register Empty và RX
complete.
- Có chế độ truyền thông đa xử lý.
- Double speed (chỉ áp dụng cho chế độ truyền thông bất đồng bộ).
Hình 2.11 - Sơ đồ khối USART
Trong sơ đồ trên, có ba khối nằm trong phần khung vuông là ba phần
chính của USART: bộ phát xung, bộ truyền và bộ nhận. Thanh ghi điều
khiển được sử dụng chung cho các thành phần. Bộ phát xung tạo ra xung
nhịp cho bộ phát tốc độ baud (khi truyền nhận bất đồng bộ), hoặc điều khiển
để nhận xung clock bên ngoài khi truyền nhận đồng bộ. Bộ truyền bao gồm
một bộ đệm ghi đơn (single write buffer), thanh ghi dịch nối tiếp (serial Shift
Register), bộ phát parity và bit điều khiển sử dụng cho nhiều khung truyền
khác nhau. Bộ nhận phức tạp hơn do có phần phục hồi xung và dữ liệu
(clock and data recovery). Thành phần phục hồi này sử dụng trong khi nhận
dữ liệu bất đồng bộ. Ngoài hai phần phục hồi, bộ nhận còn có phần kiểm tra
parity, bit điều khiển, thanh ghi dịch và bộ đệm nhận hai mức thấp (UDR).
Bộ nhận hỗ trợ các chuẩn khung truyền giống như bộ phát, và có thể phát
hiện lỗi khung truyền, tràn dữ liệu hoặc lỗi parity.
Các thanh ghi của USART:
- USART I/O Data Register –UDR
UDR là thanh ghi bộ đệm truyền(TXB) và nhận(RXB) (chúng có
cùng 1 địa chỉ vật lý) có chức năng lưu trữ Data.
o TXB: Thanh ghi bộ đệm truyền. Khi ta muốn send data đến PC
thì trước hết data đó phải được nạp vào TXB.
Muốn ghi DATA vào TXB thì bit UDRE trong thanh ghi
UCSRA phải được set (UDRE=[1]: cho phép ghi vào TXB). Data
đó được ghi vào UDR cho đến khi UDRE=[0]. Khi Data đang
được vào TXB, và Transmitter được phép thì Transmitter sẽ Load
Data đó vào thanh ghi dịch khi thanh ghi dịch bị trống (rỗng). Sau

đó Data được truyền nối tiếp trên chân TxD (PD0) của MCU.
o RXB: Thanh ghi bộ đệm nhận. Khi PC send 1 gói Data đến
MCU thì gói Data đó nằm trong RXB do đó cần phải chuyển
Data trong RXB vào 1 thanh R (vd: R16).
RXB gồm có 2 mức FIFO. FIFO sẽ thay đổi trạng thái của nó
bất cứ khi nào RXB được truy xuất. Vì trạng thái này của RXD mà
không được dùng những lệnh (SBI, CBI) ở đây. Cẩn thận với các
lệnh kiểm tra (SBIC và SBIS), vì chúng cũng sẽ làm thay đổi trạng
thái của FIFO.
- USART Control and Status Register A – UCSRA
(Thanh ghi điều khiển và trạng thái A)
o Bit 7 – RXC: USART Receive Complete
Cờ RXC =[1] khi có data chưa được đọc trong RXB và
RXC =[0] khi RXB rỗng (không còn bất kì data nào trong RXB
chưa đọc).
Cờ RXC có thể được dùng để tạo ra ngắt khi nhận xong (kết
hợp với bit RXCIE).
o Bit 6-TXC: USART Transmit Complete
Cờ TXC =[1] khi toàn bộ data trong thanh ghi dịch truyền
đã dược dịch ra ngoài và không còn data mới nào xuất hiện
trong TXB (UDR). TXC tự động được xóa nếu có 1 ngắt khi
truyền xong được thực thi hay nó cũng có thể được xóa bằng
cách ghi vào vị trí bit của nó.
Cờ TXC có thể được dùng để tạo ra ngắt khi truyền xong
(kết hợp với bit RXCIE).
o Bit 5-UDRE: USART Data Register Empty
Cờ UDRE chỉ thị nếu TXR (UDR) sẵn sàng để nhận dữ liệu
mới. Nếu UDRE=[1] thì bộ đệm trống, vì thế mà bộ đệm sẵn
sàng nhận dữ liệu mới. Cờ UDRE có thể tạo ra 1 ngắt khi data
trong thanh ghi trống rỗng (kết hợp với bit UDRIE).

UDRE = [1] sau khi reset để chỉ thị rằng bộ truyền đã sẵn
sàng.
o Bit 4-FE: Frame Error
FE =[1] nếu có lỗi khung truyền khi nhận.
o Bit3-DOR: Data OverRun
DOR=[1] nếu dữ liệu bị tràn.
o Bit 2-PE: Parity Error
PE=[1] nếu có lỗi kiểm tra chẵn, lẻ.
o Bit 1-U2X: Double the USART Transmission Speed
Chú ý : U2X chỉ có tác dụng đối với chế độ truyền bất đồng
bộ.
U2X=[0] khi sử dụng chế độ truyền đồng bộ.
U2X=[1] sẽ làm giảm ước số của bộ chia tốc độ baud từ 16
xuống còn 8 có tác dụng tăng tốc độ truyền đối với hoạt động
bất đồng bộ.
o Bit 0-MPCM: Multi-processor Communication Mode
Bit này cho phép chế độ truyền thông đa xử lý.
Khi MPCM=[1] thì tất cả các dữ liệu được nhận vào bởi bộ
nhận USART mà không có địa chỉ sẽ được bỏ qua. Việc set bit
MPCM không ảnh hưởng đến bộ truyền.
- USART Control and Status Register B – UCSRB
o Bit 7-RXCIE: RX complete Interrupt Enable
RXCIE=[1] cho phép nhận xảy ra ngắt (bằng cờ RXC).
USART nhận hoàn tất sẽ tạo ra 1 ngắt khi chỉ khi RXCIE=[1],
ngắt toàn cục được phép và RXC =[1] (trong UCSRA).
o Bit 6-TXCIE: TX complete Interrupt Enable
TXCIE=[1] cho phép truyền xảy ra ngắt (bằng cờ TXC).
USART truyền hoàn tất sẽ tạo ra 1 ngắt khi chỉ khi TXCIE=[1],
ngắt toàn cục được phép và TXC =[1] (trong UCSRA).
o Bit 5-UDRIE: USART Data Register Empty Interrupt Enable

UDRIE=[1] cho phép ngắt khi Data trong thanh ghi trống.
Ngắt này chỉ được tạo ra khi UDRIE=[1], ngắt toàn cục được
phép và UDRE =[1] (trong UCSRA).
o Bit 4-RXEN: Receive Enable
RXEN=[1]: cho phép nhận.
o Bit 3-TXEN : Transmit Enable
TXEN=[1]: cho phép truyền.
o Bit 2-UCSZ2: character size
UCSZ2 kết hợp với UCSZ1:0 trong thanh ghi UCSRC dùng
để thiết lập khung dữ liệu (số Data_Bit có trong 1 khung
truyền. VD: 5bit, 6bit, 8bit…) truyền và nhận .
o Bit 1-RXB: Receive Data bit 8.
RXB chứa bit thứ 9 nhận về khi hoạt động ở chế độ khung
truyền 9 bit. Nó phải được đọc trước khi đọc những bit thấp từ
UDR.
o Bit 0-TXB: Transmit Data bit 8.
TXB chứa bit thứ 9 sẽ được truyền đi khi hoạt động ở chế
độ khung truyền 9 bit. Nó phải được ghi trước khi ghi những
bit thấp vào UDR.
- SART Control and Status Register C – UCSRC
o Bit 7 – URSEL: Register Select
Bit nay dùng để lựa chọn thanh ghi UCSRC hay UBRRH.
URSEL=[1]: UCSRC
URSEL=[0]: UBBRH
o Bit 6 – UMSEL: USART Mode Select (lựa chọn truyền đồng
bộ hay bất đồng bộ)
o Bit 5:4 – UPM 1:0: Parity Mode (lựa chọn bit chẵn – lẻ)
o Bit 3 – USBS: stop bit select
o Bit 2:1-UCSZ 1:0: character size (Format khung truyền)
o Bit 0 – UCPOL: Clock Polarity

Bit này chỉ dùng cho chế độ truyền đồng bộ.
UCPOL = [0]: chọn chế độ truyền bất đồng bộ.
UCPOL được thiết lập liên quan đến giữa dữ liệu đầu ra
thay đổi và mẫu dữ liệu vào và xung đồng bộ (XCK).
- USART Baud Rate Registers – UBRRL and UBRRH
o Bit 15 - URSEL: Register Select

×