Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Computer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega32] 10 diod led do jednego pinu

16 Lis 2011 00:25 4296 16
  • Poziom 15  
    Witam,

    Chcę zrobić swój wyświetlacz do wyznaczonego celu. Potrzebuje dowiedzieć się jak podłączyć i sterować 10 szt. diod LED do jednego pinu IO. Wiem, że muszę wykorzystać tranzystory ale niestety nie wiem jak to działa. Czy może ktoś stworzyć schemat podłączenia tych LEDów i pokrótce wytłumaczyć jak to działa?

    Napięcie układu będzie albo 3.3V albo ~5V.
  • Computer Controls
  • Pomocny post
    Poziom 14  
    tranzystor NPN, np. BC337. Opornik około 2,2k od pinu ATMegi do bazy BC337. Emiter do masy. Do kolektora podłączasz diody - każda z szeregowym opornikiem ok. 220 omów.

    Ustawienie pinu spowoduje załączenie BC327 i zaświecenie LEDków.
    Zakładam, że LEDki zwykłe - ok. 20 ..30 mA, bo ten tranzystor jest do 500mA.
  • Pomocny post
    Poziom 35  
    eiliat napisał:
    Witam,

    Chcę zrobić swój wyświetlacz do wyznaczonego celu.
    Czy może ktoś stworzyć schemat podłączenia tych LEDów i pokrótce wytłumaczyć jak to działa?

    Napięcie układu będzie albo 3.3V albo ~5V.


    Przykładowy układ z 5-diodami, oraz sposób obliczania wartości i doboru rezystorów w zależności napięcia zasilania i swoich elementów znajdziesz tutaj:
    -6-ty rysunek od góry......
    http://www.ermicro.com/blog/?p=423

    Bez zgadywania i "sięgania do do sufitu", wszystkie wartości policzysz sam, wzorując sie na tym tutorialu, uwzględniając swoje założenia.
    Przestudiuj całość. Jest tam wiele rzeczy co może ci się przydać.
    Jest bardzo przystępnie napisany - akurat to co szukasz a nawet więcej.....
    Znajdź tam też przykładowe oprogramowania AVR i do nich video clips.
    Jeżeli czegoś nie zrozumiesz to pewne fragmenty moge przetłumaczyć, ale nie cały blog.

    e marcus
  • Computer Controls
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Niekoniecznie jest to takie proste jak przedstawili koledzy. Akurat robi różnicę czy układ będzie zasilany z 5V czy 3V3, robi także różnicę co to za diody, a konkretnie, jakie jest ich napięcie przewodzenia. Można sobie wyobrazić białe diody, których Uf jest zbliżone do 3V i tranzystor bipolarny, który ma napięcie saturacji EC>0,6V i już to nie ma prawa zadziałać.
    Rozważ zastosowanie tranzystora, tzw. logic level MOSFET. Ale tu też trzeba wiedzieć jak chcesz tymi diodami sterować - jeśli statycznie to MOSFET jest najlepszym rozwiązaniem, jeśli przez PWM to już znowu trzeba pomyśleć.
    Jeśli układ będzie zasilany z 5V to sprawa się upraszcza, poza tym diody wcale nie muszą być zasilane z napięcia zasilającego procesor, mogą być z wyższego, co też upraszcza.
    BTW, na tym tutorialu wskazanym przez emarcus jest poważny błąd - diody nie mogą mieć wspólnego rezystora ograniczającego prąd, każda powinna mieć własny - czyli 10 diod - 10 rezystorów.
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Uf=3,6V, czyli na 3V3 by w ogóle nie zadziałało niezależnie od sterowania. Na 5V masz zapasu 1,4V, czyli powinno pójść na tranzystorze bipolarnym. Ponieważ to małe diody o I=20mA można pomyśleć o sterowaniu ich prosto z pinu IO mikrokontrolera. Co prawda jeden pin nie wysteruje 10 diod, ale jeśli byś je podzielił pomiędzy kilka pinów sterowanych w dodatku z różnych portów to byłoby to najprostsze rozwiązanie. Tylko potrzebujesz kilka wolnych pinów IO. Albo jeden LL-MOSFET.
  • Poziom 15  
    Dziękuje za odpowiedzi.
    Panowie nie zagłębiałem się w temacie jeszcze (nie czytałem tego bloga) ale rozumiem, że przedstawione pomysły i link kierują do tutorialu jak do jednego portu podłączyć 10 diod i sterowania tak abym mógł zapalić na przykład diodę 3 i 7?
  • Pomocny post
    Poziom 19  
    No właśnie nie pokazują jak jednym wyprowadzeniem sterować niezależnie 10 diodami, bo tak się po prostu nie da (no chyba że sobie zrobisz dodatkowy sterownik i komunikację po UART'cie, lub coś w tym guście). Można sterować właściwie dowolną liczbą diód lub czegokolwiek innego przy pomocy np. hc 595. Albo przy użyciu większej liczby wyprowadzeń przez sprytny sposób multipleksowania tzw. Charlieplexing http://en.wikipedia.org/wiki/Charlieplexing
  • Poziom 15  
    Domyślnie będzie to mały wyświetlacz LED złożony z 10x15 lub 10x20 diod czyli chcę wykorzystać 15 bądź 20 portów do 10 rzędów. Pomysł szalony ale nie chcę wykorzystywać gotowego wyświetlacza bo w moim projekcie się on nie sprawdzi.
  • Pomocny post
    Poziom 19  
    No to moim zdaniem bez rejestrów przesównych to troszkę bez sensu. Dzięki rejestrom nie będziesz musiał się martwić o odświerzanie (znaczy będziesz musiał ale mniej) i będziesz mógł zrobić coś ciekawszego (np. policzyć czy co tam chcesz), a nie tracić 100% czasu porcka na odświerzanie. Jeżeli nie chcesz tego robić w ten sposób to charlieplexing jest moim zdaniem najrozsądniejszym rozwiązaniem (ale trudniejszym programowo) bo żeby wysterować 200 LED będziesz potrzebował 15 pinów. (Zgodnie ze wzorem n pinów może maksymalnie wysterować n*n-n LED).Aha tylko nie zazdroszczę podczas projektowania płytki albo gdy któraś dioda będzie walnięta, bo się będą cuda działy (więcej na wikipedi). Moim zdaniem rejestry przesówne. Prosta płytka, prosty program ...
  • Poziom 15  
    Czy mogę wykorzystać ten projekt przerabiając go odpowiednio na ATMege32 wykorzystując te 13 portów aby podłączyć 200 diod?
    https://www.elektroda.pl/rtvforum/topic1693428.html

    W sumie tamten kod rozumiem i spokojnie mógłbym go modyfikować :)

    Rozumiem, że lepiej źródłem napięcia byłby zasilacz niż port USB?
  • Pomocny post
    Poziom 19  
    No oczywiście, że możesz. Ale możesz też połączyć sobie LED'y w matrycę i za pomocą 4 takich rejestrów sterować 256 LED'ami i wtedy wykorzystujesz tylko 3 piny. Chyba że strasznie Ci zależy na szybkości odświerzania, to możesz rozdzielić rzędy i kolumny, ale chyba przy tych 3 pinach też sie powinno wszystko wyrabiać. Kwestia policzenia. Bo z tego co piszesz to chcesz, żeby w danej chwili paliły się wszystkie LED'y które chcesz. Ale możesz zastosować zwykłe multipleksowanie i odświerzać tylko jedną kolumnę na raz. Jak będziesz to robił szybko to bezwładność oka ludzkiego zadziała i będzie wyglądało jakby się świeciło wszystko na raz. ale Twój wybór. Port USB po zarejestrowaniu urządzenia w systemie może oddać 500mA dla 200LED+mikrokontroler+rejestry+coś tam jeszcze może się okazać że jest to za dużo. Zakładam, że chcesz żeby te Ledy się ładnie świeciły (czyli prąd rzędu 10-20mA na diodę) to w takim przypadku nie ma szans, na bezpieczne zasilenie z portu USB, (mówię tu o takim przykładzie jaki Ty chcesz zastosować bo w wtedy w najgorszym przypadku mogą się świecić wszystkie LED'y na raz, jeżeli podzielisz na rzędu i kolumny i zrobisz matrycę to w najgorszym przypadku będzie się świeciło 16 diód, a dokładniej tyle co masz w rzędzie lub kolumnie), czyli taką matrycę dało by się zasilać z USB, ale po zarejestrowaniu urządzenia w systemie (według standardu)).
    Link Tutaj masz schemat takiej matrycy, to jest dla diód RGB ale można sobie przeorobić na na zwykłe bez problemu.
    Link Stąd pochodzi ten obrazek, polecam lekture tego tematu.
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Przy sterowaniu multipleksowym trzeba też pamiętać o duty-cycle. Dioda jest sterowana tylko w czasie 1/n, gdzie n to ilość kolumn. W efekcie, żeby uzyskać podobną jasność dioda musi dostać w impulsie duży prąd, co najmniej n-razy większy, a nie zawsze jest to możliwe i efektywne. Stąd też nie można mnożyć kolumn bez końca, w zależności od konfiguracji 16 to górna granica, a przy dużej jasności 8 może tyć maksem.
    Co do USB - USB 3.0 już ma 900mA, można włożyć wtyczkę do dwóch portów.
  • Poziom 15  
    Witam. Rozumiem, że rozszerzając poniższy układ:
    [ATmega32] 10 diod led do jednego pinu

    Kolejny układ 74HC595 podłączam analogicznie? Czyli do DS podłączam z Q7' a reszta według schematu? Czy w taki sposób odświeżanie będzie dobre i czy w ogóle to zadziała?

    Dodano po 1 [minuty]:

    Jak zmieni się kod wsadu? Proszę o jakiś przykład np. rozszerzenia go o kolejne 2x16 diod LED. https://www.elektroda.pl/rtvforum/topic1693428.html
  • Pomocny post
    Poziom 30  
    Zamiast 74595 zainteresuj się układami SCT2024, 16 diod led i ustalenie prądu diod tylko jednym rezystorem. Podobnie jak '595 są sterowane szeregowo, i mają możliwość łączenia kaskadowego.
    Ja osobiście podłączam te układy pod SPI, umożliwia to wysyłanie danych za pomocą interfejsu sprzętowego i w wielu przypadkach pozwala wykorzystać zwykle wolna piny od programowania atmegi.

    [ATmega32] 10 diod led do jednego pinu

    Przykład - tak zwykle podłączam, nie rozrysowywałem reszty połączeń aby schemat był bardziej czytelny.
    A to wyświetlacz jaki zrobiłem wykorzystując te układy, zamiast wyświetlaczy można dać diody LED. - https://www.elektroda.pl/rtvforum/topic2123500.html
  • Poziom 15  
    Niestety w żadnym sklepie nie znalazłem takiego układu. Tak więc na razie idę w kierunku budowy układu na 74HC595.

    Czy w taki sposób mogę sterować 40 diodami led? (pominąłem wszystkie inne połączenia)

    Wtedy do połączenia moich około 200 diod zrobiłbym 5 takich układów czyli wykorzystałbym 15 portów więc nie jest źle jak dla mnie :)

    [ATmega32] 10 diod led do jednego pinu
  • Pomocny post
    Poziom 30  
    Układy SCT kupisz w firmie tme. Są w trzech obudowach do wyboru.
    Odnośnie sposobu dodawania kolejnych układów to nie musisz zajmować innych portów w mikrokontrolerze, linie zegarową i zatrzasku łączysz w układach równolegle, a wyjście szeregowe pierwszego układu łączysz z wejściem drugiego, wyjście drugiego do wejścia trzeciego itd.

    [ATmega32] 10 diod led do jednego pinu


    Taki sposób dotyczy zarówno układów SCT jak i 74595.