1. Trang chủ
  2. » Luận Văn - Báo Cáo

nghiên cứu chuẩn giáo tiếp spi, i2c, uart của pic 16f877a thi công mạch giao tiếp

32 1,2K 4

Đ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

Định dạng
Số trang 32
Dung lượng 2,43 MB

Nội dung

- Để thành lập truyền thông các chân sau được sử dụng: + Ngõ ra dữ liệu nối tiếp SDO: RC5/SDO.. - Các bit điều khiển SSPCON1 và SSPSTAT cho phép xác định: + Chế độ chủ SCK là ngõ ra xun

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH

ĐỀ TÀI NCKH CẤP SINH VIÊN

NGHIÊN CỨU CHUẨN GIÁO TIẾP SPI, I2C, UART CỦA PIC 16F877A - THI CÔNG MẠCH GIAO TIẾP

MÃ SỐ: SV53 - 2008

S 0 9

S KC 0 0 2 3 0 1

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM



NGHIÊN CỨU KHOA HỌC CẤP SINH VIÊN

ĐỀ TÀI:

MÃ SỐ: SV53_2008

THUỘC NHĨM NGÀNH : KHOA HỌC KỸ THUẬT

CHỦ NHIỆM ĐỀ TÀI : CHÂU TUẤN HỒNG

NGƯỜI THAM GIA : NGUYỄN TẤN HÕA

TRỊNH VĂN DUY

TP HỒ CHÍ MINH THÁNG 12 NĂM 2008

Trang 3

MỤC LỤC

PHẦN 1: ĐẶT VẤN ĐỀ - 2

I LÝ DO CHỌN ĐỀ TÀI - 2

II ĐỐI TƯỢNG NGHIÊN CỨU - 2

III TÌNH HÌNH NGHIÊN CỨU CỦA ĐỀ TÀI - 3

PHẦN 2: GIẢI QUYẾT VẤN ĐỀ - 3

I MỤC ĐÍCH NGHIÊN CỨU - 3

II PHƯƠNG PHÁP NGHIÊN CỨU - 3

III NỘI DUNG NGHIÊN CỨU - 4

3.1 Tổng quan về họ vi điều khiển PIC - 4

3.2 Sơ lược về vi điều khiển PIC 16F877A - 4

3.3 Tập lệnh của vi điều khiển PIC 16F877A - 6

3.4 Khối Port nối tiếp đồng bộ chủ ( MSSP) - 7

3.4.1 Chuẩn giao tiếp SPI của vi điều khiển PIC 16F877A - 8

3.4.2 Chuẩn giao tiếp I2C của vi điều khiển PIC 16F877A - 13

3.5 Chuẩn giao tiếp UART của vi điều khiển PIC 16F877A - 21

3.6 Mạch giao tiếp SPI, I2C, UART - 26

IV KẾT QUẢ ĐẠT ĐƯỢC - 27

4.1 Tính khoa học - 27

4.2 Tính thực tiễn - 27

4.3 Hiệu quả kinh tế - 27

PHẦN 3: KẾT LUẬN VÀ KHUYẾN NGHỊ - 28

I KẾT LUẬN - 28

II KHUYẾN NGHỊ - 28

PHẦN 4: TÀI LIỆU THAM KHẢO - 29

Trang 4

Microchip là một nhà sản xuất chip điên tử hàng đầu trên thế giới, trong những năm gần đây họ đã cho ra đời những dòng vi điều khiển cực mạnh như dòng PIC, dòng dsPIC Trong dòng vi điều khiển PIC thì họ PIC16 là một họ vi điều khiển 8bit khá mạnh và khá phổ biến

Với mong muốn có thêm kiến thức về họ vi điều khiển PIC16 cho bản thân mình và phần nào giúp mọi người có thể hiểu rõ hơn họ vi điều khiển này, bên cạnh sự hướng dẫn

của Thầy Ths NGUYỄN ĐÌNH PHÖ và những kiến thức về vi điều khiển đã được học ở trường, em đã chọn đề tài nghiên cứu khoa học cấp sịnh viên là: “NGHIÊN CỨU

CHUẨN GIAO TIẾP SPI, I2C, UART CỦA PIC 16F877A – THI CÔNG MẠCH GIAO TIẾP”

II ĐỐI TƢỢNG NGHIÊN CỨU

- Vi điều khiển PIC 16F877A

- Chuẩn giao tiếp SPI, I2C, UART

- Bộ thí nghiệm cho PIC 16F877A

- Một số chương trình thí nghiệm cho PIC 16F877A

- Phần mềm biên dịch và sọan chương trình cho PIC 16F877A: MPLAB, PIC C Compiler (CCS)

Trang 5

III TÌNH HÌNH NGHIÊN CỨU CỦA ĐỀ TÀI

Hiện nay ở nước ta, dòng vi điều khiển PIC16 đã được sử dụng nhiều và ngày càng phổ biến, để góp phần bổ sung thêm các ứng dụng của Pic nên nhóm muốn nghiên cứu các ứng dụng truyền dữ liệu của Pic

- Sử dụng được phần mềm MPLAB hoặc phần mềm PIC C Compiler (CCS) để soạn

và biên dich chương trình cho PIC 16F877A

- Sử dụng được phần mềm WinPic 800 để nạp chương trình cho PIC 16F877A

- Viết các chương trình truyền dữ liệu cho PIC 16F877A theo các chuẩn giao tiếp SPI, I2C, UART

II PHƯƠNG PHÁP NGHIÊN CỨU

- Tham khảo và dịch tài liệu: tìm hiểu kiến thức cơ bản về PIC 16F877A và về các chuẩn giao tiếp SPI, I2C, UART

- Thi công mạch và thực hành: thi công mạch giao tiếp đối với các chuẩn giao tiếp SPI, I2C, UART cho vi điều khiển PIC 16F877A Viết các chương trình thí nghiệm về các chuẩn giao tiếp

Trang 6

III NỘI DUNG NGHIÊN CỨU

1 Tổng quan về họ vi điều khiển PIC

PIC là một họ vi điều khiển RISC được sản xuất bởi công ty Microchip Technology

Dòng PIC đầu tiên là PIC1650 được phát triển bởi Microelectronics Division thuộc General Instrument Lúc này, PIC1650 được dùng để giao tiếp với các thiết bị ngoại vi cho máy chủ 16bit CP1600 CP1600 là một CPU tốt, nhưng lại kém về các hoạt động xuất nhập, và vì vậy PIC 8-bit được phát triển vào khoảng năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600 PIC sử dụng microcode đơn giản đặt trong ROM, và mặc dù, cụm từ RISC chưa được sử dụng thời bây giờ, nhưng PIC thực sự là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động) Năm

1985 General Instruments bán bộ phận vi điện tử của họ, và chủ sở hữu mới hủy bỏ hầu hết các dự án - lúc đó đã quá lỗi thời Tuy nhiên PIC được bổ sung EEPROM để tạo thành 1 bộ điều khiển vào ra khả trình Ngày nay rất nhiều dòng PIC được xuất xưởng với hàng loạt các module ngoại vi tích hợp sẵn (như USART, PWM, ADC ), với bộ nhớ chương trình từ 512 Word đến 32K Word

2 Sơ lƣợc về vi điều khiển PIC 16F877A

- Sơ đồ chân loại PDIP 40 chân:

Trang 7

Giao tiếp nối tiếp MSSP, USART

Giao tiếp song song PSP

Module A/D 10bit 8 kênh ngõ vào

Trang 8

3 Tập lệnh của vi điều khiển PIC 16F877A

 Khung định dạng chung cho các lệnh:

Trang 9

 Bảng tốm tắt các lệnh của PIC 16F877A

4 Khối Port nối tiếp đồng bộ chủ ( MSSP)

Khối MSSP có thể hoạt động ở một trong hai chế độ sau:

+ Serial Peripheral Interface (SPI)

+ Inter – Intergrate Curcuit (I2C)

Cả hai chế độ trên đều hoạt động truyền dữ liệu nối tiếp

Trang 10

Khối MSSP có 3 thanh ghi là: thanh ghi trạng thái (SSPSTAT), hai thanh ghi điều khiển (SPPCON1 và SPPCON2)

4.1 Chuẩn giao tiếp SPI của vi điều khiển PIC 16F877A

Sơ đồ khối MSSP ở chế độ SPI:

Trang 11

- Chế độ SPI cho phép 8bit dữ liệu được truyền và phát đồng bộ một cách đồng thời

- Để thành lập truyền thông các chân sau được sử dụng:

+ Ngõ ra dữ liệu nối tiếp (SDO): RC5/SDO

+ Ngõ vào dữ liệu nối tiếp (SDI): RC4 /SDI/SDA

+ Xung clock nối tiếp (SCK): RC3 /SCK/SCL

Khi hoạt động trong chế độ slave, chân thứ tư có thể được sử dụng:

+ Lựa chọn slave (SS): RA5/AN4/SS

- Có 4 thanh ghi cần quan tâm trong chế độ SPI:

+ Thanh ghi điều khiển 1 MSSP (SSPCON1)

+ Thanh ghi trạng thái MSSP (SSPSTAT)

+ Thanh ghi nhận nối tiếp/ đệm phát (SSPBUF)

+ Thanh ghi dịch MSSP (SSPSR) – không thể truy xuất trực tiếp

- Các bit điều khiển SSPCON1<5:0> và SSPSTAT<7:6> cho phép xác định:

+ Chế độ chủ ( SCK là ngõ ra xung clock)

+ Chế độ tớ ( SCK là ngõ vào xung clock)

+ Cực tính xung clock (trạng thái chờ SCK)

+ Pha lấy mẫu dữ liệu ngõ vào ( ở giữa hay cuối thời điểm dữ liệu ngõ ra)

+ Cạnh xung clock (dữ liệu ngõ ra ở cạnh lên hay cạnh xuống của SCK)

+ Tốc độ xung clock (chỉ ở chế độ chủ)

+ Chế độ lựa chọn slave ( chỉ ở chế độ tớ)

HOẠT ĐỘNG

- Thanh ghi SSPSR dịch dữ liệu vào và ra, đầu tiên là bit MSB

- Sau khi nhận đủ 8 bit dữ liệu thì byte dữ liệu được chuyển đến thanh ghi SSPBUF Sau đó bít báo bộ đệm đầy BF ( SSPSTAT<0>) và cờ ngắt SSPIF lên mức 1

- Trong khi truyền/nhận dữ liệu thì bất kỳ việc ghi dữ liệu nào vào thanh ghi SSPBUF

sẽ bị bỏ qua và bit WCOL (SSPCON1<7>) sẽ được set Do đó người lập trình phải xóa bit WCOL để cho những lần ghi dữ liệu tiếp theo

- SSPBUF nên được đọc trước khi ghi byte dữ liệu tiếp theo vào nó Khi đọc SSPBUF được đọc thì bit BF được xóa

Trang 12

CHẾ ĐỘ CHỦ: Thiết bị chủ có thể khởi tạo việc truyền dữ liệu bất cứ lúc nào vì nó điều khiển xung clock (SCK) Trong chế độ chủ dữ liệu được truyền hoặc nhận ngay khi

dữ liệu được ghi vào thanh ghi SSPBUF

Trong chế độ SPI, tốc độ xung clock (tốc độ bit) do người lập trình lựa chọn một trong các tốc độ sau:

CHẾ ĐỘ TỚ: Trong chế độ tớ, dữ liệu được truyền và nhận khi có sự xuất hiện cạnh xung clock từ bên ngoài trên chân SCK Khi bit cuối cùng được chốt thì cơ ngắt SSPIF (PIR1<3>) được set

CHO PHÉP SPI I/O

- Cho phép SPI: set bit SSPEN ( SSPCON1<5>)

- Reset hay định cấu hình lại: xóa bit SSPEN rồi khởi tạo lại và set SSPEN

- Định chức năng cho các chân:

+ SDI: được điều khiển tự động bởi module SPI

+ SDO: phải xóa TRISC<7>

+ SCK (chế độ chủ): phải xóa TRISB<1>

+SCK (chế độ tớ): phải set TRISB<1>

+ SS: phải set TRISA<5>

Trang 13

KẾT NỐI MASTER- SLAVE

setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);

// khoi rao spi

while (1)

{

spi_write(dig[value]); // ghi value den spi

value++; // tang value

Trang 14

setup_spi(spi_slave | spi_h_to_l | spi_ss_disabled);

// khoi tao spi

output_D(value); // xuat value ra portD

output_bit(pin_B0,0); // cho hien thi

}

Trang 15

4.2 Chuẩn giao tiếp I2C của vi điều khiển PIC 16F877A

Sơ đồ khối MSSP ở chế độ I2C tớ:

Sơ đồ khối MSSP ở chế độ I2C chủ:

Trang 16

- Chế độ I2C có thể hoạt động ở nhiều chế độ khác nhau:

 Một chủ một tớ (one master – one slave)

 Một chủ nhiều tớ (one master – multi slave)

 Nhiều chủ nhiều tớ (Multi master – multi slave)

- Khi truyền dữ liệu đáp ứng ngắt ở Start bit và Stop bit để biết khi nào đường Bus rảnh

- Hai chân được sử dụng để truyền:

+ Xung clock nối tiếp (SCL): RC3 /SCK/SCL

+ Dữ liệu nối tiếp (SDA): RC4/SDI/SDA

- Chân SCL và SDA phải có điện trở kéo lên nguồn

- Có 6 thanh ghi cần quan tâm trong chế độ hoạt động I2C:

+ Thanh ghi điều khiển 1 MSSP (SSPCON1)

+ Thanh ghi điều khiển 2 MSSP (SSPCON2)

+ Thanh ghi trạng thái MSSP (SSPSTAT)

+ Thanh ghi nhận nối tiếp/ đệm phát (SSPBUF)

+ Thanh ghi dịch MSSP (SSPSR): dịch dữ liệu vào/ra – không thể truy xuất trực tiếp + Thanh ghi định địa chỉ MSSP (SSPADD): trong chế độ tớ thì chứa địa chỉ thiết bị tớ, trong chế độ chủ thì 7bit thấp hoạt động như bộ phát tốc độ Baud nạp lại giá trị

HOẠT ĐỘNG

- Cho phép: set bit SSPEN (SSPCON1<5>)

- 4 bit lựa chọn chế độ SSPCON1<3:0> cho phép một trong những chế độ I2C sau được chọn:

+ Chế độ chủ

+ Chế độ tớ (định địa chỉ 7bit)

+ Chế độ tớ (định địa chỉ 10bit)

Trang 17

+ Chế độ tớ (định địa chỉ 7bit), cho phép ngắt ở bit Start và bit Stop

+ Chế độ tớ (định địa chỉ 10bit), cho phép ngắt ở bit Start và bit Stop

+ Chế độ master điều khiển Firmware, slave chờ

CHẾ ĐỘ TỚ:

- Chân SCL và SDA được định cấu hình là ngõ vào

- Phần cứng luôn tạo ra một ngắt trên một kết nối địa chỉ

- Khi một địa chỉ được kết nối hoặc dữ liệu truyền đi sau một sự kết nối địa chỉ được nhận, thì phần cứng phát ra xung ACK một cách tự động, xung này do bên nhận kéo đường SDA xuống mức thấp để báo cho biết đã nhân đủ 8bit Và chuyển giá trị hiện thời trong thanh ghi SSPSR vào thanh ghi SSPBUF

- ACK không được phát ra trong các điều kiện sau:

+ Bô đệm đầy, bit BF (SSPSTAT<0>) được set trước khi dữ liệu truyền đi được nhận +Bit báo tràn SSPOV (SSPCON1<6>) được set trước khi dữ liệu truyền đi được nhận

- Trong trường hợp này,nội dung SSPSR không chuyển vào SSPBUF, nhưng bit SSPIF (PIR<3>) được set

- Bit BF được xóa bằng cách đọc thanh ghi SSPBUF, trong khi SSPOV được xóa bằng phần mềm

chỉ, bit BF, bit SSPOV được xóa thì các sự kiện sau xảy ra:

1.Giá trị trong SSPSR được chuyển vào SSPBUF

2.Bit BF được set

3.Xung ACK được phát ra

Trang 18

4.Bit ngắt SSP được set (nếu cho phép) ở cạnh xuống xung thứ 9 của xung clock (SCL)

- Trong chế độ 10bit, slave cần nhận 2byte địa chỉ 5bit cao (MSbs) của byte thứ nhất xác định đây có phải là 10bit địa chỉ hay không Bit R/W ( SSPSTAT<2>) phải phải xác định một sự kiện ghi thì thiết bị slave sẽ nhận byte địa chỉ thứ 2

Đối với 10 bit địa chỉ thì byte thứ nhất sẽ là ‘11110 A9 A8 0’ , A9 và A8 là 2 MSbs của địa chỉ

Các sự kiện với 10 bit địa chỉ, bước 7 đến bước 9 giành cho bộ phát tớ:

1.Nhận byte thứ nhất (high) của địa chỉ ( bit BF, bit SSPIF, bit UA (SSPSTAT<1>) được set

2.Cập nhật SSPADD với byte thứ hai (low) của địa chỉ (xóa bit UA và cách li đường SCL)

3.Đọc thanh ghi SSPBUF (xóa bit BF và bit SSPIF)

4.Nhận byte thứ hai (low) của địa chỉ ( bit BF, bit SSPIF, bit UA (SSPSTAT<1>) được set.)

5.Cập nhật SSPADD với byte thứ nhất (high) của địa chỉ (nếu cách li đường SCL thì UA được xóa)

6.Đọc thanh ghi SSPBUF (xóa bit BF và bit SSPIF)

7.Nhận điều kiện Start lặp lại

8 Nhận byte thứ nhất (high) của địa chỉ ( bit BF, bit SSPIF được set.)

9 Đọc thanh ghi SSPBUF (xóa bit BF và bit SSPIF)

- Bit định hướng dữ liệu R/W của byte dữ liệu:

+ Nhận: R/W = 0  truyền từ chủ đến tớ

+ Truyền: R/W=1 truyền từ tớ đến chủ

CHẾ ĐỘ CHỦ:

- Cho phép bằng các bit SSPM trong SSPCON1

- Các chân SDA , SCL được điều khiển bằng phần cứng của MSSP

- Khi chế đọ Master được cho phép, người sử dụng có 6 tùy chọn

1.Xác nhận 1 điều kiện Start trên SDA và SCL

Trang 19

2.Xác nhận 1 điều kiện Start lặp lại trên SDA và SCL

3.Ghi vào thanh ghi SSPBUF dữ liệu/địa chỉ truyền khởi đầu

4.Định cấu hình port I2C để nhận dữ liệu

5.Phát tín hiệu ACK sau khi nhận 1 byte dữ liệu

6 Phát 1 điều kiện Stop trên SDA và SCL

- Các sự kiện sau sẽ làm cho bit SSPIF được set:

+ Điều kiện Start

+ Điều kiện Stop

+ Truyền dữ liệu byte truỳên/nhận

+ Truyền ACK

+ Điều kiện Start lặp lại

Hoạt động

- Thiết bị chủ tạo ra xung clock nối tiếp, điều kiện Start, Stop

- Trong chế độ master truyền, SDA là ngõ ra dữ liệu nối tiếp, SCL là ngõ ra xung clock nối tiếp Byte đầu tiên chứa 7 bit địa chỉ thiết bị tớ và 1 bit R/W=0 Dữ liệu nối

tiếp được truyền 8 bit 1 lầnvà sau mỗi byte được truyền thì nhận 1bit ACK

- Trong chế độ master nhận, byte được truyền đầu tiên chứa 7 bit địa chỉ thiết bị tớ và

1 bit R/W=1 Dữ liệu nối tiếp được nhận qua SDA, trong khi SCL vẫn là ngõ ra xung clock nối tiếp Dữ liệu nối tiếp được nhận 8bit 1lần và sau mỗi byte dữ liệu được

nhận thì truyền bit ACK

3 Người dùng nạp địa chỉ Slave để truyền vào SSPBUF

4 Địa chỉ được dich ra chân SDA cho đến khi 8 bit được truyền

5 Module MSSP dịch vào bit ACK từ thiết bị slave và ghi nó vào SSPCON2<6>

6 Module MSSP phát ra ngắt ở cuối chu kỳ xung clock (SCL) thứ 9, bằng cách set SSPIF

Trang 20

7 Người dùng nạp 8 bit dữ liệu vào SSPBUF

8 Dữ liệu được dich ra chân SDA cho đến khi 8 bit được truyền

9 Module MSSP dịch vào bit ACK từ thiết bị slave và ghi nó vào SSPCON2<6>

10 Module MSSP phát ra ngắt ở cuối chu kỳ xung clock (SCL) thứ 9, bằng cách set SSPIF

11 Người dùng phát ra điều kiện Stop bằng cách set bit cho phép Stop, PEN (SSPCON2<2>)

12 Ngắt được phát ra khi điều kiện Stop hoàn thành

i2c_start(); // dieu kien start

i2c_write(SLAVE_ADDRESS); // ghi dia chi slave

i2c_write(a); //ghi du lieu

i2c_stop(); // dieu kien stop

Trang 22

state = i2c_isr_state(); //trang thai i2c

if(state < 0x80) // neu dang ghi thi doc du lieu

enable_interrupts(GLOBAL); // cho phep ngat toan cuc

enable_interrupts(INT_SSP); // cho phep ngat ssp

set_tris_D(0);

set_tris_C(0);

while(1)

{

Trang 23

output_bit(pin_C0,0); // cho hien thi

}

}

5 Chuẩn giao tiếp UART của vi điều khiển PIC 16F877A

Trong PIC16F877A có tất cả 5 thanh ghi cho quá trình điều khiển UART Trong đó có 2

thanh ghi chức năng TXSTA, RCSTA, 2 thanh ghi dữ liệu RCREG, TXREG., và thanh

ghi tốc độ Baud: SPBRG

 Thanh ghi TXSTA (address 98h):

R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0

CSRC TX9 TXEN SYNC - BRCH TRMT TX9D

CSRC - bit lựa chọn nguồn xung clock

TX9 - chọn chế độ truyền 9 bit: (=1: 9 bit, =0: 8 bit)

TXEN - cho phép truyền

SYNC - chọn chế độ truyền đồng bộ hay không đồng bộ: (=1: đồng

bộ, =0: không đồng bộ)

BRGH - chọn chế độ truyền cao hay thấp =1 HIGH, =0: LOW)

TRMT - bit báo trạng thái của bộ đệm: =1: TSR rỗng(dữ liệu đã được

truyền xong), =0: TSR đầy (dữ liệu còn trong bộ đệm của UART)

TX9D - giá trị của bít thứ 9 trong chế độ truyền 9 bit Bit này có thể dùng

lưu bit Parity

 Thanh ghi RCSTA:

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 R-0

SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

Ngày đăng: 04/09/2016, 10:42

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w