Zaprojektowany schemat wysokiej rozdzielczości znajduje się tutaj (poniżej zdjęcie gorszej jakości).
We wszystkie części zaopatruję się na sklep.avt.pl. Myślę, że dobrze zrobić reklamę temu sklepowi, bo dobrze mi się z nim współpracuje.
Mój układ składa się z:
- wyświetlacza 7-segmentowego o wspólnej anodzie. Jest to model "zegarkowy" AF-05643FS-B z dwukropkiem rozdzialającym cyfry godzinowe od minutowych
- 2 rejestrów przesuwnych 74HC595. Są to główne układy sterujące wyświetlaniem.
- 5 tranzystorów npn BC338 - tranzystory sterują prądem jaki przepływa przez dany segment (4 cyfry + 1 dwukropek rozdzielający). Dobrałem je ze względu na w miarę duży maksymalny prąd kolektora (0.8 A)
- 8 rezystorów R7-R14 (330 Ohm) regulujących maksymalny prąd, jaki przepływa przez poszczególne segmenty wyświetlacza.
- 5 rezystorów regulujących prąd bazy tranzystorów sterujących prądem wpływającym do anod wyświetlacza (1 kOhm)
- 3 przycisków wraz z 3 rezystorami podciągającymi (1 kOhm) - chyba wartość trzeba zwiększyć do ok 30 kOhm.
- platformy arduino - jest to układ, który będzie kontrolował całe sterowanie zegarem. Na koniec zastąpie go układem ATmega8L (8MHz).
Poniżej przedstawiam też obliczenia, jakie wykonałem projektując część zegara związaną z wyświetlaniem. Mam nadzieję, że ten projekt i obliczenia przydadzą się komuś.
Sterowanie wyświetlaniem
Do wyświetlania cyfr wykorzystuję wyświetlacz 7-segmentowy o wspólnej anodzie. Zgodnie z notą katalogową maksymalny ciągły prąd pracy płynący przez segment to 10-20mA (w zależności od modelu), a spadek napięcia to ok. 2V. W związku z tym minimalna rezystancja rezystorów R7-R14, które ograniczają prąd płynący przez segment, ma wartość (zgodnie z prawem Ohma): (5-2)V/20mA= 150 Ohm. Ja przyjąłem wartość 330 Ohm, co daje prąd ok. 9mA. Daje on wystarczającą jasność w padającym na wyświetlacz słońcu. Prąd ten mieści się też w zakresie prądu mogącego płynąć przez układ 74HC595 -> 20mA (patrz nota).
Anody, zasilające każdą cyfrę wyświetlacza, sterowane są poprzez tranzystory BC338. Dobrałem takie, bo prąd płynący przy wszystkich zapalonych segmentach (7x9mA=63 mA) mieści się w zakresie pracy tranzystora. Dla BC338 maksymalny prąd pracy to 800mA).
Sterowanie anodami oraz katodami wyświetlacza odbywa się dzięki rejestrom 74HC595 wykorzystując mechanizm mulipexacji. Wysoki stan 5V na nóżkach sterujących tranzystorami powoduje przełączenie tranzystora i dopływ prądu do anody i dostarczenie napięcia do danej cyfry. Zaś sterowanie katodami wyświetlacza polega na ustawieniu stanu niskiego 0V, co powoduje zapalenie się odpowiednich segmentów w cyfrze.
Zegar czasu rzeczywistego i przyciski
Czas przechowywany jest w układzie DS1307 i podtrzymywany bateryjnie. Komunikacja z arduino przebiega poprzez magistralę I2C. Co do przycisków to zdecydowałem się na zewnętrzne "podciąganie napięcia" poprzez rezystory R1, R15, R16. Można by wykorzystać wewnętrzny 'pull-up' mikrokotrolera atmega8L, ale wolałem zrobić to tak. Jeśli chodzi o filtrowanie napięć mikrokontrolera i układów 74HC595, to wykorzystuję tu dławiki 22uH oraz kondensatory 100uF. Służą do stabilizacji zasilania układów podczas ich pracy.
Program
Program sterujący znajduje się tutaj. Nie wykorzystuję tu przerwań. Sterowanie klawiszami odbywa się poprzez wykorzystanie debouncingu (zabezpieczenie przez mikrowibracjami klawiszy). Gdyby komuś spodobało się takie rozwiązanie i chciałby je wykorzystać przy innych projektach to informuję, że musi zwiększyć sobie maksymalną liczbę iteracji 10x, ponieważ tu przy wyświetlaniu każdej cyfry używam opóźnienia 3 milisekundowego i to zwiększa czas reakcji przycisku.
Powodzenia i mam nadzieję, ze ten projekt komuś pomoże w nauce elektroniki.

Nic z tego nie rozumiem, ale szacunek dla naukowca, który takie projekty realizuje. Życzę kolejnych udanych projektów!
OdpowiedzUsuńBardzo fajny wpis. Pozdrawiam.
OdpowiedzUsuń