Witam wszystkich!
Matryca LED służy do wyświetlania długich wiadomości. Najlepsze w matrycy LED jest to, że można ją połączyć szeregowo i uzyskać dowolny rozmiar. W poniższym poście połączyłem 8 matryc LED, a następnie wyświetliłem na nich mój komunikat. Projekt jest płatny ponieważ włożyliśmy duży wysiłek w zaprojektowanie tej symulacji. Można go kupić za bardzo małą kwotę 20 USD klikając powyższy przycisk.
Oprogramowanie Proteus użyto do celów symulacji płytki Arduino jako mikrokontrolera. Wiemy, że Proteus nie obsługuje Arduino, ale mamy dla niego bibliotekę. Przeczytaj artykuł jak dodać bibliotekę Arduino dla Proteusa, a także jak pobrać plik hex z Arduino.
Projekt matrycy LED 8x8 z użyciem Arduino w Proteus ISIS
Na początku przyjrzyjmy się projektowi matrycy LED 8×8 z wykorzystaniem Arduino w Proteus ISIS, co pokazano na poniższym rysunku:
Na pewno zauważysz, że użyłem 8 matryc LED oraz MAX7219.
MAX7219 to rejestr przesuwny, który ma tutaj duże znaczenie, bo pobiera dane szeregowo i równolegle.
Znany jest również pod nazwą równoległo-szeregowy rejestr przesuwny. Wysyłamy do niego dane za pomocą pojedynczego pinu, który jest pinem danych, a dane te są wyzwalane zboczem przez impuls zegarowy.
Kiedy nasz impuls zegarowy przechodzi od stanu niskiego do wysokiego, dane są wysyłane do rejestru przesuwnego.
Połączyliśmy te rejestry przesuwne w rzędzie, jak widać na powyższym rysunku. Pierwszy rejestr jest połączony z drugim rejestrem przez pin Dout.
Załóżmy więc, że podłączyłem dwa rejestry przesuwne, a następnie wysyłam do nich dane. Moje dane wyjściowe będą miały łącznie 16 bitów.
W ten sposób możemy dodać tyle rejestrów przesuwnych, ile chcemy. W tym projekcie dodałem łącznie 8 rejestrów przesuwnych, więc moje wyjście ma w sumie 64 bity. Kontroluję te 64 bity za pomocą jednego pinu Arduino, który jest oczywiście pinem danych .
Wykorzystywane są również piny zegara i pin ładowania, które służą do wysyłania danych, a następnie ładowania ich w kolejności. Zatem za pomocą zaledwie 3 pinów Arduino mogę kontrolować dowolną liczbę rejestrów przesuwnych.
Każdy rejestr przesuwny steruje każdą matrycą LED 8×8, a powodem, dla którego używam 8 rejestrów przesuwnych, jest to, że używam 8 matryc LED 8×8.
To trochę trudne, ale nie do końca. Skoro mamy już pełny pogląd rejestru przesuwnego i jego działania, przejdźmy teraz do naszej symulacji.
Przewijanie tekstu na matrycy LED 8×8 z użyciem Arduino w Proteus ISIS
Zbuduj kompletny układ w oprogramowaniu Proteus ISIS, jak pokazano na poniższym rysunku:
Następną potrzebną rzeczą jest kod płytki Arduino, który został zamieszczony poniżej. Skopiuj go i wklej do swojego oprogramowania Arduino:
#include <MD_MAX72xx.h>
#define MAX_DEVICES 8
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
#define SCROLL_DELAY 200
#define CHAR_SPACING 1
#define BUF_SIZE 75
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];
uint8_t scrollDataSource(uint8_t dev, MD_MAX72XX::transformType_t t)
{
static char *p = curMessage;
static uint8_t state = 0;
static uint8_t curLen, showLen;
static uint8_t cBuf[8];
uint8_t colData;
switch(state)
{
case 0:
showLen = mx.getChar(*p++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf);
curLen = 0;
state++;
if (*p == '\0')
{
p = curMessage;
}
case 1:
colData = cBuf[curLen++];
if (curLen == showLen)
{
showLen = CHAR_SPACING;
curLen = 0;
state = 2;
}
break;
case 2:
colData = 0;
curLen++;
if (curLen == showLen)
state = 0;
break;
default:
state = 0;
}
return(colData);
}
void scrollText(void)
{
static uint32_t prevTime = 0;
if (millis()-prevTime >= SCROLL_DELAY)
{
mx.transform(MD_MAX72XX::TSR);
prevTime = millis();
}
}
void setup()
{
mx.begin();
mx.setShiftDataInCallback(scrollDataSource);
mx.control(MD_MAX72XX::INTENSITY, 10);
strcpy(curMessage, "www.TheEngineeringProjects.com");
newMessage[0] = '\0';
}
void loop()
{
scrollText();
}
Po skompilowaniu kodu w oprogramowaniu Arduino pobierz plik hex dla Arduino i wgraj go na swoją płytkę Arduino w Proteus ISIS.
Gdy uruchomisz symulację, otrzymasz wynik, jak pokazano na poniższym rysunku:
Popatrz, jak tekst się przewija. Wygląda bardzo fajnie.
W ten sposób możesz przewijać dowolny tekst.
To wszystko na dziś. Mam nadzieję, że podobał Ci się dzisiejszy projekt i przetestujesz go.
Do zobaczenia w następnym tutorialu.