599.cz - Homepage 599.cz - Homepage Memorial OK1WC Optimalizováno pro web... Myši umírají v pastích, protože nechápou, proč je ten sýr zdarma.
     Dnes: 19. 04. 2026    spaceweather.com Bouřky v Česku v novém okně Bouřky v Evropě v novém okně Contest calendar WA7BNM v novém okně RSS summary of the last 7 articles    
O   Hlavní menu

 [-] Hlavní stránka

 [-] Zajímavé odkazy

 [-] Download

 [-] Zasílání novinek


O   Seznam rubrik


time.is in new window


O   VOACAP KV Online

O   VOACAP pro CB
Šíření na CB

O   Počasí v Holicích
JO70XC


PHPRS fórum

Z důvodu zneužívání ke spamování, byla zpětná vazba zrušena

<a1>technika, bastleni</a1>

Zpět Stupnice (čítač kmitočtu) s AVR64DD32

Vydáno dne 31. 03. 2026 (248 přečtení)

Citac_AVR64DD32

V minulém článku jsem zveřejnil podklady pro výrobu zkušební destičky pro jednočip AVR64DD32. Poté, so jsem se ním zběžně seznámil mne napadlo, že bych mohl zkusit vyrobit s ním čítač kmitočtu. To je taková celkem běžná a populární věc, která se dá s jednočipy udělat. Mám zkušenost, že člověka nejlépe donutí něco se naučit, když se pokusí něco konkrétního vyrobit. (A ještě lépe to člověk pochopí, když se to pak pokusí někomu vysvětlit.)



Čítač kmitočtu byla první věc kterou jsem zruba před dvaceti lety s jednočipy Atmel AVR stavěl. Tenkrát nejdřív s AT90S2313, který jsem vzápětí vyměnil za Attiny2313. Potom později Atmega48, který má i AD převodník, takže bylo možné také měřit i napájecí napětí. A potom, mnohem později s SMD verzí Atmega328P(B) s různými OLED (I2C) displeji (SPI).

Obvyklá poznámka:

Články, které zveřejňuji na tomto webu, včetně tohoto, rozhodně nejsou míněny jako detailní návod na stavbu čehokoliv, i když to tak někdy může vypadat. Nabízím to spíše jako inspiraci, podnět k vlastním pokusům. Pokud vím, tak rád odpovím na dotazy, ale málokdy jsem schopen na dálku radit při oživování. Dále bych chtěl upozornit, že dokumentace poskytnutá ke stažení (DOWNLOAD) může obsahovat chyby.




Stručně o principu a nastavení jednočipu.

Je mi jasné, že následujících pár odstavců většina čtenářů přeskočí. Ono to na první pohled vypadá dost složitě. Ale když se do toho člověk trochu ponoří a zorientuje se v základních věcech, tak zjistí, že to zase taková věda není. Koneckonců, výrobci těch jednočipů mají snahu, aby se jejich součástky používaly (kupovaly), a tak musí být jejich nastavení co nejvíc srozumitelné. Většina lidí určitě nejsou géniové.

Nové řady jednočipů AVR obsahují úplně jiné typy čítačů, než ty staré.
Například tento AVR64DD32 obsahuje:

  • Jeden čítač TCA, 16 bitů
  • Tři čítače TCB, 16 bitů
  • Jeden čítač TCD, 12 bitů, asynchronní
  • Jeden čítač RTC, 16 bitů
Každý typ čítače má jiné možnosti a několik různých režimů nastavení. Mnoho věcí, které bylo dříve nutné dělat softwarově, jsou teď vyřešeny na úrovni hardware.

Asi ideální by bylo postavit měřič kmitočtu s asynchronním čítačem TCD. To, že je asynchronní znamená, že není závislý na hodinovém kmitočtu procesoru. Podle datasheetu je schopen pracovat do 48 MHz z interního PLL. Ale na internetu jsem našel informace, že funguje až přes 100 MHz ze vstupu XTALHF1. Bohužel TCD je docela složitý a zatím jsem jeho nastavení plně nepochopil. Tak snad někdy příště.

Ukázky jednotlivých prvků. Jsou to zkopírované obrázky z datasheetu.

       
TCB in Freq_measurement
Principle Event system
CCL one block
RTC block diagram
Čítač TCB v režimu
měření kmitočtu
Princip
Event systému
Jeden blok CCL Blokové schéma
čítače RTC
       

TCB0+TCB1 jako čítač kmitočtu

Proto jsem se rozhodl pro čítače TCB. Ty mají jeden z režimů nastavení přímo určený pro měření kmitočtu. Navíc se dají pomocí "Event systému" zřetězit. (Event System jsou v podstatě jakési sběrnice, na které lze připojit vstupy a výstupy interních periferií, takže je v podstatě přímo fyzicky propojíme.) Potom signál přerušení vyvolaný přetečením jednoho čítače funguje jako vstupní signál pro další čítač. Tím vlastně vytvoříme čítač s délkou 32 bitů. A to je již více než dostatečné pro čítání kmitočtů v řádu desítek MHz s rozlišením na 1Hz.

Nevýhodou je, že tyto čítače jsou synchronní, takže můžeme měřit teoreticky jen do poloviny kmitočtu procesoru. Pokud využiji nejvyšší možný kmitočet krystalu, tedy 24 MHz, mohl bych teoreticky měřit do 12 MHz. Prakticky je to o něco méně, tedy něco přes 10 MHz. Dost záleží na amplitudě a tvaru vstupního signálu.

CCL jako dělička dvěma nebo čtyřmi

Abychom mohli měřit výše, využil jsem další periferii těchto nových jednočipů, a to je CCL (Configurable Custom Logic). Jde o systém čtyř třívstupových logických hradel (s libovolně nastavitelnou pravdivostní tabulkou) a k nim přiřazených dvou sekvenčních logických obvodů J-K, nebo D. Jejich vstupy a výstupy se dají připojit na fyzické piny jednočipu, nebo interně mezi jiné pariferie. Pomocí CCL jsem tedy vytvořil dvě děličky dvěma. Tím získáme možnost vydělit vstupní kmitočet dvěma nebo čtyřmi, takže teoreticky můžeme měřit až 4 x 12 = 48 MHz.

Pro systém CCL nemá jazyk BASCOM-AVR, který já používám, zavedeny nějaké zjednodušující příkazy (něco jako "Config CCL"). Abych řekl pravdu, moc si neumím představit, jak by to vypadalo, jaká by mohla být syntaxe. Proto je potřeba to nakonfigurovat přímo zápisem do registrů podle jejich jmen. Tím pádem je tato část programu trochu nepřehledná. Pro pochopení je nutné najít si příslušnou kapitolu v pdf datasheetu.

Čítač RTC jako časová základna

Jako zdroj kmitočtu pro hradlování jsem použil čítač RTC. Jde o čítač primárně určený pro hodiny reálného času. Proto se často používá s nízkofrekvenčním hodinkovým krystalem 32,768 kHz. Já jsem využil možnosti připojit ho na taktovací kmitočet procesoru, v mém případě 24 MHz. Tento čítač má bohaté možnosti nastavení předděličky (20... 215, to znamená X/1... X/32768). Čítač je v základu 16 bitový, ale jeho periodu můžeme zkrátit na libovolnou hodnotu. Takže kombinací předděličky a zkrácení periody můžeme nastavit libovolný čas hradlování.

Pro čítač RTC má jazyk BASCOM-AVR konfigurační příkazy v případě, že ho použijeme pro reálný čas. Pak se automaticky vytvoří proměnné obsahující čas, datum, měsíc, den v týdnu a podobně. Když ho ale použijeme jako obecný čítač, musíme pro jeho nastavení opět použít zápis hodnot do registrů podle jejich jmen. Zde je to ale mnohem jednodušší, než v případě systému CCL (viz poznámka výše). Doufám, že v příští verzi BASCOM-AVR bude nějaký "Config RTC" doplněn.

Pokud vstupní kmitočet vydělíme čtyřmi a chtěli bychom měřit s rozlišením až na 1 Hz, musíme nastavit čas hradlování 4 sekundy. (V případě dělení dvěma jsou to 2 sekundy). To je docela dlouhá doba. Pro využití takového čítače třeba pro měření v dílně to až tak moc nevadí. Ale třeba jako stupnice rádia je to prakticky nepoužitelné. Proto jsem nakonec udělal možnost přepnout na rozlišení 10 Hz. V tom případě se čas měření 10x zkrátí. A stupnice KV rádia s rozlišením 10 Hz je docela v pohodě.

    Výsledkem je 6 různých režimů měření:
  • Bez děličky, rozlišení 1 Hz, čas měření 1x za sekundu, max 10,1 MHz
  • Bez děličky, rozlišení 10 Hz, čas měření 10x za sekundu, max 10,1 MHz
  • S děličkou 2, rozlišení 1 Hz, čas měření 1x za 2 sekundy, max 23,6 MHz
  • S děličkou 2, rozlišení 10 Hz, čas měření 5x za sekundu, max 23,6 MHz
  • S děličkou 4, rozlišení 1 Hz, čas měření 1x za 4 sekundy, max 47,5 MHz
  • S děličkou 4, rozlišení 10 Hz, čas měření 2,5x za sekundu, max 47,5 MHz

Protože není před vstupem do jednočipu žádný tvarovací obvod (pouze zesilovač), je maximální kmitočet dost závislý na amplitudě a tvaru vstupního signálu. Při řádném tvarování by se z toho asi dala ještě nějaká desetinka MHz navíc vymáčknout.




Praktické provedení:

     
Counter_AVR64DD32_Schema
Counter_AVR64DD32_PCB
Counter_AVR64DD32_SMD
Schéma DPS Osazeno SMD
     

Ukázky součástek připájených pomocí elektrické "plotýnky". Na to chci udělat samostatný článek a video.

     
Counter_AVR64DD32_MCU
Counter_AVR64DD32_V-reg
Counter_AVR64DD32_SMD+THT
Připájen TQFP32 Stabilizátor 5V Osazeno kompletně
     

Čítač kmitočtu mi spolehlivě fungoval na té zkušební desce. A protože ho na nic nepotřebuji, nebyl by ani důvod dělat na to speciálně plošný spoj. Jenomže já jsem si chtěl vyzkoušet nový způsob pájení SMD součástek a teď pro to byla dobrá příležitost.
(O tom, jak jsem to osadil a zapájel udělám asi samostatný článek.)

Nakreslil jsem na to plošný spoj stejné velikosti, jako je LCD displej 2x16 znaků s vývody v jedné řadě vlevo nahoře (při pohledu zepředu). Tyhle displeje lze koupit za pár korun třeba na Aliexpressu, ve všech možných barvách, negativní i pozitivní. Nechtěl jsem aby DPS nikde přečníval, a tak jsem i tlačítka umístil zezadu.

Napájení je možné přes 5V stabilizátor, nebo z USB portu zapojením jumperu P1 NEBO P2. Odběr závisí na proudu LED v LCD displeji. Mě to odebírá asi 20 mA, což je pro USB naprosto v pohodě. Pokud by některý LCD svítil málo, nebo moc, lze přiměřeně upravit hodnotu R9. Při testování na zkušební desce jsem to měl připojené přes USB-serial převodník do terminálu na PC, kde jsem také zobrazoval kmitočet. Na plošném spoji jsem to připravil na modul s CP2102, nebo přímo připájet CH340N. Pro ten je tam také místo na Mini-USB konektor. Pokud bychom tam dali jenom ten USB konektor, lze ho použít pro napájení.

Upozorňuji, že můžeme připájet buď integrovaný obvod CH340N a USB konektor, NEBO modul s obvodem CP2102. Jinak by mohly jít TX sériového portu proti sobě. Ostatně, USB konektor a modul by si fyzicky překážely.

Bohužel, při kreslení DPS jsem zrcadlově obrátil USB konektor. (Musel by se připájet ze spodní strany desky.) Na obrázcích a fotografiích je to tedy špatně, ale v Gerber souborech v DOWNLOAD sekci je to již opraveno. A když už jsem to překresloval, přidal jsem jeden kondenzátor paralelně ke kapacitnímu trimru, pro možnost jemnějšího nastavení kmitočtu 24 MHz.

    Různé režimy měření se přepínají zkratovacími jumpery na pinech 1 a 2 proti zemi. Na schématu jsou označeny P4.
    Po přepojení je potřeba reset (vypnout/zapnout napájení).
  • Vše rozpojené: Bez děličky
  • Zkratovaný pouze pin 1: Dělička dvěma
  • Zkratovaný pouze pin 2: Dělička čtyřmi
  • Rozlišení 1Hz/10Hz se přepíná za chodu tlačítkem BT2.
  • Tlačítkem BT1 se přepíná LED podsvětlení displeje.
Tři piny jednočipu vyvedené na jumper označený na schématu P3 nemají zatím žádné využití (Na PCB mají čísla 3, 4, a 8). Je možné si tam naprogramovat nějaké vstupy, výstupy, nebo tlačítka.

     
Counter assembled
freq counter assembled
freq counter working
Čítač kmitočtu
sestava
Čítač kmitočtu
sestava
Čítač kmitočtu
v provozu
     

Jak už jsem napsal, jako zobrazovač jsem použil běžný LCD displej 2x16 znaků. A jelikož mám na jednočipu dost volných pinů, připojil jsem ho klasicky, se čtyřmi datovými piny, E, RS a tranzistorem který spíná podsvětlující LED. (Na zkušební desce jsem měl LCD přes I2C). Další volné piny jednočipu jsem vyvedl na propojovací hřebínkový konektor a na dvě tlačítka. Když jsem to kreslil, ještě jsem si nebyl jistý, na co je využiji.

Pro zvýšení citlivosti jsem udělal jednoduchý zesilovač s BFR93A v smd pouzdře SOT23 a emitorový sledovač na vstupu s J-Fetem MMBFJ309 také v pouzdře SOT23. (V podstatě jsem okopíroval zesilovač z čítače od M.Zajíce). Vynechal jsem tvarování signálu nějakými hradly. S nimi by to určitě chodilo o trochu lépe. Jako vazební kondenzátory jsou tam na desce vždycky 2 kusy paralelně. Pokud dáme jen jeden kondenzátor 10nF, chodí to asi od 50 kHz. Pro nižší kmitočty je potřeba přidat nějaké větší kapacity.

Kapacity u krystalu 24 MHz je potřeba vyzkoušet. Abych dosáhl přesně 24 MHz, mám tam trimr 5-20pF a na druhé straně pevný kondenzátor 47pF. Ty hodnoty jsou docela veliké, hlavně těch 47pF. Při jiném krystalu (jiné provedení, jiný výrobce) budou ty kapacity zřejmě trochu jiné. Asi by to chtělo, aby byly obě kapacity přibližně stejné. Výstup oscilátoru z jednočipu pro možnost měření je vyveden na pin CLK-OUT.
Přesnost a hlavně stabilita je dána tím krystalem 24 MHz. Je jasné, že to na nějaké extra přesné měření není. Ale myslím, že pro bastlení na krátkých vlnách, nebo jako stupnice KV rádia by to mohlo stačit.

Firmware, naprogramování

Firmware jsem vytvořil v poslední verzi BASCOM-AVR (2.08.7) s dokoupeným doplňkem pro nové jednočipy AVR. Kromě definičního souboru pro AVR64DD32 nejsou použity žádné další knihovny. Zdrojový kód nelze zkompilovat v DEMO verzi, ani zkompilovaný hex nahrát do jednočipu.

Nicméně, hotový Hex, nebo Bin soubor se dá nahrát do jednočipu pomocí jiného programátoru, například AVR-DUDE, nebo v grafickém prostředí AVRDUDESS, třeba pomocí Serial-UPDI (viz obrázky níže), což je v podstatě jednoduchý USB-serial převodník, zvnějšku doplněný o jeden rezistor.

V konfiguračních bitech jednočipu není potřeba nic měnit/nastavovat.

     
USB-Serial CP2102
Serial-UPDI
Serial-UPDI
USB-Serial
Silabs CP2102
Serial - UPDI
schéma
Serial - UPDI
praktické provedení
rezistor je zespod
     

Binární soubor zabírá ve flash paměti jednočipu asi 3kB, což je něco přes 4%. SRAM paměť je využita asi na 1%. Naprosto bez problémů bychom mohli použít ten jednočip z řady s nejmenší pamětí, ale jeho cena je nižší přibližně o 1,-Kč. V čase psaní článku stojí AVR64DD32 například v TME.eu 29,69 Kč bez DPH, v ECOM.cz stojí 43,45 Kč, při více kusech cena klesá.

Do sekce DOWNLOAD jsem uložil Gerber soubory pro výrobu plošného spoje. Je tam ke stažení také zdrojový kód programu v jazyce BASCOM-AVR. (Jestě jednou upozorňuji, že bez placené verze BASCOM ho nelze zkompilovat.) Dále jsou tam zkompilované soubory Hex a Bin (oba obsahují to samé, jen v jiné formě). Vše je zabaleno v jednom zip souboru.

Jde ale v podstatě o testovací verzi, která se moc nehodí k praktickému použití. Opravdu jsem to dělal jen pro to, abych si to vyzkoušel. Nicméně, ten základ, tedy dělení a čítání kmitočtu je tam hotový. Takže pokud má někdo zájem, tak to ostatní (ovládání rádia, transceiveru, zobrazování stavů, atd...) si tam snadno dodělá.

Jarda, ok1hdu


   | Celý článek |      tisk clánku
 

Zpět (klikni)

O   R B N

O   kalendář
<<  Duben  >>
PoÚtStČtSoNe
  1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30    

O   Radary ČHMU

O   Zaparkováno na:

O   TSL certifikát:

PHP Scripting Language MariaDB Apache Web Server

Tento web site byl vytvořen prostřednictvím phpRS - redakčního systému napsaného v PHP jazyce.
Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
nebo registrovanými ochrannými známkami příslušných vlastníků.