• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pomiar czasu za pomocą Arduino
#21
(07-09-2018, 20:26)Mick_SQ6IYV napisał(a): W sprawozdaniach na laboratoriach podaje się wyniki (obliczeń lub pomiarów) z DOKŁADNOŚCIĄ do dwóch cyfr po przecinku i to dokładnie mnie interesuje.
Nie odróżniasz pojęcia rozdzielczość a dokładność. Użyj Google, Wiki itp, poczytaj w książkach. Polecam "Ośla łączkę" z EdW. Był tam odcinek wyjaśniający czym różni się dokładność od rozdzielczości.

Aby uzmysłowić, w prosty sposób czym jest rozdzielczość a czym dokładność (dziwię się, ze nie wiesz), dam przykład
Przypuśćmy, że masz rozdzielczość 1ms a dokładność +/- 50%. Zakładamy, że wykonujesz dwa pomiary, oba czasy są dokładnie takie same, np 10sekund  W jednym pomiarze możesz otrzymać 14,999 a w drugim 5,000. Wynik jest poprawny, 10sekund + 50% to 15,000sekundy. O taką dokładność z pewnością nie chodzi, więc jaką? Ile %, %%, ppm czy bpm?
Przy dokładności 50% nie ma sensu rozdzielczość 1ms dla czasów rzędu sekund. Tu, wystarcza dokładność sekundowa. Czy naprawdę nie potrafisz policzyć wymaganej dokładności dla czasów rzędu sekund przy rozdzielczości 10ms?

Uwzględnij też, ze w Arduino jest (pisałem o tym) problem z rozdzielczością 1 czy 10ms. Wynika to z tego, ze niektóre wartości NIGDY nie pojawiają się. Oglądałem kiedyś funkcję millis i niestety, timer co 125ms (jak pamiętam) jest korygowany. Gdzieś w necie jest nawet tabelka jakie są odchyłki. Odchyłki te sa całkowicie kompensowane po sekundzie. Dlatego millis pozwala uzyskać prawdziwa rozdzielczość 1sekunda, ewentualnie,, z przymrużeniem oka 100ms ale nie 10 czy 1ms. Wynika to z bzdurnego użycia trybu przepełnienia timera a nie CTC. Nie będę się rozpisywał z czego to wynika, w każdym razie aby uzyskać rozdzielczość 10ms musisz zmodyfikować obsługę przerwania od timera0 i ustawić go w tryb CTC, co łatwe nie będzie, albo użyć timera 1 lub 0, który będzie generował przerwania dokładnie co 1 czy 10ms.
Pomagam (nie prowadzę kursów), tylko, gdy w poście załączone są niezbędne materiały (kod, schemat) a pytający zna podstawy.

Kod z Delay i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!




 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości