Skocz do zawartości

[Eagle] [Ocena] zegar LED płytka PCB


Asmox

Pomocna odpowiedź

Dziękuję marek1707 za zwrócenie uwagi że nie jestem doświadczonym konstruktorem 😉 Wasze wskazówki są dla mnie cenne, jednak chciałbym trochę skierować rozmowę na to co jestem w stanie na chwilę obecną zmodernizować.

Sytuacja wygląda w ten sposób, że trochę czasu spędziłem nad tym zegarkiem i chciałbym już skończyć, nawet kosztem małej efektywności. Jednak usunięcie układu RTC znacznie usprawni mi projektowanie płytki, dlatego tę zmianę chciałbym wprowadzić.

W przypadku zegara moim celem jest doprowadzenie go do działania a nie maksymalna efektywność. Inaczej w ogóle bym się nie zainteresował Arduino.

Oto moje plany wprowadzenia zmian:

  • Doprowadzić napięcie zasilające do przycisków.
  • Kwestia odmierzania czasu przez Arduino: no właśnie i tu pojawia się problem. Na tym etapie nie chcę przebudowywać całego kodu na inny język. Zatem szukam w tym konkretnym przypadku gotowca. Jeżeli takiego nie ma, to na razie rezygnuję z tego rozwiązania.
  • @Chumanista: Ta funkcja millis zaczyna mi się podobać. Czy jeżeli użyję rezonatora kwarcowego do Arduino i odpowiednich przesunięć (funkcji włączanych przy ustawianiu czasu) to czas będzie precyzyjnie odmierzany? Jeżeli będę np codziennie resetował Arduino (np o godzinie 00:00) to styknie?
Link do komentarza
Share on other sites

Wydaje mi się, że jednak powinieneś pozostać przy RTC. Z Arduino są dwa problemy.

1. Oryginalne Arduino używa rezonatora ceramicznego który ma niską dokładność (0,3%). Robisz własną płytkę więc, tak jak napisałeś, możesz go wymienić na rezonator kwarcowy. Będziesz miał lepszą dokładność pomiaru czasu.

2. Preskaler i TIMER0 są tak ustawione, że przerwanie do millis przychodzi z częstotliwością 976,5625Hz, czyli co 1,024ms. Pytanie czy jest to jakoś korygowane w samym Arduino, czy będziesz musiał zrobić korekcję sam?

Link do komentarza
Share on other sites

Ja też użyłbym RTC, ale obydwa problemy o których wspomniałeś są możliwe do obejścia. Rezonator (z tego co wiem) będzie miał stały procentowy błąd, a millis() na pewno. Możemy więc zmierzyć ile zajmuje godzina z tymi błędami i dodawać lub odejmować odpowiednią wartość po każdej.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bez przesady. Niedokładności częstotliwości kwarców pracujących w zakresach MHz to 10-100ppm (parts per million) czyli 0.001-0.01% i wliczamy już w to dryft temperaturowy (jakieś ±20ppm w całym zakresie temperatur) i starzenie w czasie (kilka ppm na rok). Zakładając wszystkiego 30ppm w typowych warunkach użytkowania, mamy dokładność ok. 1 minuty na miesiąc - to chyba nieźle.

Kwarce zegarkowe, czyli 32768Hz są zwykle trochę gorsze. Nie wiem, to pewnie wynika z technologii, rodzaju materiału piezo lub koniecznego sposobu jego cięcia. W każdym razie o ile początkowa częstotliwość jest w miarę dokładna, to na krańcach zakresów temperaturowych możemy tu mieć nawet i ±200ppm. Co nadal jest oczywiście bardzo dobrym wynikiem w porównaniu do wszelkich innych elementów pasywnych typu oporniki lub kondensatory.

Jeżeli kwarc 32768Hz steruje pracą układu RTC, to tam łańcuch dzielników z robiony jest sprzętowo więc żadne błędy się nie kumulują. Co więcej, wiele zegarków ma specjalne rejestry, które odpowiednio zapisane przez procesor potrafią skorygować bieg liczników przez dodanie lub odjęcie 1 taktu oscylatora (ok. 30us) co jakiś długi czas. Mając dobry wzorzec czasu i mierząc rzeczywistą częstotliwość pracy (nigdy poprzez przykładanie sondy do samego kwarcu - RTC mają zwykle specjalne wyjście do takich pomiarów) można bardzo szybko wyznaczyć konieczną poprawkę. Oczywiście można też poczekać np. tydzień 🙂 Są też takie RTC, które automatycznie korygują wpływ zmian temperatury na rezonator i dostajemy np. rewelacyjne ±5ppm w zakresie -40 do +80°C.

Najlepszym amatorsko dostępnym wzorcem czasu są impulsy 1PPS (Pulse Per Second - czyli 1Hz) z odbiorników GPS.

Jeżeli chcemy zrobić zegarek bez układu RTC, to każdy kwarc podłączony do procesora załatwi sprawę. Jeżeli wstawimy np. 1MHz, to podział w prescalerze któregoś timera np. przez 64 a potem zliczanie samego timera w trybie CTC z okresem np. 25 da nam sprzętowy podział przez 1600, czyli przerwania z częstotliwością 625Hz. Ponieważ podział odbywa się w sprzęcie, nie ma mowy o żadnych niedokładnościach. Wyjściowy okres 1.6ms będzie tak dokładny jak sam kwarc. Dalej programowe zliczanie modulo 625 da nam 1Hz a to już bezpośrednio "napędzi" łańcuch liczników sekund, minut, godzin itd. Takie rozwiązanie nie ma prawa nie działać i jest tak dokładne jak sam oscylator kwarcowy. Trzeba tylko wybrać taki prescaler i taki okres timera, by podział częstotliwości kwarcu dawał liczbę całkowitą w Hz. Np. wynik 15.625Hz nie jest dobrym pomysłem (ten sam przykład, ale timer liczy z okresem 1000), bo niemożliwe będzie w obsłudze przerwania zrobienie licznika programowego dającego okres 1s, a gdzieś tam w środku każdy zegarek powinien 1Hz mieć żeby prawidłowo zliczać sekundy.

Nie rozumiem rozterek i dywagacji o tym co czy jakaś funkcja będzie miała poślizg czy nie. Wszelkie programowe zliczanie opóźnień to zabawa w przedszkole i strata czasu. Po to procesor ma takie mnóstwo układów peryferyjnych, by z nich odpowiednio korzystać.

------------------------

EDIT: Wszystko co opisałem dot. zliczania czasu można bez problemu zaimplementować w Arduino. Nie ma się co bać tylko poczytać o timerach, obsłudze przerwań i w ciągu godziny stworzyć kod do naprawdę dokładnego zegarka.

Napisz co o tym myślisz i jak chcesz to w szczegółach zrobić. Możemy o tym rozmawiać (i poprawiać) aż coś zacznie działać.

Link do komentarza
Share on other sites

No dobrze, myślę że użycie wewnętrznego timera będzie wymagało ode mnie żeby się porządnie nauczyć jak funkcjonują mikrokontrolery. Do tej pory pisałem na nie kilka prostych programów w asemblerze, ale zamierzam przesiąść się na C++. Natomiast z arduino to ja podpatrywałem rozwiązania w sieci, kopiowałem i wklejałem pod swoje potrzeby 😉

Dziękuję za pomoc, zamierzam poprawić przyciski, RTC na razie zostawię. Trochę czasu zajmie mi przygotowanie tej płytki, ale jak skończę to się pochwalę

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.