SPI trên vi điều khiển

Một phần của tài liệu Nghiên cứu chế tạo biển báo giao thông tự phát sáng (Trang 35 - 38)

Để truyền dữ liệu từ vi điều khiển vào bộ ghi dịch ta có thể dùng một đoạn chƣơng trình phần mềm lập trình cho vi điều khiển truyền từng bit của dữ liệu. Vi điều khiển của hãng Atmel Atmega16 có phần cứng hỗ trợ việc truyền dữ liệu nối tiếp với các thiết bị ngoại vi (SPI).

Hình vẽ 2. 3: Sơ đồ khối SPI của Atmega16

SPI của Atmega16 có 2 chế độ Master và Slave:

Ở chế độ Slave, chân Slave Select ( SS ) phải đặt là đầu vào .Khi chân này bị kéo xuống mức thấp thì SPI sẽ hoạt động, chân MISO có thể đặt làm đầu ra, các chân khác là đầu vào. Khi chân SS đƣợc kéo lên mức cao ở mức cao SPI ngừng nhận dữ liệu từ bên ngoài vào. Chân SS có tác dụng đồng bộ byte, gói giúp cho bộ đếm bit của slave đồng bộ với bộ phát xung của master. Khi SS bị kéo lên mức cao thì SPI slave sẽ tái lập lại mức logic truyền và nhận, đồng thời xóa dữ liệu đã nhận trong thanh ghi dịch.

Ở chế độ Master, ta có thể đặt SS làm đầu ra hay vào tùy ý: Nếu SS đƣợc đặt làm đầu ra thì nó không làm ảnh hƣởng tói SPI, nó chỉ có tác dụng điều khiển mức logic cho chân SS của SPI slave.Nếu SS đƣợc đặt làm đầu vào thì nó phải đƣợc giữ ở mức cao để đảm bảo các hoạt động của SPI master. Nếu SPI bị kéo xuống mức thấp bởi thiết bị ngoại vi thì nó sẽ hiểu đó là một Master khác nên sẽ đặt lại SPI ở chế độ Slave và bắt đầu truyền dữ liệu. Để tránh xung đột trong quá trình này SPI tiến hành các thủ tục sau:

- Xóa bit MSTR trong thanh ghi SPCR để SPI ở chế độ Slave. Do đó các chân MOSI và SCK trở thành đầu vào.

- Thiết lập mức cao cho cờ SPIF trong thanh ghi SPCR. Nếu ngắt SPI và ngắt toàn cục đƣợc cho phép thì quá trình ngắt sẽ đƣợc thực hiện. - Thiết lập SPI truyền dữ liệu cho 74HC595

Để kết nối SPI giữa Atmega16 và 74HC595 ta cần nối chân SCK của vi điều khiển với chân SH_CP của 74HC595, nối chân MOSI của vi điều khiển với chân

DS của 74HC595. Ngoài ra còn phải dùng 1 chân của vi điều khiển nối với chân ST_CP của 74HC595 để chốt dữ liệu tại đầu ra của 74HC595.

Hình vẽ 2. 4: Ghép nối vi điều khiển với 74HC595

Do việc giao tiếp giữa vi điều khiển và 74HC595 chỉ là quá trình truyền dữ liệu từ vi điều khiển đến 74HC595 nên ta có thể thiết lập cho SPI ở chế độ master với cách sắp xếp dữ liệu theo trật tự bit có trọng số cao thì mã hóa cho hàng ở trên và các đầu ra của 74HC595 cũng đƣợc nối với các chân của ma trận led theo trật tự trên thì ta đặt bit DORD = 0.

Các giá trị cần nạp cho thanh ghi: SPCR=0x50

SPSR=0x00

Sau đó trong chƣơng trình mỗi khi muốn gửi 1 byte nào đó ra ta có thể dùng lệnh trong CodeVisionAVR :

spi(byte);

Lệnh này cho phép gửi 1 byte từ vi điều khiển qua chân MOSI tới thiết bị ngoại vi. Sau đó nếu muốn chốt dữ liệu ta cần phải sử dụng 1 thủ tục để gửi 1 sƣờn dƣơng tới chân ST_CP của 74HC595 thông:

void latchdata( ) {

PORTB.3=1; }

Một phần của tài liệu Nghiên cứu chế tạo biển báo giao thông tự phát sáng (Trang 35 - 38)

Tải bản đầy đủ (PDF)

(98 trang)