Blog (30)
Komentarze (1.1k)
Recenzje (0)

Zrobiłem sobie zegar v2.2

@KaworuZrobiłem sobie zegar v2.201.10.2014 15:55

Miało być coś innego tym razem, ale drony poczekają do przyszłego roku, bo plany są na zrobienie takiego co będzie latało 20-40 minut. Teorię mam, ale przetestować muszę. Tymczasem znów zrobiłem sobie zegar, sort of. Właściwie to kiedyś zrobiłem sobie zegar z zegarem (RTC) i złączką pozwalającą na podłączenie go do raspberry-pi, pełnił dwie funkcje - pokazywał godzinę i robił za źródło czasu dla rpi po jej włączeniu. Działało to na ATmega8, miało softwareowy multiplekser i miejscami nawet barometr.

Ale wyświetlacz i RTC to mało, juz nie mówiąc o tym, że to mogłoby działać samodzielnie (jakby miało przyciski). I tak powstała wersja 2.0, która w zasadzie... nie działała, ale po odcięciu oryginalnie zamontowanych MOSFETów i zastąpieniu ich specjalnym slacalaczkiem ożyła, na 5 minut, bo potem spaliłem kontroler. No ale, teraz mam wersję 2.2:

Nowa wersja w porównaniu do poprzedniej ma:

  • Wyświetlacz, bardziej rozbudowany - bo sekundnik;
  • Odbiornik podczerwieni, co znaczy ze no, jest na pilota (ze starego magnetowidu) a to znaczy, ze mpd na malince da się sterować (dowolnym) pilotem (a także zasilaniem głośników i oświetleniem);
  • Buzzer (do hałasowania);
  • 6 przycisków;
  • 6 dodatkowych ledów (do przycisków), z czego dwa dwukolorowe;
  • Osobny kontroler wyświetlacza;
  • Osobny kontroler do przycisków;
  • Nie ma dyskretnych tranzystorów;
  • Podwójny układ zasilania (bo analogowa regulacja jasności, jest też cyfrowa);
  • Opcjonalnie układ RTC i miejsce na ATtiny45;
  • I pewnie coś o czym zapomniałem;

Złącza, są dwa. No trzy właściwie licząc ISP (do programowania kontrolera), poza tym dwa identyczne złącza w których znajdziemy 12V, I2C i sygnał przerwania. Dwa bo można tak podłączyć kaskadowo stary zegar i do czegoś wykorzystać (komunikacja działa na tej samej zasadzie). Wszystkie układy działają na 5V, wyświetlacze potrzebują > 6V (wygodniej zrobić konwersję z wyższego (jednego) napięcia niż dostarczać zasilanie w 3 wariantach). Stąd też dwa układy zasilania. Jeden dla scalaczków, drugi dla wyświetlacza.

Pierwszy zbudowany na LM7805:

Większego banału chyba się już nie dało zrobić, kondensatory filtrujące na wejściu są po stronie malinki. Jeden kondensator w ramach filtra na wyjściu 100uF. I układ zasilający wszystkie układy (poza wyświetlaczem) gotowy. Tutaj mała notka, wszystkie poziomy sygnałów na malince są LVTTL (3V3), dlaczego 5V a nie 3V3? Bo kontroler wyświetlacza nie działa na 3V, jeno na 5V, to samo z zegarem RTC. A poza tym płytka zapewniająca zasilanie dla tego układu zapewnia tez konwersję poziomów napięć za pomocą MOSFETów, w sumie wygodniej.

Drugi układ zasilania jest impulsowy, mógłbym oczywiście użyć jakiegoś liniowego, regulowanego regulatora napięcia (jak powyższy LM), ale mają one jedną zasadniczą wadę - jeśli czerpiemy z nich powyżej kilku/nastu mA prądu zaczynają się silnie grzać (i marnować prąd), grzanie oznacza potrzebę użycia radiatora, a ten by mi się nie wcisnął pod przedni panel. Dlatego zastosowanie ma tutaj układ LM2576T, prosty regulator impulsowy, wymaga tylko diody, cewki, 2 kondensatorów i 2 rezystorów. Za to się nie grzeje, ma względnie wysoką sprawność i zapewnia regulację jasności metoda analogową.

C1 i C2 = 470uF low ESR. L1 = 100uH (500mA), D1 - pierwsza z brzegu na 500mA. R1 = 1K6, a R2 to w zasadzie dwa elementy, rezystor 5K7 + 10K potencjometr. Takie zestawienie oporników pozwala na regulację napięcia bodaj od 4V do 12V. Główne wyświetlacze nie mają rezystorów ograniczających prąd, to tez lepiej nie odpalać układu na pełnym napięciu.

Przyciski obsługiwane są przez układ max7328. Jest to 8bitowy ekspander na I2C, który potrafi generować przerwanie kiedy tylko coś się na jego wejściach/wyjściach zmieni - idealny do klawiatur. Przerwanie jest połączone do INT1 ATmega8 włącznie z przerwaniem dostarczanym przez układ RTC (o ile jest zamontowany). ATmega decyduje czy posłać to przerwanie dalej do malinki czy nie, obecnie zawsze wysyła. Ale dlaczego tak nie bezpośrednio do malinki? Płytka jest tak zrobiona aby (opcjonalnie) mogła pracować samodzielnie (bez rpi), dlatego przerwanie z RTC i przycisków dostaje ATmega, która w takiej sytuacji byłaby głównym procesorem tego wszystkiego.

Odbiornik podczerwieni - kolejny banał, TSOP4837 podłączony do zasilania, a jego wyjście do INT0 ATmegi. Protokół pilota (Sharp) jest banalny opiera się na długości przerw pomiędzy impulsami, do zdekodowania wystarczy przerwanie i 8bitowy timer0. W gratisie jedna czerwona dioda LED sygnalizująca jego pracę podłączona przez rezystor (4K) do PD0. Poniżej LEDa możemy zaobserwować fotorezystor - mierzy natężenie światła w pomieszczeniu dzięki czemu można dostosować automatycznie jasność wyświetlaczy, kolejny banalna część układu:

Rezystor (1K) ciągnie napięcie na wejściu ADC7 ATmegi do napięcia zasilania, kiedy jest ciemno to nawet mu się to udaje. Kiedy robi się jaśniej LDR (fotorezystor) przejmuje inicjatywę ciągnąć zasilanie do masy, to dzielnik napięcia jest w zasadzie. Im jaśniej tym niższe napięcie na analogowym wejściu CPU, i tym większa jasność wyświetlacza. Jasność ta da się regulować w zakresie 0-15. Idealnie zgrywa się to razem, = ((255 - ADC7) / 16);

Buzzer (taki piskliwy głośniczek, z generatorem tonu) jest po prostu wpięty miedzy, zasilanie a PB2. W zasadzie powinien być tam jeszcze tranzystor, który by zdjął te max 30mA z wyjścia ATmegi, ale z drugiej strony nie jest on przeznaczony do ciągłej pracy a to pipania przez ułamki sekund, uC przeżyje te momenty.

Wyświetlacz składa się z 4 1,8" 7-segmentowych pomarańczowych wyświetlaczy LED (po 3 LEDy na segment), 2 1,5" 7-segmentowych pomarańczowych wyświetlaczy LED (po dwa LEDy na segment) oraz 6 osobnych diód umieszczonych nad przyciskami. Całość kontrolowana jest przez sterownik max7219. Sterownik niestety nie dość, że może sterować segmentami o napięciu do poziomu napięcia zasilania (tutaj wyświetlacz potrzebuje więcej) to jeszcze obsługuje wyświetlacze ze wspólna katodą. Rozwiązanie? Zewnętrzne drivery, tutaj ULN2803A (sink driver w układzie darlingtona x8) oraz TD62783 (source driver z darlingtonami x8). ULN da się bezpośrednio wpiąć miedzy segmenty wyświetlacza a max7219, z układem toshiby jest gorzej. Oba drivery są aktywowane podaniem wysokiego poziomu na wejścia, ULN jest podłączony od strony anod, maxim podaje wysokie napięcia po to aby włączyć segmenty - ok, problem w tym, że od strony wyświetlaczy podaje niski stan aby je włączyć, a TD potrzebuje stanu wysokiego. Ale problemu brak, jest jeszcze 8x inwerterów w postaci 74HC540, który jest umieszczony między TD a maximem.

Jak wyżej napisałem, duże wyświetlacze nie mają ograniczników prądowych (poza kropkami, kropki składają się z jednego leda i potrzebują rezystora aby nie spłonąć, ewentualnie jak w moim wypadku diody zenera 3V6). Między duże wyświetlacze a mniejsze także wpięte są rezystory symulujące brakującą diodę (małe mają po dwa na segment, duże po trzy). Pojedyncze LEDy są podłączone przez rezystory do sekcji dużych wyświetlaczy. Rezystory dobrane "na oko" aby jasność ledów przycisków pokrywała się mniej więcej z jasnością wyświetlaczy. Niestety ledy dwukolorowe nie chcą być zbyt jasne, i zwiększanie na nich napięcia generalnie ich nie rozjaśnia (powyżej pewnego niskiego względnie poziomu) tylko je pali.

MAX7219 zapewnia cyfrową regulację jasności wszystkich LEDów (poza diodą wpięta do ATmegi).

Całość nawet ładnie wyszła. Pomijając to, że na początku wlutowałem zamiast max7219, max7221, które są prawie identyczne. Jak się jednak okazało "prawie" w tym wypadku robi wielką różnicę. Przy 7221 całość - nie działała. Znaczy świeciły się wszystkie segmenty, zawsze. Okazuje się bowiem, że 7221 kiedy akurat nie chce uaktywnić segmentu/wyświetlacza to ustawia wyjścia w tryb wysokiej impedancji, to znaczy mniej więcej tyle, że wyjścia nie mają stanu. Drivery są wtedy w stanie nieokreślonym więc mogą być włączone, mogą nie. Nie ma to znaczenia kiedy układ steruje wyświetlaczem bezpośrednio, aby ledy się paliły prad musi płynąć, jak nie ma dokąd płynąć - są zgaszone. Ale nie drivery, one sobie wrednie wzmocnia jakiekolwiek resztkowe napięcie na pinach jest (albo to jakie się tam indukuje od sąsiednich ścieżek).

Całość dostanie jeszcze przedni panel, podobnie jak poprzednik. Kawałek szarego pleksi o przepuszczalności ~50%. Ładnie zamaskuje wszystkie wnętrzności co sprawi, że nawet za dnia będzie wyglądało z większym sensem.

A tam powyżej wdać druga część układanki przymocowaną do malinki, zapewnia konwerter poziomów napięć, zabezpieczenie GPIO przed za wysokim napięciem, MOSFETa do starowania oświetleniem i kontroler USB device (a w tle zasilacz 5+12V).

Całość komunikuje się z malinką po szynie I2C oraz z użyciem jednego przerwania. Malinka oczywiście ma bug w kontrolerze I2C który nie pozwala na rozciąganie zegara przez atmegę, efekt jest taki że trzeba było obniżyć prędkość komunikacji ze 100kHz do 50kHz, do tego do protokołu komunikacji trzeba było dodać sumy kontrolne. A jakby tego było mało, stara wersja modułu od i2c w malince nie pozwala na wysłanie "rep-start" przy okazji wykonywania transakcji i2c (a w nowej trzeba to sobie ręcznie włączyć, nie wiem kto wpada na takie pomysły).

PCB jednostronne i upierdliwe do zrobienia w domowym zaciszu, głównie z powodu zmieniającego swoje wymiary pod wpływem temperatury papieru kredowego. Pomalowane z górnej strony matowym lakierem w sprayu (aby się bardziej wtapiało w czarność po instalacji przedniego panelu). Na przyciskach i ich ledach zainstalowany jest kolejny kawałek pleksi (kompletnie czarnej), nie pozwala on na podświetlanie się wzajemne sąsiadującym ze sobą diodom.

No ale no, działa. ;>

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.