logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zaprogramować matrycę LED 10x10 z atmega8 w C lub Bascom?

lord_dagoth 27 Lut 2008 15:51 8054 26
REKLAMA
  • #1 4851482
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    Witam!

    Niedawno wykonałem matrycę LED 10x10 (diody połączone multiplexowo) oraz sterownik do niej.

    Sercem ów sterownika jest atmega8. No i nadszedł czas programowania... niestety dopiero raczkuje w pisaniu programów pod mikrokontrolery. Jeżeli chodzi o zwyczajne programy na PC to nie ma problemu, posiadam dość sporą wiedzę na temat C++, php czy innych dość podobnych języków.

    Z mikrokontrolerów jedyne co programowałem to zaalanie diody stanem H na wyjściu mikrokontrolera. I tu pojawia się moje pytanie... aby zapalić diodę muszę zewrzeć odpowiednie piny do masy... jak to zrobić programowo? Wiem że muszę ustawić pin jako wejście a następnie nadać mu stan wysoki (czy jeżeli dobrze rozumuje to podciągnie to rezystorem wejście do masy). No i nie działa... jeżeli ktoś mógłby mi napisać króciutką funkcję zapalającą jedną diodę na dowolnych pinach byłbym niezmiernie wdzięczny:) Język dowolny... tzn C lub Bascom, obu ucze się równolegle.

    Poniżej zamieszczam schemat:
    Jak zaprogramować matrycę LED 10x10 z atmega8 w C lub Bascom?
  • REKLAMA
  • Pomocny post
    #2 4851647
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Chodzi Ci o zapalanie diody stanem niskim? Musisz ustawić kierunek pinu na wyjście i wpisać do niego 0. Tylko tyle:)
    P.S. Sprecyzuj, czy chodzi Ci o zapalanie diody, czy obsługę jakiegoś przycisku, po naciśnięciu którego dioda ma się zapalić.
  • #3 4851678
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    Chodzi mi tylko i wyłącznie o zapalenie diody, której anoda jest podłączona do jednego z goldpinów koło tranzystorów, a katoda do jednego z goldpinów koło rezystorów.

    Może pzedstawie problem inaczej... potrzebuje zewrzeć pin PC6 i PC1 do masy programowo... czy mógłbym prosić o przykładowy kod, który by mi to zrobił? Znam tylko teorie tego rozwiązania, czyli że musze te dwa piny ustawić na wejście i nadać im stan wysoki (czyli zwarcie rezystorem do masy). No ale w praktyce (przynajmniej mojej :P) to nie chce działać... Chodzi mi o te przykładowe dwie linijki kodu (w C lub Bascomie), które zewrą mi te dwa pinydo masy:)
  • Pomocny post
    #4 4851741
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Jeżeli ustawisz pin jako wyjście i podasz na niego programowo stan niski, to otrzymasz masę na wyjściu.
  • REKLAMA
  • #5 4851910
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    No niestety nadal mi si dioda nie zapala:(

    Oto kod którego użyłem:
    #include <avr/io.h>
    
     int main (void) 
    {
    
       sbi(DDRC,PC6);
       sbi(DDRC,PC1);
       cbi(PORTC,PC1);
       cbi(PORTC,PC6);
    
        for (;;) 
       {
        }
        return (0);     
    }
    
    Korzystam z kursu PATRON'a i z polecanego ta kompilatora.
  • REKLAMA
  • Pomocny post
    #6 4853049
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Jeśli nie programujesz programatorem równoległym, to RESETEM się raczej nie pobawisz.
  • Pomocny post
    #7 4853093
    johny_w
    Poziom 24  
    Posty: 673
    Pomógł: 80
    Ocena: 63
    Witam.

    A więc tak. Ustawienie linii na wejście i podanie stanu wysokiego powoduje podciągnięcie tejże linii do VCC poprzez rezystor (a nie do masy). Posłuchaj kolegi Don Diego.

    A z jakiego programatora korzystasz? PC6 standardowo jest resetem uC. Dopiero po przestawieniu fusebitu można z niego korzystać jak z linii IO. Jednak wtedy tracisz możliwość programowania ISP - zostaje tylko równoległe. Myślę, że tutaj jest problem, bo reszta jest ok.
    A próbowałeś tego z innymi liniami, czy uparłeś się na to PC6?

    Poza tym PORTC (PC0-PC5) jest portem przetwornika i używa dodatkowego zasilania. Mianowicie nie jest zasilany z VCC tylko z AVCC. Nawet jeśli nie korzystasz z ADC. Bez podłączenia +5V do AVCC ten port jest martwy.

    pozdr, JnS
  • #8 4854808
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    To znaczy mam już wytrawioną płytke i zlutowane wszystko. Podłącze AVCC do +5V i jeszcze AGND do masy kabelkiem, no i zmienię ten PC6 na inny, żeby nie korzystać z resetu. Nie będzie mi potrzebne programowanie ISP, używam programatora, przedstawionego w kursie PATRON'a.

    Dzisiaj wprowadze poprawki i zobacze czy będzie działało, wielkie dzięki za pomoc i zainteresowanie :)
  • #9 4864523
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    Ok, wielkie dzięki za pomoc, wszystko już działa!:)

    To znaczy prawie wszystko... pojawia się kolejny drobny problem...
    Kiedy odpalam wszystkie diody (to znaczy w nieskończonej pętli zapalam pierwszą, następnie ją gasze i zapalam następną) to świecą one bardzo, bardzo słabym światłem. A przecież nie zapalam wszystkich naraz, tylko bardzo szybko każdą po kolei.

    No ijeszcze kwestia tego... że niektóre w ogóle nie zapalają się. Połączenia sprawdzałem dokładnie omomierzem i wszystko wydaje się ok, każe połączenie jest, ale niektóre diody się nie świecą, a jak poruszam troche kabelkiem to się świecą.

    Moje pytania mogą wydawać się dość banalne... ale jestem dopiero początkującym elektronikiem (który poniekąd rzucił się na głęboką wodę ;)) i jest to mój pierwszy już prawie ukończony projekt ;) pozostała tylko kwestia słabych połączeń i jasności diód.

    A jeżeli chodzi o tą jasność... czy jest to możliwe, że mikrokontroler po prostu nie nadążą ze zmianą stanu tych nóżek, i mikrokontroler pracuje tak, jakby cały czas podawał stan niski na każdą z nóżek?

    Zamieszcze pare zdjęć tego wyświetlacza w fazie testów :):

    Jak zaprogramować matrycę LED 10x10 z atmega8 w C lub Bascom?
    Jak zaprogramować matrycę LED 10x10 z atmega8 w C lub Bascom?
    Jak zaprogramować matrycę LED 10x10 z atmega8 w C lub Bascom?

    No i może dorzuce jeszcze poprawiony schemat:
    Jak zaprogramować matrycę LED 10x10 z atmega8 w C lub Bascom?

    Właśnie udało mi się rozwiązać kwestie nieświecenia niektórych diód... jestem początkujący i nie mam zbytniej wprawy w lutowaniu jeszcze ;) Ale o zimnych lutach słyszałem ;)

    Pozostaje tylko słabe świecenie... za wszelką pomoc bede bardzo wdzięczny:)
  • #10 4865056
    rsikon
    Poziom 26  
    Posty: 1075
    Pomógł: 24
    Ocena: 26
    ja to rozumiem tak: zbyt szybko zapalasz i gasisz diode.

    Sprawdz czy efekt bedzie taki sam jak w programie zmienisz tempo zapalania sie kolejnych diodek - zwolnisz :)

    Radzio
  • #11 4875114
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    Ale jaki czas ustawić? jaki jest minimalny potrzebny czasczas atmedze żeby zmieniła stan z wysokiego na niski?
  • Pomocny post
    #12 4875631
    rsikon
    Poziom 26  
    Posty: 1075
    Pomógł: 24
    Ocena: 26
    tu nie chodzi o czas dla atmegi a o czas dla diody Led by zaświeciła mocno.

    Wątpie byś zobaczył impuls np 10ns :)

    ....

    Rozumiem, ze pomogłem, pozostaje tylko zamknąć temat :) (Kłudeczka u dołu.)
  • #13 4888866
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    No dobrze, zabrałem się już za zaprogramowanie wyświetlacza pożądne, naisałem funkcje do jego obsługi, wszystko działa tak jak powinno.

    No ale... właśnie... jest jedno ale :P Otóż... przy ustawionym czasie świecenia diody 5 mikrosekund nie widać już prawie efektu migania, ale diody wtedy słabo świecą:(

    Ma ktoś może jakiś pomysł jak to rozwiązać?
  • #14 4889157
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    nie nalezy multiplexowac tak wielkiej matrycy w calosci, tylko po wierszach. nalezaloby tez uzyc rejestrow SIPO albo driverow do LEDow

    0x41 0x56 0x45!!
  • #16 4889502
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    A nie siada Ci zasilanie ? Bo na zdjęciach widzę bateryjkę 9V do zasilania. 10 LED razy 20ma to chyba troczę za dużo do takiej bateryjki, nie sądzisz ?
  • Pomocny post
    #17 4889824
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    lord_dagoth napisał:
    matryca 10x10 jest wielka?! Przecież to malutki kwadracik jest ;)

    rozmiar kwadracika nie ma znaczenia. nie wiem jak ty to multiplexujesz, ale jesli robisz to po kazdej diodzie osobno, to zadna nie moze sie palic dluzej niz 1/100 czasu, czyli ze swieci 100x gorzej. jesli po wierszach, to zadna dioda nie bedzie sie palic dluzej niz 1/10 czasu, co daje 10x gorsza jasnosc.

    z tego powodu uzywa sie driverow.

    0x41 0x56 0x45!!
  • #18 4890239
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    W wierszach połączone są anody, a w kolumnach katody, w sumie do sterowania 100 diód mam zużytych 20 wejść do mikrokontrolera. Kolega Danthe też nie stosował żadnych Driverów, mikrokontroler i tranzystory i multiplexowe łączenie diód.

    Zasilanie mi nie siada:P
  • Pomocny post
    #19 4890314
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    czyli masz 10x mniejsza jasnosc. przewaznie w takich sytuacjach stosuje sie o wiele mniejsze rezystory, aby nadrobic ta strate jasnosci - dioda wytrzyma impuls o wiele wiekszego pradu przy multiplexowaniu, nawet 100mA [; tyle ze z takim pradem to juz trzeba szybko multiplexowac [;

    edit: co do tej baterii 9V to ja nie wiem co by tam trzeba podlaczyc, zeby siadlo zasilanie - przeciez ona ma bardzo duza wydajnosc pradowa <: polecam znany i lubiany test natezenia pradu - dotknac elektrod jezykiem [;

    0x41 0x56 0x45!!
  • #20 4891022
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    a czas świecenia jednej diody równy jednej mikrosekundzie i rezystory przy nich 100 omów będzie dobrze?
  • #21 4891678
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    lord_dagoth napisał:
    a czas świecenia jednej diody równy jednej mikrosekundzie i rezystory przy nich 100 omów będzie dobrze?
    to chyba trochę za krótko. 1 mili sekunda była by w sam raz.
  • #22 4892002
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    No napewno nie... dopiero przy Czasie jednej mikrosekundy nie ma efektu migania całego wyświetlacza
  • #23 4892324
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    nieeeee no 1us to zdecydowanie zbyt malo... cos innego musi byc nie tak. 1ms to faktycznie troche za dlugo. niemniej jednak 1us to juz troche przesada <:

    aby sie przekonac, to po prostu sprawdz [; wymiana 10 rezystorow to nie az taki problem - jak ci sie nie chce odlutowywac, to mozesz dolutowac dodatkowe rownolegle, zeby zmniejszych wartosc sumaryczna. ciezko to stwierdzic, bo to wszystko zalezy od miliona czynnikow - zasilania, diod, programu itp....

    0x41 0x56 0x45!!
  • REKLAMA
  • #24 4892483
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    hmmmm... kurcze:( Narazie mam ustawiony czas 5 mikrosekund i widać efekt delikatnego migania, dopiero przy czasie jenej mikrosekundy nie widać go... Zasilanie jest albo z jednej 9V baterii albo z 6x1,5V, za każdym razem efekt ten sam:( To może zamieszcze program:

    #include <avr/io.h>
    #define F_CPU 1000000 //1MHz zegar procesora
    #define CYCLES_PER_US ((F_CPU+500000)/1000000) //cpu cycles per microsecond
    
    //deklaracje użytych funkcji
    void delay(unsigned int us);
    void delayms(unsigned int ms);
    void init();
    void light_diode(unsigned int l, unsigned int c);
    void activate_column(unsigned int a);
    void disactivate_column(unsigned int a);
    void activate_line(unsigned int a);
    void disactivate_line(unsigned int a);
    
    //funkcja główna
    int main (void) 
    {	
    	init();
    	unsigned int i,m;
        for (;;) 
        {
    		for (i=1;i<11;i++)
    		{
    			for (m=1;m<11;m++)
    			{
    				light_diode(i,m);
    			}
    		}
        }
        return (0);     
    }
    
    //definicje funkcji
    void delay(unsigned int us) 
    { 
        unsigned int delay_loops;
        register unsigned int  i;
        delay_loops = (us+3)/5*CYCLES_PER_US;
        for (i=0; i < delay_loops; i++) {};
    } 
    
    void delayms(unsigned int ms)
    {
       unsigned int i;
       for (i=0;i<ms;i++)
       {
            delay(999);
            asm volatile ("WDR"::);
       }
    } 
    
    void init()
    {
        sbi(DDRB,PB2);
    	sbi(PORTB,PB2);
    	
    	sbi(DDRB,PB3);
    	sbi(PORTB,PB3);
    	
    	sbi(DDRB,PB4);
    	sbi(PORTB,PB4);
    	
    	sbi(DDRB,PB5);
    	sbi(PORTB,PB5);
    	
    	sbi(DDRC,PC0);
    	sbi(PORTC,PC0);
    	
    	sbi(DDRC,PC1);
    	sbi(PORTC,PC1);
    	
    	sbi(DDRC,PC2);
    	sbi(PORTC,PC2);
    	
    	sbi(DDRC,PC3);
    	sbi(PORTC,PC3);
    	
    	sbi(DDRC,PC4);
    	sbi(PORTC,PC4);
    	
    	sbi(DDRC,PC5);
    	sbi(PORTC,PC5);
    	
    	sbi(DDRB,PB0);
        sbi(PORTB,PB0);
    	
    	sbi(DDRD,PD7);
        sbi(PORTD,PD7);
    	
    	sbi(DDRD,PD6);
        sbi(PORTD,PD6);
    	
    	sbi(DDRD,PD5);
        sbi(PORTD,PD5);
    	
    	sbi(DDRD,PD4);
        sbi(PORTD,PD4);
    	
    	sbi(DDRD,PD3);
        sbi(PORTD,PD3);
    	
    	sbi(DDRD,PD2);
        sbi(PORTD,PD2);
    	
    	sbi(DDRD,PD1);
        sbi(PORTD,PD1);
    	
    	sbi(DDRD,PD0);
        sbi(PORTD,PD0);
    	
    	sbi(DDRB,PB7);
        sbi(PORTB,PB7);
    }
    
    void activate_line(unsigned int a)
    {
    	switch(a)
    	{
    		case 1: cbi(PORTB,PB0);
    				 break;
    		case 2: cbi(PORTD,PD7);
    				 break;
    		case 3: cbi(PORTD,PD6);
    				 break;
    		case 4: cbi(PORTD,PD5);
    				 break;
    		case 5: cbi(PORTD,PD4);
    				 break;
    		case 6: cbi(PORTD,PD3);
    				 break;
    		case 7: cbi(PORTD,PD2);
    				 break;
    		case 8: cbi(PORTD,PD1);
    				 break;
    		case 9: cbi(PORTD,PD0);
    				 break;
    		case 10: cbi(PORTB,PB7);
    				 break;
    	}
    }
    
    void disactivate_line(unsigned int a)
    {
    	switch(a)
    	{
    		case 1: sbi(PORTB,PB0);
    				 break;
    		case 2: sbi(PORTD,PD7);
    				 break;
    		case 3: sbi(PORTD,PD6);
    				 break;
    		case 4: sbi(PORTD,PD5);
    				 break;
    		case 5: sbi(PORTD,PD4);
    				 break;
    		case 6: sbi(PORTD,PD3);
    				 break;
    		case 7: sbi(PORTD,PD2);
    				 break;
    		case 8: sbi(PORTD,PD1);
    				 break;
    		case 9: sbi(PORTD,PD0);
    				 break;
    		case 10: sbi(PORTB,PB7);
    				 break;
    	}
    } 
    
    void activate_column(unsigned int a)
    {
    	switch(a)
    	{
    		case 1: cbi(PORTB,PB2);
    				 break;
    		case 2: cbi(PORTB,PB3);
    				 break;
    		case 3: cbi(PORTB,PB4);
    				 break;
    		case 4: cbi(PORTB,PB5);
    				 break;
    		case 5: cbi(PORTC,PC0);
    				 break;
    		case 6: cbi(PORTC,PC1);
    				 break;
    		case 7: cbi(PORTC,PC2);
    				 break;
    		case 8: cbi(PORTC,PC3);
    				 break;
    		case 9: cbi(PORTC,PC4);
    				 break;
    		case 10: cbi(PORTC,PC5);
    				 break;
    	}
    }
    
    void disactivate_column(unsigned int a)
    {
    	switch(a)
    	{
    		case 1: sbi(PORTB,PB2);
    				 break;
    		case 2: sbi(PORTB,PB3);
    				 break;
    		case 3: sbi(PORTB,PB4);
    				 break;
    		case 4: sbi(PORTB,PB5);
    				 break;
    		case 5: sbi(PORTC,PC0);
    				 break;
    		case 6: sbi(PORTC,PC1);
    				 break;
    		case 7: sbi(PORTC,PC2);
    				 break;
    		case 8: sbi(PORTC,PC3);
    				 break;
    		case 9: sbi(PORTC,PC4);
    				 break;
    		case 10: sbi(PORTC,PC5);
    				 break;
    	}
    } 
    
    void light_diode(unsigned int l, unsigned int c)
    {
    	activate_line(l);
    	activate_column(c);
                    delay(5);
    	disactivate_column(c);
    	disactivate_line(l);
    }
  • #25 4892719
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Ja mam zastosowany multiplex 1 z 8 i czas jaki jest pomiędzy wyświetlaniem kolumn wynosi 972 us i zero migania.
  • Pomocny post
    #26 4892938
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    jeszcze musisz sie WIELE nauczyc o programowaniu. np musisz sie nauczyc, ze zamiast korzystac z jakichs lewych rzeczy typu sbi i cbi mozna po prostu napisac: PORTx=0xFF; zamiast wykorzystywac do tego 8 polecen na poszczegolne bity. pomimo tego co napisales - ty MASZ multiplexowanie po ... w sumie nie wiadomo czym. taki program pisze sie zupelnie inaczej...

    deklarujesz tablice o wymiarach odpowiadajacych twojemu wyswietlaczowi - czyli musi miec ona conajmniej 100b. nastepnie w programie glownym w dowolny sposob sobie ja modyfikujesz - nakazujac zapalenie lub zgaszenie konkretnych diodek w odpowiednim momencie. samo wyswietlanie natomiast musi byc realizowane w PRZERWANIU od timera, w ktorym to NA RAZ nastapi wyswietlenie jednej grupy (wiersza) i zwiekszenie wskaznika stosownego, zeby w nastepnym przerwaniu wyswietlic kolejny wiersz i tak w kolko...

    aby chwilowo wyeliminowac sprawe timera, nalezaloby po prostu najpierw ustawic w tej tablicy cos co chcesz wyswietlac, a potem - w dalszej czesci kodu - napisac petle, ktora bedzie to wyswietlala w sposob taki jak przerwanie od timera: wystaw wartosc w wierszu, aktywuj wiersz, zwieksz licznik, sprawdz czy nie powyzej zakresu, opoznienie, powrot do poczatku petli.

    bez uzycia przerwan tego sie nie da zrobic porzadnie, tak aby moc caly czas zmieniac to co jest wyswietlane.

    pozatym te case'y w miejscu, gdzie mozna z powodzeniem zastosowac cos lepszego [;

    0x41 0x56 0x45!!
  • #27 4894691
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    Wielkie dzięki za pomoc, dopiero stawiam pierwsze kroki w dziedzinie programowania mikrokontrolerów. Bo pisanie programów na pc'ta nie jest mi obce, i to od kilku lat ;) A te cbi i sbi mam dlatego, że uczyłem się narazie z kursu PATRONA. Tematyka obsługi przerwań w mikrokontrolerze jest póki co mi obca... więc spoooooro nauki jeszcze przedemną;)

    Jeszcze raz wielkie dzięki za pomoc ;)

Podsumowanie tematu

✨ Dyskusja dotyczy programowania matrycy LED 10x10 sterowanej mikrokontrolerem Atmega8 w języku C lub Bascom. Autor projektu ma problem z zapaleniem pojedynczej diody, gdyż nie rozumie poprawnego ustawienia pinów mikrokontrolera do sterowania diodami w układzie multiplexowym. Wyjaśniono, że aby uzyskać stan niski (masę) na pinie, należy ustawić go jako wyjście i zapisać do niego 0. Zwrócono uwagę, że pin PC6 jest linią RESET i wymaga zmiany fusebitów lub użycia innego pinu, a także konieczne jest podłączenie AVCC do +5V, aby port C działał poprawnie. Poruszono problem słabej jasności diod przy szybkim multiplexowaniu, wynikający z krótkiego czasu świecenia pojedynczej diody (np. 1-5 mikrosekund), co powoduje efekt migotania i niską jasność. Sugerowano stosowanie multiplexowania po wierszach zamiast pojedynczych diod, użycie driverów LED lub rejestrów przesuwających (SIPO) oraz zmniejszenie rezystorów ograniczających prąd, aby zwiększyć jasność impulsową. Podkreślono, że programowanie matrycy wymaga użycia przerwań timerów do cyklicznego odświeżania wierszy i zarządzania tablicą stanu diod. Autor przyznał, że dopiero uczy się obsługi przerwań i mikrokontrolerów, korzystając z kursu PATRON. Wskazano, że zasilanie z baterii 9V może być niewystarczające przy większym prądzie. Podsumowując, poprawne sterowanie matrycą LED wymaga odpowiedniego doboru pinów, zasilania, techniki multiplexowania, sterowników oraz programowania z wykorzystaniem przerwań i buforów stanu diod.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA