<< Zpět

 

  Česky: , English:

FreqGen

Frekvenční generátor funkcí s procesorem ATmega8 (1 Hz až 8 MHz)

Vybavení procesoru ATmega8 přímo svádí k postavení jednoduchého frekvenčního generátoru funkcí. Přestože kvalita výstupního signálu není nic světového (sinusovka je zarušena PWM regulací a generátor nemá nastavitelnou úroveň napětí), vzhledem k jednoduchosti zapojení je užitná hodnota takového generátoru velká.

Pozn.: Obrázky na stránce uvedené zvětšíte kliknutím

Vlastnosti generátoru

Popis generátoru

První generátor, Gen1, používá 16-bitový časovač Timer1 a jeho výstup OC1A (pin PB1). Druhý generátor, Gen2, používá 8-bitový časovač Timer2, s výstupem OC2 (PB3).

Obdélníkový výstup je zajištěn jednoduchým přepínáním stavu výstupního pinu LOW a HIGH, s využitím předděličky a děličky. Druhý generátor Gen2 navíc využívá ještě softwarové dělení pomocí přerušení (výstup není přepínán čítačem, ale během přerušení). Díky tomu jsou vlastnosti druhého (8-bitového) generátoru srovnatelné s prvním (16-bitovým) generátorem. Naproti tomu první generátor Gen1 umožňuje navíc použít rychlý mód, kdy se výstup přepíná uprostřed i na konci čítání (střída v tomto případě nemusí být 1:1) a díky tomu může vygenerovat více frekvencí ve vysokých kmitočtech. Obdélníkový výstup se z generátorů odebírá ze zdířek označených obdélníkem.

Při generování tvarových kmitů se využívá PWM regulace s frekvencí nosné 62,5 kHz (u generátoru šumu 31,25 kHz) a s rozlišením úrovně 8 bitů. Na výstupu generátoru je připojen jednoduchý RC filtr. Odfiltrování nosné není dostatečné (z důvodu aby se moc nepotlačil i užitečný signál při vyšších frekvencích), ale asi by stálo za úvahu doplnění filtru vyššího řádu. Signály tvarových kmitů se z generátoru odebírají ze zdířek označených vlnovkou. Oba typy výstupů se liší pouze oddělením RC filtrem.

Generátor se napájí ze střídavého zdroje 9V, přes vnitřní usměrňovač a stabilizátor, ale to jen proto, že jsem měl takové zdroje ze starých modemů. Samozřejmě lze nahradit napájením +5V přes USB konektor z USB nabíječky (odpadl by usměrňovač a stabilizátor), což jsou dnes obvyklejší zdroje.

Použití generátoru

Pomocí tlačítek Mode (platí pro oba generátory, Gen1 i Gen2) přepínáte mód generátoru. Tlačítka Down a Up mění frekvenci. Podržením tlačítka se frekvence rychle přepíná. Obdélníkový signál se doporučuje odebírat z výstupu označeného obdélníkem, ostatní tvarové kmity se odebírají z výstupu s vlnovkou (tyto výstupy obsahují RC filtr pro vyhlazení PWM nosné).

Průběh obdélníkového signálu - při vyšších frekvencích již mohou být zaoblené hrany.

Průběh sinusového signálu. Signál je generovaný PWM pulzní modulací a proto může být v signálu zřetelná nosná frekvence PWM 62,5 kHz (na obrázku "zoubkování"). Při poslechu se tato nosná frekvence projeví jako interferenční rušení. Dalo by se zlepšit použitím RC filtru vyššího řádu.

Hnědý šum (obsahuje nízké kmitočty):

Růžový šum (obsahuje nízké a střední kmitočty):

Bílý šum (obsahuje nízké, střední i vysoké kmitočty):

U šumu je potřeba pamatovat na to, že je generovaný PWM pulzní modulací s frekvencí nosné 31,25 kHz a rozlišením 8 bitů - rozložení spektra ve spektrálním analyzátoru nebude úplně rovnoměrné, obzvláště u vyšších frekvencí může být deformované.

Schéma zapojení

Ve schématu jsem sice použil ATmega8L, který je určen pro nízká napětí a nízké frekvence, ale i na 5V s 16 MHz pracoval v pořádku. Generátor se napájí ze střídavého zdroje 9V s usměrňovacím můstkem a stabilizátorem. Stabilizátor vyžaduje chlazení. Vhodnější by bylo změnit napájení na USB konektor bez stabilizátoru a napájet generátor z běžné USB nabíječky. Výstupy z generátorů (OC1A a OC2) jsou vedeny před jednoduchý RC filtr (dolní propust). I přes to je nutné počítat se zarušením signálu nosným kmitočtem PWM regulace (62,5 kHz resp. 31,25 kHz).

K procesoru je připojen dvouřádkový LCD displej (2x16 znaků), pracující ve 4-bitovém módu. LCD dvouřádkové displeje bývají po elektrické stránce kompatibilní (obvykle se dodržuje kompatibilita s řadičem Hitachi HD44780), rozdíly však bývají s rozložením pinů. Proto pozor u jiných displejů - je možné, že budete mít proti schématu jinak piny 15 a 16 (prohozené LED- a LED+)!

Klikněte na obrázek pro zvětšení...

Plošný spoj a osazení

Plošný spoj je navržen jako jednostranný, s několika drátovými propojkami. Uvádím zde i horní stranu, pro případ oboustranného spoje, ale stačí ji nahradit drátovými propojkami.

K napájení je zvolen střídavý zdroj 9V (ze starého modemu), můstkový usměrňovač a stabilizátor 7805. Stabilizátor vyžaduje chladič. Aby se vešel pod displej, musel jsem žebra chladiče ohnout. Pokud použijete napájení z USB konektoru (z USB nabíječky +5V), odpadne potřeba usměrňovače a chladiče.

Do displeje je přiletována řada pinů a je zasouvací do konektoru v plošném spoji. Řešení s konektorem velmi doporučuji, raději než propojení drátovým kabelem - mnohem snáze se s tím manipuluje a displeje můžete snadno vyměňovat. Potíž můžete mít s výběrem displeje. Po elektrické stránce bývají displeje kompatibilní (řadič kompatibilní s Hitachi HD44780), ovšem může se lišit rozložení pinů. Displej, který jsem použil, rozložením pinů nejvíce odpovídá displeji WINSTAR WH1602A-YGH-ET - což znamená: piny se nachází vlevo dole, v pořadí 14 (=DB7) ... 1 (=Vss), 16 (=K LED-), 15 (=A LED+). Můžete sice použít jiný displej (může i vyjít levněji), ale může být potřeba změnit piny na plošném spoji, jako např. pořadí pinů otočit a přesunout nahoru.

Před sestavením si zkontrolujte, jak vám elektronika vyjde do krabičky na výšku. Použil jsem krabičku podobnou krabičce KM78, jen je o pár milimetrů vyšší. Možná budete muset šetřit s výškou konektoru pro LCD displej (zvolit nižší konektor) a zvážit, zda se vám tam vejde případný chladič stabilizátoru a napájecí konektor (příp. víko krabičky podložit, aby se vytvořil větší prostor).

Doporučuji nejdříve přiletovat napájecí obvody a zkontrolovat napájecí napětí. Po naletování ostatních součástek se chyby napájení už špatně hledají nebo dokonce může dojít k poškození některých obvodů.

Spodní strana (strana spojů):

Horní strana (strana součástek, stačí nahradit drátovými propojkami):

Potisk strany součástek:

Osazení součástek:

Potisk krabičky (vytiskl jsem na inkoustové tiskárně):

Plošný spoj je přišroubován ke dnu krabičky (lze použít KM78, ale může být potřeba použít nižší konektor pro LCD (precizní dutinky), nižší chladič stabilizátoru a nižší napájecí konektor). Dole je spoj připevněn 2 šroubky M3, nahoře 2 sloupky M3.

Displej je upevněn na dolní straně konektorem a na horní straně šrouby ke sloupkům. Horní díry v displeji může být potřeba trochu rozšířit pilníkem, aby se do nich vešly šrouby M3.

V zadní stěně krabičky jsou vyvrtány díry pro 6 tlačítek a napájecí konektor.

Do víka krabičky je upevněno 5 banánkových zdířek a vyřezán otvor pro displej.

Na horní stranu krabičky jsem přilepil popisky a přelepil izolepou proti otěru.

Naprogramování a oživení

Kód k naprogramování procesoru ve formátu HEX nebo BIN naleznete v balíku zdrojových souborů.

Důležité - bohužel se celý kód procesoru nevešel do paměti ROM. Některé tabulky (konkrétně tabulky pro Mód 2 - Integer Square) musely být umístěny do EEPROM. Kromě ROM je tedy nutné naprogramovat i obsah EEPROM paměti. V překladu pomocí MAKEFILE je nastaveno umístění sekce EEPROM na adresu 0x810000, což je standardní nastavení očekávané i běžnými programovacími nástroji. Znáte-li adresu EEPROM používanou vaším programovacím nástrojem, můžete ji změnit v souboru MAKEFILE v parametru "-Wl,--section-start=.eeprom=0x810000". Jinak můžete použít samostatné binární soubory: FreqGen_rom.bin je obsah paměti ROM bez EEPROM, FreqGen_eeprom.bin je obsah paměti EEPROM bez ROM a FreqGen.bin jsou paměti ROM a EEPROM bezprostředně za sebou následující (obsah ROM končí na adrese 0x2000).

Po naprogramování nastavte pojistky následujícím způsobem (konfigurace pro krystal 16 MHz):

low = 0xEF (11101111), high = 0xC9 (11001001).

Po připojení napájení by se měl rozsvítit displej následujícím způsobem:

Zkontrolujte, zda se naprogramoval i obsah EEPROM. Tlačítky Mode přepněte generátory na mód 2 (Integer Square). Není-li EEPROM správně naprogramovaná, uvidíte následující obsah displeje a zobazená frekvence nepůjde změnit:

Generátor můžete oživit pomocí sluchátek nebo reproduktorů. Připojte sluchátka a uslyšíte tón, který můžete měnit.

Budete-li chtít program upravovat, překládá se pomocí WinAvr 20100110 (avr-gcc 4.3.3). Instalátor lze stáhnout např. ze SourceForge https://sourceforge.net/projects/winavr/. Program se překládá povelovým souborem c.bat (=compile). Soubory Timer1_16M.c, Timer2_16M.c a Waves.c obsahují tabulky pro nastavení generátorů. Tabulky se generují programem FreqGen_Timers (program je překládaný ve Visual Studiu 2005) - pro případ že chcete použít jinou frekvenci krystalu. Ve vygenerovaných souborech je nutné provést pár úprav podle starých souborů - některé tabulky se označují jako EEMEM (=vkládají se do EEPROM) a rozměry tabulek se udávají symbolickými konstantami.

Kalibrace

Při osazení běžným krystalem je dosažená přesnost frekvence při pokojové teplotě zhruba kolem 50 ppm (= odchylka 0,005%) - odchylka se objeví na předposlední číslici údaje. Přesnost krystalu můžeme zvýšit kalibrací o 1 řád. Kalibrace kmitočtu a času je činnost v domácích podmínkách nejsnáze dosažitelná, protože máme k dispozici přesný časový normál, např. prostřednictvím internetu.

Ke kalibraci krystalu frekvenčního generátoru lze použít program ClockTest. Po nahrátí programu do procesoru a zapnutí napájení se začne na displeji odpočítávat čas. V prvním řádku je uběhlý čas v sekundách, zaokrouhlený na celý počet minut. Za ním následuje odchylka od celé minuty, v sekundách (v rozsahu -30 .. +30 sekund). Tj. od 30. sekundy se zobrazí záporná odchylka, od celé minuty kladná odchylka. V druhém řádku se zobrazí vypočítaná frekvence procesoru, která by odpovídala aktuálnímu uběhlému času v celých minutách. Podle obrázku - pokud uběhly přesně 4 minuty a na displeji je údaj "240-7", znamená to, že procesor se zpozdil o 7 sekund, myslí si že uběhlo jen "240 - 7" sekund, frekvence krystalu by v tom případě byla 15534440 Hz.

Po určité době se odečte uběhlý čas indikovaný na displeji, a skutečně uběhlý čas. Opravená frekvence procesoru pak je F = F_CPU * čas_indikovaný / čas_skutečný. Opravená frekvence procesoru se zapíše do parametru F_CPU v MAKEFILE zdrojového kódu generátoru, upravený program se přeloží a zapíše do procesoru. Takto upravený generátor sice bude generovat stále stejné frekvence, ale na displeji se zobrazí správný údaj. Budeme tak z displeje vědět, že např. při generování frekvence 1 kHz je skutečná frekvence 1,000005 kHz.

Jinou možností je oprava rychlosti krystalu. Kmitá-li krystal vyšší frekvencí než je potřeba, je možné přiletováním kondenzátoru malé hodnoty (např. desítky pF) paralelně ke kondenzátoru C2 (tj. mezi vývod procesoru 7 a zem) frekvenci krystalu mírně snížit. Tak je možné upřesnit generovanou frekvenci.

Příklad použití:

Začínám kalibrační měření v 19:55:00. Kalibraci budu měřit 1 den. Druhý den odečítám údaj na displeji v 19:26:00, tj. za 84660 sekund. Na displeji je údaj 84660+5. To znamená - uběhlo 84660 sekund celých minut, ale procesor si myslí že je o 5 sekund více. Skutečná frekvence procesoru pak je: F = 16000000 * 84665 / 84660 = 16000945 Hz (stejná hodnota by se měla zobrazit i v druhém řádku displeje). Tuto hodnotu zapíši do proměnné F_CPU v makefile, přeložím a vypálím do procesoru. Generátor teď bude při generování signálu 1 kHz ukazovat přesnou hodnotu 1.000059 kHz. Nyní mohu zopakovat upřesňující měření s delším časem.

Pozn.: Je vhodné zvolit dobu měření takovou, aby odchylka činila několik sekund (aby nevznikla chyba nepřesností odečtu času) a přitom aby byla menší než 30 sekund (aby údaj celých minut na displeji souhlasil se skutečně uběhlým časem). Před kalibrací je vhodné ponechat přístroj několik minut zapnutý, aby se stabilizovaly vnitřní teploty. I příště, budete-li chtít přesný údaj na plný počet číslic, je vhodné nechat přístroj nejdříve stabilizovat, aby se dosáhly stejné teplotní podmínky jako při kalibraci. Samozřejmě kalibrace už nebude platná, budete-li generátor používat v mrazu nebo v horkém létě; generátor nemá teplotní stabilizaci.

Během kalibrace můžete využít programy ve složce "util". Program CLOCK.EXE je Windows program k zobrazení aktuálního času (Windows 10 sice také umí zobrazit čas se sekundami, ale není to okno které by zůstalo trvale na displeji). Program AboutTime je program pro synchronizaci času PC s přesným časovým serverem. Nejsou-li implicitní servery v provozu, lze využít servery tik.cesnet.cz a tak.cesnet.cz.

Po správné kalibraci by se měly údaje generátoru a měřiče lišit jen minimálně.

Nedostatky a opravy

Downloady

Zdrojové kódy FreqGen s firmware

Program Timers pro generování tabulek časovačů

Schéma zapojení v Eagle Free

Grafické podklady (schéma a plošný spoj)

Program ClockTest pro kalibraci krystalu

Kompletní download podkladů FreqGen (včetně www stránky)

Použité součástky

Výběr součástek byl uzpůsoben na prodejnu GM Electronics, kterou mám blízko. Displej jsem zde vybral takový, který svými piny odpovídá displeji, který jsem použil, tj. piny jsou vlevo dole. Se stejnou funkčností by měl jít použít i jiný displej (2 řádky po 16 znacích), který může být i levnější, ale může mít jiné rozložení pinů. Typicky mají mnohé displeje piny naopak vlevo nahoře, což bude znamenat nutnost upravit plošný spoj. Každopádně ještě vyzkoušejte zapojení LED diody pro osvícení pozadí (u mých displejů jsou piny obráceně než odpovídalo datasheetu).

Součet ceny za vše je 480 Kč (včetně krabičky, fotocuprextitu, dražšího displeje a dražšího konektoru).

Miroslav Němeček

<< Zpět