Mục lục:

Cách giao diện Ma trận LED điều khiển MAX7219 8x8 với Vi điều khiển ATtiny85: 7 bước
Cách giao diện Ma trận LED điều khiển MAX7219 8x8 với Vi điều khiển ATtiny85: 7 bước

Video: Cách giao diện Ma trận LED điều khiển MAX7219 8x8 với Vi điều khiển ATtiny85: 7 bước

Video: Cách giao diện Ma trận LED điều khiển MAX7219 8x8 với Vi điều khiển ATtiny85: 7 bước
Video: STM8|Phần 3.1-STM8S105C6 giao tiếp LED ma trận 8x8 hiển thị chữ A/STM8 with Led Matrix 2024, Tháng bảy
Anonim
Cách giao diện Ma trận LED điều khiển MAX7219 8x8 với Vi điều khiển ATtiny85
Cách giao diện Ma trận LED điều khiển MAX7219 8x8 với Vi điều khiển ATtiny85

Bộ điều khiển MAX7219 được sản xuất bởi Maxim Integrated là trình điều khiển màn hình cathode chung đầu vào / đầu ra nối tiếp có thể giao tiếp vi điều khiển với 64 đèn LED riêng lẻ, màn hình LED số 7 đoạn lên đến 8 chữ số, màn hình biểu đồ thanh, v.v. Bao gồm trên -chip là một bộ giải mã BCD mã-B, mạch quét đa hợp, trình điều khiển phân đoạn và chữ số và một RAM tĩnh 8 × 8 lưu trữ từng chữ số.

Các mô-đun MAX7219 rất thuận tiện để sử dụng với các bộ vi điều khiển như ATtiny85, hoặc trong trường hợp của chúng tôi là Bảng Tinusaur.

Bước 1: Phần cứng

Phần cứng
Phần cứng
Phần cứng
Phần cứng

Các mô-đun MAX7219 thường trông như thế này. Chúng có một xe buýt đầu vào ở một bên và xe buýt đầu ra ở bên kia. Điều này cho phép bạn tạo chuỗi 2 hoặc nhiều mô-đun, tức là cái khác, để tạo ra các thiết lập phức tạp hơn.

Các mô-đun mà chúng tôi đang sử dụng có khả năng kết nối trong một chuỗi bằng cách sử dụng 5 jumper nhỏ. Xem hình bên dưới.

Bước 2: Sơ đồ chân và tín hiệu

Mô-đun MAX7219 có 5 chân:

  • VCC - nguồn (+)
  • GND - mặt bằng (-)
  • DIN - Đầu vào dữ liệu
  • CS - Chọn chip
  • CLK - Đồng hồ

Điều đó có nghĩa là chúng ta cần 3 chân ở phía vi điều khiển ATtiny85 để điều khiển mô-đun. Đó sẽ là:

  • PB0 - kết nối với CLK
  • PB1 - kết nối với CS
  • PB2 - được kết nối với DIN

Điều này là đủ để kết nối với mô-đun MAX7219 và lập trình nó.

Bước 3: Giao thức

Giao thức
Giao thức

Giao tiếp với MAX7219 tương đối dễ dàng - nó sử dụng giao thức đồng bộ có nghĩa là đối với mỗi bit dữ liệu chúng tôi gửi đi sẽ có một chu kỳ đồng hồ biểu thị sự hiện diện của bit dữ liệu đó.

Nói cách khác, chúng tôi gửi 2 chuỗi song song cho các bit - một cho đồng hồ và một cho dữ liệu. Đây là những gì phần mềm làm.

Bước 4: Phần mềm

Phần mềm
Phần mềm

Cách hoạt động của mô-đun MAX7219 này là:

  • Chúng tôi ghi các byte vào thanh ghi nội bộ của nó.
  • MAX7219 diễn giải dữ liệu.
  • MAX7219 điều khiển các đèn LED trong ma trận.

Điều đó cũng có nghĩa là chúng ta không phải luôn luôn xem xét các dãy đèn LED để thắp sáng chúng - bộ điều khiển MAX7219 đảm nhiệm việc đó. Nó cũng có thể quản lý cường độ của đèn LED.

Vì vậy, để sử dụng mô-đun MAX7219 một cách thuận tiện, chúng ta cần một thư viện các chức năng để phục vụ mục đích đó.

Đầu tiên, chúng ta cần một số hàm cơ bản để ghi vào các thanh ghi MAX7219.

  • Ghi một byte vào MAX7219.
  • Viết một từ (2 byte) vào MAX7219.

Hàm ghi một byte vào bộ điều khiển trông giống như sau:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Đặt CLK thành LOW if (data & 0x80) // Che MSB của dữ liệu PORTB | = (1 << MAX7219_DIN); // Đặt DIN thành CAO else PORTB & = ~ (1 << MAX7219_DIN); // Đặt DIN thành LOW PORTB | = (1 << MAX7219_CLK); // Đặt CLK thành dữ liệu CAO << = 1; // Dịch sang trái}}

Bây giờ chúng ta có thể gửi byte đến MAX7219, chúng ta có thể bắt đầu gửi lệnh. Điều này được thực hiện bằng cách gửi 2 lần - lần 1 cho địa chỉ của sổ đăng ký nội bộ và lần 2 cho dữ liệu chúng tôi muốn gửi.

Có hơn một tá thanh ghi trong bộ điều khiển MAX7219.

Gửi một lệnh hoặc một từ về cơ bản là gửi 2 byte liên tiếp. Việc thực hiện chức năng đó rất đơn giản.

void max7219_word (địa chỉ uint8_t, dữ liệu uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // Đặt CS thành LOW max7219_byte (address); // Gửi địa chỉ max7219_byte (data); // Gửi dữ liệu PORTB | = (1 << MAX7219_CS); // Đặt CS thành HIGH PORTB & = ~ (1 << MAX7219_CLK); // Đặt CLK thành LOW}

Điều quan trọng cần lưu ý ở đây là dòng nơi chúng ta đưa tín hiệu CS trở lại mức CAO - điều này đánh dấu sự kết thúc của chuỗi - trong trường hợp này là sự kết thúc của lệnh. Một kỹ thuật tương tự được sử dụng khi điều khiển nhiều ma trận được kết nối trong một chuỗi. Bước tiếp theo, trước khi chúng ta bắt đầu bật và tắt đèn LED, là khởi tạo bộ điều khiển MAX7219. Điều này được thực hiện bằng cách ghi các giá trị nhất định vào các thanh ghi nhất định. Để thuận tiện, trong khi mã hóa nó, chúng ta có thể đặt trình tự khởi tạo trong một mảng.

uint8_t initseq = {0x09, 0x00, // Đăng ký chế độ giải mã, 00 = Không giải mã 0x0a, 0x01, // Đăng ký cường độ, 0x00.. 0x0f 0x0b, 0x07, // Thanh ghi giới hạn quét, 0x07 để hiển thị tất cả các dòng 0x0c, 0x01, // Thanh ghi tắt máy, 0x01 = Hoạt động bình thường 0x0f, 0x00, // Thanh ghi hiển thị-kiểm tra, 0x00 = Hoạt động bình thường};

Chúng ta chỉ cần gửi 5 lệnh trên theo thứ tự dưới dạng các cặp địa chỉ / dữ liệu. Bước tiếp theo - thắp sáng một hàng đèn LED.

Điều này rất đơn giản - chúng tôi chỉ viết một lệnh trong đó byte đầu tiên là địa chỉ (từ 0 đến 7) và byte thứ 2 là 8 bit đại diện cho 8 đèn LED trong hàng.

void max7219_row (uint8_t address, uint8_t data) {if (address> = 1 && address <= 8) max7219_word (address, data); }

Điều quan trọng cần lưu ý là điều này sẽ chỉ hoạt động cho 1 ma trận. Nếu chúng ta kết nối nhiều ma trận hơn trong một chuỗi, tất cả chúng sẽ hiển thị cùng một dữ liệu. Lý do cho điều này là sau khi gửi lệnh, chúng tôi đưa tín hiệu CS trở lại HIGH, điều này khiến tất cả các bộ điều khiển MAX7219 trong chuỗi chốt lại và hiển thị bất kỳ lệnh cuối cùng nào.

Đề xuất: