Vi điều khiển TivaC thường được sử dụng trong các ứng dụng nhúng cần giao tiếp với các thiết bị ngoại vi, bao gồm cả thanh ghi dịch. Bài viết này sẽ hướng dẫn cách đưa dữ liệu nối tiếp vào thanh ghi dịch 74HC595 bằng TivaC.
Thanh ghi dịch 74HC595 là một IC phổ biến cho phép chuyển đổi dữ liệu nối tiếp thành dữ liệu song song. Nó có 8 bit đầu ra có thể được sử dụng để điều khiển các thiết bị như LED, màn hình LCD và các thiết bị ngoại vi khác. Việc sử dụng thanh ghi dịch giúp giảm số lượng chân I/O cần thiết trên vi điều khiển.
Để đưa dữ liệu nối tiếp vào 74HC595, TivaC cần tạo ra ba tín hiệu: dữ liệu nối tiếp (DS), xung clock (SH_CP) và chốt dữ liệu (ST_CP).
Dữ liệu nối tiếp được gửi từng bit một trên chân DS. Mỗi xung clock trên chân SH_CP sẽ dịch chuyển dữ liệu vào thanh ghi dịch một bit. Khi tất cả 8 bit đã được dịch chuyển, một xung trên chân ST_CP sẽ chốt dữ liệu từ thanh ghi dịch vào thanh ghi lưu trữ, và dữ liệu sẽ xuất hiện ở các chân đầu ra song song (Q0-Q7).
Cấu hình chân trên TivaC để giao tiếp với 74HC595 cần được thực hiện trong phần khởi tạo. Ba chân được chọn cho DS, SH_CP và ST_CP cần được cấu hình là đầu ra kỹ thuật số. Ví dụ, nếu sử dụng chân PA2 cho DS, PA3 cho SH_CP và PA4 cho ST_CP, code khởi tạo có thể như sau (sử dụng thư viện TivaWare):
// Khai báo chân
#define DATA_PIN GPIO_PIN_2
#define CLOCK_PIN GPIO_PIN_3
#define LATCH_PIN GPIO_PIN_4
// Khởi tạo GPIO Port A
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA));
// Cấu hình chân là đầu ra kỹ thuật số
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, DATA_PIN | CLOCK_PIN | LATCH_PIN);
Sau khi đã cấu hình chân, dữ liệu có thể được gửi đến 74HC595 bằng cách sử dụng một vòng lặp để gửi từng bit một và tạo ra các xung clock tương ứng.
Ví dụ, để gửi giá trị 0x55 (01010101 nhị phân) đến thanh ghi dịch:
uint8_t data = 0x55;
// Chốt dữ liệu ở mức thấp
GPIOPinWrite(GPIO_PORTA_BASE, LATCH_PIN, 0);
// Gửi từng bit
for (int i = 7; i >= 0; i--) {
// Đặt dữ liệu
GPIOPinWrite(GPIO_PORTA_BASE, DATA_PIN, (data >> i) & 1);
// Tạo xung clock
GPIOPinWrite(GPIO_PORTA_BASE, CLOCK_PIN, 1);
GPIOPinWrite(GPIO_PORTA_BASE, CLOCK_PIN, 0);
}
// Chốt dữ liệu ở mức cao để cập nhật đầu ra
GPIOPinWrite(GPIO_PORTA_BASE, LATCH_PIN, LATCH_PIN);
Code trên sẽ lặp qua từng bit của dữ liệu, bắt đầu từ bit có trọng số cao nhất (MSB). Mỗi bit được ghi vào chân DATA_PIN, sau đó một xung clock được tạo ra trên chân CLOCK_PIN để dịch chuyển bit vào thanh ghi dịch. Cuối cùng, chân LATCH_PIN được đặt ở mức cao để chốt dữ liệu và cập nhật đầu ra của 74HC595.
Việc điều khiển các thiết bị ngoại vi thông qua thanh ghi dịch 74HC595 với TivaC yêu cầu hiểu rõ về cách thức hoạt động của thanh ghi dịch và cách cấu hình chân GPIO trên TivaC. Bằng cách sử dụng các hàm thư viện TivaWare và logic điều khiển đơn giản, bạn có thể dễ dàng giao tiếp với nhiều loại thiết bị ngoại vi khác nhau.