Jste zde

Programovateľný - dvojitý generátor pravouhlích impulzov s meniteľnou striedou. (VERZIA 2.)

Obr.3.JPG

Po verzii 1 som sa rozhodol pre verziu 2, bez nutnosti programovať frekvencie cez PC. Priviedlo ma k tomu zistenie, že zmenou MS OFICCE,  EXCELovsky program nie je úplne funkčný a bolo ho treba prerobiť. Neviem, či s každou novou verziou MS Office, by som musel prerábať program, ale keďže som zohnal aritmetiku v pohyblivej rádovej čiarke pre AVR, rozhodol som sa pre toto riešenie. V generátore verzii 2 vypočítava konštanty pre výpočet frekvencie, ako aj frekvenciu, samotný procesor (Atmega162), čím nie je potrebne PC. A tak miesto obvodu sériového portu MAX232 je použitá klávesnica 4x4 na zadávanie hodnôt a ovládanie generátora a zobrazovač LCD displej 2x16 znakov. 

Původní zapojení

Popis generátora:

Princíp je presne ten istý ako verzia 1, preto ho nebudem popisovať. V ďalšom sa budem venovať len ovládaniu. Schéma zapojenia je na obr.1.


Obr. 1 - Schéma zapojenia
 

Ako je vidieť, je pridaný presný 8MHz generátor pre taktovaciu frekvenciu procesora, čím sú vypočítané frekvencie veľmi presné. Plošný spoj som navrhol tak, aby si ho ľahko mohol vyrobiť aj amatér. Je jednostranný, so 4 prepojmi. Je na obr.2. Procesor sa nachádza pod displejom. Schéma aj plošný spoj sú navrhnuté v EAGLE editor 5.10.0.


Obr2. Plošný spoj
 

Generátor som zostrojil na univerzálnom plošnom spoji (viď obr.3)


Obr. 3
 

Ovládanie generátora:

Pri zapnutí generátora sa ozve zvukový signál a vypíše sa verzia:

"Generátor impulz"
"Fi.TZ verzia 2.0"

Po 2 sekundách sa zobrazí Fv1=1,000kHz a v druhom riadku St1=50%, viď. Obr.3 (nastavenie po zapnutí je pre frekvenciu Fv1=1.000kHz, St1=50% a Fv3=100Hz, St3=50%). Prepínanie medzi zobrazením Fv1 a Fv3 sa prevádza tlačítkom ENT (enter). Neoznačené tlačítko vľavo od nuly je desatinná bodka (pre zadávanie frekvencie menšej ako 0, min. frekvencia je 0,12Hz), vpravo od nuly je zníženie striedy a zvýšenie striedy. Tlačítkami CNL + číslo 0-9 uloží nastavenú frekvenciu do EEPROM (možno uložiť až 10 frekvencíí Fv1 a 10 frekvencíí Fv3). Vytiahnuť uloženú frekvenciu sa dá tlačítkami vľavo od nuly desatinná bodka + číslo 0-9. Tlačítko CLR (clear) ruší predchádzajúcu udalosť.

Nastavenie požadovanej frekvencie: Keď je na displeji zobrazenie Fv1 a St1, stlačením čísla 1 môžeme zadať najprv frekvenciu a po potvrdení ENT striedu. Opäť to potvrdíme tlačítkom ENT a procesor začne počítať. V hornom riadku sa zobrazí Fzad=500 (keď sme zadali 500Hz) a po vypočítaní sa v druhom riadku zobrazí vypočítaná frekvencia Fvyp=500.0. Po cca. 2s sa na displeji objaví v prvom riadku Fv1 a v druhom St1. Teraz sa môžeme tlačítkom ENT prepnúť do zobrazenia Fv3 a St3 a stlačením čísla 3 zadať požadovanú frekvenciu Fv3 a striedu St3 (viď.obr.4).
 


Obr. 4
 

Pozn1: Tú frekvenciu alebo striedu ktorú chceme meniť, musí zobrazovať displej.
Pozn2: frekvencie sa nemusia rovnať, vypočítaná frekvencia je najbližšia možná akú môže procesor spracovať. Napr. ak zadám 5265Hz, Fvyp bude 5263,1577Hz a na displeji sa po čase zobrazí Fv1=5,26kHz

 


 Obr. 5 - Zapojenie klávesnice

Zapojenie klávesnice:

Tu je vidieť, že pri stlačení klávesy 1 program detekuje 0, pri stlačení 2 ~ 4, 3 ~ 8, CLR ~ 12 atď. (porovnaj s obr.3) . Preto je potrebná prevodná tabuľka, ktorá je uložená v EEPROM od adresy 00. V mojom prípade, pre moju klávesnicu je:

Tab. klávesnice:
$eeprom
Data 1 , 4 , 7 , 46 , 2 , 5 , 8 , 0 , 3 , 6 , 9 , 11 , 12, 13 , 14 , 15 , 16

46 je ASCI kód desatinnej bodky, CLR=12, CNL=13, ENT=14
11 zníž striedu, 15 zvýš striedu.
16 je vtedy keď nie je stlačený kláves.

Kde program „test klávesnice“ identifikuje 0, je v skutočnosti stlačený kláves 1, preto na nultej pozícií v pamäti musí byť 1, kde identifikuje 1 je kláves 4, čiže na prvej pozícií v pamäti musí byť 4, ... kde identifikuje 7 je kláves 0, čiže na siedmej pozícií v pamäti musí byť 0 atď. Každý si musí spraviť tabuľku podľa svojej klávesnice a napáliť do EEPROM procesora.

Pozn: Aby sa klávesnica dala identifikovať, program obsahuje podprogram „Nastavenie klávesnice“. Vojdeme do neho tak, že port PINC.1 podržíme v 0 a zapneme generátor. Pri stlačení klávesy sa zobrazí jej kód. Po zistení kódov všetkých kláves vytvoríme tabulku klávesnice. Po šestnástich stlačeniach program skočí do programu „Generátor“.

Záver:

Generátor som postavil na univerzálnom plošnom spoji (obr.3). Pracuje bezchybne a s externým zdrojom taktovanej frekvencie sú vygenerované frekvencie veľmi presné. Samozrejme, komu na presnosti nezáleží, stačí nastaviť konfiguračné bity CKSEL na 0100 čo procesor nastaví na interný RC generátor a zdroj taktovanej frekvencie, alebo kryštál možno vynechať. Prípadným záujemcom môzem poslať HEX súbor

PřílohaVelikost
Image icon Obr.2.JPG53.84 KB
Image icon Obr.3.JPG29.56 KB
Image icon Obr.1.JPG52.11 KB
Image icon Obr.4.JPG9.45 KB
Image icon Obr.5.JPG10.64 KB

Komentáře

Hodilo by se mi to, je to praktický, jen bych tam spíš volil ovládání nějakým enkodérem a tlačítkem, než celou klávesnicí.... líp se tak nastavujou hodnoty a úplně v pohodě by stačila attinka.

A bude k dispozici i ten samotný program?

Děkuji

Vím, že jste v tomto případě nad věcí, ale udělat ve dvou článcích v nadpise hrubku, je dost na zamyšlenou ;-)

spíše by se mi líbilo zadávat střídu v absolutních hodnotách než v procentech. V praxi by to vypadalo takto: Zvolím výstupní frekvenci a podle její hodnoty by se střída zadávala v hodnotách s příslušnou automaticky zobrazovanou koncovkou (ms, us ...).
Ovládání bych asi v případě možnosti volil několika tlačítky s plus a mínus změnou. Klávesnice je v některých případech dost velká a někdy se musí kompletně složit dohromady neboť jako celek nebývá stále dostupná (nehledě na vnitřní zapojení)
Navrhuji vyřešit ukládání poslední nastavené hodnoty, protože po každém zapnutí generátoru bych musel opakovaně nastavovat požadované hodnoty.
A pokud se týká konstrukce, mohu nabídnout plnou spolupráci - návrh a výroba DPS a cílové konstrukční řešení
Jinak se mi to líbí a měl bych zájem o sw...

Nepleťte pojmy... To co vy chcete je ručně nastavovat dobu zapnutí a dobu vypnutí v jednotkách času. Střída je ale poměr doby zapnutí a vypnutí a tak je bezrozměrná (1:1, 1:2, 3:5 atd). Je to jen číslo. V procentech se zadává zatěžovatel vynásobený stovkou, který je v podstatě podobný, je to poměr doby zapnutí k periodě vynásobený stovkou. Pro různý aplikace se hodí po každý něco jiného, ale v 80% si myslím, že zadávání zatěžovatelem je nejvhodnější.