Spisu treści:

Wort-Uhr: 5 kroków
Wort-Uhr: 5 kroków

Wideo: Wort-Uhr: 5 kroków

Wideo: Wort-Uhr: 5 kroków
Wideo: Уся Німецька мова в одному відео. Всі 100 уроків. Німецькі слова та фрази. Німецька з нуля. 2024, Listopad
Anonim
Wort-Uhr
Wort-Uhr

Witam razem!

To będzie moja pierwsza instrukcja i jeśli masz jakieś pomysły, jak ją ulepszyć lub ułatwić zrozumienie, nie wahaj się ze mną skontaktować!

Cóż, na początku ten rodzaj „zegara” nie jest moim pomysłem! Widziałem wiele w Internecie i można je zamówić za kilka dolców w różnych sklepach internetowych. Ale nie chciałem go kupować, chciałem zrobić własny, aby nauczyć się i zrozumieć, jak to działa.

Jedno słowo do „nie-niemieckich” członków… Przepraszam, że to tylko „niemiecka brzeczka Uhr”. Może być łatwo przekonwertowany na angielski lub jakikolwiek inny język, ale ponieważ jestem Niemcem, zrobiłem to w moim języku. Jeśli potrzebujesz wsparcia dla swojego języka, skontaktuj się ze mną, a postaram się Ci pomóc.

A więc zacznijmy…

Krok 1: Schemat

Schemat
Schemat

Schemat jest prosty i jeśli obraz jest zbyt kiepski do odczytania, jest też plik PDF.

Zacznijmy w lewym dolnym rogu. Istnieje prosty zasilacz wykorzystujący LM7805 do generowania stabilnego wyjścia 5 V dla PIC, rejestrów przesuwnych (74HC164) i układu czasu rzeczywistego DS3231. Wszystkie diody LED są również zasilane z tej części. D22 na prawym końcu służy tylko do wskazywania zasilania i można go łatwo rozdzielić, jeśli nie jest potrzebny.

Do zegara można użyć dowolnego zasilacza prądu stałego o napięciu poniżej 40V, ale wtedy należy wybrać odpowiednią wartość dla C7. Powinien mieć napięcie znamionowe co najmniej dwukrotnie wyższe od napięcia wejściowego i pamiętaj, że wytwarzasz ciepło w LM7805, więc powinieneś starać się utrzymywać napięcie wejściowe na jak najniższym poziomie, ponieważ wszystko inne to tylko strata energii. Najlepsze dopasowanie to coś pomiędzy 9V a 12V DC.

Nie przejmuj się polaryzacją swojego zasilacza… P-kanałowy MOSFET (Q1) działa jako zabezpieczenie przed fałszywą polaryzacją, a zegar po prostu nie będzie działał i nie zostanie uszkodzony. Możesz to sprawdzić na diodzie „zasilania” D22, jeśli jest zamontowana.

Po prawej stronie schematu znajdują się rejestry przesuwne szeregowego wejścia równoległego. Zdecydowałem się ich użyć, ponieważ nie chciałem używać dużego PIC z dużą ilością portów I/O. Chciałem użyć mniejszego, a miałem jeszcze w domu trochę 16F1829, więc wybór był już jasny. Dane (IN_1, IN_2 i IN_3) są dostarczane przez PIC (patrz sekcja kodu poniżej) oraz REGISTER_CLK. Dla uproszczenia kodu i układu PCB użyłem dwóch 74HC164 na godziny, a ostatniego do "logiki".

W lewym górnym rogu znajduje się PIC i wszystkie niezbędne części. Użyłem wewnętrznego zegara, więc nie jest potrzebny oszillator. Tylko trzy rezystory dla SCL, SDA i MCLR. Ponieważ użyłem 32kHz jako wskazania "dokładnych sekund", nie ma potrzeby dość stabilnej i dokładnej częstotliwości dla PIC.

W środku znajduje się DS3231 z minimum części zewnętrznych. W rzeczywistości użyłem tylko wejść SDA i SCL do komunikacji przez I²C i wyjścia 32kHZ jako zewnętrznego zegara odniesienia dla Timera1 PIC16F1829. W przypadku tego wyjścia arkusz danych mówi, że potrzebny jest zewnętrzny rezystor podciągający. Pozostałe wyjścia nie wykorzystałem w tym projekcie i pozostawiłem je niepodłączone.

Także w środku diody… Jak widać na schemacie zastosowałem diody niebieskie (te z przeźroczystą obudową) i rezystor o wartości 1k Ohm. Jeśli zamierzasz wykonać ten projekt samodzielnie, powinieneś dobrać wartości tych rezystorów zgodnie z kolorem i rodzajem wybranych diod LED. Pamiętaj też, gdzie chcesz ustawić zegar. Mój stoi w sypialni, dlatego nie chciałem, aby diody były zbyt jasne i wybrałem większą wartość dla rezystorów. Wykonaj kilka prób na płytce stykowej z diodami LED i wartościami rezystorów przed zamontowaniem ich na płytce drukowanej.

Krok 2: Układ

Układ
Układ
Układ
Układ
Układ
Układ

Po skończeniu schematu nadszedł czas na poprowadzenie PCB. Do tego użyłem programu KiCAD (także dla schematu). Nie ma wiele do powiedzenia, po prostu poprowadź linie.

Dla tego, że sam wydrukowałem obudowę zegara, dość ważne było to, gdzie znajdują się diody na górnej warstwie. Diody i rezystory umieściłem tylko na wierzchniej warstwie, ponieważ zamówiłem płytkę częściowo zmontowaną (wszystkie części SMD) i dlatego, że wybrana przeze mnie firma umieszcza części tylko z jednej strony, a nie z obu stron.

Możesz zobaczyć rozmieszczenie na dwóch trójwymiarowych obrazach, które zrobiłem z KiCADa.

Jeśli jesteś zainteresowany… Istnieje możliwość wyeksportowania PCB KiCADa do Eagle i wtedy dość łatwo jest zbudować obudowę, ponieważ masz referencję z PCB.

Krok 3: „Logika” „Wort-Uhr”

Największą częścią tego projektu był kod PIC…

Najpierw odnalezienie „logiki” czasu mówionego w języku niemieckim i przetłumaczenie go na kod.

Niestety nie było możliwe bezpośrednie przesłanie pliku Excel, ale mam nadzieję, że eksport PDF jest wystarczająco czytelny. Jeśli nie, skontaktuj się ze mną, a wyślę Ci oryginalny plik Excel. W pliku PDF możesz zobaczyć, jak skonfigurowałem logikę mojego zegara. Możesz zobaczyć, jak przeszedłem przez różne kroki czasowe i jaka jest pisownia. Obliczenia wewnątrz kodu (głównie instrukcje if-else) można wyprowadzić z informacji po prawej stronie tabeli. Jedna część dotyczy minut, a druga godzin.

Jak widać, to nie jest magia i można je łatwo zakodować w C. „Najtrudniejszym” punktem w logice jest to, jak obsłużyć godzinę, jak widać w pliku, że tylko na początku godziny pokazywana jest rzeczywista godzina. W języku niemieckim (może to tylko bawarski specyfik) „następna godzina” jest używana dość wcześnie.

Do kodowania użyłem MPLABX jako mojego wybranego IDE.

Krok 4: Fragmenty kodu

Fragmenty kodu
Fragmenty kodu
Fragmenty kodu
Fragmenty kodu

Nie będę zamieszczał tutaj mojego kodu, ale jeśli zamierzasz napisać własny kod, podpowiem Ci, na co „natknąłem się” podczas tworzenia…

Najpierw "rejestr"-wypełnianie:

Jeśli zbyt często i w zbyt krótkich cyklach przesyłasz nowe dane do rejestrów, miałem wrażenie, że diody zaczynają migotać. Zrobiłem więc kilka "flag blokujących", aby tylko co minutę dokonywane było nowe "obliczanie" czasu mówionego i dokonywana była aktualizacja rejestru.

Kod do wypełnienia rejestrów znajduje się na powyższym obrazku. Jak widać, wypełniam wszystkie 3 rejestry równolegle, więc potrzebuję 3 pinów PIC dla danych i 1 pinu dla CLK. 74HC164 przejmuje nowe dane o przejściu na linii CLK z 0 na 1.

Reszta kodu to głównie rzeczy zależne od PIC, "czas mówiony" - logika oraz obsługa komunikacji i przycisków. Komunikację zapewnia głównie Microchip MPLABX, ponieważ użyłem modułu MSSP.

Dobrym pomysłem jest przeczytanie arkusza danych DS3231, ponieważ dane są przechowywane wewnątrz jako BCD, więc może być konieczne „przekształcenie” tego w swoim kodzie. Cóż, jeśli o mnie chodzi, jestem facetem „uczącym się przez działanie” i OCZYWIŚCIE nie przeczytałem arkusza danych… Kosztowało mnie wiele nerwów i godzin.

Jak być może zauważyłeś, dzięki tej implementacji są dwa sposoby na „utrzymywanie czasu na właściwym torze”.

  1. Możesz odczytać aktualny czas z DS3231
  2. Możesz „odliczać sekundy” w samym PIC i po prostu od czasu do czasu synchronizować czas z DS3231

To zależy od Ciebie i oba sposoby są praktyczne i proste. Skorzystałem z pierwszej opcji i tylko synchronizowałem czas przy regulacji czasu za pomocą przycisków (czas zapisu do DS3231) lub co 24 godziny (czas odczytu z DS3231), ponieważ sam chciałem zaimplementować więcej logiki. Ja również wyłączam swój zegar w nocy (23:00 do 05:00), więc moim zdaniem było to trochę łatwiejsze.

Krok 5: Obudowa

Na koniec czas na krótkie spojrzenie na obudowę.

Jak wspomniałem powyżej, sam wykonałem obudowę (używając Eagle) i wydrukowałem ją za pomocą mojej drukarki 3D, więc musiałem patrzeć na pozycje różnych diod LED.

W załączeniu możesz znaleźć pliki STL, jeśli chcesz ich użyć.

Mam nadzieję, że ta instrukcja pomoże ci w budowaniu własnego „Wort-Uhr”. Jeśli nadal są "otwarte pytania" nie wahaj się ze mną skontaktować. Najlepszy sposób na komentowanie poniżej, ponieważ możesz nie być jedynym, który ma konkretne pytanie.

Zalecana: