Spisu treści:

Jak połączyć matrycę LED z napędem MAX7219 8x8 z mikrokontrolerem ATtiny85: 7 kroków
Jak połączyć matrycę LED z napędem MAX7219 8x8 z mikrokontrolerem ATtiny85: 7 kroków

Wideo: Jak połączyć matrycę LED z napędem MAX7219 8x8 z mikrokontrolerem ATtiny85: 7 kroków

Wideo: Jak połączyć matrycę LED z napędem MAX7219 8x8 z mikrokontrolerem ATtiny85: 7 kroków
Wideo: Arduino LED 8x8 RG 2024, Lipiec
Anonim
Jak połączyć matrycę LED z napędem MAX7219 8x8 z mikrokontrolerem ATtiny85?
Jak połączyć matrycę LED z napędem MAX7219 8x8 z mikrokontrolerem ATtiny85?

Kontroler MAX7219 jest produkowany przez Maxim Integrated i jest kompaktowym, szeregowym sterownikiem wejścia/wyjścia ze wspólną katodą, który może łączyć mikrokontrolery z 64 pojedynczymi diodami LED, 7-segmentowymi numerycznymi wyświetlaczami LED do 8 cyfr, wyświetlaczami słupkowymi itp. -chip to dekoder BCD code-B, obwody skanowania multipleksowego, sterowniki segmentów i cyfr oraz statyczna pamięć RAM 8×8, która przechowuje każdą cyfrę.

Moduły MAX7219 są bardzo wygodne w użyciu z mikrokontrolerami, takimi jak ATtiny85, czy w naszym przypadku Tinusaur Board.

Krok 1: Sprzęt

Sprzęt
Sprzęt
Sprzęt
Sprzęt

Moduły MAX7219 zwykle wyglądają tak. Mają szynę wejściową z jednej strony i szynę wyjściową z drugiej. Pozwala to na łączenie łańcuchowe 2 lub więcej modułów, tj. jeden po drugim, w celu tworzenia bardziej skomplikowanych konfiguracji.

Stosowane przez nas moduły można łączyć w łańcuch za pomocą 5 małych zworek. Zobacz zdjęcie poniżej.

Krok 2: Pinout i sygnały

Moduł MAX7219 posiada 5 pinów:

  • VCC – moc (+)
  • GND – masa (-)
  • DIN – wprowadzanie danych
  • CS – wybór żetonów
  • CLK – Zegar

Oznacza to, że do sterowania modułem potrzebne są 3 piny po stronie mikrokontrolera ATtiny85. Będą to:

  • PB0 – podłączony do CLK
  • PB1 – podłączony do CS
  • PB2 – podłączony do DIN

Wystarczy podłączyć do modułu MAX7219 i zaprogramować go.

Krok 3: Protokół

Protokół
Protokół

Komunikacja z MAX7219 jest stosunkowo prosta – korzysta z protokołu synchronicznego, co oznacza, że dla każdego wysyłanego przez nas bitu danych jest takt zegara oznaczający obecność tego bitu danych.

Innymi słowy, wysyłamy 2 równoległe sekwencje do bitów – jedną dla zegara, a drugą dla danych. To właśnie robi oprogramowanie.

Krok 4: Oprogramowanie

Oprogramowanie
Oprogramowanie

Sposób działania tego modułu MAX7219 jest następujący:

  • Zapisujemy bajty do jego wewnętrznego rejestru.
  • MAX7219 interpretuje dane.
  • MAX7219 steruje diodami w matrycy.

Oznacza to również, że nie musimy cały czas krążyć po tablicy diod LED, aby je zapalić – o to dba kontroler MAX7219. Może również zarządzać intensywnością diod LED.

Aby więc w wygodny sposób korzystać z modułów MAX7219 potrzebujemy biblioteki funkcji do tego celu.

Po pierwsze, potrzebujemy kilku podstawowych funkcji, aby pisać do rejestrów MAX7219.

  • Zapis bajtu do MAX7219.
  • Zapis słowa (2 bajty) do MAX7219.

Funkcja zapisująca jeden bajt do kontrolera wygląda tak:

void max7219_byte(uint8_t dane) { for(uint8_t i = 8; i >= 1; i--) { PORTB &= ~(1 << MAX7219_CLK); // Ustaw CLK na LOW if (data & 0x80) // Maskuj MSB danych PORTB |= (1 << MAX7219_DIN); // Ustaw DIN na WYSOKI w przeciwnym razie PORTB &= ~(1 << MAX7219_DIN); // Ustaw DIN na LOW PORTB |= (1 << MAX7219_CLK); // Ustaw CLK na WYSOKIE dane <<= 1; // Przesuń w lewo } }

Teraz, gdy możemy wysyłać bajty do MAX7219, możemy zacząć wysyłać polecenia. Odbywa się to poprzez wysłanie 2 bajtów – 1 na adres rejestru wewnętrznego i 2 na dane, które chcemy wysłać.

W sterowniku MAX7219 jest kilkanaście rejestrów.

Wysłanie polecenia lub słowa to w zasadzie wysłanie 2 kolejnych bajtów. Implementacja funkcji jest bardzo prosta.

void max7219_word (adres uint8_t, dane uint8_t) { PORTB &= ~(1 << MAX7219_CS); // Ustaw CS na LOW max7219_byte(adres); // Wysyłanie adresu max7219_byte(data); // Wysyłanie danych PORTB |= (1 << MAX7219_CS); // Ustaw CS na HIGH PORTB &= ~(1 << MAX7219_CLK); // Ustaw CLK na LOW }

Należy tutaj zwrócić uwagę na linię, w której przywracamy sygnał CS z powrotem do HIGH – oznacza to koniec sekwencji – w tym przypadku koniec polecenia. Podobną technikę stosujemy przy sterowaniu więcej niż jedną matrycą połączoną w łańcuch. Następnym krokiem, zanim zaczniemy włączać i wyłączać diody, jest inicjalizacja kontrolera MAX7219. Odbywa się to poprzez zapisanie określonych wartości do określonych rejestrów. Dla wygody podczas kodowania możemy umieścić sekwencję inicjującą w tablicy.

uint8_t initseq = { 0x09, 0x00, // Rejestr trybu dekodowania, 00 = Brak dekodowania 0x0a, 0x01, // Rejestr intensywności, 0x00.. 0x0f 0x0b, 0x07, // Rejestr limitów skanowania, 0x07, aby wyświetlić wszystkie linie 0x0c, 0x01, // Rejestr wyłączania, 0x01 = normalne działanie 0x0f, 0x00, // Rejestr wyświetlania-testu, 0x00 = normalne działanie };

Wystarczy wysłać 5 powyższych poleceń w sekwencji jako pary adres/dane. Następny krok – zaświecenie rzędu diod LED.

To bardzo proste – po prostu piszemy jedno polecenie, w którym 1. bajt to adres (od 0 do 7) a 2. bajt to 8 bitów reprezentujących 8 diod w rzędzie.

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

Należy pamiętać, że będzie to działać tylko dla 1 macierzy. Jeśli połączymy więcej macierzy w łańcuch, wszystkie pokażą te same dane. Powodem tego jest to, że po wysłaniu polecenia przywracamy sygnał CS z powrotem do stanu HIGH, co powoduje, że wszystkie kontrolery MAX7219 w łańcuchu zatrzaskują się i pokazują ostatnie polecenie.

Zalecana: