Musisz określić, czy chcesz kontrolować jedną czy wiele diod LED. Dodałbym również „unikanie kontroli szeregowej i dodatkowych układów scalonych”. Odpowiedź ma tendencję do nieskończoności, jeśli częstotliwość odświeżania lub części sprzętowe nie są ograniczeniami.
ppvi
Odpowiedzi:
26
Wierzę, że za pomocą pleksowania N linii Charlie steruje diodami LED N * (N-1). Jest dobry artykuł na Wikipedii.
Mój przyjaciel, Jimmie P. Rodgers, umieścił 126 diod LED na tarczy Arduino. Używa charlie-plexingu do sterowania diodami LED. Niektóre informacje na jego tablicy znajdują się pod adresem -
jimmieprodgers.com/2009/12/my-development-process/ (kopia archive.org)
Na ostatnim spotkaniu grupy użytkowników Arduino w Bostonie Jimmie P. Rodgers narysował schemat pleksowania Charliego jako matrycę z etykietowanymi sieciami. Rysowane w ten sposób schematy zdawały się dobrze przekazywać koncepcję. Stworzyłem kilka podobnych schematów - patrz http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
Musisz się martwić ograniczeniami mocy. Tak naprawdę nigdy nie korzystałem z Arduino, ale zakładam, że ma on aktualny limit, tak jak robią to PIC. Ponadto rejestry przesuwne same będą miały bieżący limit. Jeśli na to wpadniesz, będziesz musiał rozważyć użycie czegoś takiego jak MOSFET, aby umożliwić sterowanie diodami LED bez konieczności pobierania dużej mocy bezpośrednio z mikrokontrolera.
Dowolny dany pin mikrokontrolera AVR może pobierać prąd do 40 mA, a całkowity zasilacz pochodzący z układu scalonego (tj. Na ziemi i styki Vcc) musi być mniejszy niż 200 mA.
Charlieplexing to świetne rozwiązanie w sytuacjach, gdy potrzebujesz wielu diod LED, ale możesz sobie poradzić, gdy świeci tylko jedna dioda LED na raz. Standardowa tablica Arduino (jak Duemilanove) zapewnia 17 „wolnych” styków we / wy, nie licząc TX, RX, resetowania ani styku 13. Zatem możesz podłączyć 17 * 16 = 272 diod LED. Może to działać dobrze, zwłaszcza jeśli palisz jedną diodę LED lub szybko skanujesz tylko kilka. Ale jeśli próbujesz zapalić całą matrycę za pomocą wzoru, przekonasz się, że każda jest włączona (nieco mniej niż) w 1/272 czasu, więc jeśli twój prąd napędowy wynosiłby 30 mA w danym momencie, każda dioda LED średni prąd wyniósłby około 0,1 mA - dość słabo.
Jeśli nie potrzebujesz tak wielu diod LED, ale potrzebujesz większej jasności, lepszym rozwiązaniem może być tradycyjne multipleksowanie. W takim przypadku niektóre linie są używane jako wiersze, a niektóre jako kolumny w macierzy. Jeśli użyjesz prądu LED 10 mA, możesz zdefiniować macierz 4 kolumn i 13 rzędów, w których wszystkie 4 diody LED w jednym rzędzie mogą świecić jednocześnie, i skanujesz rzędy. Następnie każdy rząd ma 1/13 czasu przy prądzie 10 mA, więc średni prąd LED może wynosić nawet 0,76 mA, ALE dostajesz tylko 4 * 13 = 104 diody LED. (Zdecydowanie jaśniejsze na diodę LED niż przy charlieplexowaniu).
Ograniczeniem w ostatnim przykładzie jest 40 mA na pin na AVR - ponieważ każdy rząd pinów zasilających 4x10 = 40 mA. Jeśli zezwolisz na dodanie zewnętrznych tranzystorów (które mogą być tanie i małe) do wyjść szeregowych, możesz uniknąć tego konkretnego limitu i przejść jaśniej. Na przykład, możesz stworzyć tablicę 8x9, z 8 rzędami i 9 kolumnami, łącznie 72 diodami LED. Jeden z 8 rzędów jest włączony jednocześnie, wybierany przez tranzystor. Jednocześnie może świecić maksymalnie 9 diod LED w danym rzędzie, zasilanych prądem o wartości 20 mA, więc 180 mA pochodzi z tranzystora, a Ty pozostajesz poniżej obecnych limitów AVR. Średni prąd na diodę LED wynosi teraz 20 mA / 8 = 2,5 mA - zwykle dość jasny.
Jest tu bardzo ładny, szczegółowy samouczek , który zawiera sekcję dotyczącą używania Arduino do uruchamiania kostki LED 8x8x8. (Nie przegap filmu, który przygotowali)
Wygląda na coś, co widziałem na wystawie UFO w Minneapolis około 1979 roku lub gdzie indziej, ale pamiętam to jako około 4096 miniaturowych żarówek. Czy ktoś jeszcze pamięta, że widział coś takiego?
supercat,
4
Istnieje wiele ekspanderów we / wy, które używają magistrali SPI lub I2C. Za pomocą jednego modułu MSSP możesz sterować niemal nieskończoną liczbą wyjść cyfrowych, takich jak diody LED.
Zobacz karty danych Microchip lub uwagi aplikacyjne dla następujących części:
SPI - MCP23S08
I2C - MCP23008
Przy 17 pinach I / O, siedemnastu tranzystorach NPN (podążających za emiterem w celu zwiększenia prądu) nie powinno być szczególnego problemu z wyświetlaniem 272 diod LED w dowolnych kombinacjach przy cyklu pracy 1/17, ze średnim prądem lub 0,7mA (200mA / 272), ograniczone przez zdolność układu do obniżenia 200mA na raz. Dodanie diody, aby uzyskać spadek o 0,7 woltów, pozwoli na dodanie kolejnych 17 diod LED (skrócenie cyklu pracy do 1/18), chociaż jasność nie będzie dokładnie pasować do pozostałych.
Czy możesz wyjaśnić, jaki rodzaj obwodu tutaj sugerujesz? Śledzący emiter jest topologią BJT.
Kevin Vermeer
@reemrevnivek: patrz edycja powyżej. Przerzucałam w myślach kilka odmian, a one się zagmatwały. Jeśli dodaje się tranzystory w celu zwiększenia napędu strony wysokiej, ale nie napędu strony niskiej, muszą to być BJT. Gdyby do obu użyć tranzystorów, mosfety mogłyby być lepsze.
supercat,
0
Podczas gdy Windell Oskay dobrze argumentuje, że 104 diody LED to maksimum bez dodawania kolejnych tranzystorów,
Tom Igoe
opublikował zdjęcia matrycy 128 diod LED sterowanych bezpośrednio przez pojedynczy Arduino Mega - bez dodatkowych tranzystorów, dyskretnych lub zintegrowanych.
Czy Tom Igoe „oszukuje” przez chwilowe przekroczenie „absolutnego maksymalnego prądu na pin” wymienionego w arkuszu danych?
Nie, on oszukuje używając mega arduino. :) Mega ma znacznie więcej pinów IO niż normalne arduino.
Christopher Biggs,
@unixbigot - Smutne, miałem nadzieję zobaczyć fajny hack polegający na ponownym użyciu szpilki resetowania do sterowania diodami LED lub użycia diody.
Kevin Vermeer
1
Twój link jest martwy i prawdopodobnie powinieneś link do odpowiedzi Windella Oskaya . Publikowanie może nie wydawać się ważne, ale w miarę pojawiania się większej liczby odpowiedzi post staje się odległy.
Kevin Vermeer
@KevinVermeer: Naprawiono link poprzez wskazanie na stronie archive.org oryginalnej strony.
Odpowiedzi:
Wierzę, że za pomocą pleksowania N linii Charlie steruje diodami LED N * (N-1). Jest dobry artykuł na Wikipedii.
Mój przyjaciel, Jimmie P. Rodgers, umieścił 126 diod LED na tarczy Arduino. Używa charlie-plexingu do sterowania diodami LED. Niektóre informacje na jego tablicy znajdują się pod adresem - jimmieprodgers.com/2009/12/my-development-process/ (kopia archive.org)
Na ostatnim spotkaniu grupy użytkowników Arduino w Bostonie Jimmie P. Rodgers narysował schemat pleksowania Charliego jako matrycę z etykietowanymi sieciami. Rysowane w ten sposób schematy zdawały się dobrze przekazywać koncepcję. Stworzyłem kilka podobnych schematów - patrz http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
źródło
jimmieprodgers.com
Ogniwem w tej odpowiedzi jest ładowany z wirusami.Możesz użyć rejestrów Shift ( http://en.wikipedia.org/wiki/Shift_register ), aby uzyskać tyle równoległych wyjść z jednego strumienia szeregowego, ile chcesz.
Musisz się martwić ograniczeniami mocy. Tak naprawdę nigdy nie korzystałem z Arduino, ale zakładam, że ma on aktualny limit, tak jak robią to PIC. Ponadto rejestry przesuwne same będą miały bieżący limit. Jeśli na to wpadniesz, będziesz musiał rozważyć użycie czegoś takiego jak MOSFET, aby umożliwić sterowanie diodami LED bez konieczności pobierania dużej mocy bezpośrednio z mikrokontrolera.
źródło
Dowolny dany pin mikrokontrolera AVR może pobierać prąd do 40 mA, a całkowity zasilacz pochodzący z układu scalonego (tj. Na ziemi i styki Vcc) musi być mniejszy niż 200 mA.
Charlieplexing to świetne rozwiązanie w sytuacjach, gdy potrzebujesz wielu diod LED, ale możesz sobie poradzić, gdy świeci tylko jedna dioda LED na raz. Standardowa tablica Arduino (jak Duemilanove) zapewnia 17 „wolnych” styków we / wy, nie licząc TX, RX, resetowania ani styku 13. Zatem możesz podłączyć 17 * 16 = 272 diod LED. Może to działać dobrze, zwłaszcza jeśli palisz jedną diodę LED lub szybko skanujesz tylko kilka. Ale jeśli próbujesz zapalić całą matrycę za pomocą wzoru, przekonasz się, że każda jest włączona (nieco mniej niż) w 1/272 czasu, więc jeśli twój prąd napędowy wynosiłby 30 mA w danym momencie, każda dioda LED średni prąd wyniósłby około 0,1 mA - dość słabo.
Jeśli nie potrzebujesz tak wielu diod LED, ale potrzebujesz większej jasności, lepszym rozwiązaniem może być tradycyjne multipleksowanie. W takim przypadku niektóre linie są używane jako wiersze, a niektóre jako kolumny w macierzy. Jeśli użyjesz prądu LED 10 mA, możesz zdefiniować macierz 4 kolumn i 13 rzędów, w których wszystkie 4 diody LED w jednym rzędzie mogą świecić jednocześnie, i skanujesz rzędy. Następnie każdy rząd ma 1/13 czasu przy prądzie 10 mA, więc średni prąd LED może wynosić nawet 0,76 mA, ALE dostajesz tylko 4 * 13 = 104 diody LED. (Zdecydowanie jaśniejsze na diodę LED niż przy charlieplexowaniu).
Ograniczeniem w ostatnim przykładzie jest 40 mA na pin na AVR - ponieważ każdy rząd pinów zasilających 4x10 = 40 mA. Jeśli zezwolisz na dodanie zewnętrznych tranzystorów (które mogą być tanie i małe) do wyjść szeregowych, możesz uniknąć tego konkretnego limitu i przejść jaśniej. Na przykład, możesz stworzyć tablicę 8x9, z 8 rzędami i 9 kolumnami, łącznie 72 diodami LED. Jeden z 8 rzędów jest włączony jednocześnie, wybierany przez tranzystor. Jednocześnie może świecić maksymalnie 9 diod LED w danym rzędzie, zasilanych prądem o wartości 20 mA, więc 180 mA pochodzi z tranzystora, a Ty pozostajesz poniżej obecnych limitów AVR. Średni prąd na diodę LED wynosi teraz 20 mA / 8 = 2,5 mA - zwykle dość jasny.
źródło
Jest tu bardzo ładny, szczegółowy samouczek , który zawiera sekcję dotyczącą używania Arduino do uruchamiania kostki LED 8x8x8. (Nie przegap filmu, który przygotowali)
źródło
Istnieje wiele ekspanderów we / wy, które używają magistrali SPI lub I2C. Za pomocą jednego modułu MSSP możesz sterować niemal nieskończoną liczbą wyjść cyfrowych, takich jak diody LED.
Zobacz karty danych Microchip lub uwagi aplikacyjne dla następujących części:
SPI - MCP23S08
I2C - MCP23008
źródło
Przy 17 pinach I / O, siedemnastu tranzystorach NPN (podążających za emiterem w celu zwiększenia prądu) nie powinno być szczególnego problemu z wyświetlaniem 272 diod LED w dowolnych kombinacjach przy cyklu pracy 1/17, ze średnim prądem lub 0,7mA (200mA / 272), ograniczone przez zdolność układu do obniżenia 200mA na raz. Dodanie diody, aby uzyskać spadek o 0,7 woltów, pozwoli na dodanie kolejnych 17 diod LED (skrócenie cyklu pracy do 1/18), chociaż jasność nie będzie dokładnie pasować do pozostałych.
źródło
Podczas gdy Windell Oskay dobrze argumentuje, że 104 diody LED to maksimum bez dodawania kolejnych tranzystorów, Tom Igoe opublikował zdjęcia matrycy 128 diod LED sterowanych bezpośrednio przez pojedynczy Arduino Mega - bez dodatkowych tranzystorów, dyskretnych lub zintegrowanych.
Czy Tom Igoe „oszukuje” przez chwilowe przekroczenie „absolutnego maksymalnego prądu na pin” wymienionego w arkuszu danych?
źródło