1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình Vi điều khiển: Phần 2 - Lâm Quang Chuyên

56 27 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Biến Đổi Tương Tự Sang Số
Tác giả Lâm Quang Chuyên
Trường học Trường Đại Học
Chuyên ngành Vi Điều Khiển
Thể loại Bài Giảng
Định dạng
Số trang 56
Dung lượng 5,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tiếp phần 1, Giáo trình Vi điều khiển: Phần 2 cung cấp cho người học những kiến thức như: Hoạt động ADC; Hoạt động USART; Hoạt động SPI; Hoạt động I2C. Mời các bạn cùng tham khảo!

Trang 2

6.1 GIỚI THIỆU

6.1.1 Giới thiệu

Bộ biến đổi ADC là biến đổi tín hiệu từ tương tự sang tín hiệu số, tùy thuộc vào độ phân giải (số bit được biến đổi) và tốc độ biến đổi và độ sai số mà ta có chất lượng biến đổi khác nhau, và cũng tùy vào từng ứng dụng cụ thể mà ta có thể chọn các bộ biến đổi ADC cho phù hợp với công việc của mình

Việc biến đổi tín hiệu từ tương tự sang số có rất nhiều ứng dụng trên thực tế: Đo lường nhiệt độ, độ ẩm, cân điện tử, biến đổi tín hiệu âm thanh để lưu trữ sang dạng số… Đối với vi điều khiển atmega16 ta có các thông số sau:

 Là bộ biến đổi tín hiệu tương tự (0 – VCC) sang tín hiệu số với giá trị tương ứng, độ phân giải tối đa 10 bit ~ 1023 bước

inV

V

(6.1) Trong đó:

o a: Giá trị số sau khi biến đổi (thay đổi từ 0 đến 1023)

o Vin: Điện áp ngõ vào (0 – 5VDC)

o Vref: Điện áp tham chiếu (0 – 5VDC)

o b: số bit biên đổi (độ phân giải) đối với atmega b = 10

Trang 3

Việc chọn điện áp tham chiếu phụ thuộc vào độ phân giải và số bit của thiết bị và được tính như sau:

b ref dpg

Với: dpg: độ phân giải của thiết bị, cảm biến

Hình 6.1 Tín hiệu tương tự và tín hiệu số 6.1.2 Bài tập ví dụ

Ví dụ 1: Một bộ biến đổi ADC có điện áp ngõ vào là 1,35 volt, độ phân giải là 5mv, số

bit biến đổi là 10 bit, hỏi giá trị ngõ ra và điện áp tham chiếu là bao nhiêu? Giải: Dựa vào công thức 6.2 ta có điện áp tham chiếu là:

Vref = dpg.2b = 0.005.210 = 5.12 (volt) Giá trị ngõ ra theo công thức 6.1 là:

270 1024

* 12 5

35 1 2

Ví dụ 2: Sau khi biến đổi ADC, ngõ ra nhận được là: 0x253, hỏi điện áp tham chiếu và

giá trị điện áp ngõ vào là bao nhiêu, biết số bit sử dụng là 8 bit, độ phân giải 10mVolt

Giải: Điện áp tham chiếu theo công thức 6.2 là:

Vref = dpg.2b = 0.01.28 = 2.56 (volt) Điện áp ngõ vào theo công thức 6.1 là:

volt V

a

V in b ref 1.49

1024

56.2

*5952

Trang 4

6.2 CÁC THANH GHI LIÊN QUAN

6.2.1 Thanh ghi ADMUX

REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Hình 6.2 Thanh ghi ADMUX

 Bit 7 – 6: REFS0.1 chọn điện áp tham chiếu xem bảng bên trên

Stt REFS1 REFS0 Nguồn điện áp tham chiếu

0 0 0 AREF, không sử dụng điện áp tham chiếu nội

1 0 1 AVCC với tụ được đặt tại chân AREF

2 1 0 Không sử dụng

3 1 1 Điện áp tham chiếu nội 2.56V với tụ ngoài tại chân

AREF

BẢNG 6.1 Chọn điện áp tham chiếu

 Bit 5: ADLAR (ADC Left Adjust Result): bit này dùng để chọn byte cao, byte thấp của dữ liệu, khi ADLAR = 0, ADCL lưu bit0 7, ADCH lưu bit8.9 Khi ADLAR = 1 thì ngược lại

Hình 6.3 Thanh ghi dữ liệu ADC khi ADLAR = 0

Hình 6.4 Thanh ghi dữ liệu ADC khi ADLAR = 1

Trang 5

 Bit 4:0 MUX4:0 Dùng chọn kênh ngõ vào và độ lợi của biến đổi ADC

MUX4 0

Single Ended Input

Positive Differential Input

Negative Differential Input

Trang 6

6.2.2 Thanh ghi ADCSRA

ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

Hình 6.5 Thanh ghi ADCSRA

 Bit 7 (ADEN): Bit này bằng 1 sẽ cho phép hoạt động ADC, bằng không sẽ không cho phép hoạt động Nếu bit này được viết vào giá trị không trong lúc đang biến đổi ADC thì hoạt động ADC này sẽ bị hủy bỏ

 Bit 6(ADSC): Bắt đầu hoạt động ADC, khi bit này bằng 1 nó sẽ bắt đầu biến đổi ADC, và sẽ trở về mức logic không sau khi biến đổi xong, viết logic 0 vào bit này không có giá trị

 Bit 5(ADATE): Khi bit này bằng 1 nó sẽ cho phép nguồn kích hoạt ADC

 Bit 4(ADIF): Cờ ngắt trong hoạt động ADC, khi sử dụng ngắt cờ này sẽ bật lên 1 khi biến đổi ADC hoàn tất, trong hoạt động ngắt cờ này sẽ tự động được xóa về không, khi không sử dụng ngắt muốn xóa cờ này phải ghi mức logic 1 vào

 Bit 3(ADIE): Cho phép ngắt trong hoạt động ADC, khi bit này bằng 1 thì cho phép hoạt động ADC, khi hoạt động ADC hoàn thành sự kiện ngắt sẽ được kích hoạt

 Bit 2 – 0 (ADPS2 0): Chọn bộ chia (thời gian biến đổi ADC) trong hoạt động ADC

Stt ADPS2 ADPS1 ADPS0 Hệ số chia

Trang 7

Hình 6.6 Bộ chia trong hoạt động ADC

Hình 6.7 Giản đồ thời gian cho lần biến đổi ADC đầu tiên

Hình 6.8 Giản đồ thời gian cho lần biến đổi ADC thứ 2

Trang 8

6.2.3 Thanh ghi SFIOR

Hình 6.9 Thanh ghi SFIOR

 Bit 7 – 5 (ADTS2 0) Các nguồn kích hoạt ADC

Stt ADTS2 ADTS1 ADTS0 Nguồn kích hoạt

1 0 0 0 Biến đổi ADC liên tục

2 0 0 1 So sánh điện áp giữa 2 chân AIN0 và AIN1

3 0 1 0 Tác động bởi chân ngắt ngoài của vi điều khiển

4 0 1 1 Khi OCR0 = TCNT0

5 1 0 0 Khi Timer/Counter0 tràn

6 1 0 1 Khi OCR1B = TCNT1

7 1 1 0 Khi Timer/Counter1 tràn

8 1 1 1 Khi đọc giá trị thanh ghi TCNT1

Bảng 6.4 Các nguồn kích hoạt ADC

Hình 6.10 Các tác nhân kích hoạt ADC

 Bit 4 – 0: Các bit này không sử dụng trong hoạt động ADC

Trang 9

6.3 BÀI TẬP VÍ DỤ

Ví dụ 1: Cho thanh ghi ADMUX có giá trị là 0xED, điện áp trên chân ADC3 là 300mV,

ADC2 = 500mV, hỏi giá trị ADCH, ADCL là bao nhiêu?

Giải: Ta có gán các bit vào thanh ghi ADMUX như hình vẽ sau

Bit 5: ADLAR = 1 nên giá trị lưu trong thanh ghi ADCH và ADCL là:

ADCH = bit9 2 ADCL = bit1.0 Bit 4 – 0: MUX = 01101 dựa vào bảng 6.3 trang ta nhận thấy độ lợi là GIAN = 10

Như vậy giá trị trên thanh ghi ADCR sẽ là

ADC = 512*10*(300-500)/2560= -400 = 1024 – 400 = 0x270 = 0b1001110000

Vậy ADCH = 0b10011100 = 0x9C và ADCL = 0b00 . .=0x00

Ví dụ 2: Viết chương trình khi nhấn nút SW trên chân 16 (INT0 – PB2) thì vi điều khiển

sẽ biến đổi tín hiệu ADC từ chân PA5 sau đó hiển thị kết quả trên PORTD cho byte cao (bit9.8) và PORTC cho byte thấp (bit7 0)

Giải: Các bước thực hiện:

 Xác định tác nhân kích hoạt ADC

 Xác định điện áp tham chiếu

 Xác định dữ liệu được lưu trong thanh ghi ADCL, ADCH

 Xác định tần suất lấy mẫu

 Xác định chân cần biến đổi ADC

 Xác định xem có ngắt hay không

Tác nhân kích hoạt ADC:

Ngắt ngoài 0 INT0 vậy ADTS2.0 = 010 và ADATE = 1

Điện áp tham chiếu:

Trang 10

Ta chọn Vref = 2.56v (internal reference) nên REFS1.0 = 11

Xác định dữ liệu trong thanh ghi

Vì PORTB = bit9.8 và PORTC = bit7.00 nên bit ADLAR = 0

Tần suất lấy mẫu:

Trong đề bài không đề cập đến tần suất biến đổi ADC nên ta chọn tùy ý, ở đây ta chọn là thời gian nhanh nhất là fadc = fck / 2, vậy ADPS2.0 = 000

Chân cần biến đổi ADC:

PA5 nên MUX4 0: 00101

6.4 CÂU HỎI ÔN TẬP HẾT CHƯƠNG

Câu 1: Atmega có mấy chân biến đổi được ADC, các chân nhận tín hiệu biến đổi ADC

trên Port nào, số chân?

Câu 2: Atmega16 có mấy nguồn điện áp tham chiếu, hãy nêu sự khác nhau giữa việc

chọn điện áp tham chiếu

Trang 11

Câu 3: Hãy nêu ý nghĩa của bộ prescaler trong hoạt động ADC

Câu 4: Tần suất lấy mẫu lớn nhất và nhỏ nhất hoạt động ADC là bao nhiêu biết fclk =

2Mhz

Câu 5: Hoạt động ngắt xảy ra ở thời điểm nào trong hoạt động ADC

Câu 6: Độ phân giải là gì, hãy cho ví vụ minh họa

Câu 7: Bit nào cho phép và không cho phép hoạt động ADC

Câu 8: Bit nào nhận biết hoạt động ADC đã hoàn tất, hoặc đang thực hiện

Câu 9: Hãy trình bài một ứng dụng trên thực tế có liên quan đến hoạt động ADC Câu 10: Khi điện áp ngõ vào cần biến đổi là 1,36v, điện áp tham chiếu là 2.56v, độ

phân giải 8 bit, hỏi giá trị sau khi biến đổi bằng bao nhiêu?

Câu 11: Khi giá trị sau khi biến đổi có giá trị là 672, điện áp tham chiếu là 4,5v, độ

phân giải 10 bit, hỏi giá trị điện áp ngõ vào là bao nhiêu?

Câu 12: Sau khi biến đổi ADC giá trị thu được là: 0x2d5, hỏi ADCH, ADCL có giá bị

là bao nhiêu, khi ADLAR = 0 và = 1

Câu 13: Điện áp tham chiếu trên chân AREF = 3v, Điện áp trên chân 36 là 2v

a Hỏi giá trị lưu trong thanh ghi ADCH và ADCL là bao nhiêu (xét 2 trường hợp ADLAR = 0 và = 1)

b Giá trị thanh ghi ADMUX bằng bao nhiêu?

Câu 14: Xác định các thanh ghi trong hoạt động ADC:

a Nguồn kích hoạt ADC (INT0)

b Điện áp tham chiếu (3v)

c 8 bit cao, 2 bit thấp

d Tần suất lấy mẫu (chia 64)

e Chân cần biến đổi ADC.6

f Không sử dụng ngắt

Câu 15: Xác định các thanh ghi trong hoạt động ADC:

a Nguồn kích hoạt ADC (Khi điện áp chân 3 lớn hơn chân 4)

b Điện áp tham chiếu (5v)

Trang 12

c 2 bit cao, 8 bit thấp

d Tần suất lấy mẫu (chia 32)

e Chân cần biến đổi 35

f Không sử dụng ngắt

g Nếu giá trị trên thanh ghi ADCH = 0x03 và ADCL = 0b11001101 thì điện

áp trên chân 35 là bao nhiêu?

Câu 16: Viết chương trình khi nhấn nút SW trên chân 16 (INT0 – PB2) thì vi điều khiển

sẽ biến đổi tín hiệu ADC từ chân PA5 hiển thị kết quả trên PORTD cho byte cao (bit9.8) và PORTC cho byte thấp (bit7 0) Điện áp tham chiếu VREF Bộ prescaler = 16

Câu 17: Viết chương trình khi điện áp trên chân 3 lớn hơn chân 4 thì biến đổi ADC tín

hiệu giữa 2 chân 39, 40 (39 điện áp dương, 40 điện áp âm) độ lợi 200x, điện

áp tham chiếu AVCC, hiển thị kết quả trên PORTD cho byte cao (bit9 2) và PORTC cho byte thấp (bit1.0) Bộ prescaler = 128

Câu 18: Viết chương trình điều khiển tốc độ động cơ thông qua biến trở trên chân

PORTA.0, khi biến trở có giá trị nhỏ nhất thì động cơ quay thấp nhất (ngừng quay), khi biến trở có giá trị cao nhất thì động cơ quay nhanh nhất

Câu 18: Viết chương trình điều khiển tốc độ động cơ thông qua biến trở trên chân

PORTA.0, khi biến trở có giá trị nhỏ nhất thì động cơ quay thấp nhất (ngừng quay), khi biến trở có giá trị cao nhất thì động cơ quay nhanh nhất

Câu 19: Tính thời gian biến đổi ADC biết tần số thạch anh là 5Mhz, biết thanh ghi

ADCSRA = 0bxxxx.x101

Câu 20: Hãy cho biết thời gian biến đổi nhanh nhất và chậm nhất của hoạt động ADC

biết tần số thạch anh là 8 Mhz

Trang 13

Chương 7

TRUYỀN NHẬN DỮ LIỆU

ĐỒNG BỘ

VÀ BẤT ĐỒNG BỘ

(THE UNIVERSAL SYNCHRONOUS AND ASYNCHRONOUS SERIAL

RECEIVER AND TRANSMITTER USART)

Trang 14

7.1 GIỚI THIỆU

Đây là bộ truyền nhận dữ liệu nối tiếp đồng bộ và không đồng bộ, biên độ thay đổi

từ -12v đến 12v thích hợp trong môi trường công nghiệp, có nhiều tín hiệu nhiễu, việc truyền nhận dữ liệu được thực hiện trên 2 chân của vi điều khiển RxD và TxD

Là hoạt động chỉ phụ thuộc vào chân RxD/ TxD kết hợp với thời gian (tốc độ baud)

mà không phụ thuộc vào chân CLK, một khung dữ liệu của hoạt động bất đồng bộ bao gồm: xung start bit, số bit dữ liệu (5,6,7,8,9 tùy mục đích sử dụng), 1 hoặc 2 stop bit, trong hoạt động bất đồng bộ đòi hỏi phải cài đặc thông số giữa 2 thiết bị phải giống nhau, cụ thể các thông số sau:

Số lượng stop bit (1,2)

Tốc độ baud (1200, 2400, 9600,…)

Kiểm tra chẵn lẻ (parity bit)

Số bit được truyền đi trong 1 khung (5, 6, 7, 8, 9)

Hình 7.1 Khung dữ liệu giao tiếp nối tiếp

Trang 15

7.1.3 Đặc tính giao tiếp USART

 Hoạt động truyền nhận song công

 Đồng bộ và không đồng bộ

 Tốc độ truyền nhanh

 Hỗ trợ các khung 5,6,7,8 hoặc 9 bit dữ liệu, 1 hoặc 2 stop bit (bất đồng bộ)

 Giao tiếp nhiều vi điều khiển theo nghi thức Master, Slaver

7.2 CÁC THANH GHI LIÊN QUAN

UDR (read), UDR (write), UCSRA, UCSRB, UCSRC, UBRRH, UBRRL

7.2.1 Thanh ghi UDR

Là thanh ghi đệm dùng để truyền UDR (write) và nhận UDR (read) dữ liệu nó có cùng địa chỉ, việc viết dữ liệu vào thanh ghi đệm chỉ thực hiện được khi cờ UDRE trong thanh ghi UCSRA bằng 1

RXB[7:0]

TXB[7:0]

Hình 7.2 Thanh ghi UDR 7.2.2 Thanh ghi UCSRA

RXC TXC UDRE FE DOR PE U2X MPCM

Hình 7.3 Thanh ghi UCSRA Bit 7 – RXC USART (USART Receive Complele) khi RXC = 1 thì dữ liệu trong thanh ghi UDR (read) chưa đọc, và khi RXC = 1 thì dữ liệu trong thanh ghi này đã được đọc, khi đó thanh ghi UDR (read) được xem là thanh ghi trống

Bit 6 – TXC (USART Transmit Complete) dùng thông báo cho hoạt động truyền dữ liệu

đã hoàn tất, khi TXC = 1 thì toàn bộ dữ liệu trong thanh ghi dịch (shift register) đã được dịch chuyển ra ngoài và không còn dữ liệu trong thanh ghi UDR (write) Bit này tự động xóa về 0 khi thực thi hoạt động ngắt, hoặc ghi giá trị 1 vào bit này, bit này có thể kích hoạt hoạt động ngắt

Trang 16

Bit 5 – UDRE (USART Data Register Empty) bit này dùng để báo cho biết thanh ghi UDR (write) có sẵn sàng nhận dữ liệu mới hay không Nếu bit này = 1 thì bộ đệm trống, thanh ghi UDR (write) sẵn sàng nhận dữ liệu Bit này có thể kích hoạt hoạt động ngắt khi thanh ghi đệm trống Bit này = 1 sau hoạt động reset

Bit 4 – FE (Frame Error) khi FE = 1 sẽ thông báo lỗi trong hoạt động nhận dữ liệu, bit này phải được viết = 0 khi trong thanh ghi UCSRA

Bit 3 – DOR (Data OverRun) DOR = 1 nếu xảy ra quá trình tràn dữ liệu, bit này phải được viết = 0 khi trong thanh ghi UCSRA

Bit 2 – PE (Parity Error) PE = 1 khi có lỗi về Parity xảy ra, bit này phải được viết = 0 khi trong thanh ghi UCSRA

Bit 1 – U2X (Double the USART Transmittion Speed) bit này chỉ có tác dụng trong hoạt động bất đồng bộ, và bit này được viết = 0 trong hoạt động đồng bộ Khi bit này bằng 1

sẽ giảm tốc độ baud xuống ½

Bit 0 – MPCM (Multi-processor Communication Mode) bit này cho phép hoạt động đa

vi điều khiển, khi bit này = 1 tất cả các dữ liệu khi nhận không chứa đựng thông tin về địa chỉ sẽ bị bỏ qua (không nhận), xem phần giao tiếp đa vi điều khiển

7.2.3 Thanh ghi UCSRB

RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8

Hình 7.4 Thanh ghi UCSRB Bit 7 – RXCIE (RX Complete Interrupt Enable) bit này = 1 cho phép ngắt trên cờ ngắt RXC Khi muốn thực hiện hoạt động ngắt khi nhận dữ liệu thì ta cần phải cài đặt như sau (theo thứ tự ưu tiên): bit I trong thanh ghi SREG, bit RXCIE trong thanh ghi UCSRB Hoạt động xảy ra khi bit RXC = 1

Bit 6 – TXCIE (TX Complete Interrupt Enable) bit này = 1 cho phép ngắt trên cờ ngắt TXC Hoạt động ngắt xảy ra khi bit RXC = 1 Khi muốn thực hiện hoạt động ngắt khi truyền dữ liệu thì ta cần phải cài đặt như sau (theo thứ tự ưu tiên): bit I trong thanh ghi SREG, bit TXCIE trong thanh ghi UCSRB

Trang 17

Bit 5 – UDRIE (USART Data Register Empty Interrupt Enable) bit này = 1 cho phép ngắt trên cờ UDRE Hoạt động xảy ra khi bit UDRE = 1 Khi muốn thực hiện hoạt động ngắt khi truyền dữ liệu thì ta cần phải cài đặt như sau (theo thứ tự ưu tiên): bit I trong thanh ghi SREG, bit UDRIE trong thanh ghi UCSRB

Bit 4 – RXEN (Receiver Enable) bit này = 1 sẽ cho phép nhận dữ liệu

Bit 3 – TXEN (Transmitter Enable) bit này = 1 sẽ cho phép truyền dữ liệu

Bit 2 – UCSZ2 (Character size) bit này kết hợp với 2 bit UCSZ1.0 để xác độ dài dữ liệu

Hình 7.5 Thanh ghi UCSRC Bit 7 – URSEL (Register Select) dùng để chọn thanh ghi UBRRH hoặc thanh ghi UCSRC, khi bit này bằng 0 thì thanh ghi UBRRH được chọn, khi bit này bằng 1 thì thanh ghi UCSRC được chọn

Bit 6 – UMSEL (USART Mode Select) dùng để chọn hoạt động đồng bộ/ không đồng

bộ

0 Asynchronous Operation (hoạt động bất đồng bộ)

1 Asynchronous Operation (hoạt động đồng bộ)

Bảng 7.1 Chế độ làm việc giao tiếp nối tiếp

Bit 5.4 – UPM1.0 (Parity Mode) 2 bit này dùng để xác định hoạt động parity trong quá trình nhận và truyền dữ liệu

Trang 18

UPM1 UPM0 Parity Mode

0 0 (Disabled) Không sử dụng

1 0 Cho phép kiểm tra chẵn (even parity)

1 1 Cho phép kiểm tra lẽ (odd parity)

Bảng 7.2 Cài đặc bit Parity

Bit 3 – USBS (Stop Bit Select) dùng để chọn số stop bit trong hoạt động truyền dữ liệu, trong hoạt động nhận sẽ bỏ qua hoạt động này

Bảng 7.3 Cài đặc bit USBS

Bit 2.1 – UCSZ1.0 chọn kích thước dữ liệu

Stt UCSZ2 UCSZ1 UCSZ0 Kích thước bit

Bảng 7.4 Cài đặc số bit dữ liệu

Bit 0 – UCPOL (Clock Polarity) bit này chỉ được sử dụng trong hoạt động đồng bộ, bit này phải được viết = 0 trong hoạt đồng bất đồng bộ

UCPOL Truyền dữ liệu (ngõ ra, chân TxD) Nhận dữ liệu mẫu (ngõ vào, chân RxD)

0 Cạnh lên xung XCK Cạnh xuống xung XCK

1 Cạnh xuống xung XCK Cạnh lên xung XCK

Bảng 7.5 Cài đặc bit UCPOL

Trang 19

Hình 7.6 Dữ liệu sẽ được thay đổi tại cạnh lên và lấy mẫu tại cạnh xuống

Hình 7.7 Dữ liệu sẽ được thay đổi tại cạnh xuống và lấy mẫu tại cạnh lên 7.2.5 Thanh ghi UBRRL và UBRRH

Hình 7.8 Thanh ghi UBRRL và UBRRH Thanh ghi UBRRH có cùng địa chỉ với thanh ghi UCSRC

Bit 7 – URSEL (Register Select) dùng để chọn thanh ghi UBRRH hoặc thanh ghi UCSRC, khi bit này bằng 0 thì thanh ghi UBRRH được chọn, khi bit này bằng 1 thì thanh ghi UCSRC được chọn

Tất cả các bit còn lại được sử dụng để chọn tốc độ baud trong hoạt động truyền/ nhận

dữ liệu, việc lựa chọn tốc độ baud phải đồng bộ với nhau và sai số trên 0.5% sẽ cho kết quả truyền không chính xác

Trang 20

Bảng 7.6 Chọn tốc độ baud ở các tần số từ 1Mhz đến 2Mhz

Bảng 7.7 Chọn tốc độ baud ở các tần số từ 3Mhz đến 7Mhz

Trang 21

Bảng 7.8 Chọn tốc độ baud ở các tần số từ 8Mhz đến 14Mhz

Bảng 7.9 Chọn tốc độ baud ở các tần số 16Mhz đến 20Mhz

7.3 CÁC BƯỚC THỰC HIỆN CÀI ĐẶC

Khi truyền/ nhận dữ liệu nối tiếp bất đồng bộ ta phải thực hiện các công việc sau:

1 Cài đặc tốc độ baud

2 Cài đặc số stop bit (1 hoặc 2)

Trang 22

3 Số bit truyền nhận dữ liệu

4 Có kiểm tra chẵn lẻ hay không

5 Xác định vi điều khiền nhận/ truyền hoặc vừa nhận vừa truyền dữ liệu

6 Xác định xem có ngắt hay không

2 Kiểm tra quá trình nhận dữ liệu có lỗi hay không, có 3 vấn đề cần kiểm tra đó là:

 Parity Error (PE bit – 2 trong thanh ghi UCSRA)

 Data OverRun (DOR bit – 3 trong thanh ghi UCSRA)

 Frame Error (FE bit – 4 trong thanh ghi UCSRA)

3 Sau đó, VĐK sẽ nhận dữ liệu từ thanh ghi UDR (read) Kết thúc quá trình nhận

dữ liệu

7.3.2 Quá trình truyền dữ liệu:

1 Kiểm tra bit UDRE xem thanh ghi UDR (write) đã sẵn sàng nhận dữ liệu hay chưa

 Nếu UDRE = 1 thì thanh ghi UDR (write) đang trống (đã truyền dữ liệu) và sẵn sàng nhận dữ liệu để truyền đi

 Nếu UDRE = 0 thì thanh ghi UDR (write) đang bận truyền dữ liệu và không nhận dữ liệu mới

2 Viết dữ liệu vào thanh ghi UDR

Trang 23

7.3.3 Các thời điểm xảy ra ngắt trong hoạt động USART

 Khi hoạt động nhận hoàn thành bit cho phép ngắt RXCIE

 Khi hoạt động truyền hoàn thành, bit cho phép ngắt TXCIE

 Khi thanh ghi dữ liệu UDR trống, bit cho phép ngắt UDRIE

7.4 BÀI TẬP VÍ DỤ

1 Bit nào, trong thanh ghi nào qui định việc cài đặt hoạt động đồng bộ và bất đồng bộ

2 Hãy cho biết thời điểm xảy ra hoạt động ngắt

3 Bit nào cho biết trạng thái truyền/ nhận dữ liệu đã hoàn thành

4 Tốc độ baud có ảnh hưởng tới quá trình đồng bộ, bất đồng bộ hay ảnh hưởng cả hai

5 Thanh ghi nào nhận dữ liệu và thanh ghi nào truyền dữ liệu

6 Khi cài đặc giao tiếp nối tiếp không đồng bộ giữa 2 thiết bị phải cùng các thông số nào?

7 Khi truyền dữ liệu đồng bộ với IC 74HC74 thì ta phải chọn bit UCPOL bằng bao nhiêu, tại sao?

Giao tiếp giữa 2 vi điều khiển theo nghi thức giao tiếp nối tiếp CHƯƠNG TRÌNH TRUYỀN DỮ LIỆU

/*****************************************************

This program was produced by the CodeWizardAVR V2.05.0 Professional Date : 11/25/2011

Author : LÂM QUANG CHUYÊN

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 1.000000 MHz

Trang 24

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<DOR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

// Declare your global variables here

void main(void)

Trang 25

TIMSK=0x00;

// USART initialization

// Communication Parameters: 8 Data, 2 Stop, No Parity

// USART Receiver: Off

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 19200

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 1.000000 MHz

Trang 26

# define FRAMING_ERROR (1<<FE)

# define PARITY_ERROR (1<<UPE)

# define DATA_OVERRUN (1<<DOR)

# define DATA_REGISTER_EMPTY (1<<UDRE)

// Declare your global variables here

void main( void )

Trang 27

// USART Transmitter: Off

// USART Mode: Asynchronous

// USART Baud Rate: 19200

Trang 28

Hình 7.9 Mạch giao tiếp giữa 2 vi điểu khiển theo kiểu nói tiếp

Ngày đăng: 20/08/2021, 13:52

TỪ KHÓA LIÊN QUAN