Tento frekventometr neboli čítač s AVR umožňuje měřit frekvence od 0,45 Hz až do 10 MHz a periodu od 0,1us až do 2,2s v 7
automaticky volených rozsazích. Údaj zobrazuje na sedmimístném LED displeji.
Základem je mikroprocesor IO1 - Atmel AVR ATmega88 / ATmega88A / ATmega88P / ATmega88PA, program ke stažení je níže.
Nastavení bitů je na obr. 2. Princip měření je jiný, než u předchozích dvou frekventometrů. Metoda prostého počítání pulzů po dobu přesně 1s,
použitá u předchozích dvou frekventometrů (Frekventometr I.,
Frekventometr II.), totiž neumožňuje měření na zlomky Hz. Proto jsem u tohoto měřidla
zvolil metodu, která je sice značně složitější, ale umožňuje měřit malé frekvence s rozlišením až na 0,000 001 Hz.
Frekventometr čeká na nejbližší náběžnou hranu, poté začne počítat impulzy a zároveň začne odměřovat čas.
Po cca 1s (tento čas není pro přesnost kritický) začne opět čekat na nejbližší náběžnou hranu. S touto hranou přestane počítat pulzy i měřit čas.
Přesnou frekvenci pak vypočte podle rovnice f = počet impulzů / naměřený čas.
Pokud je frekventometr přepnut na měření periody, vypočte ji podle rovnice T = naměřený čas / počet impulzů.
Poté se cyklus zase opakuje - frekventometr začne opět čekat na nejbližší náběžnou hranu, od které začne počítat pulzy a měřit čas.
Měřený signál vstupuje zároveň do vstupů ICP1 a T0, tedy do vstupu spouštění funkce Input Capture 1 (umožňuje
měření času) a zároveň do vstupu externího taktování čítače/časovače 0 (umožňuje počítání pulzů).
Při přetečení 8-bitového čítače 0 je inkrementován pár 8-bitových registrů, takže vznikne 24-bitový údaj o počtu pulzů.
Časovač/čítač 1 (16 bitový) také přetéká do dvojice 8-bitových registrů, takže vznikne 32-bitový údaj o čase (1 LSB = 50ns).
Při výpočtu frekvence je 24-bitový počet pulzů vynásoben 48-bitovou konstantou (2e13), vzniklé 72-bitové číslo pak vyděleno 32-bitovým údajem o čase.
Při výpočtu periody je 32-bitová informace o čase vynásobena 16-bitovou konstantou (50 000), vzniklé 48-bitové číslo pak vyděleno 24-bitovým údajem o počtu pulzů.
Vzniklá hodnota je v obou případech převedena do 13-ciferného dekadického (BCD) tvaru a před 6. cifru je umístěna desetinná tečka. Číslo je pak posunuto první
platnou cifrou na začátek displeje. Zobrazená frekvence je vždy v Hz, perioda v us. Automatická volba rozsahu mění pozici desetinné tečky,
není tedy třeba indikátor metrických předpon. Obnovovací frekvence je cca 1Hz (při měření velmi malých frekvencí v řádu jednotek Hz může být obnova pomalejší).
Katody displeje jsou připojeny na port D kromě PD4 a na PB4, anody na bity 0 až 5 portu C a na PB5.
Sedmimístný displej může být sestaven např. ze čtyř dvojmístných LD-D028UR-C (červené 7mm), LD-D036UR-C (červené 9mm) či LD-D036UPG-C
(zelené 9mm) s jednou cifrou nevyužitou. Všechny vyjmenované jsou typy s velmi vysokou svítivostí.
Vysocesvítivý displej umožňuje vynechat obvyklé tranzistory pro zesílení proudu. Displej je řízen multiplexně (maticově),
frekvence multiplexu je cca 99,649 Hz. Odpory R1 až R8 určují proud displeje a tím i jeho jas. Jsou zvoleny tak, aby
nebyl překročen maximální proud výstupu (40mA). Spínač S1 slouží k přepínání mezi měřením frekvence (rozepnut) a měřením periody (sepnut).
Půlperioda měřeného signálu musí být delší, než perioda krystalového oscilátoru (omezení dané architekturou AVR).
Při střídě 50% tedy lze měřit frekvence až do 10 MHz. Pokud je vstup čítače "ve vzduchu", může docházet k zobrazování
nesmyslných hodnot, protože vstupní impedance je vysoká. Zabránit tomu lze např. připojením odporu cca 100k mezi vstup a zem.
IO1 je taktován krystalem 20 MHz (jeho nejvyšší povolená frekvence). Přesnost měření závisí v podstatě jen na tomto krystalu a kondenzátorech C1 a C2.
Tyto kondenzátory lze pro přesné doladění nahradit kapacitními trimry. Obvod lze také upravit na externí zdroj taktování 20MHz. Změnu v zapojení
a nastavení konfiguračních bitů znázorňuje obr. 3. Frekventometr se napájí ze zdroje 4,5 - 5,5V.
Odběr při 5V je cca 15-40mA v závislosti od počtu svítících segmentů (většina odebíraného proudu připadá na LED displej).
Kondenzátor C3 umístěte co nejblíže k IO1.
Rozsahy měření frekvence:
Rozsah 1 ... 0,450 000 Hz - 9,999 999 Hz, rozlišení na 0,000 001 Hz.
Rozsah 2 ... 10,000 00 Hz - 99,999 99 Hz, rozlišení na 0,000 01 Hz.
Rozsah 3 ... 100,000 0 Hz - 999,999 9 Hz, rozlišení na 0,000 1 Hz.
Rozsah 4 ... 1 000,000 Hz - 9 999,999 Hz, rozlišení na 0,001 Hz.
Rozsah 5 ... 10 000,00 Hz - 99 999,99 Hz, rozlišení na 0,01 Hz.
Rozsah 6 ... 100 000,0 Hz - 999 999,9 Hz, rozlišení na 0,1 Hz.
Rozsah 7 ... 1 000 000 Hz - 9 999 999 Hz, rozlišení na 1 Hz.
Rozsahy měření periody:
Rozsah 1 ... 0,100 000 - 9,999 999 us, rozlišení na 0,000 001 us.
Rozsah 2 ... 10,000 00 - 99,999 99 us, rozlišení na 0,000 01 us.
Rozsah 3 ... 100,000 0 - 999,999 9 us, rozlišení na 0,000 1 us.
Rozsah 4 ... 1 000,000 - 9 999,999 us, rozlišení na 0,001 us.
Rozsah 5 ... 10 000,00 - 99 999,99 us, rozlišení na 0,01 us.
Rozsah 6 ... 100 000,0 - 999 999,9 us, rozlišení na 0,1 us.
Rozsah 7 ... 1 000 000 - 2 200 000 us, rozlišení na 1 us.
Celý program ke stažení:
zdrojový kód v assembleru (ASM)
přeložený v HEX souboru (2256 Bajtů)
Zapisování programu do AVR se podrobněji věnuji zde.