I Timer & Counter
4. Quá trình chuyển đổi ADC
- ADC có nhiệm vụ chuyển đối tín hiệu điện áp tương tự thành tín
hiệu số
có độ phân giải 10 bit.Với giá trị nhở nhất của điện áp đặt ở chân AGND
và giá trị cực đại của điện áp tương tự được mắc vào chân AREF. Tám kênh tương tự’ đầu vào được chọn lựa thông qua ADMUX và ADMUX
này được điều khiến bởi thanh ghi ADMUX.
- ADC này có thế hoạt động được ở hai chế độ. Đó là chuyển đổi đơn: chỉ
chuyển đổi một lần khi có lệnh chuyển đổi và chế độ tự chuyển đổi (Free
running mode) đây là chế độ mà ADC tụ’ động chuyển đổi khi được hoạt
động và công việc chuyến đổi có tính tuần hoàn (chỉ cần khởi động một
lần).
- ADC được phép hoạt động nhờ thiết lập bit ADEN. Quá trình chuyến đối
5. Các bước lập trình điều khiến ADC:
- Step 1: Định nghĩa các cống vào cho tín hiệu tương tự. Xóa bit tương úng
với chân đó trong thanh ghi DDRA. Sau đó loại bỏ điện trở treo bằng cách xóa bit tương ứng ở thanh ghi PORTA.
- Step 2: Chọn kênh tương tự vào (chọn chân vào cho ADC) thông qua thanh ghi ADMUX (có thể thay đổi trong quá trình hoạt động).
- Step 3: hiết lập các thông số cho ADC. Tốc độ chuyến đối thông qua xung nhip chuyển đổi. Chế độ chuyển đổi : đơn hoặc tự động. Sử dụng ngắt hoặc không.
- Step 4: Bắt đầu chuyển đổi và đọc dữ liệu. - Code Example:
#include <avr/io.h> #include
<util/delay.h> int main(void){
ADCSRA=( 1 «ADEN)|( 1 «ADPS2)|( 1 «ADPS0); //enable ADC, khong dung interrupt
ADMUX=ADC_VREF_TYPE; //chon kieu di en ap tham chieu
while(l){ //vòng lặp vô tận
//do nothing }
V. ƯSART: RT:
VI.Giói
thiệu:
- Thuật ngữ USART trong tiếng anh là viết tắt của cụm từ: Universal Synchronous & Asynchronous serial Reveiver and Transmitter, nghĩa là bộ
truyền nhận nối tiếp đồng bộ và không đồng bộ. cần chú ý rằng khái niệm
USART (hay UART nếu chỉ nói đến bộ truyền nhận không đồng bộ) thường đế chỉ thiết bị phần cứng (device, hardware), không phải chỉ một chuẩn giao tiếp. USART hay UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp đế tạo ra một chuẩn giao tiếp nào đó. Ví dụ, chuẩn
RS232 (hay COM) trên các máy tính cá nhân là sự kết hợp của chip ƯART và chip chuyển đối mức điện áp. Tín hiệu từ chip UART thường theo mức
TTL: mức logic high là 5, mức low là ov. Trong khi đó, tín hiệu theo chuân
RS232 trên máy tính cá nhân thường là -12V cho mức logic high và +12 cho mức low.
- Atmega 16 sử dụng hai pin sau cho USART đó là: (RXD) PDO H 14
(TXD) PD1 (Z 15
• Bộ tạo tốc độ baud có độ chính xác cao
• Hỗ trợ khung truyền nối tiếp với 5, 6, 7, 8, hoặc 9 bit dữ liệu và 1 hoặc
2 bit
• Kiếm tra chẵn lẻ • Phát hiện tràn dữ liệu • Phát hiện lỗi khung
• Lọc nhiễu, bao gồm phát hiện bit start lỗi và bộ lọc thông thấp số • Ngắt khi kết thúc truyền, thanh ghi truyền hết dữ liệu và kết thúc nhận
• Chế độ truyền thông đa vi xử lý
Sync Edge Register Detector
Sơ đồ khối:
Figure 69. USARTBIock Diagram
>
USART bao gồm 3 phần chính: bộ tạo xung clock, bộ truyền và bộ nhận. Các
thanh ghi điều khiến được sử dụng chung giữa các phần này.
2. Tạo xung clock cho USART:
- Bộ tạo xung clock tạo ra xung đồng hồ căn bản cho bộ truyền và bộ nhận. của bộ tạo xung clock như sau:
Figure 70. Clock Generation Logic, Block Diagram
UBRR Prescaling Down-Courĩter X C DDR_XCK rĩ ru DDR.XCK rL D- - UMSEL • txclk: xung đồng hộ bộ truyền • rxclk: xung đồng hồ bộ nhận
• xcki: tín hiệu vào từ chân XCK, sử dụng cho hoạt động truyền đồng bộ master
• xcko: tín hiệu xung clock ngõ ra tới chân XCK, sử dụng cho hoạt động truyền đồng
• bộ slave
• fosc: tần số từ chân XTAL
3. Một số khái niệm liên quan đến USART:
- Baud rate (tốc độ Baud): là số bit truyền trong 1 giây. Ví dụ nếu tốc độ baud được đặt là 19200 thì thời gian dành cho 1 bit truyền là 1/19200 ~ 52.083US.
- Frame (khung truyền): do truyền thông nối tiếp mà nhất là nối tiếp không
B i t 7 6 5 4 3 2 1 0
R X TC X C
UDRE 1FE DOR PE U2X J UCSRAMPCM
Read/Write R RAN R R R R RAV RAN
Initial Value 0 0 1 0 0 0 0 0
7 6 5 4 3 2 1 0
1 RXCIE TXCIE RXEN TXEN UCSZ2 RXB8 J UCSRBTXB8
Read/Write RAV R/W R/W R/W R/W R/W R R/W
Initial Value 0 0 0 0 0 0 0 0
7 6 5 4 3 2 1 0
1 URSEL UPM1 UPMO USBS UCSZ1 ucszoÍÌCPOL I UCSRC
ReadA/Vrite R/W R/W RM/ R/W R/W R/W R/W R/W
Initial Value 1 0 0 0 0 1 1 0
UMSEL
0 Asỵnchronous Operation
1 Synchronous Operation
UPM1 UPMO Parity Mode
0 0 Disabled
0 1 Reserved
1 0 Enabled, Even Parity
1 1 Enabled, Odd Parity
USBS Stop Bit(s)
0 1-bit
1 2-bit
UCSZ2 UCSZ1 ucszo Character Size
0 0 0 5-bit 0 0 1 6-bit 0 1 0 7-bit 0 1 1 8-bit 1 0 0 Reserved 1 0 1 Reserved 1 1 0 Reserved 1 1 1 9-bit UCPOL
Transmitted Data Changed (Output of TxDPin)
Received Data Sampled (Input on RxD Pin)
0 Rising XCK Edge Falling XCK Edge
1 Falling XCK Edge Rising XCK Edge
15 14 13 12 11 10 9 8
- - - UBRR[11:8] UBRRH
UBRR[7:0] UBRRL
7 6 5 4 3 2 1 0
ReadA/Vrite RAN R R R RAN RAN Ryw RAN
RAN RAN RAN R/W RANR/W RAN RAN
Initial Value 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Operating Mode Equation for Calculating
Baud Rate 1>
Equation for Calculating UBRR
Value
Asynchronous Normal Mode
(U2X = 0) BAƯD - ,0SC
16( L BRR+ 1)
I BRR - f°sc 1
16 BAUD
Asynchronous Double Speed Mode
(U2X = 1) BAUD » Q f°5C
A
8( L'BRR+• 1)L BRR - /05c - 1
8BAUD
Synchronous Master Mode
lượng các bit trong một data cũng được quy định bởi khung truyền. Mô hình khung truyền như sau:
Figure 72. Frame Formats
I*---FRAME---lị
(IDLE) ^ S t / o Ị Ị l ^ l Ị ạ ^ 'ị l5l \ l6l X l7l X l8lX lPl/SP1 lSP2\ (St/IDLE)
Start bit: start là bit đầu tiên được truyền trong một frame truyền, bit này có chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới. Ở module USART trong AVR, đường truyền luôn ở trạng thái cao khi nghỉ (Idle), nếu một chip AVR muốn thực hiện việc truyền dữ liệu nó sẽ gởi một bit start bằng cách “kéo” đường truyền xuống mức 0. Như vậy, với AVR bit start là mang giá trị 0 và có giá trị điện áp ov (với chuẩn RS232 giá trị điện áp của bit start là ngược lại), start là bit bắt buộc phải có trong khung truyền.
Data: data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và
nhận. Data không nhất thiết phải là gói 8 bit, với AVR bạn có thế quy định số lượng bit của data là 5, 6, 7, 8 hoặc 9 (tương tự’ cho hầu hết các thiết bị hỗ trợ UART khác). Trong truyền thông nối tiếp UART, bit có ảnh hưởng nhỏ nhất (LSB - Least Signiíĩcant Bit, bit bên phải) của data sẽ được truyền trước và cuối cùng là bit có ảnh hưởng lớn nhất (MSB - Most Signiíìcant Bit, bit bên trái).
Parity bit: parity là bit dùng kiếm tra dữ liệu truyền đúng không (một cách
tương đổi). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity chẵn nghĩa là sổ lượng số 1 trong dữ liệu bao gồm bit parity luôn là số chẵn. Ngược lại tổng sổ lượng các số 1 trong parity lẻ luôn là số lẻ. Ví dụ, nếu dữ liệu của bạn là 10111011 nhị phân, có tất cả 6 số 1 trong
44
bảo tổng các số 1 là số chẵn (6 số 1). Neu parity lẻ được yêu cầu thì giá trị của parity bit là 1. Parity bit không phải là bit bắt buộc và vì thế chúng ta có
thế loại bit này khỏi khung truyền .
- Stop bits: stop bits là một hoặc các bit báo cho thiết bị nhận rằng một gói dữ liệu đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến
hành kiếm tra khung truyền đế đảm bảo tính chính xác của dữ liệu. Stop bits là các bits bắt buộc xuất hiện trong khung truyền, trong AVR USART có thế là 1 hoặc 2 bits. Trong ví dụ ở hình 1, có 2 stop bits được dùng cho khung truyền.Giá trị của stop bit luôn là giá trị nghỉ (Idle) và là ngược với giá trị của start bit, giá trị stop bit trong AVR luôn là mức cao (5V).
ReadAA/rite R/W RAN RAN RAN RAN RAN R/W RAN
Initial Value 0 0 0 0 0 0 0 0
- Là thanh ghi dữ liệu, là 1 thanh ghi 8 bit chứa giá trị nhận được và phát đi của USART. Thực chất thanh ghi này có thế coi như 2 thanh ghi TXB (Transmit data Buffer) và RXB (Reveive data Buffer) có chung địa chỉ. Đọc UDR thu được giá trị thanh ghi đệm dữ liệu nhận, viết giá trị vào UDR
tương đương đặt giá trị vào thanh ghi đệm phát, chuẩn bị đế gởi đi. Trong
các khung truyền sử dụng 5, 6 hoặc 7 bit dữ liệu, các bit cao của thanh ghi UDR sẽ không được sử dụng,
— Thanh ghi UCSRA chủ yếu chứa các bit trạng thái như bit báo quá trình nhận kết thúc (RXC), truyền kết thúc (TXC), báo thanh ghi dữ liệu trống
RXB[7:0] TXB[7:0]
UDR(Read) UDR (VVrite)
45
(UDRE), khung truyền có lỗi (FE), dữ liệu tràn (DOR), kiếm tra parity có lỗi (PE), cần lưu ý một số bit sau:
• UDRE (USART Data Register Empty) khi bit bày bằng 1 nghĩa là thanh ghi dữ liệu UDR đang trống và sẵn sàng cho một nhiệm vụ truyền hay nhận tiếp theo.
• U2X là bit chỉ định gấp đôi tốc độ truyền, khi bit này được set lên 1, tốc độ truyền so cao gấp 2 lần so với khi bit này mang giá trị 0. • MPCM là bit chọn chế độ hoạt động đa xử lí (muĩti-processor). c. UCSRB - USART Control and Status Register B:
- Đây là thanh ghi quan trọng điều khiến USART. Các bit được mô tả như sau:
• RXCIE (Receive Complete Interrupt Enable) là bit cho phép ngắt khi quá trình nhận kết thúc. Việc nhận dữ liệu truyền bằng phương pháp nối tiếp
không đồng bộ thường được thực hiện thông qua ngắt, vì thế bit này thường được set bằng 1 khi USART được dùng nhận dữ liệu.
• TXC1E (Transmit Complete Interrupt Enable) bit cho phép ngắt khi quá trình truyền kết thúc.
• UDRIE (USART Data Register Empty Interrupt Enable) là bit cho phép ngắt khi thanh ghi dữ liệu UDR trống.
• RXEN (Receiver Enable) là một bit quan trọng điều khiến bộ nhận của USART, đề kích hoạt chức năng nhận dữ liệu bạn phải set bit này lên 1. • TXEN (Transmitter Enable) là bit điều khiến bộ phát. Set bit này lên 1
bạn sẽ khởi động bộ phát của USART.
46
• UCSZ2 (Chracter size) bit này kết hợp với 2 bit khác trong thanh ghi UCSRC quy định độ dài của dữ liệu truyền/nhận. Chúng ta sẽ khảo sát chi
tiết khi tìm hiểu thanh ghi UCSRC.
• RXB8 (Receive Data Bit 8) gọi là bit dữ liệu 8. USART trong AVR có hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh ghi dữ liệu là thanh ghi 8 bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8 bit đầu sẽ chứa trong thanh ghi UDR, cần có 1 bit khác đóng vai trò bit thứ chín, RXD8 là bit thứ chín này.
• TXB8 (Transmit Data Bit 8), tương tự như bit RXD8, bit TXB8 cũng đóng vai trò bit thứ 9 truyền thông, nhưng bit này được dùng trong lúc truyền dữ liệu.
d. UCSRC - USART Control and Status Register C:
- Thanh ghi này chủ yếu quy định khung truyền và chế độ truyền. Thanh ghi này lại có địa chỉ với thanh ghi UBRRH (thanh ghi chứa byte cao dùng đế xác lập tốc độ baud). Vì thế bit 7 trong thanh ghi này, tức bit URSEL là bit chọn thanh ghi. Khi URSEL=1, thanh ghi này được chip AVR hiếu là thanh ghi điều khiển UCSRC, nhưng nếu bit URSEL=0 thì thanh ghi UBRRH sẽ được sử dụng. Các bit trong thanh ghi này được mô tả như sau:
• UMSEL (USART Mode Select) là bit lựa chọn giữa 2 chế độ truyền thông đồng bộ và không đồng bộ. Nếu UMSEL=0, chế độ không đồng bộ được chọn, ngược lại nếu UMSEL=1, chế độ đồng bộ được kích
47
hoạt.
Table 63. UMSEL Bit
Settings
• Hai bit UPM1 và UPM0( Parity Mode) được dùng để quy định kiểm tra pariry. Neu UPM 1:0=00, parity không được sử dụng (mode này khá thông dụng), UPM1:0=01 không được sử dụng, UPM1:0=10 thì parity chẵn được dùng, UPM1:0=11 parity lẻ được sử dụng.
Table 64. UPM Bits Settings
• USBS (Stop bit Select), bit Stop trong khung truyền bằng AVR USART có thế là 1 hoặc 2 bit, nếu USBS=0 thì Stop bit chỉ là 1 bit trong khi ƯSBS=1 sẽ có 2 Stop bit được dùng.
Table 65. USBS Bit Settings
48
• Hai bit UCSZ1 và UCSZ2 (Character Size) kết hợp với bit UCSZ2 trong thanh ghi ƯCSRB tạo thành 3 bit quy định độ dài dữ liệu truyền.
Table 66. ucsz Bits Settings
• UCPOL (Clock Pority) là bit chỉ cực của xung kích trong chế độ truyền thông đồng bộ. nếu UCPOL=0, dữ liệu sẽ thay đổi thay đổi ở cạnh lên
của xung nhịp, nếu UCPOL=l, dữ liệu thay đối ở cạnh xuống xung nhịp. Neu bạn sử dụng chế độ truyền thông không đồng bộ, hãy set
bitTable 67. UCPOL Bit Settings
e. UBRRL và UBRRH -USART Baud Rate Register:
- Là 2 thanh ghi thấp và cao quy định tốc độ baud. Thanh ghi UBRRH
dùng chung địa chỉ thanh ghi UCSRC do đó ta phải set bit này bằng 0 nếu
49
muốn sử dụng thanh ghi ƯBRRH. 4 bit thấp của UBRRH được dùng, 4
bit này kết hợp với 8 bit trong thanh ghi UBRRL tạo thành thanh ghi 12
bit quy định tốc độ baud. Giá trị gán cho thanh ghi UBRR không phải là
tốc độ baud, nó chỉ được USART dùng để tính tốc độ baud. Bảng 3 hướng dẫn cách tính tốc độ baud dựa vào giá trị của thanh ghi UBRR
Ra te fM(:= 1.0000 MHz 1.8432 MHz fMC = 2.0000 MHz
U2X = 0 U2X = 1 U2X U2X U2X = 0 U2X= 1
- Ví dụ bảng tính tốc độ baud:
Error Error Error Error 25 0.2% 51 0.2% 47 95 51 0.2% 103 0.2% 12 0.2% 25 0.2% 23 47 25 0.2% 51 0.2% 6 -7.0%12 0.2% 11 23 12 0.2% 25 0.2% 3 8.5% 8 -3.5% 7 15 8 -3.5% 16 2.1% 2 8.5% 6 -7.0% 5 11 6 -7.0% 12 0.2% 1 8.5% 3 8.5% 3 7 3 8.5% 8 -3.5% 1 2 8.5% 2 5 2 8.5% 6 -7.0% 0 8.5% 1 8.5% 1 3 1 8.5% 3 8.5% - - 1 1 2 1 2 8.5% - - 0 8.5% 0 1 0 8.5% 1 8.5% - - - - - - 0 - - - - - - - - - - - - - - 0 0.0% 62.5 kbps 125 kbps 115.2 kbps 230.4 kbps 125 kbps 250 kbps
1. UBRR = 0. Error = 0.0%
5. Sử dụng
ƯSART: 50
a. Khởi tạo USART:
- Quá trình khởi tạo USART bao gồm việc thiết lập tốc độ baud, thiết lập định dạng khung và kích hoạt bộ truyền và bộ nhận.
- Code Example:
void USART_Init( unsigned int baud ) {
/* Set baud rate */
ƯBRRH = (unsigned char)(baud»8); UBRRL = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRB = (1«RXEN)|(1«TXEN); /* Set frame íòrmat: 8data, 2stop bit */ UCSRC = (1«URSEL)|(1«USBS)|(3«UCSZ0); }
b. Truyền dữ liệu:
- Bộ truyền USART được kích hoạt bằng cách thiết lập bit TXEN trong thanh ghi UCSRB. Khi bộ truyền được kích hoạt, chân TxD hoạt động như
ngõ ra của bộ truyền nối tiếp. Tốc độ baud, chế độ hoạt động và định dạng
khung truyền phải được thiết lập trước khi thực hiện truyền dữ liệuA - Việc truyền dữ liệu được thiết lập bằng cách nạp dữ liệu truyền vào bộ
đệm
truyền. Dữ liệu trong bộ đệm sẽ được đưa vào thanh ghi dịch khi thanh ghi
dịch đã sẵn sàng gửi một khung mới. Ví dụ dưới đây là một hàm truyền USART dựa trên việc kiểm tra cò UDRE.
void USART_Transmit( unsigned char data )
Direction, Master SPI Direction, Slave SPI User Detined
User Detined User Deíined
User Deíined /* Put data into buffer , sends the data */
UDR = data; }
c. Nhận dữ liệu: