II GIAO TIẾP I2C 1 Giới thiệu Là chuẩn giao tiếp giữa các vi điều khiển với nhau hay giữa vi điều khiển với các chip ngoại vi như EEPROM, IC thời gian thực DS1307… Chỉ có ở các MCU t
Trang 1BÁO CÁO BÀI TẬP LỚN GIAO TIẾP MÁY TÍNH
Trang 4 Các MCU tầm cao cùng các chân giao tiếp RS232
ATMEL Atmega 2560 Texas Instruments
LM4F120H5QR
Trang 52) Các câu lệnh lập trình trên Arduino
Serial.begin(speed, config): khởi tạo
Speed: tốc độ Baud
Config: cài đặt số data, parity, stop bit
Vd: Serial2.begin(115200, SERIAL_7N1): tốc độ Baud 115200, 7 bit data
Serial.println(value, format): gửi data
Value: giá trị cần gửi, có thể là kiểu string, int,…
Format: định dạng, như HEX, DEC, BIN, OCT
Vd: Serial.println(“CMNR”); Serial3.println(giatri_ADC, BIN)
Serial.read(): đọc byte đầu tiên từ máy tính gửi xuống
Vd: dieu_khien = Serial.read()
Serial.readBytes(): đọc nhiều byte kí tự trong bộ đệm
Trang 6 putc(): gửi đi chuỗi kí tự qua RS232
Vd: for ( i = 0; i<= 10; i++)
Trang 7II) GIAO TIẾP I2C
1) Giới thiệu
Là chuẩn giao tiếp giữa các vi điều khiển với nhau hay giữa vi điều khiển với các chip ngoại
vi như EEPROM, IC thời gian thực DS1307…
Chỉ có ở các MCU tầm trung theo cấu trúc Havard
Gồm 1 chân xung clock (SCL) và 1 chân truyền dữ liệu SDA
Tốc độ truyền: từ 10Kbit/s đến 3.4Mbit/s, tốc độ thường dùng (standard mode): 100Kbit/s
Khoảng cách truyền: ngắn, trong phạm vi 1 board mạch
Trang 8 Các MCU tầm trung cùng các chân
giao tiếp I2C
PIC18f4620
Atmega 32u4
Trang 9 Các MCU tầm cao cùng các chân
giao tiếp I2C
PIC24FJ64 Texas Instruments
LM4F120H5QR
Trang 102) Các câu lệnh lập trình trên Arduino
Wire.begin(): khởi tạo I2C bus là master
Wire.beginTransmission(address): truyền lệnh cho slave có địa chỉ address
Vd: Wire.beginTransmission(1): truyền lệnh cho slave có địa chỉ trên bus là 1
Wire.write(value) : truyền giá trị value cho slave có địa chỉ đã định
Vd: Wire.write(dieukhien_LED)
Wire.read(): nhận giá trị được truyền trên bus
Vd: x = Wire.read()
Wire.endTransmission(): dừng truyền, restart bus
Wire.requestFrom(address, quantity, stop): yêu cầu slave
có address gửi data có số bit là quantity; nếu stop = true thì
stop truyền, trả lại bus trống, nếu stop = false
thì restart quá trình truyền nhận data
Vd: Wire.requestFrom(1, 8)
Trang 113) Các câu lệnh lập trình trên CCS
#use i2c(option): khởi tạo chuẩn truyền i2c cho MCU như là master/slave, địa chỉ của slave, các chân kết nối…
Vd: #use i2c(master, sda=PIN_C4, scl=PIN_C3, force_hw)
i2c_start(): khởi tạo, chuẩn bị truyền dử liệu lên bus i2c
i2c_stop(): dừng truyền/nhận dữ liệu, cho bus i2c rảnh
i2c_write(address), i2c_write(data): gửi lệnh đến slave có địa chỉ trên bus là address hay có thể
là 1 byte data
Vd: i2c_write(0xA0); i2C_write(LED);
i2C_read(): nhận về data được gửi trên bus
Vd: giatri = i2c_read();
Trang 12III) GIAO TIẾP CAN
1) Giới thiệu:
Là chuẩn truyền có khoảng cách truyền là xa nhất và ổn định nhất hiện nay
Tốc độ truyền: I2C < CAN < SPI
Cơ chế kiểm tra lỗi phức tạp nhờ vậy dữ liệu truyền/nhận rất chính xác
Chỉ có trên các MCU tầm cao hay các MCU có modun chuyên biệt (PIC18Fxx80), các MCU khác muốn giao tiếp CAN phải dùng MCP2515
Trang 13 Các MCU cùng các chân giao tiếp CAN
Dòng PIC18F có 1 modun CAN Dòng ARM M4 có 3 modun CAN
Trang 142) Mạch CAN 2 node
Trang 151) Giao tiếp giữa RS232 giữa máy tính và Arduino
Nhập số thứ tự nào trên máy tính thông qua giao diện COM thì con LED ứng với số thứ tự
đó sáng
IV) DEMO ỨNG DỤNG
Trang 162) Giao tiếp I2C giữa Arduino và DS1307
Nạp thời gian trong máy tính vào DS1307 sau đó đọc thời gian do DS1307 đếm rồi hiển thị lên máy tinh thông qua giao diện COM
Trang 173) Giao tiếp Arduino và EEPROM
Nạp giá trị vào eeprom sau đó ngắt điện Cấp điện lại cho eeprom rồi đọc giá trị trong eeprom
và hiển thị lên máy tính thông qua giao diện COM
Trang 184) Giao tiếp i2c giữa 2 board Arduino
Nhận lệnh từ máy tính, master truyền dữ liệu cho slave làm sáng LED ứng với số được nhập
từ máy tính
Nút nhấn được nối với 1 chân của slave, khi nhấn nút, slave truyền tín hiệu cho master rồi hiển thị lên máy tính thông qua giao diện COM
Trang 195) Giao tiếp i2c giữa PIC điều khiển LED
Nhập số thứ tự trên máy tính thông qua giao diện COM thì master sẽ cho LED sáng theo số thứ tự nhập xuống
Master gửi lệnh cho slave sáng LED
Trang 206) Giao tiếp i2C giữa PIC và EEPROM
PIC đọc giá trị AD, ta có thể chọn ô nhớ eeprom để ghi vào Có thể chọn chế độ đọc hay ghi Kết quả sẽ hiển thị lên LCD
Trang 215) Giao tiếp i2c giữa PIC điều khiển động cơ RC servo
Điều khiển góc mà động cơ muốn quay từ máy tính thông qua giao diện COM, nhận lệnh từ máy tính, master truyền lệnh qua slave, slave điều khiển động cơ
Trang 227) Giao tiếp CAN 2 node
Node 1 cứ mỗi 1s thì lại gửi request Node 2 đọc giá trị AD rồi gửi tín hiệu lại cho Node 1 Node 1 nhận giá trị AD do node 2 gửi về rồi hiển thị lên máy tính