Giao tiếp UART giữa máy tính và vi điều khiển full code

22 6K 30
Giao tiếp UART giữa máy tính và vi điều khiển full code

Đ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

Giao tiếp UART giữa máy tính và vi điều khiển full code 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 UART 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à 0V. 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 (tham khảo hình 1). Chú ý là các giải thích trong tài liệu này theo mức logic TTL của USART, không theo RS232.

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG  BÁO CÁO VI XỬ LÝ Đề tài :Giao tiếp UART giữa máy tính và vi điều khiển Giáo viên hướng dẫn:Thầy Nguyễn Hoàng Dũng Sinh viên thực hiện: Tào Tuấn Mạnh 20111842 ĐTTT 7 - K56 Nguyễn Kim Nam 20101915 ĐTVT 5 - K55 Đào Minh Ngọc 20111905 ĐTTT 9 - K56 Nguyễn Văn Phòng 20113738 SPKT - K56 Hà Nội 5/2014 1 MỤC LỤC LỜI NÓI ĐẦU Như chúng ta đã biết,vi xử lí có ứng dụng rất rộng rãi trong cuộc sống.Vi xử lí là bộ xử lý trung tâm trong: máy tính (PC, Laptop, mini computer, super computer), thiết bị smartphone, thiết bị nhúng, và đặc biệt trong công nghiệp ngành Điện - chuyên ngành tự động hóa: bộ điều khiển khả trình PLC và Vi điều khiển để ứng dụng điều khiển các dây chuyền, hệ thống tự động Để có sự phát triển mạnh mẽ như vậy,vi xử lí đã tiến hóa qua nhiều thế hệ,từ vi xử lí 4 bit thương mại đầu tiên Intel 4004 đến các vi xử lí hiện đại dùng cho máy tính cá nhân ngày nay như Intel Core i5,i7…Các mạch tích hợp trong các vi xử lí đời đầu chỉ chứa vào khoảng vài chục transistor,đến nay đã có thể tích hợp hàng triệu transistor.Sự tăng số lượng transistor tích hợp này tuân theo định luật Moore: sự phức tạp của một mạch tích hợp sẽ tăng lên gấp đôi sau mỗi chu kỳ 18 tháng.Đi cùng với đó là công suất tiêu thụ và giá thành các bộ vi xử lí giảm đáng kể. Phân loại theo chức năng,vi xử lí được chia thành:vi xử lí đa năng,DSP,vi điều khiển,vi xử lí chuyên dụng ASIP.Trong đó vi điều khiển được sử dụng rộng rãi 2 trong rất nhiều thiết bị trong đời sống như:đèn giao thông,máy giặt,điều hòa nhiệt độ…,vi xử lí được chia thành:vi xử lí đa năng,DSP,vi điều khiển,vi xử lí chuyên dụng ASIP.Trong đó vi điều khiển được sử dụng rộng rãi trong rất nhiều thiết bị trong đời sống như:đèn giao thông,máy giặt,điều hòa nhiệt độ…Với sự hướng dẫn của thầy Nguyễn Hoàng Dũng,nhóm chúng em đã tìm hiểu về họ vi điều khiển AVR của hãng Atmel để hoàn thành bài tập lớn với chủ đề :”Giao tiếp với máy tính bằng UART” 3 I / Giới thiệu chung về AVR AVR là một họ vi điều khiển do hãng Atmel sản xuất.AVR là chip vi điều khiển 8 bits với cấu trúc tập lệnh đơn giản hóa-RISC(Reduced Instruction Set Computer), một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí. So với các chip vi điều khiển 8 bits khác, AVR có nhiều đặc tính hơn hẳn, hơn cả trong tính ứng dụng (dễ sử dụng) và đặc biệt là về chức năng: • Gần như chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi sử dụng AVR, thậm chí không cần nguồn tạo xung clock cho chip (thường là các khối thạch anh). • Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần vài điện trở là có thể làm được. một số AVR còn hỗ trợ lập trình on – chip bằng bootloader không cần mạch nạp… • Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C. • Nguồn tài nguyên về source code, tài liệu, application note…rất lớn trên internet. • Hầu hết các chip AVR có những tính năng sau: - Có thể sử dụng xung clock lên đến 16MHz, hoặc sử dụng xung clock nội lên đến 8 MHz (sai số 3%) - Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung lượng lớn, có SRAM (Ram tĩnh) lớn, và đặc biệt có bộ nhớ lưu trữ lập trình được EEPROM. - Nhiều ngõ vào ra (I/O PORT) 2 hướng (bi-directional). - 8 bits, 16 bits timer/counter tích hợp PWM. - Các bộ chuyển đối Analog – Digital phân giải 10 bits, nhiều kênh. - Chức năng Analog comparator. - Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232). - Giao diện nối tiếp Two –Wire –Serial (tương thích chuẩn I2C) Master và Slaver. 4 - Giao diện nối tiếp Serial Peripheral Interface (SPI) Để lập trình cho các vi xử lý này ta dùng các phần mềm như AVRstudio, CodeVision Các vi xử lý đều có chung những đặc điểm sau: • Điện áp làm việc là 5V • Dòng qua các chân của vi xử lý nhỏ (cỡ vài chục mA), nên không thể đấu trực tiếp với các thiết bị công suất lớn (động cơ ). Trong đề tài “Giao tiếp UART” chúng em sẽ chọn vi xử lý Atmega 16. 5 Port A (PA7 ÷ PA0) Port B (PB7 ÷ PB0) Port C (PC7 ÷ PC0) Port D (PD7 ÷ PD0) VCC, GND, RESET, XTAL1, XTAL2, AVCC, AREF VCC: Nguồn cung cấp. GND: Đất. RESET : Ngõ vào Reset. Một mức thấp trên chân này dài hơn độ rộng xung tối thiểu sẽ tạo ra một reset, ngay khi xung nhịp không hoạt động. Độ rộng xung tối thiểu là 1,5us. Xung ngắn hơn không đảm bảo để tạo ra một reset. XTAL1: Ngõ vào của bộ khuếch đại dao động đảo và mạch tạo xung nhịp bên trong. XTAL2: Ngõ ra của bộ khuếch đại dao động đảo. 6 AVCC: là chân nguồn cung cấp cho Port A và bộ chuyển đổi A/D. Nó nên được kết nối ngoài tới VCC, ngay khi nếu bộ ADC không được dùng. Nếu bộ ADC được sử dụng thì nó được kết nối tới VCC thông qua một mạch lọc thông thấp. AREF: là chân tham chiếu cho bộ chuyển đổi A/D. Hình 1 mô tả cấu trúc bộ nhớ của AVR. Hình 1: Cấu trúc bộ nhớ của AVR II / Thiết kế mạch 1 / Phân tích yêu cầu đề tài + Đối với đề tài:” Giao tiếp với máy tính bằng UART”, nhóm chúng em đã tìm hiểu về cách thức giao tiếp giữa vi xử lí và máy tính này a / UART (Universal Asynchronous serial Reveiver and Transmitter – Bộ truyền nhận nối tiếp không đồng bộ) - UART thường để chỉ thiết bị phần cứng (device, hardware), không phải chỉ một chuẩn giao tiếp. 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 đó. - Tín hiệu từ chip UART thường theo mức TTL: mức logic high là 5, mức low là 0V Các khái niệm trong phương thức truyền thông này: • Baud rate (tốc độ Baud): như trong ví dụ trên về việc truyền 1 bit trong 1ms, bạn thấy rằng để việc truyền và nhận không đồng bộ xảy ra thành công thì các thiết bị tham gia phải “thống nhất” nhau về khoảng thời dành cho 1 7 bit truyền, hay nói cách khác tốc độ truyền phải được cài đặt như nhau trước, tốc độ này gọi là tốc độ Baud. Theo định nghĩa, 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 đồng bộ rất dễ mất hoặc sai lệch dữ liệu, quá trình truyền thông theo kiểu này phải tuân theo một số quy cách nhất định. Bên cạnh tốc độ baud, khung truyền là một yếu tốc quan trọng tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số bit trong mỗi lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số lượng các bit trong một data cũng được quy định bởi khung truyền. Hình 1 là một ví dụ của một khung truyền theo UART, khung truyền này được bắt đầu bằng một start bit, tiếp theo là 8 bit data, sau đó là 1 bit parity dùng kiểm tra dữ liệu và cuối cùng là 2 bits stop. • 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 0V (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 Significant 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 Significant 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 dữ liệu này, nếu parity chẵn được dùng, bit parity sẽ mang giá trị 0 để đảm bảo tổng các số 1 là số chẵn (6 số 1). Nếu parity lẻ được yêu cầu thì giá trị của parity bit là 1. Hình 1 mô tả ví dụ này với parity chẵn được sử dụng. Parity 8 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 (các ví dụ trong bài này tôi không dùng bit parity). • 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 các thiết bị khác Stop bits có thể là 2.5 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). • (Khung truyền phổ biến nhất là : 1 start bit+ 8 bit data+1 stop bit) b / Xác định đề tài - Các vi điều khiển như Atmega 8,Atmega16… đã có sẵn module UART.Có 2 chân liên quan đến module này là RxD(chân nhận dữ liệu) và TxD(chân truyền dữ liệu). - Sau khi nhận đề tài và thảo luận,nhóm quyết định thực hiện đề tài:”Đo và điều khiển đo nhiệt độ phòng và giao tiếp với máy tính bằng UART”. - Nhóm sử dụng cảm biến nhiệt độ để đo nhiệt độ phòng, rồi truyền số liệu nhận được bằng giao tiếp UART giữa vi điều khiển và máy tính để hiện thị lên màn hình máy tính 2 / Xây dựng sơ đồ khối Mạch của nhóm có sơ đồ khối tổng quan: 9 Hình 2: Sơ đồ khối tổng quan 3 / Thông số kĩ thuật từng khối a / Khối nguồn + Mạch cần có nguồn nuôi là nguồn 5V DC + Để có nguồn nuôi ổn định,nhóm sử dụng adapter 9V – 1A và mạch sử dụng IC LM7805 để có đầu ra là dòng 5V – 1A 10 [...]... tuyến tính với nhiệt độ theo thang độ Celsius +Vi c đo nhiệt độ sử dụng LM35 thông thường chúng ta sử dụng bằng cách LM35 - > ADC - > Vi điều khiển c / Khối điều khiển + Có nhiều vi điều khiển AVR trên thị trường.Để phù hợp với chức năng của mạch,đồng thời tiết kiệm tiền bạc và tài nguyên bộ nhớ,nhóm quyết định chọn vi điều khiển Atmega16 + Để tiện cho vi c nạp code, nhóm sử dụng chân nạp ISP + Vi điều khiển. .. ISP + Vi điều khiển được tạo dao động với thạch anh 8Mhz và có nút bấm để Reset d / Khối giao tiếp máy tính Trong truyền thông với máy tính, chuẩn giao tiếp RS232 được sử dụng vì vậy cần kết nối với IC MAX232 để chuyển các mức điện áp thành chuẩn TTL 11 e / Khối hiển thị Sử dụng LCD 1602 để hiện thị nhiệt độ đo được và các kí tự nhận được từ máy tính 12 4 / Xây dựng sơ đồ nguyên lí toàn mạch 13 5 / Xây... III / Lập trình và mô phỏng 1 / Mô phỏng Nhóm chúng em sử dụng proteus để mô phỏng mạch: 2 / Mã nguồn Nhóm chúng em sử dụng phần mềm code vision để vi t code bằng ngôn ngữ C thực hiện các chức năng đã phân tích (Phụ lục 1) 15 3 / Kết quả mô phỏng LCD hiển thị nhiệt độ đo được và kí tự khi gõ kí tự từ bàn phím máy tính Khi bấm kí tự e (quy ước để điểu khiển đo nhiệt độ) thì LM35 sẽ đo và cập nhật lại... luận Sau một thời gian học tập và nghiên cứu, nhóm chúng em đã hoàn thành bài tập lớn,mạch đã chạy được tuy nhiên còn nhiều hạn chế như trễ hơi lâu ,đôi khi LCD hiện không đúng chữ mong muốn.Nhóm chúng em mong nhận được nhiều góp ý từ thầy Tài liệu tham khảo: • • • Giáo trình vi điều khiển AVR Kỹ thuật vi điều khiển AVR WEB: hocavr.com 17 Phụ lục 1: Mã nguồn trong code vision: #include #include... puts(str); //Gui len may tinh chuoi ki tu putchar(13); sprintf(str, "Giao tiep UART \n"); puts(str); //Gui len may tinh chuoi ki tu DDTT07-K56 putchar(13); sprintf(str,"Nhan phim e de cap nhat lai nhiet do hien thi LCD"); 19 puts(str); putchar(13); F:adc_vIn = (float)adc_data[0]*5/1024; // doc gia tri dien ap Vadc In nhietDo = adc_vIn*100; // quy doi ra nhiet do itoa(nhietDo,thongBao); // chuyen kieu... while (1) { // Place your code here Data = getchar(); if(Data) { lcd_gotoxy(0,1); sprintf(str,"Ky tu: %c",Data); lcd_puts(str); } delay_ms(1); 20 if (Data == 'e') goto F; } } PHỤ LỤC 2: Bảng phân công công vi c nhóm Tuần Mạnh Nam Ngọc 21 Phòng 3 4 5 6 7 8 9 10 11 12 13 14 15 Tìm hiểu chung AVR(tìm hiểu UART+ xác định yêu cầu đề tài) Tìm hiểu ,thiết kế các khối trong mạch Tìm hiểu code để lập trình Thiết... UART+ xác định yêu cầu đề tài) Tìm hiểu ,thiết kế các khối trong mạch Tìm hiểu code để lập trình Thiết kế mạch nguyên lý(altium) + vẽ mô Vi t Code phỏng(proteus) Chạy ,kiểm tra mô phỏng Layout mạch in Mua linh kiện Chỉnh sửa ,tối ưu code Đặt mạch Hoàn thiện + chỉnh sửa mạch Vi t báo cáo 22 ... WEB: hocavr.com 17 Phụ lục 1: Mã nguồn trong code vision: #include #include #include #include // Alphanumeric LCD Module functions #include … float adc_vIn; int nhietDo; unsigned char thongBao[10]; char Data; char str[50]; void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0xFF; 18 PORTD=0x00; DDRD=0xFE; … // USART initialization . và điều khiển đo nhiệt độ phòng và giao tiếp với máy tính bằng UART . - Nhóm sử dụng cảm biến nhiệt độ để đo nhiệt độ phòng, rồi truyền số liệu nhận được bằng giao tiếp UART giữa vi điều khiển. HỌC BÁCH KHOA HÀ NỘI VI N ĐIỆN TỬ VI N THÔNG  BÁO CÁO VI XỬ LÝ Đề tài :Giao tiếp UART giữa máy tính và vi điều khiển Giáo vi n hướng dẫn:Thầy Nguyễn Hoàng Dũng Sinh vi n thực hiện: Tào. tích yêu cầu đề tài + Đối với đề tài:” Giao tiếp với máy tính bằng UART , nhóm chúng em đã tìm hiểu về cách thức giao tiếp giữa vi xử lí và máy tính này a / UART (Universal Asynchronous serial

Ngày đăng: 21/07/2014, 12:04

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • I / Giới thiệu chung về AVR

  • II / Thiết kế mạch

    • 1 / Phân tích yêu cầu đề tài

    • 2 / Xây dựng sơ đồ khối

    • 3 / Thông số kĩ thuật từng khối

    • 4 / Xây dựng sơ đồ nguyên lí toàn mạch

    • 5 / Xây dựng sơ đồ mạch in toàn mạch

    • III / Lập trình và mô phỏng

      • 1 / Mô phỏng

      • 2 / Mã nguồn

      • 3 / Kết quả mô phỏng

      • IV / Kết luận

      • Phụ lục 1:

      • PHỤ LỤC 2: Bảng phân công công việc nhóm

Tài liệu cùng người dùng

Tài liệu liên quan