Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino - Zegar sterujący

30 Maj 2013 13:58 2361 1
  • Poziom 2  
    Witam.
    Pomimo działania w elektronice od lat przyznam, że z Arduino zetknąłem się niedawno. Pierwszy układ, jaki zaprojektowałem i zbudowałem to był zegar sterujący do starych zegarów kolejowych w oparciu o kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zegar ma za zadanie sterować dwoma przekaźnikami, które podają naprzemienną polaryzację na zegar wtórny. Z tego powodu każdy z przekaźników jest włączany naprzemiennie na jedną sekundę co 59 sekund (prawie). Niestety nie mam jeszcze doświadczenia z uC i dlatego też zwracam się do Szanownych Uczestników Forum po pomoc.
    Zauważyłem, że jeśli ustawię czas oczekiwania na 59 s, to zegar się późni dość znacznie. Doświadczalnie więc dobrałem czas "martwy" jako 58,936 ms. Przy takim parametrze zegar pracuje w sposób najbardziej zbliżony do czasu rzeczywistego. Jak widać rzeczywista milisekunda jest "szybsza", niż milisekunda Arduino. Sądzę, że wynika to z błędu podziału częstotliwości. Generalnie nie stanowi to większego problemu, bo wartość ustawiona przeze mnie spełnia oczekiwania. Pierwsze moje pytanie, to: z czego wynika ów błąd milisekundy Arduino?
    Druga kwestia związana jest z chęcią modyfikacji układu. Jeszcze nie ogarnąłem programowania uC na tyle, żeby sobie samemu z tym poradzić.
    Chciałbym, dodać do układu trzy przyciski, jeden, który po wciśnięciu będzie zatrzymywał pętlę dokładnie o godzinę. Drugi przycisk powinien wywołać przyspieszenie pracy zegara o godzinę, czyli podać dokładnie 30 impulsów na jeden i 30 na drugi przekaźnik, ale nie szybciej, niż co 1 s. W tym przypadku należy oczywiście wziać pod uwagę, że samo przestawianie już zajmie jakiś czas, więc trzeba podać odpowiednio więcej impulsów (o czas przestawiania). Trzeci przycisk, ma podawać impulsy +/- podobnie, jak drugi, ale tylko w czasie jego przyciskania. Jak nie trudno się domyśleć pierwsze dwa służyłyby do zmiany czasu, a trzeci do dostrajania zegara w miarę potrzeby ręcznie.
    Nie bardzo ogarniam miejsce w programie, w którym należałoby wpisać odczyt z odpowiedniego wejścia Arduino, żeby wykonana została odpowiednia funkcja.
    Czy dobrze podejrzewam, że trzeba się tu posłużyć przerwaniami? Nie bardzo to jeszcze ogarniam. Proszę o pomoc.
    Pozdrawiam