Korzystam z Atmel ATtiny13, który ma 6-pinowe we / wy. Chciałbym kontrolować około 15 diod LED, ale nie jestem pewien, jak podłączyć wszystko. Bez jakiegokolwiek multipleksowania wydaje się, że byłbym w stanie kontrolować tylko 6 diod LED jednocześnie. Czy jestem ograniczony do zaledwie 6 diod LED z powodu wielkości mikrokontrolera?
microcontroller
led
multiplexer
JYelton
źródło
źródło
Odpowiedzi:
Istnieje kilka metod sterowania dużą liczbą diod LED z kilku pinów IO.
Najprostszym jest standardowe multipleksowanie wyświetlania wierszy / kolumn. Dzięki tej technice możesz sterować diodami LED za pomocą n pinów IO. Matematycznie cykl pracy wynosi:( n / 2 )2) n
Oznacza to, że ta technika ma cykl pracy 100%, gdy wszystkie diody LED są zapalone (lub wszystkie rzędy lub wszystkie kolumny są identyczne) i cykl pracy gdy konieczne jest zaświecenie linii ukośnej (lub wszystkie rzędy są różne ). Masz gwarancję tylko 100% cyklu pracy przy zapalaniu każdej diody LED lub jednej diody LED (lub zerowych diod LED, ale tak naprawdę nie ma to większego znaczenia).1 / n
Nieco bardziej złożony jest Charlieplexing . Dzięki tej technice możesz sterować diodami LED za pomocą n pinów IO. Za pomocą tej techniki można świecić tylko n - 1 diodami LED. Matematycznie cykl pracy wynosi:n2)- n n n - 1
Ostatnią metodą, o której wspomnę, jest użycie rejestru przesuwnego lub ekspandera we / wy. Za pomocą dwóch pinów (albo surowego interfejsu danych / zegara, I2C lub jednokierunkowego SPI) możesz sterować dowolnie dużą liczbą diod LED. Cykl pracy dla dowolnego wzoru wynosi 100%, ale szybkość aktualizacji jest odwrotnie proporcjonalna do liczby diod LED. To najdroższa metoda. W przypadku 15 diod LED prawdopodobnie taniej będzie po prostu uaktualnić do mikro z tyloma pinami IO.
źródło
Przykład:
Sześć diod LED na 3 piny:
źródło
Bez multipleksowania (napęd bezpośredni) jesteś ograniczony do 6 diod LED.
Dzięki charlieplexingowi możesz sterować n * (n-1) diodami LED z n pinów.
Za pomocą ekspanderów we / wy lub rejestrów przesuwnych można sterować praktycznie nieograniczoną liczbą diod LED.
Przykład: 8-bitowy ekspander we / wy MCP23008 I2C
źródło
Jak sugerował @ mjh2007 z ekspanderem I2C. Są jednak takie , które są przeznaczone do napędzania diod LED, które pozwolą uniknąć konieczności stosowania zewnętrznych rezystorów ograniczających prąd.
źródło
Oto przykład charlieplexowania, który zbudowałem.
Jest to symulator wiązki latarni morskiej i wykorzystuje serię 12 diod LED oznaczonych jako 4 GPIO do zamiatania wiązki światła wokół dysku. Tutaj jest film .
Projekt jest oparty na PIC, używam PIC12f683, który jest również 8-pinowym uP i można go uznać za porównywalny z 8-pinowymi AVR.
Intensywność diody LED jest sterowana przez przerwanie, które zapewnia 32-stopniowy PWM przy około 60 Hz. Tylko dwie diody LED mogą świecić jednocześnie, co daje 50% cła na każdą diodę, ponieważ to było wszystko, czego potrzebowałem. Daje również dobry kompromis częstotliwości odświeżania PWM w stosunku do rozdzielczości.
Kodowanie użycia charlieplexowania jako właściwie całkiem proste, jeśli trzymasz się „klasycznej” metody zapalania tylko jednej diody LED w dowolnym momencie z bardzo dużą częstotliwością odświeżania. Wymagane PORT i TRIS (rejestry specyficzne dla zdjęć) najpierw opracowuję na papierze, a następnie przechowuję wyniki w tablicy statycznej. Aby zapalić LED x, PIC musi po prostu sprawdzić wartość na indeksie tablicy [x] i zapisać je bezpośrednio do PORTU (z odrobiną maskowania, aby zachować stan innych pinów nieużywanych w charliplexie)
Mój projekt ma tylko 12 diod LED, a nie 15 lub maksymalnie 20, na które pozwala 5 GPIO, ponieważ chciałem zachować jedną zapasową GPIO na przyszły rozwój.
W każdym razie ... Pomyślałem, że może być przydatny przykład działania podobny do twojego żądania.
Pełny kod źródłowy i schematy są dostępne na moim blogu.
źródło
Inną opcją byłoby użycie diod LED Neopixel. Mają wbudowany kontrolny układ scalony i potrzebujesz tylko jednego styku do sterowania tyloma diodami LED, ile chcesz. Oczywiście wtedy potrzebujesz odpowiedniego oddzielnego źródła zasilania LED.
źródło