Ile pojedynczych świateł może kontrolować arduino

19

Chcę używać zwykłej tablicy Arduino do sterowania diodami LED - jakie jest najwięcej świateł, którymi mogę sterować indywidualnie z tablicy?

Czy istnieje samouczek, jak to podłączyć?

mad_z
źródło
3
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

jluciani
źródło
nauczyłem się dzisiaj czegoś nowego; masz moje poparcie :-)
JonathanD
4
Pamiętaj, że dzięki tej metodzie można jednocześnie zapalać tylko diody LED N-1.
AngryEE
2
jimmieprodgers.comOgniwem w tej odpowiedzi jest ładowany z wirusami.
Vivek Maharajh,
1
@vivekmaharajh: Zamieniłem link na link do archiwum.org oryginalnej strony.
Dave Tweed
13

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.

Kellenjb
źródło
7

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.

Windell Oskay
źródło
6

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)

wprowadź opis zdjęcia tutaj

Joel Spolsky
źródło
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

mjh2007
źródło
1

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.

supercat
źródło
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?

Davidcary
źródło
2
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.
Dave Tweed