Nie odkryjemy tu ameryki... Na internecie znalazłem wiele zegarków już gotowych. Problem w tym iż ja potrzebuje zegar sterowany jak siedmiosegmentówka ale każdy segment to inny port. Bez multiplexu i BCD itp... Ktoś ma taki projekt gdzie lub widział ? Wiem że potrzeba mi 28 wolnych portów. 27 do segmentów i dwukropek pomiędzy cyframi.
Można dopisać takie funkcje żeby niepotrzebnie nie ustawiał wartości portów jeśli te się nie zmieniły, ale to chyba gra nie warta świeczki Pominąłem PORTD bo widzę tam jakąś transmisje RS w configu.
niveasoft Dziękuje za pomoc wydaje się że działa. Segmentami zegara będą paski led które mam na stanie w dużej ilości. Problem tylko taki że jest ich 30 w szeregu na pasku. Musiał bym je zasilić 90V. Pytanie moje takie czy zrobić jedno zasilanie i podawać je na paski czy każdemu paskowy robić zasilanie bez-transformatorowe. I jak je sterować z uC ? Optoizolacja i jakiś darlinkton ? Proszę o podpowiedzi
Pytanie moje takie czy zrobić jedno zasilanie i podawać je na paski czy każdemu paskowy robić zasilanie bez-transformatorowe.
Skoro wyświetlasz statycznie to musisz zdać sobie sprawę z prądu jaki będzie pobierał wyświetlacz. Jeśli jeden pasek zabiera 20mA to policz sobie ile prądu będzie potrzebował cały wyświetlacz gdy będzie wyświetlał godzinę 23:58 (wtedy świeci się najwięcej segmentów jednocześnie). Przy pojedynczym pasku na segment jest to już 460mA.
Jeśli chciałbyś segmenty zasilać z bezpośrednio z sieci 230V do polecam do tego HV9925. Aplikacja jest banalnie prosta i przez zwykły transoptor na nodze PWMD będziesz mógł ten układ włączać lub wyłączać. Wykorzystując modulację szerokości impulsów nawet regulować jasność.
Wszystkie układy HV9925 możesz zasilać z tego samego źródła, zatem potrzebny będzie jeden bezpiecznik lub rezystor bezpiecznikowy, mostek prostowniczy i nieco większy (ok. 47uF/400V) kondensator filtrujący by uzyskać napięcie DC zasilające te sterowniki.
Oczywiście stosując sterowniki LED po stronie sieci trzeba wziąć pod uwagę wszelkie środki bezpieczeństwa!
I jeszcze jedno. Jeśli projektujesz ten układ dla siebie to kwestie zakłóceń EMC możesz potraktować nieco luźniej. Jeśli jednak ma to być projekt komercyjny to trzeba też wziąć pod uwagę, że HV9925 jest sterownikiem impulsowym więc większa ich ilość będzie już bardzo mocno zakłócać i trzeba będzie dodać odpowiednie filtry.
Układ tylko dla mnie nie komercyjnie. Chce zrobić duży zegar na paskach ledowych na sylwestra. Co do układu HV9925 - jaki prąd obciążenia... chyba nie zasili 28 pasków.
Rozumiem układ jako zasilacz bez-transformatorowy (mostek, Cin, D1) Ale z tego co mi wiadomo raczej takie zasilacze są wyregulowane kondensatorem na stały pobór prądu. Będzie różnica minimum 160mA a max 560mA. Chyba ze chodzi o osobne zasilanie każdego paska ?
Sam HV9925 może maksymalnie sterować obciążeniem do 50mA - prąd regulujesz rezystorem i jest to typowy układ przetwornicy do LED. Zatem bez problemu powinien obsłużyć po dwa równolegle połączone paski na segment - o ile sam pasek jest tak skonstruowany, że pobiera ok. 20mA.
Idea stosowania układu HV9925 jest taka, że każdy segment ma posiadać swój własny układ HV i jego 7 elementów dodatkowych. Wtedy sterując nogą PWMD każdego z układów masz już gotowe bezpośrednie - choć przez optoizolator - sterowanie poszczególnymi segmentami.
Jedyną częścią wspólną będzie ta część schematu dostarczająca wysokiego napięcia DC, czyli R1, D2-D5 i Cin.
Rozumiem wszystko. Szkoda że potrzebował bym 14 takich układów. Zmierzyłem przetwornice która była z paskami LED. Na jej wyjściu jest 111V. Zastanawiam się czy użycie ściemniacza do ledów nie było by trafnym prostym i tanim rozwiązaniem. Wyjścia uC zmieniają się co minute więc sterowanie mógłbym zrobić na uC->ULN->Przekaźnik. Posiadam malusieńkie przekaźniki interfejsowe - cewka zużywa 170mA. Chyba żeby użyć traiaka do załączania ?
Zatem zrezygnuj z tych okropnych Finderów na rzecz triaka. Te przekaźniki są takie fatalne, że zwykle w partii 100szt kilka nie działa już na dzień dobry lub nie łączy po paru przełączeniach.
Na razie muszę czekać na nową atmege 128 a w poniedziałek zamowie triaki. W nocy natomiast przetestuje sciemniacz jako regulator napięcia. Opisze co z tego wyszło.
Może nada się taki sposób sterowania jak w zegarze NIXIE Mirleya.
Link Zasilić paski z jednej strony a z drugiej tranzystor MPSA42 dla każdego paska
Nie wiem czy w paskach jest jakoś zaimplementowane ograniczenie prądu.
MPSA42 jest na 300V i przewodzi 0,5A w obudowie TO-92
Cena - 10 sztuk - 1,2zł
Ale dasz ich 4x tyle bez multiplexowania.
Chodzi mi o prostotę sterowania, bo to rezystor do tranzystora, i o taniość rozwiązania Tak podrzuciłem do rozważenia.
No teraz rozumiem o co ci chodzi użyć tych 2 tranzystorów + 4 rezystorów jako sterowanie zasilania na pasek ledowy. Problem tylko taki że wyjdzie 56 tranzystorów i 112 rezystorów. Trzeba było by dużej płytki do tego.
Nieee. Myślałem że te paski zachowują się jak diody. Zasiliłbym wszystkie z jednej strony na stałe z tego ściemniacza czy co tam wykombinujesz a tylko katody uziemiał mikrokontorlerem przez te tranzystory.
Wyszłoby 4x7 + ewentualny migacz dwukropek= 29 tranzystorów i tyle samo rezystorów.
Cztery takie tranzystory są w tym zielonym pudełeczku z chińskich lampek choinkowych z bazaru
Tylko, że prąd potrzebny do sterowania lampami NIXIE jest o rząd wielkości mniejszy niż LED i świecą się tylko 4 cyfry, co daje maks. 10mA na całość. Dlatego można "pokombinować" z małymi przetwornicami podwyższającymi lub multiplifikatorami napięcia o niskiej wydajności. Wszystko można wtedy umieścić w jednym obwodzie ze wspólną masą i sterować takim prostym układem tranzystorowym.
Tutaj zaś mamy do czynienia z układem, który powinien dostarczyć nie dość, że wysokie napięcie to jeszcze dość duży sumarycznie prąd. Dodatkowo, źródłem tego napięcia/prądu jest bliżej nieokreślony sterownik LED, o którym nic nie wiemy jak jest zbudowany w środku.
Mam przetwornice do pasków ledowych ale jak podpinam jeden pasek to się ledy grzeją bo dostają 3,9V a jak jest pasków więcej niż 4 to ona się grzeje. Więc nie mam jak jej użyć. Zależności od wyświetlania zmienia się prąd. Dlatego chce użyć stałego napięcia 90V by móc używać go dla 8 jak i 28 pasków.
Porozcinane kilka ścieżek i kilka polutowalem. Teraz paski są na 24v i wszystkie wyjścia podepnę pod ULNy. Może podali byscie koncepcję wykonania nastawy zegara ?
Niveasoft znalazłem wolny procek m162 i wgralem twój program tylko że wartości data zamienione na 170 , 85, 170 itd... By zmieniały się na przemiennie do testów. puszczone przez uln 2803 i zmienione ledy na 24V. Problemy m tym że wyświetla pierwszą cyfrę i stoi. Jak by zegar nie działał. I jeszcze jedno pytanie po co zmienna oldmin ?
Edit
Strona wykonawcza jest ok bo jak dałem incr porta to pięknie bitami liczył sobie listwy led.
Hmm...Bascom działa lepiej kiedy się wie co się robi
Wiesz co robi instrukcja Config Clock = Soft ?
Konfiguruje Timer który w mikrokontrolerze jest przygotowany do pracy asynchronicznej. Dodatkowo potrzebny jest rezonator kwarcowy 32768 Hz dołączany do pinów mikrokontrolera oznaczonych TOSC1 i TOSC2
Nie będę opisywał wszystkich przypadków, ale dla zobrazowania:
w Mega32 i Mega16 zajęte zostaną piny PC6 i PC7 oraz Timer2
w Mega8 i Mega328 zajęte zostaną piny PB6 i PB7 (te odpowiedzialne za podstawowy kwarc wiec najlepiej dla aplikacji użyć wewnętrznego oscylatora) oraz Timer2
w tej Mega162 będa to PD4 i PD5 i bez podłaczenia do nich tego "zegarkowego" kwarca zegar nie ruszy.
To z kolei oznacza że nie masz czterech wolnych portów w tym konkretnym mikrokontrolerze...
Pisałeś o Mega128 i na niego napisany był program bo tam TOSC1 i TOSC2 jest na PG3 i PG4 a do wyświetlania użyte zostały inne porty.
Instrukcja Config Clock = Soft każe też stworzyć kod na potrzeby obsługi zegara i tworzy zmienne _sec, _min, _hour i kilka innych. Zapisuje w nich aktualny czas kiedy zegar pracuje. Tak więc kiedy zmienia sie sekunda to jasne jest że wartośc zmiennej _sec się zmienia. Kiedy zmienia się minuta to zmienia się wartość zmiennej _min By ciągle nie wykonywać niepotrzebnych obliczeń program może je podejmować wtedy kiedy coś się zmienia i temu służy zmienna Old_min
Kiedy program startuje zmienna ta ma wartość 0. Zmienna minut _min również.
Kiedy jednak minuta się zmienia to _min jest różne od Old_min Wtedy zapisujemy do zmiennej Old_min wartość _min - wtedy ta część kodu wykonuje się tylko raz na minutę.
Warto wiedzieć że w Mega128, w odróżnieniu od Mega8, Mega328, Mega32 i wielu innych to nie Timer2 ma możliwość pracy asynchronicznej a Timer0. To wszystko jest w notach do mikrokontrolerów które trzeba czytać.
Można też zamiast używać timerów przystosowanych do pracy z tymi kwarcami zegarkowymi użyć małego wybiegu
Bascom ma jeszcze jedną instrukcję która "buduje" cały kod obsługi zegarka.
Taki zapis:
Kod: VB.net
Zaloguj się, aby zobaczyć kod
...powoduje że zaimplementowany zostanie kod do obsługi DCF77 i zegara czyli stworzone zostana również _sec, _min, _hour itd.
Tym razem jednak do odmierzania czasu użyty zostanie Timer1 (lub Timer3) ogólnie rzecz biorąc timer 16bitowy. Wartości potrzebne do prawidłowego odmierzania czasu przeliczane sa automatycznie dla wartości prędkości taktowania którą deklarujemy w kodzie zawsze ($Crystal = )
Nie trzeba wiec nic przeliczać samemu. Trzeba jednak poświęcić jeden pin na którym mikrokontroler będzie się starać pozyskać czas z modułu DCF.
Zmienne czasu można oczywiście ustawić samemu.
Można też kupić na portalu aukcyjnym za 15zł zegarek z odbiornikiem DCF Podłączyłem taki u siebie - można zobaczyć pod tym linkiem Wtedy zegarek ustawi się sam
Nie sposób opisać wszystkie aspekty a i doczytywanie powinno zainteresowanym przynieść większy pożytek Sposób z konfiguracją DCF podałem jako ciekawostkę. Wiem jak ustawić dowolny Timer by odmierzał potrzebne mi odcinki czasu. Dodatkowo kod do obsługi DCF zajmuje miejsce, ale w coraz tańszych coraz wiekszych mikrokontrolerach "who cares?" Tak jak napisałem, wiem co robię i na takie lenistwo mogę sobie czasem pozwolić jeśli akurat mam taki kaprys lub chcę sprawdzić czy tak to zadziała
No rozpisałeś się bardzo konkretnie. Uzylem m162 bo moja 128 gdzieś zaginęła na poczcie. Mam nadzieję ją dziś odzyskać. Docelowo będzie to oczywiście m128. Czyli bez kwarcu zewnetrznego nie ma co liczyć na działanie procedury clock. Szkoda że nie do czytałem tego bo bym już go sobie zamówił. Zastanawiam się jeszcze ale to merytoryczne pytanie czy do odliczania czasu w sylwestra użyć właśnie zegara czy może timera odliczajacego sekundy ?
. Czyli bez kwarcu zewnetrznego nie ma co liczyć na działanie procedury clock.
Nie zrozumiałeś...
Procedura 'config clock =soft', faktycznie wymaga zastosowania kwarca zegarkowego i użycia Timera2 w trybie asynchronicznym.
Natomiast istnieje inna możliwośc configuracji:
'config clock = user' gdzie możesz wykorzystac Timer1 i dowolne żródła taktowania, oczywiście zewnętrzny kwarc (8MHz, 16MHz, 11.0592, etc., jakikolwiek masz) będzie dokładniejszy niz wewnętrzny RC oscylator. Różnica polega na tym, że w tej konfiguracji musisz napisac własną obsługę timera1, która jest wyjątkowo prosta, w odróznieniu do tej pierwszej, - kompilator to robi bez ingerencji programisty.
Mam pytanie rozumiem że dodam kwarc zegarkowy z kondensatorami do masy dla TOSC1 i TOSC2. Ale czy jako tego głównego mogę użyć wewnętrznego 8MHz ?
i kolejne pytanie troszkę OT czekając na kwarc i kondensatory...
Podpoiłem sobie już ledy fajnie mogę nimi sterować. Więc napisałem choć jeszcze nie skalibrowałem timer odliczający sekundy na listwy led.
Wygląda to tak: Proszę się nie śmiać.
Kod: C / C++
Zaloguj się, aby zobaczyć kod
Problem taki ze nic się nie dzieje nawet jeden pasek nie zapalił sie. Widzicie gdzieś błąd ? A może Timer0 tez nie działa bez zewnętrznego kwarcu ? Bo tylko to mi się nasuwa. W symulatorze działa. Odlicza mi wartości zmiennych J-edności, D-zietne, S-etki, T-ysiące. Reszta zmiennych to tylko zmienne pomocnicze.