• 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
#1
Witam Wszystkich!

Jestem początkującym użytkownikiem platformy Arduino. Mam kilka książek na jego temat, ale w żadnej nie mogę znaleźć podpowiedzi jak mierzyć czas za pomocą Arduino. Nie chodzi mi o budowę zwykłego zegara, tylko o pomiar czasu pomiędzy dwoma (i więcej) zdarzeniami. Potrzebny jest do tego Zegar Czasu Rzeczywistego (RTC) czy obejdzie się bez tego?
Rób to, co kochasz i kochaj to, co robisz! VY 73 Smile
 
Odpowiedź
#2
(07-09-2018, 13:36)Mick_SQ6IYV napisał(a): pomiar czasu pomiędzy dwoma (i więcej) zdarzeniami. Potrzebny jest do tego Zegar Czasu Rzeczywistego (RTC) czy obejdzie się bez tego?

Jakiej długości czasy chcesz mierzyć?
Z jaką rozdzielczością?
Z jaką dokładnością?
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0  , Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP, BASIC C-64

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#3
W zasadzie chodzą mi dwa projekty:

Projekt 1 związany z pomiarem czasu o długości około 10 - 20 sekund, rozdzielczość i dokładność na poziomie 0,01 s.

Projekt 2 związany z pomiarem czasu o długości powyżej 1 minuty, rozdzielczość i dokładność na poziomie 1 s.

Oczywiście, jeśli można poprawić rozdzielczość o jeden rząd (w obu projektach), to też będzie dobrzeSmile
Rób to, co kochasz i kochaj to, co robisz! VY 73 Smile
 
Odpowiedź
#4
W funkcji obsługi pierwszego zdarzenia musisz zapisać do zmiennej aktualny czas:
Kod:
unsigned long czasStart = millis();

W funkcji obsługi drugiego zdarzenia, tez musisz spojrzeć na zegarek:
Kod:
unsigned long czasStop = millis();

Różnica w pomiędzy naszymi zmiennymi, to właśnie zmierzony czas:
Kod:
unsigned long Czas = czasStop - czasStart;

Dokładność 0.001s.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
(07-09-2018, 14:38)Robson Kerman napisał(a): Dokładność 0.001s.

Rozdzielczość administratorze, rozdzielczość. I raczej nie 1ms w Arduinio, bo są tam milisekundy "przestępne" i faktyczna rozdzielczość jest mniejsza.
Ogólnie pojęta dokładność będzie na poziomie 20..50ppm, ogólnie, bo jest dokładność krótko i długoterminowa. Jaka interesuje kolegę Mick_SQ6IYV? Czy potrzebna większa np 2ppm? Bez tego nie można odpowiedzieć, czy potrzebny będzie zewnętrzny układ, np precyzyjny RTC.. A może trzeba bardzo dużej dokładności np 100bpm lub więcej?
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0  , Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP, BASIC C-64

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#6
Super, już jakaś podpowiedźSmile Nadal jednak nurtują mnie dwie kwestie:

1. Potrzebuję używać do obu celów zegara RTC czy nie? Oba projekty to szeroko pojęte minutniki, zegary do mierzenia czasu (pomiędzy dwoma zdarzeniami).

2. Komendy, o których mówi Robson Kerman, są elementami biblioteki standardowej czy innej (jeśli tak, to jakiej)?
Rób to, co kochasz i kochaj to, co robisz! VY 73 Smile
 
Odpowiedź
#7
Ten przykład z millis() jest w standardowych przykładach już wbudowanych w IDE Arduino i nie wymaga żadnego dodatkowego elementu czy biblioteki: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay . Podobną funkcją dla us jest micros().
Jakie książki masz, że nie jest to opisane? Chyba, że tylko je masz, przeczytałeś?
 
Odpowiedź
#8
(07-09-2018, 15:31)Mick_SQ6IYV napisał(a): 1. Potrzebuję używać do obu celów zegara RTC czy nie?

Szklana kula mi się zepsuła, napisz w końcu jakiej dokładności oczekujesz. 20..50ppm? 2ppm? 1ppm? 100bpm?
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0  , Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP, BASIC C-64

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#9
1. es2 - W projekcie 1 dokładność na poziomie 0,01 sekundy. W drugim projekcie dokładność na poziomie 1 sekundy. To będą najmniejsze wartości, jakie będą mierzone i wyświetlane.

2. Kaczkat - Przyznam się "bez bicia", że nie do końca je czytałem. Może też dla tego, że mam pomysł jak poprawić w pracy jedną rzecz za pomocą Arduino. Chciałem więc od razu zająć się tym projektem. Zajrzałem do książek trochę pobieżnie, gdyż zabrakło mi w indeksie i spisie treści nie widziałem konkretnego hasła "POMIAR CZASU" lub czegoś podobnego. Mam następujące książki:

1. BOXALL JOHN - Arduino. 65 praktycznych projektow
2. MASSIMO BANZI - Wprowadzenie do Arduino
3. Tytułu i autora nie pamiętam... Wink
Rób to, co kochasz i kochaj to, co robisz! VY 73 Smile
 
Odpowiedź
#10
(07-09-2018, 15:24)es2 napisał(a): Rozdzielczość administratorze, rozdzielczość.

Moderatorze, a nie administratorze.
Ja tu tylko pilnuję, abyście nie używali mowy nienawiści, i nie dyskutowali nie na temat.

A co się tyczy tematu, to pewnie przejęzyczenie, pisałem w pracy pod presją opierniczu od szefostwa.
Faktycznie chodziło o rozdzielczość. Przepraszam, że wprowadzam w błąd.

Możesz kolego Mick_SQ6IYV napisać, między jakimi zdarzeniami ma być mierzony czas?
Wewnętrznymi, czyli w programie, czy może coś z zewnątrz będzie informowało sprzęt, na przykład zmianą poziomu na pinie?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości