Spisu treści:

Minidot 2 - hololok: 6 kroków
Minidot 2 - hololok: 6 kroków

Wideo: Minidot 2 - hololok: 6 kroków

Wideo: Minidot 2 - hololok: 6 kroków
Wideo: Видео-обзор коллиматорных прицелов Delta Optical MiniDot HD 24 и HD 26 2024, Lipiec
Anonim
Minidot 2 - Hololok
Minidot 2 - Hololok
Minidot 2 - Hololok
Minidot 2 - Hololok

Cóż, może holoclock jest trochę niedokładny… używa holograficznej folii dyspersyjnej z przodu, aby nadać nieco głębi. Zasadniczo ta instrukcja jest aktualizacją mojego poprzedniego Minidota znajdującego się tutaj: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/i ponowne użycie dużej ilości kodu i obwodów z mojego Microdot znajdującego się tutaj: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD pliki i kod Sourceboost są zawarte w załączonych plikach zip. Dlaczego? Poprzedni Minidot był zbyt skomplikowany, od Microdota nauczyłem się robić RTC na PIC używając tylko kryształu 32.768 i nie musiałem używać specjalnego układu RTC. Chciałem również pozbyć się chipów wyświetlacza z poprzedniego Minidota. Więc teraz jest tylko układ regulatora mocy i PIC16F88….tylko dwa układy. Innymi powodami aktualizacji były to, że mój Minidot stawał się nieco zawodny z powodu oddzielnej płyty przełączników i chciałem miękkiego zanikania między wzorami kropek, ponieważ a także jakiś czujnik światła otoczenia do przyciemniania wyświetlacza w nocy. Drugi Minidot miał stałą jasność i oświetlał pokój w nocy. Urządzenie zostało skonstruowane przy pomocy pakietu oprogramowania EagleCad i kompilatora Sourceboost. Aby rozpocząć ten projekt, musisz mieć pewne doświadczenie z elektroniką i programowaniem kontrolerów PIC. Należy pamiętać, że nie jest to instrukcja dotycząca programowania elektroniki lub PIC, więc proszę zachować pytania dotyczące projektu Miniclock. Zapoznaj się z instrukcjami powyżej lub wieloma innymi instrukcjami na tej stronie, aby uzyskać porady dotyczące korzystania z EagleCad lub programowania PIC. Więc oto jest….. Minidot 2, Hololok……lub Minidot Następne Pokolenie………….

Krok 1: Obwód

Obwód
Obwód
Obwód
Obwód
Obwód
Obwód

Ten obwód jest bardzo podobny do Microdota. Zauważ, że tablica charlieplex jest praktycznie identyczna… tylko kilka pinów zostało przeniesionych.

Kryształ 20 MHz został dodany do obwodu Microdot, aby taktować PIC znacznie szybciej, co pozwala na szybsze skanowanie macierzy i umożliwia implementację algorytmu ściemniania. Algorytm ściemniania był bardzo ważny, aby umożliwić działanie funkcji zanikania wzoru krzyżowego i światła otoczenia. Byłoby to niemożliwe w przypadku Microdota ze względu na wolniejsze zegary, ponieważ niektóre cykle skanowania trzeba było poświęcić na ściemnianie. W następnej sekcji znajduje się opis funkcji ściemniania. Inną rzeczą, na którą należy zwrócić uwagę, jest zastosowanie regulatora pompy ładowania MCP1252 do zasilania 5 V, mojego ulubionego układu w tej chwili. Jeśli zmodyfikujesz obwód, możesz użyć zwykłego starego 7805……Po prostu mam kilka tych poręcznych chipów wiszących wokół. Teraz przeniosłem przełączniki na przód, oszczędzam manipulowanie z tyłu zegara po zaniku zasilania w celu zresetowania czasu, a teraz wszystko jest tylko jedną płytką drukowaną… bez problemów z okablowaniem. Na uwagę zasługuje również włączenie LDR. Jest to używane w dzielniku napięcia, który jest wykrywany przez pin A/D na PIC. Gdy PIC wykryje, że poziom światła w otoczeniu jest niski (tj. w nocy), algorytm ściemniania utrzymuje macierz charlieplex w ciemności przez więcej cykli niż w przypadku wysokiego poziomu światła. Nie mogłem znaleźć symbolu LDR w bibliotece Eaglecad, więc po prostu użyłem symbolu LED…..nie daj się zwieść, to LDR. Zobacz rzeczywisty obraz PCB poniżej. Jedna rzecz, na którą należy zwrócić uwagę podczas korzystania z wielokolorowych diod LED w tablicy charliplex. Musisz upewnić się, że napięcie przewodzenia diod LED jest mniej więcej takie samo. Jeśli nie, mogą wystąpić ścieżki prądu błądzącego i zaświeci się wiele diod LED. W związku z tym użycie diod LED o mocy 5 mm lub wyższej w tej konfiguracji nie zadziała, ponieważ zwykle istnieje spora różnica między zielonymi/niebieskimi diodami LED a czerwonymi/żółtymi diodami LED. W tym przypadku użyłem 1206 ledów SMD i w szczególności wysokowydajnych zielonych/niebieskich diod LED. Jednak napięcia przewodzenia nie były tutaj problemem. Jeśli chciałbyś użyć mieszanki zielonych/niebieskich i czerwonych/żółtych diod LED o większej mocy w tablicy charlieplex, musiałbyś rozdzielić różne kolory na dwie tablice charliplex. Istnieje wiele wyjaśnień charlieplexingu, które można wygooglować……Nie będę tu wchodzić w szczegóły. Zostawię to tobie, abyś przeprowadził rozeznanie. (Naciśnij małą ikonę „i” w rogu poniższego zdjęcia, aby zobaczyć większą wersję)

Krok 2: Algorytm ściemniania - modulacja szerokości impulsu Charliplexed

Algorytm ściemniania - modulacja szerokości impulsu Charliplexed
Algorytm ściemniania - modulacja szerokości impulsu Charliplexed

Jak wspomniano wcześniej, chciałem, aby różne wzory kropek przez pewien czas zanikały płynnie, zamiast przeskakiwać z jednego wzoru na drugi. Zobacz wideo, aby zobaczyć demonstrację. Pośrodku znajduje się nowy zegar Minidot, po prawej starszy Minidot. Zwróć uwagę, o ile ładniejszy jest nowy. (FYI inne wyświetlacze w tle to wyświetlacz stanu mojego superkomputera Minicray i moja przechwycona cząsteczka Nebulon, która zasila Minicray w polu magnetycznym antymaterii. Zobacz tutaj: https://www.youtube.com/embed/bRupDulR4ME, aby zobaczyć demonstrację komory izolacyjnej nebulonu)Jeśli zajrzysz do kodu, otwórz plik display.c. Należy zauważyć, że istnieją cztery tablice do mapowania wartości tris/port w celu oświetlania dowolnej konkretnej tablicy i dwie tablice (jedna więcej niż kod Microdot) do definiowania, które diody LED powinny być oświetlone dla dowolnego konkretnego wzoru diod LED. Np.:

// LED1 LED2 LED3 …znak bez znaku LEDS_PORTA[31] = { 0x10, 0x00, 0x00, …znak bez znaku LEDS_TRISA[31] = { 0xef, 0xff, 0xff, …znak bez znaku LEDS_PORTB[31] = { 0x00, 0x02, 0x04, …unsigned char LEDS_TRISB[31] = { 0xfd, 0xf9, 0xf9, …unsigned char nLedsA[30];unsigned char nLedsB[30];Aby np. zapalić diodę LED1, należy ustawić rejestry TRIS TRISA:B = 0xef:0xfd oraz rejestry PORT PORTA:B=0x10:0x00 i tak dalej. Jeśli zapiszesz wartości tris w formacie binarnym, zauważysz, że w dowolnym momencie dostępne są tylko dwa wyjścia. Pozostałe są ustawione na Tri-state (stąd rejestr TRIS). To ma kluczowe znaczenie dla charlieplexingu. Zauważysz również, że jedno wyjście jest zawsze logiczną „1”, a drugie zawsze logiczną „0”….kierunek, w którym włącza się dioda LED znajdująca się między tymi dwoma liniami wyjściowymi. Ostatnia wartość w porcie/tris arrays to wartość pusta, która w ogóle nie włącza żadnej diody LED. W Microdot funkcja update_display przechodziła cyklicznie przez inną tablicę (nLeds), aby sprawdzić, czy ta konkretna dioda LED ma się świecić. Jeśli tak, to zostały ustawione odpowiednie wartości tris/port i dioda LED zaświeciła się przez pewien czas. W przeciwnym razie wartość pusta została wysłana do rejestrów PIC TRIS/PORT i przez pewien czas nie świeciła żadna dioda LED. Kiedy zrobiono to wystarczająco szybko, dało to wzór. Reszta programu okresowo odczytywała wartości RTC i tworzyła ładny losowy wzór w tej tablicy….i tak zmienił się wyświetlacz. Aby wykonać funkcję ściemniania, została ona nieco rozszerzona, aby po zapaleniu 30 diod LED (lub nie), wtedy dodatkowe okresy byłyby spędzane na wysyłaniu wartości zerowych, jeśli wyświetlacz miałby być przyciemniony…..dla pełnej jasności, wtedy nie byłyby spędzane dodatkowe okresy. Po powtórzeniu, jeśli było wiele okresów zerowych na podświetlonych diodach LED, wyświetlacz byłby przyciemniony. W efekcie jest to multipleksowana modulacja szerokości impulsu…..lub ponieważ sprzęt jest skonfigurowany w układzie charlieplex, a następnie modulacja szerokości impulsu charlieplexed. Drugi schemat poniżej pokazuje podstawową konfigurację. Nazywam to ramką skanowania. Pierwsze 30 okresów w ramce jest używanych do przechodzenia przez diody LED….. a zmienna liczba dodatkowych okresów określa, jak przyciemniony będzie wyświetlacz. Ten cykl się powtarza. Więcej pustych okresów oznacza mniej czasu na włączenie diody LED na klatkę (ponieważ liczba okresów wzrosła). Zauważ, że oś pionowa nie oznacza poziomu napięcia. Rzeczywisty stan pinów prowadzących do diod LED różni się w zależności od ich pozycji w tablicy charlieplex…..na schemacie oznacza to po prostu włączone lub wyłączone. Oznaczało to również, że całkowita długość ramki w czasie również wzrosła, zmniejszając w ten sposób odświeżanie wskaźnik. Innymi słowy, gdy diody LED ściemniały się, zaczynały migotać. Więc ta metoda jest przydatna tylko do pewnego stopnia. Dla zegara było OK. Sporadycznie wywoływana jest funkcja, która odczytuje przetwornik A/D na PIC i ustawia ten poziom jasności. Jeśli czytasz kod, sprawdza również, czy dioda LED najbliżej LDR jest włączona, i nie ustawia żadnego poziomu, jeśli tak, to zatrzymuje niespodziewane rozjaśnianie wyświetlacza po zmianie wzoru. Następnie funkcja cross fade.

Krok 3: Algorytm ściemniania - efekt zanikania i podwójne buforowanie

Algorytm ściemniania - efekt zanikania i podwójne buforowanie
Algorytm ściemniania - efekt zanikania i podwójne buforowanie

Wcześniej przejście między jednym wzorem a następnym było natychmiastowe. W przypadku tego zegara chciałem pokazać jeden wzór stopniowo zmniejszający się w jasności, a następny wzór stopniowo zwiększający się… tj. zanikanie.

Nie musiałem sterować poszczególnymi diodami LED na oddzielnych poziomach jasności, aby wykonać efekt cross fade. Potrzebowałem tylko pierwszego wzoru o jednej jasności, a drugiego o niskiej jasności. Następnie przez krótki okres zmniejszyłem nieco jasność pierwszego i zwiększyłem drugi…..by to trwało aż do drugiego wzoru w pełni. Wtedy zegar czekał, aż pokaże się kolejny wzór i nastąpi kolejne przejście. Musiałem więc przechowywać dwa wzory. Ten aktualnie wyświetlany i drugi wzór, który miał zostać wyświetlony. Znajdują się one w tablicach nLedsA i nLedsB. (w tym przypadku nie ma nic wspólnego z portami). To jest podwójny bufor. Funkcja update_display() została zmodyfikowana tak, aby przechodziła przez osiem ramek i pokazywała liczbę ramek z pierwszej tablicy, a następnie z drugiej. Zmiana liczby ramek przydzielonych do każdego bufora w ciągu ośmiu cykli określała, jak jasny byłby każdy wzór. Kiedy skończyliśmy cykliczne przełączanie między buforami, zamieniliśmy bufory 'wyświetlania' i 'następnego wyświetlania', aby funkcja generowania wzorca zapisywała tylko do bufora 'następny wyświetlacz'. Miejmy nadzieję, że pokazuje to poniższy diagram. Powinieneś być w stanie zobaczyć, że przejście zajmie 64 ramki skanowania. Na zdjęciu mała wstawka pokazuje schemat skanu ramki z poprzedniej strony, który jest pomysłowo pomniejszony. Słowo o odświeżaniu. Wszystko to trzeba zrobić bardzo szybko. Mamy teraz dwa poziomy dodatkowych obliczeń, jeden dla przyciemnienia wyświetlacza i jeden dla ośmiu cykli klatek spędzonych na przejściu między dwoma buforami. Zatem ten kod powinien być napisany w asemblerze, ale jest wystarczająco dobry w 'C'.

Krok 4: Budowa - PCB

Budowa - PCB
Budowa - PCB
Budowa - PCB
Budowa - PCB

To całkiem proste. Tylko dwustronna płytka drukowana z kilkoma elementami SMD na górze. Przepraszam, jeśli jesteś osobą z otworami przelotowymi, ale o wiele łatwiej jest tworzyć projekty SMD….mniej otworów do wiercenia. Powinieneś mieć pewną rękę, stację lutowniczą z kontrolowaną temperaturą oraz dużo światła i powiększenia, aby ułatwić sobie pracę.

Jedyną rzeczą wartą uwagi w konstrukcji PCB jest włączenie złącza do programowania PIC. To łączy się z pinami ICSP na PIC i będziesz potrzebować programatora ICSP. Znowu użyłem poręcznego złącza do mojego junkbox. Możesz to pominąć i po prostu przylutować przewody do padów, jeśli chcesz. Alternatywnie, jeśli masz tylko programator z gniazdem, możesz zrobić nagłówek, który podłącza się do gniazda, a następnie przylutować do padów ICSP. Jeśli to zrobisz, odłącz Rx i podłącz Ry, które są tylko łączami zero omowymi (ja po prostu używam lutowanej kropelki). Spowoduje to odłączenie reszty zasilania obwodu od PIC, aby nie zakłócało programowania. Programista z gniazdami po prostu używa pinów ICSP jak programista ICSP, tak naprawdę nie ma w tym żadnej magii. Musisz to również zrobić, jeśli przez pomyłkę zapomniałeś umieścić opóźnienie w kodzie przed uruchomieniem RTC. Dla 16F88 piny do programowania ICSP są takie same jak piny potrzebne do kryształu 32.768kHz używanego do RTC……jeśli zewnętrzny oscylator T1 (tj. RTC) pracuje zanim ICSP zacznie działać, wtedy programowanie się nie powiedzie. Zwykle, jeśli nastąpi reset na pinie MCLR i wystąpi opóźnienie, dane ICSP mogą zostać wysłane do tych pinów i programowanie może rozpocząć się poprawnie. Jednak izolując zasilanie PIC, programista ICSP (lub programator gniazdkowy z nagłówkiem) może kontrolować zasilanie urządzenia i wymusić program. Inną rzeczą, na którą należy zwrócić uwagę, jest to, że kryształowe podkładki na płytce drukowanej zostały pierwotnie zaprojektowane dla kryształów SMD. Nie mogłem się doczekać, aż niektóre zostaną dostarczone, więc kryształ zegarka 32,768 kHz został przylutowany do góry, jak pokazano, a kryształ 20 MHz został przymocowany przez wywiercenie kilku otworów w podkładkach, wsunięcie kryształu przez spód i przylutowanie go do szczyt. Możesz zobaczyć szpilki po prawej stronie PIC16F88.

Krok 5: Film holograficzny i obudowa

Film holograficzny i obudowa
Film holograficzny i obudowa
Film holograficzny i obudowa
Film holograficzny i obudowa
Film holograficzny i obudowa
Film holograficzny i obudowa

Ostateczną konstrukcją jest po prostu włożenie płytki PCB do obudowy i po zaprogramowaniu przyklejenie jej kroplą gorącego kleju. Trzy otwory umożliwiają dostęp do mikroprzełączników od przodu.

Godną uwagi częścią tego zegara jest zastosowanie holograficznej folii dyfuzyjnej. Jest to specjalny film, który leżałem w pobliżu, który nadaje urządzeniu ładną głębię. Możesz użyć zwykłej kalki kreślarskiej (w której przesunę płytkę bliżej przodu) lub dowolnego innego dyfuzora, takiego jak te stosowane w oprawach fluorescencyjnych. Poeksperymentuj, jedyne, co musi zrobić, to umożliwić rozróżnienie liczby podświetlonych diod LED, w przeciwnym razie liczenie kropek, aby określić godzinę, będzie trudne. Użyłem holograficznego materiału dyspersyjnego z Physical Optics Coorporation (www.poc.com) z dyspersją kołową 30 stopni, wyświetlacz stanu superkomputera pokazany w innym miejscu instrukcji używał filmu z dyspersją eliptyczną 15x60 stopni. Możesz użyć taśmy zaciemniającej, aby ukryć błyszczące wnętrzności w ciągu dnia, aby uzyskać bardziej tajemniczy wygląd. Możesz nawet pozostawić czysty wyświetlacz i pozwolić ludziom zobaczyć wnętrzności tak jak ja. Stojak składał się z dwóch kawałków aluminiowego drążka w kształcie litery „L” z kawałkiem wyciętym na dole, aby umożliwić zgięcie. Uwaga na tych zdjęciach dodano dodatkowe oświetlenie, dzięki czemu można zobaczyć osłony wyświetlaczy itp. W normalnym oświetleniu salonu diody LED są bardziej widoczne, nawet w świetle dziennym.

Krok 6: Oprogramowanie i interfejs użytkownika

Obsługa urządzenia jest bardzo prosta, bez specjalnych trybów wzorniczych i krzykliwych rzeczy. Jedyne, co robi, to wyświetlanie czasu.

Aby ustawić czas najpierw naciśnij SW1. Urządzenie zamiga wszystkie diody kilka razy, a następnie 10-godzinna grupa diod SW3 zwiększy wybraną grupę, SW2 przejdzie do następnej grupy diod, za każdym razem na krótko migając wszystkie diody w grupie. Kod został napisany dla kompilatora Sourceboost 'C' w wersji 6.70. Kod RTC znajduje się w plikach t1rtc.c/h i ma funkcję przerwania na zegarze T1 PIC. Timer T1 jest ustawiony na przerywanie co 1 sekundę. Co sekundę zwiększana jest zmienna dla czasu. Co sekundę wraz z czasem odliczany jest również zegar kleszczowy. Służy do określania, kiedy przejść do wyświetlania. Funkcja przerwania używa również przerwania czasowego T0 do odświeżenia wyświetlacza, wywołując funkcję w display.c Pliki display.h/display.c zawierają funkcje do aktualizacji wyświetlacza i pokazywania czasu Pliki control.c/h zawierają funkcje do ustawiania czasu i odczytu przełączników Pliki holoclock.c/h są głównymi pętlami i inicjalizacją.

Zalecana: