Goto page Previous 1, 2, 3, 4 Next
J.F.
Guest
Wed Nov 12, 2014 11:14 pm
A propos NTP - czy ktos analizowal jak to dziala i rozumie ?
Bo nie rozumiem jak on sobie radzi z laczami niesymetrycznymi, gdy np
pakiet w jedna strone idzie 0.1s, a w druga 2.1s ..
Mimo tych 4 znacznikow czasu 0 - na moj gust to nie ma mozliwosci
wykrycia o ile pakiety sa niesymetryczne.
J.
Marek
Guest
Wed Nov 12, 2014 11:18 pm
On Wed, 12 Nov 2014 22:20:25 +0100, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
albo timer jest wstrzymywany gdy przerwanie jest obsługiwane.
Jak to sprawdzić?
W avr nie wiem, niech się jakiś spec od tych mcu wypowie. Twój kod
nie wygląda aby blokował timer. Raczej stawiam na źle skonfigurowany
timer. No właśnie jak go ustawiłeś, tak na oko wychodzi, że aby
uzyskać 10ms przerwanie przy 12.5MHz trzeba ustawić prescaler /8 i
output compare na 15625.
--
Marek
Jakub Rakus
Guest
Wed Nov 12, 2014 11:20 pm
On 12.11.2014 22:20, Atlantis wrote:
Quote:
albo timer jest wstrzymywany gdy przerwanie jest obsługiwane.
Jak to sprawdzić?
Po pierwsze sprawdź czy masz dobrze skonfigurowany timer, czy na pewno
dobrze policzyłeś wartość, którą wpisujesz do OCR (bo z tego co widzę z
wcześniejszego litingu, to używasz trybu CTC dla Timer0).
Po drugie sprawdź czy sygnał zegarowy, którym taktujesz proca ma
odpowiednio częstotliwość.
W przerwaniu toggluj jakiś pin i zobacz na oscyloskopie jaką masz f.
Albo jeszcze lepiej skonfiguruj timer tak, żeby sam zmieniał stan na
wyjściu OCn, jeśli masz jakieś wolne.
--
Pozdrawiam
Jakub Rakus
Atlantis
Guest
Wed Nov 12, 2014 11:24 pm
W dniu 2014-11-12 23:18, Marek pisze:
Quote:
No właśnie jak go ustawiłeś, tak na oko wychodzi, że aby uzyskać 10ms
przerwanie przy 12.5MHz trzeba ustawić prescaler /8 i output compare
na 15625.
Jak już mówiłem, w tej chwili timer jest ustawiony na przerwanie co 20ms
- chciałem odsunąć je od siebie tak bardzo, jak to tylko możliwe.
Niestety omawiany timer jest ośmiobitowy - jedyny szesnastobitowy został
wykorzystany do zliczania zewnętrznych impulsów. Na etapie projektowania
hardware'u nie myślałem jeszcze o wyposażeniu urządzenia w RTC. Gdybym
wtedy o tym pomyślał, to wybrałbym jakiś inny MCU. ;)
Timer jest ustawiony na prescaler 1024 i output compare 243.
Atlantis
Guest
Wed Nov 12, 2014 11:32 pm
W dniu 2014-11-12 23:20, Jakub Rakus pisze:
Quote:
Po pierwsze sprawdź czy masz dobrze skonfigurowany timer, czy na pewno
dobrze policzyłeś wartość, którą wpisujesz do OCR (bo z tego co widzę z
wcześniejszego litingu, to używasz trybu CTC dla Timer0).
Konfiguracja została wyliczona za pomocą programu mkAVRcalculator i
sprawdzona za pomocą jakiegoś webowego przelicznika. Prescaler ustawiony
na 1024, w rejestrze OCR0A wpisana wartość 243.
Quote:
Po drugie sprawdź czy sygnał zegarowy, którym taktujesz proca ma
odpowiednio częstotliwość.
Dysponuję raczej "takim sobie" częstotliwościomierzem domowej roboty.
Na linii CLKOUT wskazuje 12.500xx MHz. Ostatnie dwie cyfry lekko
fluktuują, ale ma to zapewne związek z niedoskonałością samego miernika.
Z tego samego powodu nie byłem w stanie dokładnie zmierzyć
częstotliwości machania pinem - częstotliwościomierz pokazywał wartość
wahającą się pomiędzy 25Hz i 20Hz. Podejrzewam jednak, że to też było
winą miernika.
Zapomniałem dodać, że dysponuję dwoma egzemplarzami tego urządzenia.
Dryf występuje na obydwu.
Grzegorz Niemirowski
Guest
Wed Nov 12, 2014 11:43 pm
Atlantis <marekw1986NOSPAM@wp.pl> napisał(a):
Quote:
Konfiguracja została wyliczona za pomocą programu mkAVRcalculator i
sprawdzona za pomocą jakiegoś webowego przelicznika. Prescaler ustawiony
na 1024, w rejestrze OCR0A wpisana wartość 243.
Tylko skąd my mamy wiedzieć co Ty tam powyliczałeś

Podaj wartości
rejestrów, w szczególności TCCR0. Czy ten timer działa w trybie CTC? Co się
ma dziać przy osiągnięciu wartości 243 przez licznik, oprócz samego faktu
wygenerowania przerwania?
Nieśmiało podejrzewam, że zacząłeś testować NTP bez sprawdzenia poprawności
konfiguracji timera.
Quote:
Dysponuję raczej "takim sobie" częstotliwościomierzem domowej roboty.
Na linii CLKOUT wskazuje 12.500xx MHz. Ostatnie dwie cyfry lekko
fluktuują, ale ma to zapewne związek z niedoskonałością samego miernika.
Z tego samego powodu nie byłem w stanie dokładnie zmierzyć
częstotliwości machania pinem - częstotliwościomierz pokazywał wartość
wahającą się pomiędzy 25Hz i 20Hz. Podejrzewam jednak, że to też było
winą miernika.
Bardzo polecam zaopatrzyć się w coś, co mierzy częstotliwość. Ja mam
AVT-2269 oraz oscyloskop z taką funkcją.
Quote:
Zapomniałem dodać, że dysponuję dwoma egzemplarzami tego urządzenia.
Dryf występuje na obydwu.
Moim zdaniem na obu Twój licznik liczy do wartości 255.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express:
http://www.grzegorz.net/oe/
Uptime: 44 days, 4 hours, 45 minutes and 6 seconds
Atlantis
Guest
Wed Nov 12, 2014 11:47 pm
W dniu 2014-11-12 23:43, Grzegorz Niemirowski pisze:
Quote:
Tylko skąd my mamy wiedzieć co Ty tam powyliczałeś

Podaj wartości
rejestrów, w szczególności TCCR0. Czy ten timer działa w trybie CTC? Co
się ma dziać przy osiągnięciu wartości 243 przez licznik, oprócz samego
faktu wygenerowania przerwania?
TCCR0A |= (1 << WGM01);
TCCR0B |= ( (1 << CS02) | (1 << CS00) );
OCR0A = 243;
TIMSK0 |= (1 << OCIE0A);
Quote:
Bardzo polecam zaopatrzyć się w coś, co mierzy częstotliwość. Ja mam
AVT-2269 oraz oscyloskop z taką funkcją.
Mój miernik częstotliwości to właśnie coś w stylu AVT-269. Zresztą te
dwie fluktuujące cyfry na końcu wyświetlanej częstotliwości nie powinny
mieć żadnego wpływu. Kalkulator po ich zmianie nie proponuje nawet innej
konfiguracji timera...
Marek
Guest
Wed Nov 12, 2014 11:51 pm
On Wed, 12 Nov 2014 23:24:44 +0100, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Timer jest ustawiony na prescaler 1024 i output compare 243.
0.02/(1/(12500000/1024)) = 244.140625
jak widzisz niedokładność już jest tutaj. Jeśli ma być precyzyjnie to
tylko 16 bit timer. Można 8 bit i dodatkowa zmienna jako licznik (do
16525) ale wtedy to nonsens bo przerwanie będzie co 0.64 us. Nie
wyrobi się.
--
Marek
Atlantis
Guest
Wed Nov 12, 2014 11:57 pm
W dniu 2014-11-12 23:51, Marek pisze:
Quote:
0.02/(1/(12500000/1024)) = 244.140625
jak widzisz niedokładność już jest tutaj. Jeśli ma być precyzyjnie to
tylko 16 bit timer. Można 8 bit i dodatkowa zmienna jako licznik (do
16525) ale wtedy to nonsens bo przerwanie będzie co 0.64 us. Nie wyrobi
się.
Tylko taka niedokładność nie spowoduje 80 sekund opóźnienia po godzinie
i 10 minutach pracy...
Z niedoskonałości zdaję sobie sprawę. Do ich niwelowania miał właśnie
służyć klient NTP.
Grzegorz Niemirowski
Guest
Thu Nov 13, 2014 12:02 am
Atlantis <marekw1986NOSPAM@wp.pl> napisał(a):
Quote:
TCCR0A |= (1 << WGM01);
TCCR0B |= ( (1 << CS02) | (1 << CS00) );
OCR0A = 243;
TIMSK0 |= (1 << OCIE0A);
Dzięki, wygląda poprawnie.
Quote:
Mój miernik częstotliwości to właśnie coś w stylu AVT-269. Zresztą te
dwie fluktuujące cyfry na końcu wyświetlanej częstotliwości nie powinny
mieć żadnego wpływu. Kalkulator po ich zmianie nie proponuje nawet innej
konfiguracji timera...
Takie fluktuacje nie powinny mieć miejsca, częstotliwość nie może pływać z
odchyleniem 10%. Może coś nie tak z sygnałem zegarowym? Używasz wewnętrznego
generatora RC czy kwarca? Wymieniałeś kwarc? Swoją drogą dobrze poszukać
kwarcu, który będzie miał częstotliwość dającą się odpowiednio podzielić.
Dlatego w handlu są kwarce o częstotliwościach w rodzaju 3,6864 MHz.
Może trzeba by skopiować projekt i w tej kopii powoli wywalać kolejne rzeczy
aż zostanie sam timer? Bo może coś przeszkadza, jakieś inne przerwanie.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express:
http://www.grzegorz.net/oe/
Uptime: 44 days, 5 hours, 2 minutes and 18 seconds
Atlantis
Guest
Thu Nov 13, 2014 12:12 am
W dniu 2014-11-13 00:02, Grzegorz Niemirowski pisze:
Quote:
Takie fluktuacje nie powinny mieć miejsca, częstotliwość nie może pływać
z odchyleniem 10%. Może coś nie tak z sygnałem zegarowym? Używasz
Dziesięć procent? Nie mówimy o dziesięciu procentach.
Częstotliwość zegara w moim urządzeniu wynosi 12 500 000 Hz.
Częstotliwościomierz pokazuje tylko siedem cyfr, fluktuowały dwie
ostatnie. Mówimy o zmianach rzędu kilkuset Hz przy częstotliwości 12,5
MHz. Przy czym jak mówiłem - podejrzewam, że to wina miernika.
Quote:
wewnętrznego generatora RC czy kwarca? Wymieniałeś kwarc? Swoją drogą
dobrze poszukać kwarcu, który będzie miał częstotliwość dającą się
odpowiednio podzielić. Dlatego w handlu są kwarce o częstotliwościach w
rodzaju 3,6864 MHz.
Używam sygnału zegarowego udostępnianego przez kontroler Ethernetu
ENC28J60. On sam jest taktowany kwarcem 25 MHz, na wyjściu zegarowym
udostępniając 12,5 MHz.
Quote:
Może trzeba by skopiować projekt i w tej kopii powoli wywalać kolejne
rzeczy aż zostanie sam timer? Bo może coś przeszkadza, jakieś inne
przerwanie.
Nie ma żadnych innych przerwań. Projekt wykorzystuje jeszcze Timer1, ale
w trybie licznika zewnętrznych impulsów, a wiec nie zgłasza on przerwań.
Program nie wykorzystuje nawet UART-a...
Grzegorz Niemirowski
Guest
Thu Nov 13, 2014 12:19 am
Atlantis <marekw1986NOSPAM@wp.pl> napisał(a):
Quote:
Dziesięć procent? Nie mówimy o dziesięciu procentach.
Częstotliwość zegara w moim urządzeniu wynosi 12 500 000 Hz.
Częstotliwościomierz pokazuje tylko siedem cyfr, fluktuowały dwie
ostatnie. Mówimy o zmianach rzędu kilkuset Hz przy częstotliwości 12,5
MHz. Przy czym jak mówiłem - podejrzewam, że to wina miernika.
Miałem na myśli pomiar machania pinem. Przez fluktuację rozumiem zmieniający
się odczyt. Chodzi o jakieś miganie niezwiązane z tym konkretnym pomiarem?
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express:
http://www.grzegorz.net/oe/
Uptime: 44 days, 5 hours, 24 minutes and 46 seconds
Marek
Guest
Thu Nov 13, 2014 1:12 am
On Wed, 12 Nov 2014 23:57:27 +0100, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Tylko taka niedokładność nie spowoduje 80 sekund opóźnienia po
godzinie
i 10 minutach pracy...
Dokładnie 80 czy 86.4?
--
Marek
Andrzej W.
Guest
Thu Nov 13, 2014 7:15 am
W dniu 2014-11-12 o 23:14, J.F. pisze:
Quote:
A propos NTP - czy ktos analizowal jak to dziala i rozumie ?
Bo nie rozumiem jak on sobie radzi z laczami niesymetrycznymi, gdy np
pakiet w jedna strone idzie 0.1s, a w druga 2.1s ..
Mimo tych 4 znacznikow czasu 0 - na moj gust to nie ma mozliwosci
wykrycia o ile pakiety sa niesymetryczne.
J.
Ja używam w swojej xmedze SMTP, jest banalnie prosty. Używam bez
korekcji czasu przelotu i to mi działa bo mam własny serwer NTP na jeden
hop, a ponieważ atmelowe RTC i tak jest w stanie tylko liczyć sekundy
więc arytmetykę na liczbach 64o bitowych uznałem za zbędną.
Z tego co jest w RFC4330:
Timestamp Name ID When Generated
------------------------------------------------------------
Originate Timestamp T1 time request sent by client
Receive Timestamp T2 time request received by server
Transmit Timestamp T3 time reply sent by server
Destination Timestamp T4 time reply received by client
The roundtrip delay d and system clock offset t are defined as:
d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2.
Jak dla mnie wzór na t tak pięknie się skraca, że nie ma znaczenia czy
opóźnienie jest symetryczne czy nie.
Można by to wyprowadzić zakładając, że d=d1+d2 ale przed pierwszą kawą
nie chce mi się... :-)
--
AWa.
Atlantis
Guest
Thu Nov 13, 2014 8:55 am
W dniu 2014-11-13 01:12, Marek pisze:
Quote:
Dokładnie 80 czy 86.4?
Z tego co pamiętam, to było 81. Przy czym mierzone ze stoperem jako
punktem odniesienia, wiec nie jestem w stanie zagwarantować dokładności
na poziomie tej ostatniej sekundy.
Goto page Previous 1, 2, 3, 4 Next