počítání Arduinem generovaných impulsů na výstupu
počítání Arduinem generovaných impulsů na výstupu
Jak by jste řešili počítání impulsů na výstupu Arduina po dobu kdy bude zmáčknute tlačítko a současně zaznamenávali čas po který bylo tlačítko zmáčknuté?
Lze to vůbec klasickým Wiringem?
Mé zkušenosti jsou malé, ale předpokládám že nikoliv.
Jak by jste to řešily co nejednodušeji a jakými prostředky-funkcemi?
Konstrukce je jasná:
1. testuji ON a OFF tlačítka
2. po dobu kdy je ON generuji impulzy na výstupný pin
3. generované impulzy počítám
4. zaznamenávám čas od ON do OFF
Lze to vůbec klasickým Wiringem?
Mé zkušenosti jsou malé, ale předpokládám že nikoliv.
Jak by jste to řešily co nejednodušeji a jakými prostředky-funkcemi?
Konstrukce je jasná:
1. testuji ON a OFF tlačítka
2. po dobu kdy je ON generuji impulzy na výstupný pin
3. generované impulzy počítám
4. zaznamenávám čas od ON do OFF
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: počítání Arduinem generovaných impulsů na výstupu
Záleží na rozlišení, které ovšem nezmiňuješ. Když budu generovat pulzy v nějakém časovém intervalu, tak je nebudu počítat, protože budu vědět, kolik jsem jich vygeneroval. Je opravdu rozdíl, řešit 10 impulzů za minutu nebo 12 687impulzů za sekundu..
Re: počítání Arduinem generovaných impulsů na výstupu
je to skoro v tom rozsahu
počítejme někde kolem 1 Hz - 15 kHz
počítejme někde kolem 1 Hz - 15 kHz
Re: počítání Arduinem generovaných impulsů na výstupu
Tak teď ještě rozlišení jak říká jankop, jak přesně musí být pulzy časované. Další věc je zda chceš mít program čistě na tohle a nebo bude program krom generování a měření dělat ještě něco jiného. Chceš použít knihovny nebo se opravdu držet jen fcí v arduinu (ten čirý wiring)? Tyhle věci se dají udělat na tisíc způsobů. Na prasáka před digitalWrite a delay, zneužitím funkcí jako tone, knihovnami pro časování s přerušeními atd...
Re: počítání Arduinem generovaných impulsů na výstupu
Je mne jasné že čim níže k HW (strojáku) tím vše bude přesnější, ale take složitější...
Jde jenom o teoretickou úvahu jak by jste to řešili řekněme a s jakýmí vlastnostmi-neřestmi by to které řešeni bylo:
- pouze ve wiringu
- wiring s použitím knihoven
- třeba C a k tomu stroják
Ja si na hraní zatim zvolil 2. variantu s první knihovnou co mne přišla pod ruku konkrétně TimeOne a krmím tím krokáč ať vidím zda jede či ne.
Jde jenom o teoretickou úvahu jak by jste to řešili řekněme a s jakýmí vlastnostmi-neřestmi by to které řešeni bylo:
- pouze ve wiringu
- wiring s použitím knihoven
- třeba C a k tomu stroják
Ja si na hraní zatim zvolil 2. variantu s první knihovnou co mne přišla pod ruku konkrétně TimeOne a krmím tím krokáč ať vidím zda jede či ne.
Re: počítání Arduinem generovaných impulsů na výstupu
Záleží na tom, proč to vůbec chceš (a jak přesné to musí být).
15 kHz na 20MHz stroji je víc než 1.000 instrukcí / impulz.
člověk má reakční dobu docela pomalou (pod 0.1s se asi nedostaneš), takže pokud ti mačká tlačítka člověk, tak je to s přesností na 1.000 a víc pulzů.
Nicméně já bych na to šel tak, že bych si nastavil časovač na správnou frekvenci a pověsil interrupt na změnu toho pinu - tak bych měl přesný počet pulzů, interrupt zvládá v pohodě ( a netřeba se o něj moc starat), navíc klidně si tam dám bytovou proměnnou jako counter, když přeteče, zvednu další, která počítá násobky 256 (čili vyšší řády) a ušetřil spoustu času na počítání s dlouhýma číslama.
nastavil interrupt na tlačítko ON, při spuštění bych uložil čas, vynuloval counter(y), nastavil příznak běhu, spustil timer a tento interrupt disabloval a nastavill místo toho interrupt na tlačítko OFF.
interrupt tlačítka OFF by zastavil timer, shodil příznak běhu a přehodil interrupt na tlačítko ON.
Přesné výsledky, přehled o okamžitém stavu a loop() volná pro užitečnou činnost.
15 kHz na 20MHz stroji je víc než 1.000 instrukcí / impulz.
člověk má reakční dobu docela pomalou (pod 0.1s se asi nedostaneš), takže pokud ti mačká tlačítka člověk, tak je to s přesností na 1.000 a víc pulzů.
Nicméně já bych na to šel tak, že bych si nastavil časovač na správnou frekvenci a pověsil interrupt na změnu toho pinu - tak bych měl přesný počet pulzů, interrupt zvládá v pohodě ( a netřeba se o něj moc starat), navíc klidně si tam dám bytovou proměnnou jako counter, když přeteče, zvednu další, která počítá násobky 256 (čili vyšší řády) a ušetřil spoustu času na počítání s dlouhýma číslama.
nastavil interrupt na tlačítko ON, při spuštění bych uložil čas, vynuloval counter(y), nastavil příznak běhu, spustil timer a tento interrupt disabloval a nastavill místo toho interrupt na tlačítko OFF.
interrupt tlačítka OFF by zastavil timer, shodil příznak běhu a přehodil interrupt na tlačítko ON.
Přesné výsledky, přehled o okamžitém stavu a loop() volná pro užitečnou činnost.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů