Điều khiển cấp nguồn cho hàng dùng 74HC595

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 34)

Chức năng của 74HC595

74HC595 là bộ ghi dịch 8 bít gồm có:

 1 đầu vào cho phép (OE)

 1 đầu vào chọn thanh ghi dịch (MR)  1 đầu vào dữ liệu nối tiếp (DS)

 1 đầu vào cấp xung cho thanh ghi dịch (SH_CP)  1 đầu vào cấp xung cho thanh ghi chứa (ST_CP)  8 đầu ra 3 trạng thái ( Q1 đến Q7 và Q7’)

Bảng 2. 1: Bảng trạng thái 74HC595

Sử dụng 74HC595 để cấp nguồn cho các cột của ma trận

Khi dùng 74HC595 để cấp nguồn cho ma trận led ta nối các đầu ra song song của 74HC595 với các chân cấp nguồn cho hàng của ma trận. Đồng thời phải sử dụng 3 chân của vi điều khiển để nối với các chân DS, SH_CP, ST_CP của 74HC595. Các bit dữ liệu mã hóa mức logic cần cấp cho các hàng của 1 cột ma trận sẽ đƣợc truyền liên tiếp DS của 74HC595. Để đồng bộ bit thì vi điều khiển mỗi khi xuất 1 bit tới chân DS sẽ phát một xung có sƣờn dƣơng vào chân SH_CP. Sau khi truyền xong hết dữ liệu, để các led trên cột sáng thì ta phải chuyển dữ liệu trong thanh ghi dịch vào các đầu ra của 74HC595 bằng cách cấp 1 xung sƣờn dƣơng vào chân ST_TP. Chú ý để IC có thể hoạt động và đẩy dữ liệu ra các chân đầu ra thì chân OE phải nối đất, chân MR nối dƣơng nguồn.

Hình vẽ 2. 8: Ghép nối 74HC595 điều khiển cấp nguồn cho LED ma trận

Khi mở rộng ma trận LED ta ghép nhiều 74HC595 nối tiếp nhau: các chân SH_CP đƣợc nối chung với 1 nguồn cấp xung, các chân ST_CP cũng đƣợc nối chung với nhau, đầu ra Q7’ của IC phía trƣớc đƣợc nối với đầu vào DS của IC tiếp theo. Khi đó dữ liệu sẽ đƣợc dịch đồng bộ từ IC này sang IC khác và đầu ra của các IC cũng đƣợc chốt đồng bộ.

Hình vẽ 2. 2: Ghép nối tiếp nhiều 74HC595 2.2. Truyền dữ liệu cấp nguồn cho hàng sử dụng SPI

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

Để 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; }

2.3. Thuật toán điều khiển bảng LED

2.3.1. Điều khiển hiển thị LED ma trận

Để tiện cho việc truy xuất dữ liệu ta có thể khai báo 1 mảng trong bộ nhớ Flash của Atmega16 (hoặc thẻ nhớ đi kèm) lƣu các dữ liệu này. Khi đó địa chỉ đầu của dữ liệu mã hóa 2 ký tự gần nhau thì cách nhau 6. Vì vậy khi biết đƣợc vị trí của 1 kí tự trong font thì ta có thể xác định địa chỉ của dữ liệu mã hóa kí tự đó. Trên cơ sở đó ta có thể dễ dàng xuất dữ liệu của kí tự cần hiển thị ra .

Sau khi xác định đƣợc các mức logic cần cấp cho ma trận led thì ta có thể tiến hành điều khiển quá trình cấp nguồn cho LED ma trận để có đƣợc hình ảnh nhƣ ý muốn. Việc cấp nguồn cho led ma trận phụ thuộc vào cách mã hóa dữ liệu (theo từng hàng hay theo từng cột của ma trận). Nếu dữ liệu mã hóa là các hàng trong 1 cột (hàng) thì tại một thời điểm ta chỉ cấp nguồn cho một cột (hàng). Quá trình điều khiển hiển thị led ma trận 8x8 theo từng cột (hàng) bao gồm các bƣớc sau:

- B1: Lấy mẫu dữ liệu: lấy các dữ liệu về mức logic cần cấp cho các cột (hàng) của ma trận

- B2: Bắt đầu với cột i=1 - B3: Cấp nguồn cho cột i

- B4: Xuất dữ liệu tƣơng ứng với cột đó ( đã đƣợc lấy mẫu từ trƣớc) để cấp nguồn cho các hàng của ma trận

- B5: i=i+1 ; quay lại bƣớc 2 nếu i>8 ,nếu không thì quay lại bƣớc 3 Nếu chỉ điều khiển 1 số lƣợng LED ma trận nhỏ thì ta có thể dùng trực tiếp các chân của vi điều khiển để điều khiển việc cấp nguồn cho led ma trận. Nếu ma trận lớn hơn thì ta phải dùng các bộ ghi dịch để cấp nguồn cho led ma trận.

Để hình ảnh trên led ma trận hiển thị rõ ràng không bị nháy ta cần phải điều khiển tần số quét LED ma trận. Có thể dùng các bộ định thời của vi điều khiển để điều khiển thời điểm cấp nguồn cho led ma trận tạo tần số quét.

Tóm lại để điều khiển LED ma trận ta đầu tiên ta cần phải xác định đƣợc phƣơng pháp cấp nguồn cho ma trận (cấp nguồn theo từng cột hay từng hàng). Sau khi đã xác định đƣợc phƣơng pháp cấp nguồn ta cần phải xây dựng font chữ cho phù hợp với cách cấp nguồn. Từ đây ta có thể tiến hành điều khiển việc cấp nguồn cho ma trận để dòng chữ trên ma trận hiển thị nhƣ mong muốn.

Bắt đầu

i>8 Lấy mẫu dữ liệu

i=1

Xuất dữ liệu của cả cột i ra 74HC595 i=i+1 F T Chốt dữ liệu cột i

Hình vẽ 2. 5: Lƣu đồ thuật toán điều khiển LED ma trận 2.3.2. Điều khiển lấy dữ liệu từ thẻ nhớ qua giao tiếp SPI

Bảng 2. 2: Các chân thẻ SD Card

Từ bảng 2, rõ ràng là nhiều chân của thẻ SD có mục đích kép. Thẻ SD hỗ trợ ba giao thức, mỗi hai trong ba loại đó đƣợc phân biệt với nhau. Những mô tả đƣợc liệt kê cho thấy các mỗi chân có chức năng cho hai chế độ chính, chế độ SD và chế độ SPI.

Giao thức SD 1-bit là một giao thức nối tiếp đồng bộ với một dòng dữ liệu, đƣợc sử dụng để truyền dữ liệu số lƣợng lớn, một đƣờng xung để đồng bộ hóa, và một dòng lệnh, đƣợc sử dụng để gửi các khung truyền. Giao thức SD 1-bit hỗ trợ một cách rõ ràng chia sẻ bus. Mô hình phản ứng máy chủ - đơn lẻ đơn giản cho phép nhiều thẻ SD chia sẻ chung một xung đơn và đƣờng DA T0.

Giao thức SD 4-bit là gần giống với giao thức SD 1-bit. Sự khác biệt chính là chiều rộng bus - truyền dữ liệu số lƣợng lớn xảy ra trên một 4-bit bus song song thay vì một dây duy nhất. Với thiết kế phù hợp, điều này có khả năng tăng gấp bốn lần thông lƣợng để truyền dữ liệu số lƣợng lớn. Cả giao thức SD 1-bit và 4-bit mặc định cần CRC bảo vệ số lƣợng lớn dữ liệu truyền. Một CRC, hoặc Cyclic Redundancy Check, là một phƣơng pháp đơn giản để phát hiện sự hiện diện của các lỗi bit-đảo ngƣợc đơn giản trong một khối truyền dữ liệu.

Trong chế độ SD 4-bit, dữ liệu đầu vào đƣợc ghép trên đƣờng truyền bốn bus (DAT) và CRC 16-bit đƣợc tính độc lập cho mỗi bốn dòng. Trong việc thực hiện ở tất cả các phần mềm, tính toán CRC dƣới những điều kiện có thể rất phức tạp dẫn tới tổng phí tính toán có thể giảm thiểu lợi ích từ việc mở rộng bus 4-bit. Một CRC 4-bit song song là đủ để thực hiện trong phần cứng, tuy nhiên, giải pháp tùy chỉnh ASIC hoặc lập trình logic có nhiều khả năng tận dụng đƣợc lợi ích từ việc mở rộng bus 4-bit.

Giao thức thứ ba đƣợc hỗ trợ là các chế độ SPI của giao thức thẻ SD. Nó khác với các giao thức 1-bit và 4-bit trong đó các giao thức hoạt động trên một giao diện bus thông dụng và nổi tiếng, Serial Peripheral Interface (SPI). SPI là một giao thức nối tiếp đồng bộ cực kỳ phổ biến cho các thiết bị ngoại vi giao tiếp với vi điều khiển. Hầu hết các vi điều khiển hiện đại, bao gồm cả AVR, hỗ trợ SPI nguyên bản ở mức dữ liệu tƣơng đối cao. Chế độ thông tin liên lạc SPI chỉ hỗ trợ một tập hợp con của giao thức đầy đủ thẻ SD. Tuy nhiên, hầu hết các bộ lệnh không đƣợc hỗ trợ chỉ đơn giản là không cần thiết trong chế độ SPI. Một chức năng đầy đủ của thẻ SD có thể đƣợc thực hiện chỉ sử dụng SPI.

Hình vẽ 2.27 biểu diễn giao diện điện của thẻ SD cho chế đố SPI. Giao thức SD cần các điện trở phụ bên ngoài và phải luôn sử dụng chúng ngay cả khi các chân chƣa sử dụng. Lƣu ý rằng chân SS phải luôn đƣợc chọn trong khoảng thời gian nhiều octet gửi qua SPI, và nhƣ vậy, không thể sử dụng với chức năng tự động chọn chân slave bởi vi điều khiển và đòi hỏi phải xử lý thủ công trong phần mềm.

Hình vẽ 2. 13: Mạch kết nối thẻ SD Card với vi điều khiển

2.3.3. Giao thức

Giao thức thẻ SD mô tả ở đây là chế độ SPI. Trình tự khởi tạo, định dạng khung hình, định dạng phản hồi và lệnh định danh khác nhau cho tất cả chế độ SD 4-bit và SD 1-bit.

Giao thức SD là một giao thức lệnh phản hồi đơn giản. Nếu gọi dữ liệu giao tiếp giữa chip điều khiển chủ (hãy gọi là host) và thẻ SD là một “thông điệp” (Message) thì thông điệp này đƣợc chia thành 3 loại: Lệnh (Command), Trả lời (Response) và Dữ liệu (Data token). Giao tiếp giữa host và card đƣợc bắt đầu khi host kéo chân chọn chip CS (chân 1) xuống mức 0. “Lệnh” đƣợc host truyền đến card thông qua đƣờng MOSI (chân 2). “Trả lời” đƣợc card gửi lên host qua đƣờng MISO và đƣờng CLK là đƣờng giữ nhịp của host với card. Giao tiếp giữa host và card thƣờng đƣợc phân thành 2 giai đoạn: giai đoạn khởi động và giai đoạn truy cập dữ liệu. Trong giai đoạn khởi động, host sẽ gửi một số lệnh để khởi động, reset, cài đặt một số thông số giao tiếp nhƣ độ dài 1khối dữ liệu (chúng ta gọi là sector)…Và trong giai đoạn truy cập dữ liệu, một hay nhiều khối dữ liệu sẽ đƣợc host ghi vào card hoăc host đọc từ card một cách liên tiếp. Trong các loại “thông điệp” giao tiếp giữa host và card, Lệnh là thông điệp quan trọng và phức tạp nhất. Để có thể thực hiện giao tiếp giữa host và card chúng ta cần biết cấu trúc và chức năng của Lệnh. Phần này chúng ta khảo sát cấu trúc của 1 lệnh và sau đó tìm hiểu một số lệnh cơ bản nhất giao tiếp với MMC/SD card.

Lệnh từ host gửi đến card phải đƣợc đóng gói trong 1 định dạng gồm 48 bit. Ý nghĩa của các bit đƣợc giải thích nhƣ sau:

Hình vẽ 2.14: Các lệnh giao tiếp SD Card

Dòng đầu tiên trong bảng trên mô tả tên các bit (Description), dòng thứ 2 chỉ vị trí bit (Bit position), dòng 3 chỉ độ rộng của từng nhóm bit (Width) và dòng 4 chỉ các giá trị mà các bit có thể mang.

- Bit 47, gọi là start bit, là bit báo hiệu cho card rằng sắp có 1 lệnh đƣợc

host gửi đến. Giá trị của start bit luôn bằng 0.

- Bit 46, Tranmission bit, bit này nói rằng Lệnh sẽ đƣợc “gửi” theo chiều

từ host đến card. Bit này luôn có giá trị 1 trong tất cả các lệnh.

- Bit 45:40, các bit từ 40 đến 45 gọi là chỉ số lệnh (Command index).

Thực ra đây là mã lệnh mà host gửi cho card. Có 1 danh sách các lệnh cơ bản, mỗi lệnh có 1 chức năng riêng và chỉ số lệnh là thứ tự của lệnh trong danh sách này. Chúng ta sẽ khảo sát chức năng của từng lệnh sau.

- Bit 39:8, các bit từ 8 đến 39 là các tham số của lệnh (argument). Ví dụ

host muốn đọc 1 khối dữ liệu từ card, trƣớc hết nó phải gửi mã lệnh (command index) sau đó phải gửi kèm địa chỉ của khối dữ liệu mà nó muốn đọc. Giá trị địa chỉ khối dữ liệu trong ví dụ này gọi là tham số của lệnh đọc dữ liệu.

- Bit 7:1, đây là 7 bit mang giá trị kiểm tra. CRC là viết tắt của cụm từ

Cyclic Redundancy Check, là một chuẩn kiểm tra tính hợp lý của dữ liệu đƣợc gửi. Nhìn chung việc tính CRC tƣơng đối phức tạp, rất may trong các lệnh giao tiếp cơ bản với card chỉ có lệnh 0 (CMD0) là cần CRC, chúng ta sẽ khảo sát kỹ hơn về điều này trong lúc viết chƣơng trình giao tiếp với card.

- Bit 0, là Stop bit báo hiệu lệnh đã kết thúc, bit này có giá trị mặc định là

1.

Nhƣ vậy để gửi 1 lệnh có nghĩa đến card, host cần phải sắp xếp các bit thành 1 định dạng 48 bit nhƣ trên, sau đó chia 48 bit này thành từng byte để gửi đến card

thông qua SPI. Trong các phần tiếp theo chúng ta sẽ khảo sát các lệnh cơ bản giao tiếp với MMC/SD với host là vi điều khiển AVR.

Thẻ SD cung cấp một cách hiệu quả để lƣu trữ một lƣợng lớn dữ liệu trong thiết bị lƣu trữ bộ nhớ di động. Sự đơn giản của giao thức thẻ nhớ SD và sự linh hoạt trong giao tiếp với các thiết bị này rất lý tƣởng để sử dụng với vi điều khiển nhỏ.

Kết hợp với chi phí thấp, công suất thấp của AVR và các tính năng tiên tiến của nó nhƣ tích hợp DMA và SPI, một giải pháp hoàn chỉnh khai thác dữ liệu nhanh và chi phí thấp có thể đƣợc thực hiện một cách nhanh chóng và không tốn kém. Hỗ trợ thêm ứng dụng cấp cho một hệ thống tập tin nhƣ FAT16 có thể mở rộng tính hữu dụng của giải pháp này hơn nữa.

SPI và thẻ nhớ SD là những phƣơng pháp hữu hiệu để lƣu trữ dữ liệu và

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 34)

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

(98 trang)