RTV forum PL | NewsGroups PL

Jak zaimplementować algorytm odbioru sygnału DCF77 na AVR i zdekodować bity?

DCF77 a odbieranie bitow AVR

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zaimplementować algorytm odbioru sygnału DCF77 na AVR i zdekodować bity?

Guest

Sun Jan 05, 2014 1:25 am   



Czesc,

chcialbym sie pobawic w odbior DCF77. Nie chce brac gotowcow i
programowac prockow, ale chcialbym wiedziec jak funkcjonuje algorytm
odbioru bitow DCF77'a?

Wiem, ze musze "samplowac" wejscie (z sygnalem DCF'a) i liczyc czas
stanu wysokiego i niskiego. Ale brakuje mi wiedzy jak i w ktorym
momencie UZNAWAC, ze jest 0 (sygnal 100ms) a kiedy jest 1 (sygnal
200ms)...Jak uznac, ze zaczyna sie minuta (brak impulsu)....Ze
zdekodowaniem bitow sam sobie rade, bo to jest wszedzie opisane, ale
jak odbierac te bity???

--
ThinkXtra

BartekK
Guest

Sun Jan 05, 2014 10:02 am   



W dniu 2014-01-05 01:25, adresss@poczta.pl pisze:
Quote:
Czesc,

chcialbym sie pobawic w odbior DCF77. Nie chce brac gotowcow i
programowac prockow, ale chcialbym wiedziec jak funkcjonuje algorytm
odbioru bitow DCF77'a?

Wiem, ze musze "samplowac" wejscie (z sygnalem DCF'a) i liczyc czas
stanu wysokiego i niskiego. Ale brakuje mi wiedzy jak i w ktorym
momencie UZNAWAC, ze jest 0 (sygnal 100ms) a kiedy jest 1 (sygnal
200ms)...Jak uznac, ze zaczyna sie minuta (brak impulsu)....Ze
zdekodowaniem bitow sam sobie rade, bo to jest wszedzie opisane, ale
jak odbierac te bity???

Najłatwiej - jak każdy inny tego typu protokół czasowy - podłącz sygnał

wejściowy do wejścia przerwania INT0/1, i w obsłudze przerwania:
- sprawdzaj wartość timera timer0/1/2 czy który tam masz wolny (jeśli
jest ~100ms to zapisz że odebrano 0, jeśli jest ~200ms, to zapisz że
odebrano 1, jak znacznie więcej niż 200mS = zapisz że zaczyna się
minuta, jak dużo mniej lub coś pomiędzy - błąd/zakłócenie).
- startuj od zera timer (ustawiony tak, by się przez te 200ms nie
przepełnił), by w następnym przerwaniu zbadać ile zliczył (jaki czas
minął).

--
| Bartłomiej Kuźniewski
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

szod
Guest

Sun Jan 05, 2014 10:52 am   



W dniu 05-01-2014 10:02, BartekK pisze:

Quote:
Najłatwiej - jak każdy inny tego typu protokół czasowy - podłącz sygnał
wejściowy do wejścia przerwania INT0/1, i w obsłudze przerwania:
- sprawdzaj wartość timera timer0/1/2 czy który tam masz wolny (jeśli
jest ~100ms to zapisz że odebrano 0, jeśli jest ~200ms, to zapisz że
odebrano 1, jak znacznie więcej niż 200mS = zapisz że zaczyna się
minuta, jak dużo mniej lub coś pomiędzy - błąd/zakłócenie).
- startuj od zera timer (ustawiony tak, by się przez te 200ms nie
przepełnił), by w następnym przerwaniu zbadać ile zliczył (jaki czas
minął).

Musi też mierzyć przerwy, bo trzeba namierzyć początek transmisji. Od
tego trzeba zacząć. Potem odczytywać bity.

BartekK
Guest

Sun Jan 05, 2014 10:53 am   



W dniu 2014-01-05 10:52, szod pisze:
Quote:
W dniu 05-01-2014 10:02, BartekK pisze:

Najłatwiej - jak każdy inny tego typu protokół czasowy - podłącz sygnał
wejściowy do wejścia przerwania INT0/1, i w obsłudze przerwania:
- sprawdzaj wartość timera timer0/1/2 czy który tam masz wolny (jeśli
jest ~100ms to zapisz że odebrano 0, jeśli jest ~200ms, to zapisz że
odebrano 1, jak znacznie więcej niż 200mS = zapisz że zaczyna się
minuta, jak dużo mniej lub coś pomiędzy - błąd/zakłócenie).
- startuj od zera timer (ustawiony tak, by się przez te 200ms nie
przepełnił), by w następnym przerwaniu zbadać ile zliczył (jaki czas
minął).

Musi też mierzyć przerwy, bo trzeba namierzyć początek transmisji. Od
tego trzeba zacząć. Potem odczytywać bity.
No to przecież tak jest.

przy "początku transmisji" pierwszy impuls > przerwanie > w przerwaniu
stwierdzamy "nie było to ~100ms ani ~200ms" więc "poprzedni bit ani nie
był 0 ani 1", i nic się nie dzieje, dopiero od tego momentu startuje
timer i odlicza czas, i przy drugim impulsie jest już czas zliczony (i
będzie ~100 lub ~200ms i zostanie zapisany jako odpowiedni bit)


--
| Bartłomiej Kuźniewski
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

szod
Guest

Sun Jan 05, 2014 11:26 am   



W dniu 05-01-2014 10:53, BartekK pisze:

Quote:
No to przecież tak jest.
przy "początku transmisji" pierwszy impuls > przerwanie > w przerwaniu
stwierdzamy "nie było to ~100ms ani ~200ms" więc "poprzedni bit ani nie
był 0 ani 1", i nic się nie dzieje, dopiero od tego momentu startuje
timer i odlicza czas, i przy drugim impulsie jest już czas zliczony (i
będzie ~100 lub ~200ms i zostanie zapisany jako odpowiedni bit)

Nie bardzo rozumiem. Jak przyjdzie impuls to timer zawsze coś tam
zliczy. Czy to będzie 100, czy 200, czy 50ms. Trzeba mierzyć czas
pomiędzy bitami żeby stwierdzić gdzie jest początek. Jak będzie początek
transmisji, to nic Ci nie uruchomi przerwania. Mówiąc inaczej jak
będziesz mierzył tylko bity, to nie namierzysz początku. Uzyskasz tylko
ciąg bitów.

Robiłem dekodowanie sygnału dla własnego zegara, ale nie pamiętam
szczegółów. Dawno to było. W każdym razie dobrze jest skorzystać z
pomocy. Są projekty symulatorów DCF. Wpisuje się godzinę i on nadaje
sygnał jak rzeczywisty DCF. Można sprawdzić czy program dekoduje to
prawidłowo. Zawsze to lepsze niż zastanawianie się czy walnięty program,
czy zakłócona transmisja. Ja też tak robiłem. To był jakiś projekt z netu.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zaimplementować algorytm odbioru sygnału DCF77 na AVR i zdekodować bity?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map