Witam. Jestem bardzo początkującym arduinowcem więc prose o wyrozumiałość i łopatologię. Chciałem stworzyć zegar na 132 diody LED. 60 sek, 60 minuty i 12 godziny. Chciałem to zrobić na rejestrach przesuwnych 74HC595 i Arduino uno R3. Mniej więcej wiem jak podłączyć rejestry ale jak przesyłać sygnał, 1 bit aby obszedł wszystkie kości to już trudniej. Podpiąłem 2 scalaki i przesyła mi 8 bitów czyli drugi scalak pokazuje prawie to samo co pierwszy. Ktoś może pomóc jak to rozwiązać programowo? Czyli układ podzielony na dwa liczniki do 60 i jeden do 12. Pierwszy sekundowy liczy do 59 i na 60 impulsie steruje drugim licznikiem minutowym. ten z kolei po 59 impulsach steruje godziną.
Załączniki:
74HC595_3.png(41.36 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
Cześć, a sie to wykonac na 74192 / 74193 ( :10, :16 ) kombinacja połączeń da możliwość zrobienia licznika nodulo 1-10 i 1-16 na dowolną ilość taktów zegarowych z podanego zakresu , bardzo stare opracowanie z lat 70 XX W.
Ktoś może pomóc jak to rozwiązać programowo? Czyli układ podzielony na dwa liczniki do 60 i jeden do 12. Pierwszy sekundowy liczy do 59 i na 60 impulsie steruje drugim licznikiem minutowym. ten z kolei po 59 impulsach steruje godziną.
Programowo czy sprzętowo?
Można to oczywiście rozwiązać kompletnie bez mikroprocesora z wykorzystaniem "worka" układów serii 74xx jak zasugerował kolega artbi881.
Z drugiej strony użycie mikrokontrolera daje prostszy układ, większą elastyczność i pozwala zapoznać się z bardziej współczesnymi technologiami.
Jeżeli chodzi o układ takiego zegara na bazie Arduino, to widzę dwie sensowne możliwości.
1. Korzystając z 18 układów 595, jak proponujesz. Układy należy połączyć w trzy łańcuchy - dwa po 8 układów (minuty/sekundy) i jeden z dwóch układów (godziny). Każdy łańcuch musi mieć sygnały CLOCK i LOAD podłączone do innych pinów Arduino tak, aby każdym łańcuchem można było sterować niezależnie. Linia danych może być wspólna.
To, co pokazałeś na obrazku to jest jeden łańcuch z dwóch układów.
Zalety: możliwa prostsza płytka - krótsze połączenia pomiędzy układami 595 a LEDami ("lokalne").
Wady: sporo układów
2. Wykorzystanie sterowania multipleksowanego 9 x 15
15 wierszy z matrycy sterowane bezpośrednio z pinów Arduino, 9 kolumn sterowane za pośrednictwem tranzystorów PNP sterowanych z dekodera "4 do 10" typu 74HCT42. Wejścia dekodera sterowane z Arduino. Dekoder jest potrzebny, bo na bezpośrednie sterowanie kolumn zabraknie pinów.
Zalety: mniej układów (1 + 9 tranzystorów)
Wady: bardziej skomplikowana płytka - dużo połączeń "odległych".
Sprzętowo to jeżeli chodzi o 595 to mniej więcej wiem. Tutaj potrzebuje pomocy programistycznej. A jeśli chodzi o Twój drugi pomysł to chętnie bym zobaczył schemat.
Witam. Jestem bardzo początkującym arduinowcem więc prose o wyrozumiałość i łopatologię. Chciałem stworzyć zegar na 132 diody LED. 60 sek, 60 minuty i 12 godziny. Chciałem to zrobić na rejestrach przesuwnych 74HC595 i Arduino uno R3.
Czy masz jakiś narzucony obowiązek robić to na rejestrach c595?
Karkołomna metoda zarówno łączenia w ‘matrix’ tych diod jak też multiplexowania wybranego algorytmu zegarowego.
W obecnym czasie istnieją nowsze i nieporównywalnie prostsze wynalazki proszące się o zastosowanie w tym projekcie, który w całości stanie się banalny ze strony hardwarowej, jak i programu.
Zastosuj konfigurację diod typu WS2812B /13, lub innych tego typu (indywidualnie adresowalne diody RGB).
Łącząc je wszystkie (132 niezależnie co reprezentują) w jeden łańcuch (‘w szereg’) z łatwością wysterujesz z dowolnymi efektami każdą diodę oddzielnie, zarówno pod względem koloru jak i jasności świecenia, albo innych efektów animacyjnych limitowanych jedynie wyobraźnią programisty.
Potrzebujesz tylko jeden pin Arduino do wysterowania całego układu tego specyficznego wyświetlacza.
Jeżeli chodzi o układ takiego zegara na bazie Arduino, to widzę dwie sensowne możliwości.
1. Korzystając z 18 układów 595, jak proponujesz. Układy należy połączyć w trzy łańcuchy - dwa po 8 układów (minuty/sekundy) i jeden z dwóch układów (godziny).
Zastosowanie rozwiązania kolegi emarcus jest też ciekawe, ale też wystarczy 60 sztuk.
Ja mam jeszcze jedną propozycję, jeśli chcesz to zrobić na c595.
Zastosować 60 diod RGB. Do katod jednej diody podłączyć jedno wyjście z ośmiu c595(zostają 4 do dowolnego wykorzystania). Multipleksowo sterować anody wszystkich diod(R - godziny, G - minuty, B - sekundy).
Zastosowanie rozwiązania kolegi emarcus jest też ciekawe, ale też wystarczy 60 sztuk.
Tak, wystarczyłoby; ale założeniem autora jest:
"Chciałem stworzyć zegar na 132 diody LED. 60 sek, 60 minuty i 12 godziny." Widocznie ma tak opracowany 'Cyferblat'.
Ponadto to by troche skomplikowało kod, natomiast w układzie 132 diod WS28xx przeciętnie uzdolnione dziecko napisze mu wyjątkowo prosty i funkcjonujący kod , podobny do sterowania lampek choinkowych.
Pozostałą częśc arduino (może to być NANO lub ProMini a nawet jakiś nie drogi WeMos), wykorzysta na interface z płytką zegara DS3231 i jego ustawianiem.
Może też pokusić się na dodatkowy miniaturowy display OLED (powiedzmy 32x128 ; 0.91") z I2C interface, pracujący na tych samych 2-ch pinach z DS3231. Opcja bardziej praktyczna/przydatna podczas ustawiania aktualnego czasu.
Jest wiele opcji i kombinacji....
Co do estetyki, niech się wypowie Autor. Autor prawdopodobnie się uczy - potrzebna jest Mu "głęboka woda", by jako doświadczony przejść na uproszczenia. Będzie skomplikowany kod - razem go stworzymy.
. Autor prawdopodobnie się uczy - potrzebna jest Mu "głęboka woda",
Raczej kurs "podstawy C".
szelus napisał:
to widzę dwie sensowne możliwości.
Ja widze trzecią (czwartą), multipleksowanie przez dwa. Więcej może nie być sensu z powodu jasności diod. Proste PCB i łatwe sterowanie. 10 układów. Pięć szeregów koniecznie na jeden wspólny port. W arduino będzie 20 x 8 bitów informacji od razu w gotowej formie do wysyłki. Plus gdzieś dwa wyjścia sterujące. Też mogą być na tym samym porcie jeśli to możliwe. Zadanie trywialne.
Czwarta to trzy diody podpięte pod jeden PIN. Dzięki temu PCB jeszcze prostsze. I sterowanie na przemian: sekundy, minuty, godziny. 8 układów. Tu należy się zastanowić nad konfiguracją. Czy jeden szereg czy może 8 równolegle, a może 4 szeregi x 2.
Na cyfrowych układach też nie takie trudne. Można zamienić 595 na 164. Ale układy cyfrowe są dość wrażliwe na zakłócenia EMI, stąd trzeba dobrze zrobić PCB, i zasilanie. No i raczej nikt tego nie zaprojektuje.
Rozwiązanie z WS2812B też może być ciekawe jeśli autor ma zamysł różnych efektów. Jak i diody RGB też są fajne. Tylko że z diodami RGB może dojść niuans różnych jasności.
.
Nie upieram się na 595 ale mam ich kilkanaście więc bym wykorzystał. Co do LED to mam RGB ale i tak muszę je podłączyć tak jak 3 oddzielne ze wspólna katodą. Np czerwony sekundy, zielony minuty, niebieski godziny. Jeszcze nie mam nic gotowego, ledy pewnie będę montował bezpośrednio w tarczy zegara nie do płytki, bo zegar ma być duty (śred. 50cm).
Dodano po 4 [minuty]:
[quote="trol.six"]
Wirnick napisał:
. Autor prawdopodobnie się uczy - potrzebna jest Mu "głęboka woda",
Raczej kurs "podstawy C".
Zrobiłem kurs arduino na forbocie. I to tyle. W zasadzie to umiem zapalić i zgasić leda:) no i jeszcze ify ogarnąłem. A po za tym skończyłem szkołę elektroniczną w 87 roku i jeszcze nas o lampach uczyli
To może jeszcze jeden sposób (czwarty, piąty): multipleksowanie /132. Efektywnie będzie to i tak 1/3, jeśli autor potrzebuje tylko po jednej diodzie dla godzin, minut i sekund jednocześnie. Wszystko można podłączyć bezpośrednio do mikrokontrolera: 132 diody to będzie 12 pinów i kilkanaście metrów przewodu. Plus: nie potrzeba 74HC595, minus: nie potrzeba 74HC595.
Raczej skomplikowane PCB. No i ewentualny spadek jasności.
Ja bym zaczął od wyboru LED. Jeśli mają efektywne świecenie to zastosowałbym metode 4. Czyli 3 diody na jeden pin. Ponieważ PCB i sterowanie jest trywialne.
Jeśli słabo świecą to zostaje trzecia albo pierwsza.
Potem można myśleć co dalej. No i ewentualnie dodać sterowanie jasnością.
tomaszhod napisał:
Zrobiłem kurs arduino na forbocie. I to tyle. W
Czyli jak pisałem, podstawy C. Np tutorial "C in 21 days"
.
Sterowanie jasnością i tak musi być poprzez fotorezystor. Aby mi w nocy nie łupało po oczach a w dzień było widać.
Dodano po 13 [minuty]:
No fajnie, że zareagowaliście, A teraz od teoretyzowania do praktyki. Jeśli na 595 to może mi ktoś podesłać schemat podłączeniowy? Tzn podłączam tak jak na pierwszym obrazku 8 scalaków (w zasadzie na 60 sekund to potrzeba 7,5) jako pierwszy licznik. Potem tak samo jako drugi i co z niego pod arduino?
A jak podłączyć wersję 4/5 czyli multipleksowanie na samym arduino??
Jak możecie podeślijcie mi swoje pomysły w formie schematu.
Dodano po 1 [godziny] 43 [minuty]:
Zastosuj konfigurację diod typu WS2812B /13, lub innych tego typu (indywidualnie adresowalne diody RGB).
O tym typie LED pisałem, lecz miałem na myśli nie gotową taśmę, lecz pojedyncze pixle, z przeznaczeniem do montażu wg własnej konfiguracji. Gotowa taśma nie bardzo pasuje tu do wykorzystania bo nie spasujesz podziałki rozmieszczenia diod(pixli) z wymaganym rozmiarem zegara; musiałbyś ją ciąć, (co nie jest problemem), kleić na tarczy i łączyć/lutować ponownie, co też nie nastręczyłoby trudności.
Aby zrealizować ten projekt tą drogą, potrzebowałbyś zakupić 3 takie, taśmy co moim zdaniem byłoby dość kosztowne(!). Możesz pokusić się zastosować tylko 60 pixli i znaczniki godzin, minut zróżnicować kolorem lub dodatkowo intensywnością światła kontrolowane programowo.
Praktyczniejsza alternatywą jest zastosować te same ‘diody’ (pixle), lecz pojedyncze (‘luzem’) przeznaczone do montowania wg własnej konfiguracji. Patrz załączony niżej fotogram.
Z pewnością wyjdzie to taniej i wygodniej montować w porównaniu z ciętymi segmentami taśmy
Sprzedawane są zazwyczaj w standardowych ilościac: 10, 20, 30, 50, 100 itd…
Podpowiesz jak to podłączyć?
Łączenie tych pixli jest trywialnie proste: Na każdym takim segmencie masz oznaczenie zasilania (+) i (-) oraz trzeci pin ‘Din’. Wszystkie pixle są łączone w ‘łańcuch’ dowolnie (max. ok.600) długi, z zachowaniem kierunku poprzez wykorzystanie pinu ‘Dout’ do następnego pixla ‘Din’, co nie wymaga specjalnego komentarza.
W zależności od wybranego konceptu konstrukcyjnego ten łańcuch może być relatywnie długi.
Ponieważ finalnie łańcuch ten utworzy ring to zasilanie możesz połączyć początek z końcem i zasilić je w dowolnym miejscu. Trzeci przewód sygnałowy (Data) musi posiadać początek jako pixel z numerem ‘1’, od którego są liczone kolejno adresowane w programie pixle. Musisz znać liczbę pixli w całym łańcuchu. Spotkasz że pierwsza dioda ma poz.'0'.
Jeżeli zdecydujesz na pełne trzy ‘ringi’ i 132 pixle, to linia ‘data’ utworzy jeden nie przerwany ciąg.
Zasilanie złączysz jak ‘pasuje’, - najkrótszą drogą…
Wielkość zasilacza dobierzesz z wyliczonego rachunku przyjmując 60 mA na jeden świecący pixel z pełna jasnością, która może być kontrolowana indywidualnie w dość szerokim zakresie (255 poziomów).
Jeżeli nie planujesz żadnych dodatkowych efektów/animacji, to standardowo zasilacz nie będzie duży.
Musisz przyjąć że minimalny pobór prądu przez twój układ będzie ok 100 mA podczas gdy wszystkie pixle są wygaszone./
Odnośnie programu:
W internecie znajdziesz setki tutoriali popartych przykładami na każdą niemal ‘okazję’.
W zasadzie to program jest realizowany głównie przez bibliotekę, których możesz spotkać kilka w oglądanych U/T prezentacjach i przykładach. Najczęściej będzie to FastLED albo NeoPixel. Przeglądniesz kilka takich prezentacji to ‘połapiesz’ w czym rzecz.
Na przykład:
https://www.youtube.com/watch?v=Z4b4v84smpg https://www.youtube.com/watch?v=YErWfe0aTiQ https://www.youtube.com/watch?v=JZmgodDWtmU https://www.youtube.com/watch?v=6LMoLufTvOg https://www.youtube.com/watch?v=4Ut4UK7612M kilka epizodów.. warte oglądnąć choćby z cieawości ….
Dzięki emarcus. Interesuje mnie taki efekt jak w pierwszym i trzecim linku. Trzeci jest nawet lepszy A tam pokazane na całej taśmie bez cięcia LEDów na pojedyncze. Jeśli przyjmując , że cała taśma led 60 kosztuje 25 zł. to nie jest to duży koszt. Chyba, że ta taśma w tej cenie się do niczego nie nadaje. Co o tym myślisz?
Trzeci jest nawet lepszy A tam pokazane na całej taśmie bez cięcia LEDów na pojedyncze. Jeśli przyjmując , że cała taśma led 60 kosztuje 25 zł. to nie jest to duży koszt. Chyba, że ta taśma w tej cenie się do niczego nie nadaje. Co o tym myślisz?
Nie czytałeś kommentarza że w tym projekcie użyto gotowy ring z 4-ch segmentów...
Kupując gotowy ring nie masz wyboru jego średnicy.
Owszem, zamawiając określisz ilość pixli (Ring -60 bit). Niektóre strony internetowe podają średnicę takiego pierścienia, ale nie spotkałem oferty ze średnicą, która byłaby chociaż blisko twojego projektu.
https://www.aliexpress.com/item/4000225152279...earchweb0_0,searchweb201602_,searchweb201603_ Szukaj, może znajdziesz...(?)
Czyli zasada działania ta sama, cod programu taki sam tylko rozmiar dopasować ?
Dodano po 7 [godziny] 16 [minuty]:
mpier napisał:
Wszystko można podłączyć bezpośrednio do mikrokontrolera: 132 diody to będzie 12 pinów i kilkanaście metrów przewodu
Ciekawe rozwiązanie. Mógłbyś podesłać schemat jak połączyć 132 diody aby miały 12 wyjść? Chyba wiem o jaka zasadę chodzi ale nie umiem tego zwizualizować.
Dodano po 56 [minuty]:
mpier napisał:
Wszystko można podłączyć bezpośrednio do mikrokontrolera: 132 diody to będzie 12 pinów i kilkanaście metrów przewodu
Ciekawe rozwiązanie. Mógłbyś podesłać schemat jak połączyć 132 diody aby miały 12 wyjść? Chyba wiem o jaka zasadę chodzi ale nie umiem tego zwizualizować.
Czyli zasada działania ta sama, cod programu taki sam tylko rozmiar dopasować ?
Dokładnie tak
Tak na dobra sprawę, to nie musiałbyś nic ciąć/kleić, lutować/robić swój ring, lecz skorygować nieco zasadniczą konstrukcję pierścienia, który i tak musisz robić 'od zera’.
Przewidzieć podświetlenie z bocznej/(czołowej)strony pierścienia; od strony wewnętrznej, lub od zewnątrz.
Trochę misternej roboty nad pierścieniem. Pola sekund zamiast podświetlenia od tyłu otrzymają podświetlenie boczne, które można skorygować wprawiając płytki odblaskowe 45° (biały ‘glossy’ papier powinien być wystarczający aby jednocześnie rozproszyć światło, albo matowa strona folii aluminiowej).
Gabaryty pierścienia ‘oscylujące’ ok 50 cm (?) założonej średnicy możesz uzyskać wykorzystując dwa metry zwyczajnej taśmy z podziałką 30 pixli na metr dla której podziałka jest 33.3 mm.
Wg powyższego masz : 60 pixli x 33.3mm = 1998mm
Z drugiej zaś strony(zgrubnie): Obwód/pi : 1998/pi = 636mm ~ 64 cm (średnica)
To chyba najlepszy i tani kompromis jaki możesz wykombinować.
Poniżej masz rzeczywiste wymiary taśm powszechnie dostępnych w handlu.
Rachuj i projektuj, Pewnego rodzaju dokładność wymagana, aby pixle taśmy trafiły w przygotowane otwory po obwodzie pierścienia.
tomaszhod napisał:
Czyli zasada działania ta sama, cod programu taki sam tylko rozmiar dopasować ?
mpier napisał:
Wszystko można podłączyć bezpośrednio do mikrokontrolera: 132 diody to będzie 12 pinów i kilkanaście metrów przewodu
Ciekawe rozwiązanie. Mógłbyś podesłać schemat jak połączyć 132 diody aby miały 12 wyjść? Chyba wiem o jaka zasadę chodzi ale nie umiem tego zwizualizować.
CharliePlexing Metoda: X = N * (N-1); prostym rachunkiem: 12 x 11 = 132
X – ilość diod
N – ilość portów (wyjść) - tu 12
Teoretycznie jest proste, … życzę jednak sukcesu w lutowaniu i kodowaniu.
Trzeba zaopatrzyć się w cierpliwość i rolki kolorowych przewodów aby się nie pogubić, oraz bardzo dużo cyny, aby finalne arcydzieło nie wyglądało jak talerz ‘spagetti’. Talerz , - mam tu na myśli tarczę tego zegara.
Coś mi się kojarzy z określeniem ‘masochizm’; -nie wiem czy to akutat trafne (?)
Przeciwstawna metoda: to jeden port i jeden przewód z rezystorem po drodze.
Program gotowy, podany na talerzu zamiast ‘spagetti’….
Aż tak kiepsko z 'budżetem' domowym u ciebie?
Powinieneś zamówić ze 100 szt, na wypadek gdybyś zechciał rozszerzyć projekt, albo podczas testów 'uda ci się skopcić' jeden pixel, a wtedy reszta kolejnych po nim zaprzestanie pracować.
WS2813 sa inaczej konstruowane (podwójna linia sygnałowa) i jeżeli skopcisz jeden pixel to tylko ten jest 'niemy' a reszta wszystkie pracują. Troche inaczej się je łączy w 'łańcuch'.
To na razie na próbę. Zobaczymy czy w ogóle mi z tego coś wyjdzie. Może się okazać że nie będą mi pasować. docelowo miało być na zwykłych ledach 5mm. Ale łatwość sterowania tych RGB chyba mnie przekonała. Trzeba będzie to dokupię te które proponujesz.
Mam jeszcze pytanie odnośnie samych Ledów. Czy do WS2812B-B stosować rezystory? Na Ledach napisane DC 5v. Jeżeli tak to jakie wartości ?
Gdybyś, chociażby z nudów lub ciekawości przeglądnął te Y/T vid-clips podane w poście #15 to nie zadawałbyś tak 'durnego' pytania!!
Wałkujesz ten temat już kilka dni i pewnie nigdzie nie zauważyłeś sposobu podłączenia....
Potrzebujesz jeden rezystor (TYLKO JEDEN) o wartości 220 do 470 ohmów na linii sterowania pomiędzy pinem wyjściowym z Arduino a pierwszą (0) diodą (pixlem) całego łańcucha niezależnie jak długi on jest.
Rola tego rezystora jest odfiltrowanie zakłuceń podczas szybkiej transmisii danych sterujących kontrollery w tych pixlach.
Kontrollery te umieszczone wewnątrz każdego pixla posiadają swój driver dla tam znajdujących się trzech diod RGB , które skutecznie ograniczają maxymalny prąd dla każdej tam diody zgodnie z zadanym programowo 8-bitowym poziomem jasności , czyli możesz uzyskać teoretycznie 256 poziomów.
Stosowana biblioteka pozwala/umożliwia ustalić na wstępie programu jednakową jasność dla wszystkich diod w łanuchu albo możesz ten poziom jasności 'zadać' jako parametr dla indywidualnego pixla łącznie z wybranym kolorem.
Technologiczna różnica sterowania tymi diodami a zwykłymi; z rezystorami ograniczającymi prąd, wynosi około 50 lat!!!
Jeżeli nie znajdziesz tego obrazka to masz go poniżej..
✨ Użytkownik planuje stworzyć zegar z 132 diodami LED, wykorzystując rejestry przesuwne 74HC595 oraz Arduino Uno R3. W dyskusji poruszono różne metody realizacji projektu, w tym wykorzystanie 18 układów 595 w trzech łańcuchach (dwa po 8 dla minut i sekund oraz jeden dla godzin) oraz alternatywne podejście z użyciem diod WS2812B, które umożliwiają łatwiejsze sterowanie i efekty wizualne. Użytkownik poszukuje pomocy w programowaniu oraz schematach podłączeniowych. Wskazano również na potrzebę zastosowania rezystora na linii sterującej dla diod WS2812B oraz omówiono kwestie estetyki i praktyczności montażu diod w tarczy zegara. Wygenerowane przez model językowy.