Witajcie,
Jestem nowym użytkownikiem tego forum i postanowiłem się zarejestrować, gdyż od pewnego czasu myślę nad stworzeniem Led Cuba 5x5x5. Oglądając poradniki Pana Mirka, czytając artykuły powoli wkraczam w świat mikrokontrolerów
Przeglądając internet zdobyłem już jakąś podstawową wiedzę w tym kierunku, ale nadal trapi mnie kilka kwestii, a nie chciałbym tworzyć tego projektu zupełnie po swojemu. Całkiem możliwe że nie ustrzegłbym się jakiś poważnych błędów, a bardziej doświadczeni koledzy tudzież koleżanki ode mnie, mam nadzieję dadzą mi cenne rady oraz wskazówki.
Może na początku zamieszczę schemat, który udało mi się stworzyć na podstawie informacji i innych schematów znalezionych w internecie:
Mam nadzieję, że nie jest laurkowaty i jest dość czytelny by się w tym wszystkim połapać. Wszelkie uwagi mile widzane, gdyż jest to mój pierwszy schemat i dopiero się uczę. (Zamiast etykiet zastosowałem takie chorągiewki z biblioteki Supply1/2, gdyż płytki PCB i tak nie robię (będzie to zlutowane na płytce uniwersalnej) a w takiej postaci jest to dla mnie czytelniejsze)
komentarz do schematu:
Procesor ATmega16A-PU - DIP
Przełącznik S1 w lini MOSI załączany jest na złączę KANDA na czas programowania, by sygnał szedł bezpośrednio do nóżki procesora i nie wchodził w interakcję z diodą przy oporniku R30.
Zworka JP1 - alternatywne źródło zasilania. Załączane tylko i wyłącznie wtedy, gdy nie jest włączone główne źródło zasilania ze stabilizatora 7805.
Masy programatora oraz mikrokontrolera, stabilizatora itd. są oczywiście ze sobą połączone.
Zewnętrzny rezonator jest jako alternatywa, bo na początku głównie procesor będzie taktowany wewnętrznym rezonatorem 8Mhz. (W późniejszym etapie możliwe, że dodam zewnętrzny)
Nie wykluczam rówież wykorzystanie linii SISO, SCK jeszcze w jakiś inny sposób, ale wtedy zastosuję również przełączniki S2, S3 (tak samo działające jak S1).
Myślałem również nad zastosowaniem rejestru przesuwnego do sterowania diodami, by te linie jednak służyły tylko i wyłącznie do programowania, ale myślę, że taki przełącznik nie zaszkodzi a tylko ułatwi układ oraz programowanie.
25 anod jako połączenia w pionie (łączone kolumny anodami), 5 katod jako połączenia w poziomie (łączone wiersze katodami)
Cechy diod LED:
czerwona dioda: dyfuzyjna, 5mm, 20mA, 2.0 - 2.3V
oporniki R = 220ohm czyli zgodnie z prawem Ohma to daje na diodę około 9-10mA. (Nie wykluczam że finalnie zastosuję może jakieś mniejsze rzędu 100-150ohm aby ten prąd był jednak ciut większy)
wg noty:
27.1 Absolute Maximum Ratings*
na jednym pinie max - 40mA.
Atmega może dać max - 200mA.
W związku z tym nie mogę zaświecić np.jednocześnie wszystkich 125 diod, bo by procesor nie wyrobił.
Zatem wyczytałem w internecie o tym, by jednocześnie zaświecać np po jednej, paru diodach i za pomocą szybkiego odświeżania, łączania i wyłączania odpowiednich diod uzyskalibyśmy zamierzony efekt a ponadto będziemy mogli stworzyć bardziej skomplikowane kształty.
(np wyświetlenie litery U:
jedna ze ścianek:
XOOOX
XOOOX
XOOOX
XOOOX
XXXXX
x - włączona, O - wyłączona. Bo jak wiadomo sposób w jakim jest ta kostka stworzona nie pozwoli zapalając jednocześnie odpowiednie diody uzyskać takiego efektu gdyż również by nam się zapaliły wszystkie diody oznaczone jako O)
W związku z tym postanowiłem, że będę zaświecać maksymalnie jedną diodę (może 5) w danym przedziale czasowym.
Przybliżony algorytm, by uzyskać efekt świecenia wszystkich diod wyglądałby tak:
125 diod łącznie - jedna dioda 50Hz odświeżania, 10-20mA pobór prądu.
Kod:
{
wyłącz 125
włącz 1
czekaj 0.16ms
wyłącz 1
włącz 2
czekaj 0.16ms
wyłącz 2
włącz 3
czekaj 0.16ms
...
wyłącz 124
włącz 125
czekaj 0.16ms
}
(oczywiście wszystko w odpowiedniej pętli by ręcznie nie musieć tego ustawiać (kod tylko jako poglądowy przykład))
0.16ms * 125 diod * 50Hz odświeżanie = 1000ms = 1s.
Każda dioda powinna migać 50 razy na sekundę dając efekt ciągłego świecenia)
Ale czy diody w tym przypadku nie będą świecić bardzo słabym światłem? Czy procesor wyrobi?
Może lepiej by było np zaświecać w jednym czasie 5 diod (pobór 100mA)? Albo nawet 25 (ale wtedy mniej prądu na diode), całą warstwę poziomą tak, aby jeden rezystor przypadał tylko na jedną diodę (by nie było tak, że świecą się dwie szeregowo przez jeden rezystor).
Czekam na propozycję
Najbardziej bym się skusił na 1 max 5 diod, bo wtedy można je karmić przyzwoitym prądem.
Co do oprogramowania tego, myślę, że nie miałbym większych problemów, gdyż programowanie ogarniam i nie jest to dla mnie nowością. Jednakże rad byłbym za jakieś wskazówki lub uwagi, które mogą się przydać.
Na chwilę obecną planuję stworzyć prostą tablicę w której przechowywałbym stan odpowiedniej diody (0 albo 1) i odpowiednią funkcję, która by za pomocą pętli kolokwialnie mówiąc leciała przez tą tablicę i odpowiednio "migała" odpowiednimi diodami które są jako 1 w odpowiednim czasie tak, by uzyskać efekt świecenia większej ilości diod (w tym przypadku wszystkich oznaczonych jako 1).
Dodatkowo odpowiednie funkcje ustawiające wartości w tablicy na zamierzone efekty.
Mam jeszcze pytanie do tych tranzystorów bipolarnych NPN BC337. Analizując różne schematy dostępne w internecie zauważyłem, że posłużyły one jako klucz. Sterowane są stanem wysokim z pinów procesora i załączają odpowiednie katody do masy. Czy nie byłoby można odrazu połączyć katod z pinami procesora i sterować nimi stanem niskim? Czy po prostu zastosowaliśmy te tranzystory aby wszystkimi pinami dla ułatwienia sterować stanem wysokim? Nie przełączamy nimi żadnych wysokich prądów, gdyż de facto jednocześnie w krótkim czasie świecić będzie tylko jedna - góra 5 diod, czyli chyba są one zbędne? (Pytanie bardziej teoretyczne, bo i tak w projekcie je zostawię, bym dla ułatwienia mógł również sterować katodą za pomocą stanu wysokiego, ale chciałbym wszystko wiedzieć)
Mam nadzieję, że niczego nie pominąłem i zadałem większość pytań jaka mnie trapiła.
Z góry bardzo dziękuję za wszystkie rady, odpowiedzi, krytykę oraz wyprowadzenie z błędu, jeżeli taki się pojawił.
Pozdrawiam.