Serwisy partnerskie:
Close icon
Serwisy partnerskie

Zegar radiowy MSF

Narodowe Laboratorium Fizyki nadaje sygnał czasu, wcześniej znany jako zegar Rugby, a obecnie nazywany "Time from NPL". Jest on najczęściej znany jako sygnał MSF ze względu na to, że pierwotnie był identyfikowany w kodzie Morse'a tymi literami. Jest on nadawany z Anthorn na częstotliwości 60kHz. Wiele komercyjnych zegarów używa go do automatycznego ustawiania się.
Article Image

Postanowiłem przerobić zakupiony przeze mnie zegar cyfrowy na zegar ustawiający się na sygnał MSF. Aby uczynić projekt ciekawszym postanowiłem użyć mikrokontrolera ATtiny2313 z tylko 2k pamięci flash ROM i 128 bajtami RAM.

Cechy:

  • Automatycznie ustawiany przez sygnał czasu MSF
  • Jasny, nie migoczący wyświetlacz
  • Alarm z wyborem 5 polifonicznych melodii
  • Dzwonek godzinowy z wyborem melodii i bez dzwonka między 00:00 a 08:00

Sprzęt

Oryginalna elektronika zegara wykorzystywała dwie płytki PCB, jedną dla 7 segmentowych diod LED i drugą dla kontrolera zegara i układu pomocniczego. Zacząłem od prześledzenia połączeń między nimi i określenia sposobu działania wyświetlacza.

Wyświetlacz jest multipleksowany za pomocą prostych kluczy tranzystorowych dla wspólnej anody. Tylko środkowe dwa 7 segmentowe wyświetlacze mają kropki. Podłączyłem tranzystory anodowe do AVR z rezystorami 2k2 dla ograniczenia prądu, a katody do rejestru przesuwnego 74HC595 poprzez układ Darlingtona ULN2803. Usunąłem kontroler IC i wszystkie inne nieużywane części.

AVR używa kryształu 12MHz, który jest wystarczająco dokładny do odmierzania czasu. W moich wstępnych testach różnił się on o mniej niż jedną sekundę na dzień, ale po zainstalowaniu w obudowie zegara traci około 3-4 sekund w ciągu 24 godzin. Ponieważ czas jest ponownie synchronizowany z sygnałem MSF każdej nocy, jest to więcej niż wystarczające.

Do AVR podłączony jest moduł odbiornika MSF. Kupiłem go za kilka funtów i działa bardzo dobrze, choć jak większość odbiorników kodu czasowego o niskiej częstotliwości jest bardzo wrażliwy na zakłócenia. Wyświetlacz multipleksu musi być wyłączony, gdy jest używany, więc nie jest możliwe, aby zobaczyć aktualny czas, gdy jest on ponownie synchronizowany. Musiałem użyć długiego kabla USB do programowania w trakcie uruchamiania, ponieważ szum elektryczny z mojego komputera przeszkadzał.

Schemat elektryczny zegara

Firmware

ATtiny2313 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
-------------------------------------------------------------
[.cseg] 0x000000 0x0007f8   2006     34   2040    2048  99.6%
[.dseg] 0x000060 0x000060      0      0      0     128   0.0%
[.eseg] 0x000000 0x000000      0      0      0     128   0.0%

Utrzymywanie czasu odbywa się poprzez przerwanie, które obsługuje również multipleksowanie wyświetlacza. Wyświetlacz jest multipleksowany z częstotliwością 100Hz, co przekłada się na przerwanie timera 400Hz (4 cyfry × 100Hz). Przerwanie wysyła również sygnały z powrotem do głównego kodu, gdy przyrastają minuty i godziny.

Obraz oscyloskopowy sygnału MSF

Protokół MSF reprezentuje binarne bity o różnej długości impulsów, które są generowane przez włączanie i wyłączanie sygnału nośnego. Główne dwa impulsy to 100ms (zero) i 200ms (jeden). Początek minuty sygnalizowany jest impulsem o długości 500ms, a pod koniec cyklu minutowego bity parzystości mogą mieć długość 300ms.

Szczegóły dotyczące formatu danych można znaleźć na stronie Wikipedii, gdzie znajdują się informacje o sygnale, które w większości są poprawne. Dokumentacja NPL jest również dość przydatna.

Odbiór MSF wymaga kodu odpornego na błędy. Nawet w idealnych warunkach sygnał prawdopodobnie będzie zawierał szum. Zdekodowany sygnał również musi być zweryfikowany przed zaakceptowaniem.

Procedura odbiorcza MSF czeka na rozpoczęcie impulsu i następnie mierzy jego długość używając 100Hz timera. Odrzuca impulsy (lub zaniki) o długości poniżej 5 ms jako szum. Przy dekodowaniu długości impulsów istnieje ±20ms margines swobody.

Po odebraniu pełnej minuty impulsów są one dekodowane, sprawdzane pod względem poprawności i parzystości. Jeśli sygnał wygląda na prawidłowy, zdekodowane dane są zapisywane i odbierany jest drugi sygnał. Jeśli ten drugi sygnał również przejdzie wszystkie kontrole i poda czas dokładnie minutę po pierwszym, wtedy zostanie uznany za poprawny i zegar zostanie zsynchronizowany.

Synchronizacja ma miejsce przy pierwszym włączeniu zegara i ponownie o 3 rano każdej nocy. Godzina 3 rano została wybrana, aby uniknąć niedogodności dla użytkownika oraz dlatego, że w nocy jest mniej zakłóceń RF.

Uwaga na temat dokładności sygnału MSF. Czas nadawania ma się mieścić w granicach 1ms od UTC. Istnieje jednak opóźnienie propagacyjne pomiędzy nadajnikiem a odbiornikiem, które nie może być łatwo zmierzone lub usunięte automatycznie. Na podstawie tego, gdzie mieszkam, szacuję, że opóźnienie wynosi około 275ms. Czas GPS kompensuje to opóźnienie.

Interfejs użytkownika

Zegar jest kontrolowany przez trzy przyciski na tylnej ściance. Ponieważ zegar używa sygnału MSF do automatycznego ustawiania się, nie ma możliwości ręcznego ustawienia go. W każdym razie nie ma wystarczającej ilości wolnej pamięci flash, aby zaimplementować interfejs ustawiania czasu.

Przytrzymanie przycisku SET przez jedną sekundę powoduje wejście w tryb ustawiania. Przyciskami UP/DOWN zmieniamy nastawę i SET przechodzi do następnej. Sekwencja jest następująca:

  1. Włączenie/wyłączenie alarmu
  2. Godzina alarmu
  3. Alarm minutowy
  4. Melodia alarmu
  5. Włączenie/wyłączenie dzwonka godzinowego
  6. Melodia dzwonka godzinowego

Przyciski są odblokowane i powtarzają się po przytrzymaniu.

Generator Melodii

Planowałem zrobić z ATtiny2313 generator melodii alarmowych i gongów godzinnych, ale nie było wystarczająco dużo miejsca w kodzie. Zdecydowałem się zmodyfikować Wavetable Melody Generator ChaN'a i sterować nim za pomocą 2313. ChaN jest trochę geniuszem, jeśli chodzi o implementację takich rzeczy w efektywny i elastyczny sposób, z minimalną ilością wymaganego zewnętrznego sprzętu. W rzeczywistości jego WGM wymaga tylko ATtiny45, głośnika i zasilacza do działania.

Wymagania dla Generatora Melodii to wiele melodii i gongów. Zdecydowałem się na użycie muzyki i dźwięków z japońskich stacji kolejowych (JR).

Zdecydowałem się na użycie muzyki i dźwięków z japońskich stacji kolejowych...

Zacząłem od stworzenia nowego wavetable'a (właściwie jest tylko jeden instrument, więc to nie jest tak naprawdę "tablicał"...) używając próbki z domyślnego zestawu TiMidity++. Musiał on zostać pocięty na dwie sekcje, fazę ataku i podtrzymania. Zazwyczaj instrumenty perkusyjne (np. pianina, dzwonki, gongi) podczas uderzenia tworzą nagły dźwięk przejściowy, w którym przebiegi są niesymetryczne, zwany atakiem. Następnie szybko zaczynają oscylować i zanikać w miarę utraty energii, co nazywane jest podtrzymaniem. Ponieważ oscylująca część dźwięku jest po prostu tą samą formą fali powtarzaną z coraz mniejszą wielkością, konieczne jest jedynie zapisanie jednego cyklu i zredukowanie jego amplitudy do zera na długość okresu podtrzymania. Ta metoda ułatwia również zmianę długości podtrzymania.

Znalazłem wersje MIDI melodii i chin, które chciałem i przekonwertowałem je na tekst za pomocą MIDINOTE. Tekst został następnie zaimportowany do Excela, ponownie wyeksportowany do tekstu w bardziej odpowiednim formacie i oczyszczony w Notepad++. W końcu skrypt Perla ChaNa został użyty do przekonwertowania ich na pliki include asemblera AVR.

Kod ChaNa został zmieniony tak, aby obsługiwał wiele wyników, każdy z własną szybkością zanikania. Dodałem także trochę kodu do interfejsu ATtiny45 z głównym ATtiny2313 używając bardzo prostego protokołu. 2313 ściąga linię enable w stan niski, a następnie pulsuje linię danych pewną ilość razy odpowiadającą partyturze, którą chce odtworzyć.

Sprzęt jest banalnie prosty - jedynie głośnik 8Ω podłączony bezpośrednio do AVR.

Artykuł MSF radio time clock opracowano w wersji polskiej na podstawie współpracy z portalem www.electronics-lab.com.

Tematyka materiału: CMRR, źródło prądowe
AUTOR
Źródło
www.electronics-lab.com
Udostępnij
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"