Charlieplexing
Charlieplexing (znany również jako multipleksowanie trójstanowe , multipleksowanie LED ze zmniejszoną liczbą pinów , komplementarny napęd LED i crossplexing ) to technika sterowania multipleksowanym wyświetlaczem, w której stosunkowo niewiele pinów we /wy mikrokontrolera jest używanych np. do sterowania macierzą diod LED .
Metoda wykorzystuje możliwości trójstanowej logiki mikrokontrolerów w celu uzyskania wydajności w porównaniu z tradycyjnym multipleksowaniem. Chociaż jest bardziej wydajny pod względem wykorzystania we/wy, istnieją problemy, które powodują, że jest bardziej skomplikowany w projektowaniu i utrudniają korzystanie z większych wyświetlaczy. Kwestie te obejmują cykl pracy , wymagania prądowe i napięcia przewodzenia diod LED.
Podobnie jak w przypadku każdego multipleksowania, istnieje wymóg szybkiego przełączania między używanymi diodami LED, aby ludzkie oko postrzegało wyświetlacz jako całość. Multipleksowanie można ogólnie zaobserwować jako efekt stroboskopowy i przekrzywienie, jeśli ognisko oka zostanie szybko przesunięte poza wyświetlacz.
Pochodzenie
Technika Charlieplexing została wprowadzona przez Maxim Integrated w 2001 roku jako schemat multipleksowania diod LED o zmniejszonej liczbie pinów w ich sterowniku wyświetlacza LED MAX6951. Jednak nazwa „Charlieplexing” pojawiła się po raz pierwszy w nocie aplikacyjnej z 2003 roku. Został nazwany na cześć Charlesa „Charlie” M. Allena, inżyniera aplikacji znanego z MAX232 , który zaproponował tę metodę wewnętrznie. [ kiedy? ]
Również w 2001 roku Don Lancaster zilustrował tę metodę jako część swoich rozważań na temat problemu „ N-połączenia ”, odnosząc się do technologii Microchip , który już omówił ją jako „uzupełniającą technikę napędu LED” w notatce aplikacyjnej z 1998 r., A później ją uwzględnił w książeczce z poradami i wskazówkami.
Chociaż firma Microchip nie wspomniała o pochodzeniu pomysłu, mogła go znaleźć na PICLIST, liście mailingowej poświęconej mikrokontrolerom Microchip PIC , gdzie również w 1998 roku Graham Daniel zaproponował społeczności jako metodę kierowania wierszami i kolumnami dwukierunkowych diod LED . W tym czasie Daniel stworzył proste obwody z chipami PIC 12C508 napędzającymi 12 diod LED na 5 pinach z zestawem mini poleceń do wprawiania w ruch różnych wyświetlaczy świetlnych.
Metoda ta była jednak znana i stosowana przez różne podmioty znacznie wcześniej w latach 80. XX wieku i została szczegółowo opisana już w 1979 r. w patencie Christophera W. Malinowskiego, Heinza Rinderle i Martina Siegle z Departamentu Badań i Rozwoju , AEG-Telefunken , Heilbronn, Niemcy za to, co nazwali „trójstanowym systemem sygnalizacyjnym”.
Podobno podobne techniki były już używane już w 1972 roku do sygnalizacji torów w modelarstwie kolejowym . [ potrzebne źródło ]
Tradycyjne multipleksowanie
Szpilki | diody LED |
---|---|
1 | 0 |
2 | 2 |
3 | 6 |
4 | 12 |
5 | 20 |
6 | 30 |
7 | 42 |
8 | 56 |
9 | 72 |
10 | 90 |
20 | 380 |
40 | 1560 |
N | n 2 - n |
Multipleksowanie wyświetlacza bardzo różni się od multipleksowania używanego w transmisji danych, chociaż ma te same podstawowe zasady. W multipleksowaniu wyświetlaczy linie danych wyświetlaczy* są połączone równolegle do wspólnej magistrali danych w mikrokontrolerze. Następnie wyświetlacze są włączane i adresowane indywidualnie. Pozwala to na użycie mniejszej liczby pinów we/wy, niż normalnie wymagałoby to bezpośredniego sterowania taką samą liczbą wyświetlaczy. Tutaj każdy „wyświetlacz” mógłby na przykład przedstawiać jedną cyfrę kalkulatora, a nie pełną tablicę cyfr.
Podczas korzystania z Charlieplexingu n pinów prowadzących może prowadzić n cyfr z n - 1 segmentami. W uproszczeniu oznacza to, że n pinów jest w stanie sterować n 2 − n segmentami lub diodami LED. Tradycyjne multipleksowanie wymaga znacznie większej liczby pinów do sterowania tą samą liczbą diod LED; 2 n pinów musi być użytych do sterowania n 2 diodami LED (chociaż układ dekodera 1 z n może być użyty do zmniejszenia liczby pinów we / wy mikrokontrolera do ).
Jeśli znana jest liczba diod LED, poprzednie równanie można przetworzyć wstecz, aby określić wymaganą liczbę pinów. Oznacza to, że L diody LED mogą być sterowane przez szpilki.
Napęd uzupełniający
Charlieplexing w najprostszej formie działa przy użyciu matrycy diodowej komplementarnych par diod LED. Najprostsza możliwa macierz Charlieplexed wyglądałaby tak:
Po przyłożeniu dodatniego napięcia do styku X1 i styku uziemiającego X2, dioda LED1 zaświeci się. Ponieważ prąd nie może przepływać przez diody LED w odwrotnym kierunku przy tak niskim napięciu, dioda LED2 pozostanie wyłączona. Jeśli napięcia na styku X1 i styku X2 zostaną zamienione, dioda LED2 zaświeci się, a dioda LED1 zgaśnie.
Technika Charlieplexing w rzeczywistości nie umożliwia większej matrycy przy użyciu tylko dwóch pinów, ponieważ dwie diody LED mogą być sterowane przez dwa piny bez żadnych połączeń matrycy, a nawet bez użycia trybu trójstanowego. W tym przykładzie z dwiema diodami LED Charlieplexing zaoszczędziłby jeden przewód uziemiający, który byłby potrzebny w typowej sytuacji ze sterownikiem 2-pinowym.
Jednak obwód 2-pinowy służy jako prosty przykład pokazujący podstawowe koncepcje przed przejściem do większych obwodów, w których Charlieplexing faktycznie wykazuje przewagę.
Rozwijanie: logika trójstanowa
Jeśli powyższy obwód miałby zostać rozszerzony, aby pomieścić 3 piny i 6 diod LED, wyglądałby tak:
Stanowi to jednak problem. Aby ten obwód działał jak poprzedni, jeden z pinów musi zostać odłączony przed naładowaniem pozostałych dwóch. Jeśli na przykład dioda LED5 miała się świecić, X1 musi być naładowany, a X3 musi być uziemiony. Jeśli jednak X2 jest również naładowany, dioda LED3 również się zaświeci. Gdyby zamiast tego X2 był uziemiony, dioda LED1 zaświeciłaby się, co oznacza, że dioda LED5 nie może świecić sama. Można to rozwiązać, wykorzystując trójstanowe właściwości logiczne pinów mikrokontrolera. Piny mikrokontrolera generalnie mają trzy stany: „wysoki” (5 V), „niski” (0 V) i „wejście”. Tryb wejściowy wprowadza pin w wysokiej impedancji , który, mówiąc elektrycznie, „odłącza” ten pin od obwodu, co oznacza, że przepływa przez niego niewielki lub żaden prąd. Dzięki temu obwód może zobaczyć dowolną liczbę pinów podłączonych w dowolnym momencie, po prostu zmieniając stan pinu. Aby wysterować powyższą matrycę z sześcioma diodami LED, dwa piny odpowiadające świecącej diodzie LED są podłączone do 5 V (pin we/wy „wysoki” = liczba binarna 1) i 0 V (pin we/wy „niski” = binarne 0), podczas gdy trzeci pin jest ustawiony w stanie wejściowym.
W ten sposób zapobiega się wyciekom prądu z trzeciego styku, zapewniając, że dioda LED, która ma się świecić, jest jedyną, która się świeci. Ponieważ żądana dioda LED zmniejsza napięcie dostępne za rezystorem, prąd nie będzie płynął alternatywnymi ścieżkami (na przykład alternatywna ścieżka z 2 diodami LED istnieje dla każdej pary pinów w schemacie 3-pinowym), o ile napięcie spada żądana ścieżka LED jest mniejsza niż całkowity spadek napięcia na każdym szeregu alternatywnych diod LED. Jednak w wariancie z pojedynczymi rezystorami ten efekt regulacji napięcia nie ma wpływu na alternatywne tory, dlatego należy upewnić się, że wszystkie zastosowane diody LED nie będą świecić przy przyłożonym napięciu zasilania o połowę niższym, ponieważ ten wariant nie korzysta z efektu regulacji napięcia żądana dioda LED ścieżki.
Wykorzystując logikę trójstanową, macierz można teoretycznie rozszerzyć do dowolnego rozmiaru, o ile dostępne są piny. Dla n pinów w matrycy może znajdować się n ( n - 1) diod LED. Dowolną diodę LED można zapalić, przykładając 5 V i 0 V do odpowiednich pinów i ustawiając wszystkie inne piny podłączone do matrycy w tryb wejściowy. Przy tych samych ograniczeniach, jak omówiono powyżej , równolegle może świecić do n - 1 diod LED, które dzielą wspólną ścieżkę dodatnią lub ujemną.
Rozszerzanie
Obwód 3-przewodowy można przestawić na tę prawie równoważną matrycę (rezystory zostały przeniesione).
Podkreśla to podobieństwa między zwykłym multipleksem sieciowym a Charlieplexem i pokazuje wzór, który prowadzi do reguły „n -kwadrat minus n ”.
W typowym zastosowaniu na płytce drukowanej rezystory byłyby fizycznie umieszczone na górze kolumn i podłączone do styku wejściowego. Rzędy byłyby następnie podłączone bezpośrednio do styku wejściowego z pominięciem rezystora.
Pierwsza konfiguracja na obrazku po lewej jest odpowiednia tylko wtedy, gdy używane są identyczne diody LED, ponieważ pojedynczy rezystor jest używany do ograniczania prądu przez więcej niż jedną diodę LED (choć nie w tym samym czasie — raczej jeden rezystor ogranicza prąd tylko przez jedną diodę LED w danej kolumnie w jednym czasie). Kontrastuje to z drugą konfiguracją z indywidualnymi rezystorami dla każdej diody LED, jak pokazano na obrazku po prawej stronie. W tej drugiej konfiguracji każda dioda LED ma sparowany unikalny rezystor. Umożliwia to mieszanie różnych rodzajów diod LED poprzez zapewnienie każdej z nich odpowiedniej wartości rezystora.
W obu tych konfiguracjach, jak pokazano zarówno na lewym, jak i prawym obrazie, przeniesione rezystory umożliwiają jednoczesne zapalenie wielu diod LED, rząd po rzędzie, zamiast wymagać, aby świeciły się one indywidualnie. Wydajność prądową rzędu można zwiększyć za pomocą BJT z wtórnikiem emiterowym NPN , zamiast bezpośredniego sterowania prądem za pomocą zwykle znacznie słabszego styku we/wy.
Problemy z Charlieplexingiem
Częstotliwość odświeżania
Ponieważ tylko jeden zestaw diod LED, z których wszystkie mają wspólną anodę lub katodę, może świecić jednocześnie bez włączania niezamierzonych diod LED, Charlieplexing wymaga częstych zmian wyjściowych, za pomocą metody znanej jako multipleksowanie . Po zakończeniu multipleksowania nie wszystkie diody LED świecą się jednocześnie, ale raczej jeden zestaw diod LED świeci się na krótko, a następnie drugi zestaw i ostatecznie cykl się powtarza. Jeśli zostanie to zrobione wystarczająco szybko, będą się wydawać, że wszystkie są włączone przez cały czas dla ludzkiego oka z powodu uporczywego widzenia . Aby wyświetlacz nie miał zauważalnego migotania, częstotliwość odświeżania każdej diody LED musi być większa niż 50 Hz. [ wątpliwe ]
Załóżmy, że 8 pinów trójstanowych jest używanych do sterowania 56 diodami LED przez Charlieplexing, co wystarcza na 8 7-segmentowych wyświetlaczy (bez kropek dziesiętnych). Zwykle wyświetlacze 7-segmentowe mają wspólną katodę, czasem wspólną anodę, ale bez utraty ogólności załóżmy, że jest to wspólna katoda. Wszystkie diody LED we wszystkich 8 7-segmentowych wyświetlaczach nie mogą być włączone jednocześnie w dowolnej pożądanej kombinacji za pomocą Charlieplexing. Niemożliwe jest uzyskanie 56 bitów informacji bezpośrednio z 8 trytów (termin określający znak o podstawie 3, ponieważ szpilki są w stanie 3) informacji, ponieważ 8 trytów zasadniczo obejmuje 8 log 2 3, czyli około 12,7 bitów informacji , co jest dalekie od 56 bitów wymaganych do włączenia lub wyłączenia wszystkich 56 diod LED w dowolnej dowolnej kombinacji. Zamiast tego ludzkie oko musi zostać oszukane przez zastosowanie multipleksowania.
Tylko jeden wyświetlacz 7-segmentowy, jeden zestaw 7 diod LED może być aktywny w dowolnym momencie. Sposób, w jaki można to zrobić, polega na przypisaniu 8 wspólnych katod 8 wyświetlaczy do własnego unikalnego pinu wśród 8 portów we/wy. W dowolnym momencie tylko jeden z 8 sterujących pinów I/O będzie aktywny w stanie niskim, a zatem tylko wyświetlacz 7-segmentowy ze wspólną katodą podłączoną do tego aktywnego pinu niskiego może mieć włączoną dowolną diodę LED. To jest aktywny wyświetlacz 7-segmentowy. Anody 7 segmentów LED w aktywnym 7-segmentowym wyświetlaczu można następnie włączyć w dowolnej kombinacji, ustawiając pozostałe 7 portów I/O w trybie wysokiej lub wysokiej impedancji, w dowolnej kombinacji. Są one podłączone do pozostałych 7 pinów, ale przez rezystory (połączenie ze wspólną katodą jest podłączone do samego pinu, a nie przez rezystor, ponieważ w przeciwnym razie prąd płynący przez każdy pojedynczy segment zależałby od liczby wszystkich włączonych segmentów, ponieważ wszystkie musiałyby dzielić jeden rezystor). Ale aby wyświetlić żądaną liczbę przy użyciu wszystkich 8 cyfr, tylko jeden 7-segmentowy wyświetlacz może być wyświetlany naraz, więc wszystkie 8 musi być cyklicznie przewijane oddzielnie, w 50. części sekundy przez cały okres 8. W ten sposób wyświetlacz musi być odświeżany z częstotliwością 400 Hz przez okres 8 cykli przez wszystkie 8 segmentów, aby diody LED nie migały wolniej niż 50 razy na sekundę. Wymaga to ciągłego przerywania dowolnego dodatkowego przetwarzania wykonywanego przez kontroler, 400 razy na sekundę.
Prąd szczytowy
Ze względu na zmniejszony cykl pracy , obecne wymagania wyświetlacza Charlieplexed rosną znacznie szybciej niż w przypadku tradycyjnie multipleksowanego wyświetlacza. W miarę powiększania się wyświetlacza średni prąd przepływający przez diodę LED musi być (w przybliżeniu) stały, aby utrzymać stałą jasność, co wymaga proporcjonalnego wzrostu prądu szczytowego. Powoduje to szereg problemów, które ograniczają praktyczny rozmiar wyświetlacza Charlieplexed.
- Diody LED często mają maksymalny szczytowy prąd znamionowy, jak również średni prąd znamionowy.
- Jeśli kod mikrokontrolera ulegnie awarii i używany jest Charlieplex z jedną diodą na raz, pojedyncza świecąca dioda LED jest znacznie bardziej obciążona niż w przypadku wyświetlacza Charlieplexed z rzędami na raz lub w tradycyjnie zmultipleksowany wyświetlacz, zwiększający ryzyko awarii przed wykryciem usterki.
Wymóg dla trójstanu
Wszystkie wyjścia używane do sterowania wyświetlaczem Charlieplexed muszą być trójstanowe. Jeśli prąd jest wystarczająco niski, aby sterować wyświetlaczami bezpośrednio przez styki we/wy mikrokontrolera, nie stanowi to problemu, ale jeśli trzeba zastosować zewnętrzne układy trójstanowe, wówczas każdy układ trójstanowy będzie wymagał dwóch linii wyjściowych do sterowania, eliminując większość zaletą wyświetlacza Charlieplexed. Ponieważ prąd z pinów mikrokontrolera jest zwykle ograniczony do około 20 mA, poważnie ogranicza to praktyczny rozmiar wyświetlacza Charlieplexed. Można to jednak zrobić, włączając jeden segment na raz.
Złożoność
Macierze Charlieplex są znacznie bardziej skomplikowane, zarówno pod względem wymaganego układu PCB, jak i programowania mikrokontrolerów, niż przy użyciu gotowych macierzy multipleksowych. Wydłuża to czas projektowania. Lutowanie komponentów może być również bardziej czasochłonne niż w przypadku multipleksowanych matryc LED. Równowagę między złożonością a wykorzystaniem pinów można osiągnąć, łącząc Charlieplexing kilka gotowych multipleksowanych macierzy LED.
Napięcie przewodzenia
Podczas korzystania z diod LED o różnych napięciach przewodzenia , na przykład przy użyciu diod LED o różnych kolorach, niektóre diody LED mogą świecić, gdy nie jest to pożądane.
Na powyższym schemacie widać, że jeśli dioda LED 6 ma napięcie przewodzenia 4 V, a diody 1 i 3 mają napięcie przewodzenia 2 V lub mniej, zaświecą się wtedy, gdy dioda 6 jest przeznaczona, ponieważ ich ścieżka prądowa jest krótsza. Tego problemu można łatwo uniknąć, porównując napięcia przewodzenia diod LED zastosowanych w matrycy i sprawdzając, czy nie występują problemy ze zgodnością. Lub, prościej, używając diod LED, które mają takie samo napięcie przewodzenia.
Jest to również problem, gdy diody LED używają pojedynczych rezystorów zamiast wspólnych rezystorów, jeśli istnieje ścieżka przez dwie diody LED, która ma mniejszy spadek diod LED niż napięcie zasilania, diody te mogą również świecić w niezamierzonych momentach.
Awaria diody LED
Jeśli pojedyncza dioda LED ulegnie awarii, powodując przerwanie obwodu, zwarcie lub wyciek (powstanie pasożytniczej rezystancji równoległej, która przepuszcza prąd w obu kierunkach), wpływ będzie katastrofalny dla wyświetlacza jako całości. Co więcej, faktycznie problematyczna dioda LED może być bardzo trudna do zidentyfikowania, ponieważ potencjalnie duży zestaw diod LED, które nie powinny się świecić, może zapalić się razem i — bez szczegółowej znajomości obwodu — zależność między tym, która dioda LED jest zła, a która nie można łatwo ustalić liczby diod LED, które zapalają się razem.
Jeśli uszkodzona dioda LED stanie się obwodem otwartym, napięcie między 2 elektrodami diody LED może narastać, aż znajdzie drogę przez dwie inne diody LED. Tych ścieżek jest tyle, ile jest pinów służących do sterowania tablicą minus 2; jeśli dioda LED z anodą w węźle m i katodą w węźle n ulegnie awarii w ten sposób, może się zdarzyć, że każda pojedyncza para diod LED, w której anoda jest węzłem m , katoda jest p dla dowolnej wartości p (z wyjątkiem tego, że p nie może będzie m lub n , więc jest tyle możliwych wyborów dla p , ile jest pinów sterujących układem minus 2), razem z diodą LED, której anoda to p , a katoda to n , zaświecą się wszystkie.
Jeśli jest 8 pinów I/O sterujących macierzą, oznacza to, że będzie 6 pasożytniczych ścieżek przez pary 2 diod LED, a 12 diod może się nieumyślnie zapalić, ale na szczęście stanie się to tylko wtedy, gdy jedna zła dioda LED ma nadejść włączona, co może trwać tylko ułamek czasu i nie będzie wykazywać żadnych szkodliwych objawów, gdy dioda LED problemu nie powinna się świecić. Jeśli problemem jest zwarcie między węzłami x i y , to za każdym razem, gdy dowolna dioda LED U z x lub y jako anodą lub katodą i jakimś węzłem z jako drugą elektrodą powinna się zaświecić (bez utraty ogólności, załóżmy, że U' s katoda jest połączona z x ), dioda LED V z katodą y i anodą z również się zaświeci, więc za każdym razem, gdy węzeł x lub y zostanie aktywowany jako anoda LUB katoda, dwie diody LED zaświecą się zamiast jednej. W tym przypadku niechcący zapala tylko jedną dodatkową diodę, ale robi to znacznie częściej; nie tylko wtedy, gdy uszkodzona dioda LED ma się zaświecić, ale także wtedy, gdy ma się zaświecić dowolna dioda LED, która ma wspólny pin z uszkodzoną diodą LED.
Problematyczne elementy stają się szczególnie trudne do zidentyfikowania, jeśli są uszkodzone dwie lub więcej diod LED. Oznacza to, że w przeciwieństwie do większości metod, w których utrata pojedynczej diody LED powoduje jedynie przepalenie pojedynczego segmentu, podczas korzystania z technologii Charlieplexing jedna lub dwie przepalone diody LED, niezależnie od trybu awarii, prawie na pewno spowodują katastrofę. kaskada niezamierzonych zapaleń diod LED, które nadal działają, co najprawdopodobniej powoduje, że całe urządzenie jest całkowicie i natychmiastowo bezużyteczne. Należy to wziąć pod uwagę przy rozważaniu wymaganej żywotności i charakterystyki awaryjnej projektowanego urządzenia.
Alternatywne przypadki użycia i warianty
Multipleksowanie danych wejściowych
Charlieplexing może być również używany do multipleksowania cyfrowych sygnałów wejściowych do mikrokontrolera. Stosowane są te same obwody diodowe, z wyjątkiem tego, że z każdą diodą jest umieszczony szeregowo przełącznik. Aby odczytać, czy przełącznik jest otwarty, czy zamknięty, mikrokontroler konfiguruje jeden pin jako wejście z wewnętrznym rezystorem podciągającym. Drugi pin jest skonfigurowany jako wyjście i ustawiony na niski poziom logiczny. Jeśli pin wejściowy jest niski, przełącznik jest zamknięty, a jeśli pin wejściowy jest wysoki, przełącznik jest otwarty.
Jednym z potencjalnych zastosowań tego jest odczyt standardowej (4 × 3) 12-klawiszowej klawiatury numerycznej przy użyciu tylko 4 linii we / wy. Tradycyjna metoda skanowania wiersz-kolumna wymaga 4 + 3 = 7 linii we/wy. W ten sposób Charlieplexing oszczędza 3 linie I/O; jednak dodaje koszt 12 diod (ponieważ diody są wolne tylko wtedy, gdy używane są diody LED). Możliwa jest odmiana obwodu z tylko 4 diodami, jednak zmniejsza to przewracanie się klawiatury. Mikrokontroler zawsze może wykryć, kiedy dane są uszkodzone, ale nie ma gwarancji, że wykryje oryginalne naciśnięcia klawiszy, chyba że w danym momencie zostanie naciśnięty tylko jeden przycisk. Prawdopodobnie możliwe jest jednak skonfigurowanie obwodu w taki sposób, że naciśnięcie . co najwyżej dwóch sąsiednich przycisków nie spowoduje utraty danych ) naciśnięte jednocześnie lub jeśli unika się pewnych problematycznych wielokrotnych naciśnięć klawiszy. W obwodzie 12-diodowym nie stanowi to problemu, a pomiędzy naciśnięciami przycisków a danymi wejściowymi zawsze zachodzi relacja jeden do jednego. Jednak jest tak wiele diod, które są wymagane do zastosowania tej metody (zwłaszcza w przypadku większych tablic), że generalnie nie ma oszczędności w porównaniu z tradycyjną metodą skanowania wiersz-kolumna, chyba że koszt diody stanowi tylko ułamek kosztu pin we/wy, gdzie ten ułamek jest równy jednemu z liczby linii we/wy.
GuGapleksowanie
W 2008 roku Dhananjay V. Gadre opracował Gugaplexing , który przypomina Charlieplexing z wieloma napięciami napędu.
Chipipleksowanie
W 2008 r. Guillermo Jaquenod, tak zwany Chipiplexing, dodał obserwatorów emiterów, aby zwiększyć siłę napędu rzędów, umożliwiając jednoczesne oświetlanie rzędów szerszych niż pojedynczy port mikrokontrolera.
Pleksowanie krzyżowe
W 2010 roku austriacki producent układów scalonych austriamicrosystems AG ( od 2012 roku o nazwie ams AG , a od 2020 ams-OSRAM AG ) wprowadził multipleksujący sterownik LED IC AS1119, a następnie AS1130 w 2011 roku. Również podział sygnału analogowego i mieszanego (AMS) (nazywana Lumissil Microsystems od 2020 r.) firmy Integrated Silicon Solution Inc. (ISSI) wprowadziła IS31FL3731 w 2012 r. i IS31FL3732 w 2015 r. Wszyscy używają techniki, którą nazywają cross-plexing, wariant Charlieplexing z automatycznym wykrywaniem otwartych lub zwartych połączeń i środki zapobiegające powstawaniu duchów.
Tukopleksowanie
W 2019 roku Micah Elizabeth Scott opracował metodę wykorzystania 3 pinów do uruchomienia 4 diod LED i 4 przełączników o nazwie Tucoplexing .
Modulacja szerokości impulsów
Charlieplexing może być nawet używany z modulacją szerokości impulsu do sterowania jasnością 12 diod LED z 4 pinami.
Przykład kodu
W poniższym przykładzie kodu Arduino obwód wykorzystuje 8-pinowy mikrokontroler ATtiny , który ma 5 pinów I/O do stworzenia 7 -segmentowego wyświetlacza . Ponieważ wyświetlacz 7-segmentowy wymaga sterowania tylko 7 pojedynczymi diodami LED, używamy 4 pinów we/wy ATtiny jako wyjść charlieplexed (n*(n-1)). Pozostawienie piątego pinu I/O do wykorzystania jako wejście cyfrowe lub analogowe lub inne wyjście.
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
// Kod ATtiny // Odczytuje wejście analogowe (lub cyfrowe) z pinu 4 i za każdym razem, gdy wejście spada poniżej ustawionego progu // liczy jeden i wyświetla wzrost liczby poprzez aktywację jednej z czterech diod (lub tranzystorów) / / lub jedna z dwunastu diod typu charlieplexed. // USTAW TE WARTOŚCI: int próg = 500 ; int maksymalna liczba = 7 ; //////////////////// boolean sensorTriggered = false ; int liczba = ; int wartość czujnika = ; long lastDebounceTime = ; // ostatnia zmiana pinu wyjściowego long debounceDelay = 50 ; // czas odbicia; zwiększyć, jeśli wyjście migocze ////////////////////////////////////////////// //////////////////////////////////// unieważnienie konfiguracji () { for ( int pin = ; pin < 4 ; pin ++ ) { tryb pin ( pin , WYJŚCIE ); digitalWrite ( pin , NISKI ); } tryb pin ( 4 , WEJŚCIE ); zapis cyfrowy ( 4 , WYSOKI ); // podciąganie wewnętrzne } /////////////////////////////////////////// ////////////////////////////////////// pusta pętla () { cyfry testowe (); } nieważne cyfry testowe () { charlieLoop (); } /////////////////////////////////////////// //////////////////////////////// void readSensor () { sensorValue = analogRead ( 2 ); // pin4! opóźnienie ( 100 ); if ( wartość czujnika < próg && sensorTriggered == false ) { sensorTriggered = true ; liczyć ++ ; if ( liczba > maxLiczba ) liczba = ; charlieLoop (); } if ( wartość czujnika > próg ) sensorTriggered = false ; } /////////////////////////////////////////// //////////////////////////////// void charlieLoop () { liczba ++ ; for ( int ja = ; ja < 1000 ; ja ++ ) { for ( int c = ; c < liczba ; c ++ ) { charliePlexPin ( c ); } } opóźnienie ( 1000 ); if ( liczba > maxLiczba ) liczba = ; } /////////////////////////////////////////// //////////////////////////////// void charliePlexPin ( int myLed ){ // Upewnij się, że nie podajemy przypadkowych napięć do diody LED // w krótkim czasie zmieniamy tryby pinów i napięcia. Tryb pinu ( , WEJŚCIE ); tryb pin ( 1 , WEJŚCIE ); tryb pin ( 2 , WEJŚCIE ); tryb pin ( 3 , WEJŚCIE ); przełącznik ( myLed ) { case : pinMode ( , OUTPUT ); tryb pin ( 2 , WYJŚCIE ); zapis cyfrowy ( 2 , NISKI ); zapis cyfrowy ( , WYSOKI ); przerwa ; przypadek 1 : pinMode ( 3 , WYJŚCIE ); tryb pin ( 2 , WYJŚCIE ); zapis cyfrowy ( 2 , NISKI ); zapis cyfrowy ( 3 , WYSOKI ); przerwa ; przypadek 2 : pinMode ( 3 , WYJŚCIE ); tryb pin ( 1 , WYJŚCIE ); zapis cyfrowy ( 1 , NISKI ); zapis cyfrowy ( 3 , WYSOKI ); przerwa ; przypadek 3 : pinMode ( 1 , WYJŚCIE ); tryb pin ( , WYJŚCIE ); zapis cyfrowy ( , NISKI ); zapis cyfrowy ( 1 , WYSOKI ); przerwa ; przypadek 4 : pinMode ( , WYJŚCIE ); tryb pin ( 1 , WYJŚCIE ); zapis cyfrowy ( 1 , NISKI ); zapis cyfrowy ( , WYSOKI ); przerwa ; przypadek 5 : pinMode ( 2 , WYJŚCIE ); tryb pin ( , WYJŚCIE ); zapis cyfrowy ( , NISKI ); zapis cyfrowy ( 2 , WYSOKI ); przerwa ; przypadek 6 : pinMode ( 2 , WYJŚCIE ); tryb pin ( 1 , WYJŚCIE ); zapis cyfrowy ( 1 , NISKI ); zapis cyfrowy ( 2 , WYSOKI ); przerwa ; } } ///////////////////////////////////////// ///////////////////////////////// void spwm ( int freq , int pin , int sp ) { // call charlieplexing to ustaw poprawne pin outy: //on: digitalWrite ( pin , HIGH ); opóźnienieMikrosekundy ( sp * częstotliwość ); // off: digitalWrite ( pin , LOW ); opóźnienieMikrosekundy ( sp * ( 255 - częstotliwość )); }
Zobacz też
Notatki
Dalsza lektura
- Gadre, Dhananjay V. (18.01.2007). „Mikrokontroler steruje logarytmicznym / liniowym kropkowym / słupkowym wyświetlaczem 20-LED” . EDN . P. 83. CA6406730. Zarchiwizowane od oryginału w dniu 2021-12-25.
- Gadre, Dhananjay V.; Chugh, Anurag (2007-05-24). „Ośmiopinowy mikrokontroler obsługuje dwucyfrowy wyświetlacz z wieloma diodami LED” . Projekt elektroniczny . Paramus, New Jersey, USA. ED Online 15512. Zarchiwizowane od oryginału w dniu 13.02.2012.
- Gadre, Dhananjay V. (27.09.2007). „Mikrokontroler steruje 20 diodami LED” . EDN . CA6483826. Zarchiwizowane od oryginału w dniu 2021-12-25.