Skocz do zawartości

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


Asmox

Pomocna odpowiedź

Hej!

Od dłuższego czasu pracuję nad swoim zegarkiem elektronicznym. Docelowo ma on działać na lampach Nixie. Póki co jednak robię prototyp oparty na wyświetlaczach ledowych. Oparłem się o Artykuł z Majsterkowa, jednak wprowadziłem kilka swoich przeróbek.

Zrobiłem działający prototyp na płytce stykowej, teraz chcę to wszystko zlutować na zrobionej przez siebie płytce PCB. Problem polega na tym, że robię to pierwszy raz, więc nie orientuję się czy przypadkiem nie przesadziłem z dodatkowymi połączeniami.

Oto projekt elektroniczny:

Zdaję sobie sprawę, że wykorzystując multipleksowanie mógłbym użyć np. podwójnych wyświetlaczy, żeby uprościć sobie robotę. Ale zamierzam w przyszłości użyć lamp Nixie, dlatego w ramach treningu chciałem się trochę pomęczyć z pojedynczymi. Robiłem samodzielnie bibliotekę do tych wyświetlaczy.

No i schemat płytki:

Czy to się nadaje do lutowania?

Link do komentarza
Share on other sites

Jesteś pewien napięcia wejściowego? Osobiście dałbym na wejściu diodę zabezpieczającą przed odwrotną polaryzacją, bezpiecznik, diodę zenera np. na 5.1V, jakiś dławik i chociażby kondensatory 100uF (albo coś większego) i 100n.

Na moje oko przyciski są źle podłączone. Rezystory powinny być "przed" przyciskami, np. do masy podpięte jak jest teraz, natomiast same przyciski powinny zwierać do zasilania (bądź na odwrót, zależnie od preferowanej logiki).

Jaki widzisz sens stosowania zewnętrznego RTC, jeżeli nie posiada on baterii? To samo można osiągnąć w głównym procku, przy czym odpada jeden układ i komunikacja I2C.

Link do komentarza
Share on other sites

Dziękuję za szybką odpowiedź.

Napięcie wejściowe zamierzam pozyskiwać z zasilacza 5V. Czy odpowiedniej jakości zasilacz załatwi sprawę?

Chciałem zabezpieczyć piny od przycisków przed wysokim natężeniem prądu za pomocą rezystorów. Czy to nie jest bez różnicy czy opornik jest z przodu czy z tyłu, skoro albo obwód jest otwarty albo zamknięty razem z opornikiem?

Cały układ robiłem w oparciu o arduino. Nie wiedziałem że da się "w tle" odmierzać czas i wykonywać inne operacje (jak np wyświetlanie czasu) na jednym mikrokontrolerze. Zacząłem trochę szukać i znalazłem np taki artykuł:

http://sprae.jogger.pl/2011/10/14/wielozadaniowosc-w-arduino/

Czy uważasz, że zastosowanie tej funkcji milis() rozwiąże problem?

@EDIT: http://majsterkowo.pl/forum/timer-t433.html

Na przykład w tym temacie panuje opinia, że bez zewnętrznego układu liczącego nie da się odmierzać czasu.

Link do komentarza
Share on other sites

Jeśli dysponujesz zasilaczem tak wysokiej jakości, że słownie lub w inny sposób ostrzeże Cię przed odwrotnym podłączeniem jego wyjść do uruchamianego układu, to rzeczywiście wystarczy. W przeciwnym wypadku każde zabezpieczenie przed własnym roztargnieniem jest dobre.

Opowiedz własnymi słowami jak wyobrażasz sobie detekcję w procesorze otwarcia lub zamknięcia obwodu przez opornik 10k. Rzeczywiście, jest wszystko jedno czy będzie on po jednej czy po drugiej stronie przycisku. Nie podawaj linków do innych stron - chcę usłyszeć Twoje zdanie na ten temat.

W mikrokontrolerach takich jak ten da się zrobić mnóstwo rzeczy quasi-jednocześnie. W tym szczególnym przypadku Twój procesorek może nie tylko odmierzać czas z mikrosekundową dokładnością własnego kwarcu (musi go mieć), ale też w tym samym czasie obsługiwać wyświetlanie multipleksowane, skanować dużo większą klawiaturę, generować melodyjki co godzinę inne oraz na dzień dobry i dobranoc (może warto wstawić jakiś głośniczek?), nadzorować kilkaset ustawionych czasów alarmów, stabilizować temperaturę wody w akwarium, wysyłać SMSy o zdarzeniach w domu, mierzyć natężenie promieniowania w ogródku i jeszcze wiele, wiele innych rzeczy. Dopóki nie wymyślisz zadania które wymaga naprawdę dużo ciągłej mocy obliczeniowej, poradzi sobie.

Jak rozumiem układ RTC wstawiłeś dlatego, by system podtrzymywał zliczanie czasu nawet wtedy, gdy zabrakło głównego zasilania. W tym celu wystarczy do wejścia VBAT podłączyć małą baterię pastylkową a po restarcie odczytywać czas przez I2C. Stosowanie drogiego zewnętrznego zegarka wyłącznie w celu zwykłego odliczania czasu (z czym procesor poradzi sobie kilkoma liniami kodu) jest bez sensu.

No i to raczej nie jest robot...

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

Myślałem o zasilaczu DC z napięciem wyjściowym stabilizowanym 5V.

Według mnie detekcję otwarcia lub zamknięcia obwodu w procesorze realizuje coś w rodzaju wewnętrznego amperomierza. To jest właśnie moje zdanie na ten temat, chociaż nie jestem pewien czy dobrze to rozumiem.

Czyli jednak jest możliwość odmierzania czasu z mikrokontrolera... Czy mógłbyś mi podpowiedzieć, jak to zrobić? Czy funkcja millis() się do tego nadaje?

Link do komentarza
Share on other sites

Wejścia procesora steruje się napięciem a nie prądem. Pewnie chodziło o debouncing sprzętowy ale to się inaczej robi.

Płytka będzie leżała? Moja propozycja co do PCB to przesunięcie samych lamp na dół płytki aby zmieścić procek i rejestr obok siebie i skrócenie tych długich ścieżek. Jakaś filtracja zasilania by się przydała. Widzę gniazdo DC, to jest to zabezpieczenie przed odwrotną polaryzacją, tak?

Link do komentarza
Share on other sites

@Mechano:

Nie zastanawiałem się nad orientacją zegara z ledami 😉 W zegarze z lampami Nixie płytka będzie równoległa do podłogi. Ale to jeszcze długa droga, na razie chciałbym rozwiązać problemy obecnego projektu.

Tak czy inaczej, postanowiłem wziąć do siebie Twój pomysł z umieszczeniem elektroniki obok siebie. Teraz jeszcze pozostaje kwestia jak ustawić odmierzanie czasu na Arduino.

Fizyczne podłączenia przycisku wziąłem stąd: https://www.arduino.cc/en/Tutorial/Button

Tylko użyłem pinów, które również mogą spełniać rolę wejść.

@Chumanista:

Czy mógłbyś mi przedstawić zarys kodu Arduino, który odpowiednio:

  • Włączy zegar w tle
  • W odpowiednim momencie wyciągnie z tego odliczania czas, ewentualnie jakąś liczbę impulsów którą łatwo można zamienić na czas
Link do komentarza
Share on other sites

Na etapie robienia schematu nie są ważne szczegóły implementacji programowej. Dość wiedzieć, że samym procesorem czas daje się bardzo dokładnie odmierzać.

Przede wszystkim odpowiedz sobie na pytanie czy chcesz mieć podtrzymanie czasu z baterii podczas braku zasilania 5V. Jeżeli tak, musisz RTC zostawić. Będzie on wyposażony w kwarc 32.768kHz i to będzie podstawą czasu Twojego zegarka. Jeżeli tak, to procesor może pracować z dowolnie niedokładnego generatora, np. z wewnętrznego RC i wtedy swojego kwarcu mieć nie musi - tak wygląda obecnie Twój schemat.

Jeżeli wywalisz układ RTC, to za każdym włączeniem zasilania będziesz musiał ustawiać czas od nowa no i musisz procesor wyposażyć w kwarc - po prostu gdzieś w systemie musi być wzorzec czasu/częstotliwości.

A co do przyszłego programu: nie przejmuj się istnieniem lub nie gotowych funkcji z biblioteki. Nie zawsze każdy problem można rozwiązać przy pomocy gotowców. Sam zrobisz wszystko jak trzeba. Wystarczy, że zaprogramujesz któryś timer na zgłaszanie cyklicznych przerwań z jakąś znaną częstotliwością, np. 250 czy 500Hz. Do takiego przerwania "podłączasz" swoją funkcję za pomocą attachInterrupt() i od tej pory będzie ona wywoływana tak często jak chciałeś. W niej robisz łańcuch liczników: najpierw prescaler do 1Hz a potem licznik sekund, minut, godzin, dni itd.. To naprawdę bardzo proste. W ten sam sposób możesz obsłużyć wyświetlanie, skan klawiatury itd..

Acha, żadne wejście układu CMOS nie może wisieć w powietrzu - przejrzyj piny rejestru HC595.

Link do komentarza
Share on other sites

Fizyczne podłączenia przycisku wziąłem stąd: https://www.arduino.cc/en/Tutorial/Button
Naprawdę nie widzisz różnicy między swoim schematem a tym z podanego przez Ciebie linka?

Dla uproszczenia tutaj masz obie wersje bez całej reszty (zapomniałem zmienić domyślną wartość rezystorów, więc to pomiń).

Co więcej, atmega ma wewnętrzny rezystor pullup, więc można go wykorzystać rezygnując z zewnętrznego.

Link do komentarza
Share on other sites

Przede wszystkim odpowiedz sobie na pytanie czy chcesz mieć podtrzymanie czasu z baterii podczas braku zasilania 5V. Jeżeli tak, musisz RTC zostawić. Będzie on wyposażony w kwarc 32.768kHz i to będzie podstawą czasu Twojego zegarka. Jeżeli tak, to procesor może pracować z dowolnie niedokładnego generatora, np. z wewnętrznego RC i wtedy swojego kwarcu mieć nie musi - tak wygląda obecnie Twój schemat.

Warto zaznaczyć, że nie koniecznie. Nie znam się na ATmegach, nie znam tej konkretnej, ale (na ile pozwala mikrokontroler) można również taktować mikrokontroler z 32KHz na baterii, z generatora RC na zasilaniu sieciowym, trzymać procesor w stanie uśpienia na baterii i cyklicznie go wybudzać do kilku razy na sekundę. Ja np. tak robię w obecnym projekcie aby zaoszczędzić miejsce na PCB oraz pozbyć się transmisji I2C.

Link do komentarza
Share on other sites

Masz rację - można tak zrobić, ale tutaj masz wyświetlanie multipleksowane więc będzie potrzebna dość duża aktywność procesora. Przy taktowaniu 32 czy 100kHz może zabraknąć cykli na obsługę wszystkiego z okresem powtarzania np. 1-2ms. Poza tym trzeba wtedy zrobić rozdzielenie zasilania samego wyświetlacza od procesora, który musiałby być podtrzymywany z baterii. Autor wątku nie jest doświadczonym konstruktorem a i tak ma już kilka problemów do rozwiązania. Dorzucanie kolejnych ścieżek projektu raczej mu nie pomoże.

Link do komentarza
Share on other sites

Dlatego na zasilaniu sieciowym przełączasz taktowanie (o ile to możliwe) na coś szybszego, np. 8MHz 😉

Ale fakt, biorąc pod uwagę umiejętności, wykorzystanie tutaj dedykowanego scalonego układu będzie najlepszym rozwiązaniem.

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.