intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Ganuongmuoixa | Ngày: | Loại File: PDF | Số trang:56

38
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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!

Chủ đề:
Lưu

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

  1. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 Chương 6 BỘ BIẾN ĐỔI TƯƠNG TỰ SANG SỐ (ANALOG TO DIGITAL CONVERTER) -57/115- Biên soạn: Lâm Quang Chuyên
  2. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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.  Độ chính xác ± 2LSB  Các chân biến đổi ADC từ PA.0 đến PA.7 và tại mỗi thời điểm chỉ có 1 chân được biến đổi.  Mối quan hệ giữa điện áp ngõ vào (điện áp cần biến đổi), điện áp tham chiếu và độ phân giải: Vin b a .2 (6.1) Vref 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 -58/115- Biên soạn: Lâm Quang Chuyên
  3. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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: Vref  dpg.2b (6.2) 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à: Vin b 1.35 a .2  *1024  270 Vref 5.12 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à: a.Vref 595 * 2.56 Vin  b   1.49 volt 2 1024 -59/115- Biên soạn: Lâm Quang Chuyên
  4. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 6.2 CÁC THANH GHI LIÊN QUAN 6.2.1 Thanh ghi ADMUX Bit 7 6 5 4 3 2 1 0 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 Read/ Write RW RW RW RW RW RW RW RW Giá trị ban đầu 0 0 0 0 0 0 0 0 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 -60/115- Biên soạn: Lâm Quang Chuyên
  5. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16  Bit 4:0 MUX4:0 Dùng chọn kênh ngõ vào và độ lợi của biến đổi ADC Single Positive Negative MUX4..0 Ended Input Differential Differential Gain Input Input 00000 ADC0 00001 ADC1 00010 ADC2 00011 ADC3 00100 ADC4 KHÔNG SỬ DỤNG 00101 ADC5 00110 ADC6 00111 ADC7 01000 ADC0 ADC0 10x 01001 ADC1 ADC0 10x 01010 ADC0 ADC0 200x 01011 ADC1 ADC0 200x 01100 ADC2 ADC2 10x 01101 ADC3 ADC2 10x 01110 ADC2 ADC2 200x 01111 ADC3 ADC2 200x 10000 ADC0 ADC1 1x 10001 KHÔNG ADC1 ADC1 1x 10010 ADC2 ADC1 1x SỬ 10011 ADC3 ADC1 1x 10100 DỤNG ADC4 ADC1 1x 10101 ADC5 ADC1 1x 10110 ADC6 ADC1 1x 10111 ADC7 ADC1 1x 11000 ADC0 ADC2 1x 11001 ADC1 ADC2 1x 11010 ADC2 ADC2 1x 11011 ADC3 ADC2 1x 11100 ADC4 ADC2 1x 11101 ADC5 ADC2 1x 11110 1.22V (VBG) KHÔNG SỬ DỤNG 11111 0V (GND) Bảng 6.2 Các chân ngõ vào và độ lợi -61/115- Biên soạn: Lâm Quang Chuyên
  6. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 6.2.2 Thanh ghi ADCSRA Bit 7 6 5 4 3 2 1 0 ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 Read/ Write RW RW RW RW RW RW RW RW Giá trị ban đầu 0 0 0 0 0 0 0 0 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 1 0 0 0 2 2 0 0 1 2 3 0 1 0 4 4 0 1 1 8 5 1 0 0 16 6 1 0 1 32 7 1 1 0 64 8 1 1 1 128 BẢNG 6.3 Chọn tần suất lấy mẫu -62/115- Biên soạn: Lâm Quang Chuyên
  7. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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 -63/115- Biên soạn: Lâm Quang Chuyên
  8. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 6.2.3 Thanh ghi SFIOR Bit 7 6 5 4 3 2 1 0 ADTS2 ADTS1 ADTS0 - ACME PUD PSR2 PSR10 Read/ Write RW RW RW RW RW RW RW RW Giá trị ban 0 0 0 0 0 0 0 0 đầu 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 -64/115- Biên soạn: Lâm Quang Chuyên
  9. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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 7 6 5 4 3 2 1 0 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 Read/ Write RW RW RW RW RW RW RW RW Giá trị 1 1 1 0 1 1 0 1 Bit 7 – 6: REFS1=1; REFS0=1 dựa vào bảng 6.2, ta thấy điện áp tham chiếu là điện áp nội có giá trị là 2.56 volt. 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 ( − ). . 512 = 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: -65/115- Biên soạn: Lâm Quang Chuyên
  10. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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 Xác định ngắt: Có sử dụng ngắt nến ADIE = 1 Dựa vào phân tích trên ta có các thanh ghi có nội dung như sau: ADMUX, ADCH, ADCL, ADCSRA, SFIOR. ADMUX = 0b1100.0101 ADSRA = 0b1011.1000 bit ADSC = 1 được điều khiển bởi ngắt ngoài 0 để kích hoạt biến đổi ADC. SFIOR = 0b0101.0000 Ví dụ 3: Tính thời gian biến đổi ADC cho lần đầu và lần thứ 2, biết tần số thạch anh là 4 Mhz, sử dụng bộ chia 32. Giải: Tính tần số CK = =4 ℎ Sử dụng bộ chia 32 nên = = 125 ℎ Lần biến đổi ADC đầu tiên mất 25 ADCCLK nên thời gian biến đổi là: = 25 ∗ = 200 Lần biến đổi ADC đầu tiên mất 25 ADCCLK nên thời gian biến đổi là: = 12.5 ∗ = 100 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. -66/115- Biên soạn: Lâm Quang Chuyên
  11. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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). -67/115- Biên soạn: Lâm Quang Chuyên
  12. Chương 6 Biến đổi tương tự sang số Bài giảng vi điều khiển Atmega16 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. -68/115- Biên soạn: Lâm Quang Chuyên
  13. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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) -71/115- Biên soạn: Lâm Quang Chuyên
  14. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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. 7.1.1 Hoạt động đồng bộ Dữ liệu truyền đi sẽ được đồng bộ với xung clock, là hoạt động có sự phối hợp giữa chân XCK và RxD/TxD, trong hoạt động đồng bộ không đòi hỏi phải có cài đặt thông số (bắt tay) giữa 2 thiết bị, thời điểm nhận và thay đổi dữ liệu phụ thuộc vào bit UCPOL của thanh ghi UCSRC. 7.1.2 Hoạt động bất đồng bộ 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 -72/115- Biên soạn: Lâm Quang Chuyên
  15. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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. Bit 7 6 5 4 3 2 1 0 RXB[7:0] TXB[7:0] Read/ Write RW RW RW RW RW RW RW RW Giá trị ban đầu 0 0 0 0 0 0 0 0 Hình 7.2 Thanh ghi UDR 7.2.2 Thanh ghi UCSRA Bit 7 6 5 4 3 2 1 0 RXC TXC UDRE FE DOR PE U2X MPCM Read/ Write R RW R R R R RW RW Giá trị ban đầu 0 0 0 0 0 0 0 0 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. -73/115- Biên soạn: Lâm Quang Chuyên
  16. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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 Bit 7 6 5 4 3 2 1 0 RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 Read/ Write RW RW RW RW RW RW RW RW Giá trị ban đầu 0 0 0 0 0 0 0 0 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. -74/115- Biên soạn: Lâm Quang Chuyên
  17. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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 để nhận và truyền dữ liệu. Bit 1 – RXB8 (Receive Data Bit 8) đây chính là bit thứ 9 trong hoạt động nhận 9 bit dữ liệu, bit này phải đọc được trước khi đọc 8 bit thấp trong thanh ghi UDR (read). Bit 0 – TXB8 (Transmitte Data Bit 8) đây là bit thứ 9 trong hoạt động truyền dữ liệu, bit này phải được ghi trước ghi ghi 8 bit thấp trong thanh ghi UDR (write). 7.2.4 Thanh ghi UCSRC (USART Control and Status Register C). Bit 7 6 5 4 3 2 1 0 URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL Read/ Write RW RW RW RW RW RW RW RW Giá trị ban đầu 1 0 0 0 0 1 1 0 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ộ. UMSEL Chế độ 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. -75/115- Biên soạn: Lâm Quang Chuyên
  18. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 UPM1 UPM0 Parity Mode 0 0 (Disabled) Không sử dụng 0 1 (Reserved) 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. USBS Stop Bit(s) 0 1 bit 1 2 bit 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 1 0 0 0 5 bit 2 0 0 1 6 bit 3 0 1 0 7 bit 4 0 1 1 8 bit 5 1 0 0 Không sử dụng 6 1 0 1 Không sử dụng 7 1 1 0 Không sử dụng 8 1 1 1 9 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 -76/115- Biên soạn: Lâm Quang Chuyên
  19. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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. -77/115- Biên soạn: Lâm Quang Chuyên
  20. Chương 7 Truyền nhận dữ liệu nối tiếp Bài giảng vi điều khiển Atmega16 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 -78/115- Biên soạn: Lâm Quang Chuyên
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2