Mam mikrokontroler z jednym wolnym pinem cyfrowym.
Jak mogę sterować 25 diodami LED?
Mam mikrokontroler z jednym wolnym pinem cyfrowym.
Jak mogę sterować 25 diodami LED?
Shift Register i I2C są dobre, ale tylko wtedy, gdy są co najmniej 2 wolne piny. Sugeruję, że optymalnym rozwiązaniem będzie 1-przewodowy przedłużacz portu Dallas DS2408. Kod dostępu do urządzenia 1-wire Dallas nie jest tak skomplikowany i jest wiele przykładów w Internecie.
Możesz użyć kilku DS2408 podłączonych do jednego pinu lub zaimplementować więcej logiki po pojedynczym DS2408, w zależności od tego, co chcesz .
I2C IO Expander: - Pewien narzut protokołu, ale powinien być rozszerzalny do bardzo dużej (tysięcy) liczby diod LED.
Prosty rejestr przesuwny - Martwy Prosty interfejs, diody LED mogą migać podczas aktualizacji, jeśli zegar rejestru przesuwnego nie jest dość szybki. Użycie podwójnie buforowanego rejestru przesuwnego rozwiązuje ten problem.
Mając tylko 1 pin IO, możesz użyć 1-przewodowego ekspandera / rejestru przesuwnego lub dodać kolejne urządzenie do magistrali I2C, jak już wspomniano. Jedyną rzeczą, o której jeszcze nie wspomniano, jest możliwość dodania kolejnego slave'a do twojego portu SPI.
SPI nazywa się protokołem 4-przewodowym - masz dwie linie danych, linię zegarową i wybierz linię (jak również wspólną podstawę, ale to zwykle się nie liczy). Jednak pierwsze trzy są współdzielone przez wszystkie urządzenia na magistrali, więc każde urządzenie po pierwszym zajmuje tylko jeden ślad / przewód. SPI również zwiększa twoją magistralę do pełnego dupleksu, ale to nie ma znaczenia dla tej aplikacji.
Po prostu połączyłbym kilka rejestrów przesuwnych razem. (Zmniejsza to oczywiście częstotliwość, z jaką możesz przełączać diody LED ..)
Jeśli naprawdę masz dostępny tylko 1 pin, 1-przewodowa magistrala Dallas wygląda na najbardziej oczywistą. Ponieważ jednak jest to tylko produkcja, istnieją tańsze rozwiązania. Szeregowa magistrala PWM, która przenosi zarówno dane, jak i zegar, jest łatwa do skonfigurowania; zobacz na przykład stronę Romana Blacka, o której również wspomniał davidcary. Potrzebujesz tylko szeregowo-równoległych rejestrów przesuwnych, takich jak 74VHC164, które możesz kaskadować dla dowolnej liczby wyjść (jedno '164 ma 8 wyjść).
W tym rozwiązaniu diody LED są napędzany statycznie.
Jeśli masz inne wejścia / wyjścia, które możesz udostępniać, na przykład SPI w I2C, możesz wybrać bardziej luksusowe rozwiązania, takie jak MAX6950 firmy Maxim. MAX6950 ma miganie i kontrolę jasności oraz ograniczenie szybkości narastania, żeby wymienić tylko kilka funkcji. Diody LED są multipleksowane, co oznacza, że potrzebujesz tylko jednego 16-pinowego sterownika.
Odpowiedzią jest prawdopodobnie „seria rejestrów zmianowych”, ale czy możesz podać bardziej szczegółowe pytanie? Jaki mikrokontroler? Co rozumiesz przez „port cyfrowy”? Pojedynczy pin?
25 diod LED, w zależności od rozmiaru, może pobierać dużo energii dla pojedynczego cyfrowego pinu IO w mikrokontrolerze. Zamiast sterować nimi bezpośrednio, prawdopodobnie powinieneś użyć prostego przełącznika FET (tak, aby IO było powiązane z bramką) do sterowania zasilaniem łańcucha diod LED.
W zależności od aplikacji istnieją inne bardziej niezawodne sposoby żeby tego dokonać. Ale wrzucenie fet prawdopodobnie sprawi, że będziesz pracował najszybciej.
Na przykład, jeśli chcesz bramkować zmienny sygnał, istnieją bardziej skomplikowane urządzenia, czasami nazywane przekaźnikami cyfrowymi, które umożliwiają cyfrowe przełączanie go.
Jak w przypadku indywidualnego sterowania 25 diodami LED za pomocą jednego portu IO. Jak sugerowali inni, możesz użyć kilku rejestrów przesuwnych. Istnieją bardziej skomplikowane rozwiązania polegające na komunikacji z innym układem scalonym przy użyciu protokołu szeregowego (na przykład I2C).
Roman Black opisuje system shift1, który umożliwia niezależne sterowanie dowolną liczbą diod LED z jednego pinu mikrokontrolera.
@ Fake Name, @Tim, @pingswept wszystkie sugerują łącząc razem kilka rejestrów przesuwnych, styk wyjściowy danych DO na jednym zasila styk wejściowy danych DI na kolejnym. 74HC595 działałby dobrze. (Być może inny układ działałby trochę lepiej).
(@reemrevnivek, z tego rodzaju połączonym łańcuchowo SPI, każde urządzenie po pierwszym nie wymagają więcej pinów w mikrokontrolerze, wbrew temu, co twierdzi wiele osób - dlaczego ich słuchasz? :-).
Zwykle wymaga to 4 pinów na mikrokontrolerze - MISO, MOSI, SCLK Ponieważ robisz tylko wyjście, nie potrzebujesz styku wejściowego MISO.
Roman Black odkrył, że przy bardzo ostrożnym ustawieniu czasu na pojedynczym wyjściu mikrokontrolera i przy niektórych Ostrożnie poprawiając obwód analogowy, pojedynczy pin mikrokontrolera może sterować prostym obwodem analogowym, który oddziela wspólny SCLK, pin DI pierwszego chipa w łańcuchu (MOSI) i wspólny sygnał zatrzasku.
Wtedy ten mikrokontroler może sterować 25 diodami LED z jednego pinu
Możesz podłączyć inny mikrokontroler przez ten pojedynczy pin i rozmawiać z nim przez 1wire (lub własny protokół, jeśli potrzebujesz dużej szybkości). Następnie ten drugi mikrokontroler zajmuje się diodami LED.