AVR DDS Funkcijų Generatorius

Kaip jau buvau minėjęs, kad darau DDS (Direct digital synthesizer) funkcijų generatorių.  Dariau jį pagal http://www.scienceprog.com . Tai nėra pats greičiausias ir geriausias F. Generatorius, bet vis kažkas.

Taigi jo galimybes:

  • 0 – 65355 Hz 1Hz žingsniu
  • Sinus, Square, Triangle, Saw Tooth, Rev. Saw Tooth, ECG, Noise.
  • Offset (formos poslinkis)
  • Amplitude (0v – 10v)
  • HS (High Speed) 1MHz, 2MHz, 4MHz, 8MHz

DDSFG

Nepaisant gan neblogų privalumų yra ir keli trūkumai:

  • Greičio trūkumas
  • Nėra galimybės keisti dažnio nesustabdžius generavimą
  • HS Dažnio keitimas mažesniais žingsniais nesustabdžius

Na aišku tuos trūkumas galima šiek tiek pamažint tobulinant Firmware. Dėl greičio nelabai bėra galimybės kur plėstis, nes vieno taško atvaizdavimui sunaudojamas visas procesoriaus greitis (10 clocks). Čia 10 clocks trunka su patikrinimu ar stabdyti generavima. Išmetus ta tikrinimą gautusi 9 clocks, ir taip galima gauti šiek tiek geresnę rezoliuciją, bet nebūtų galimybės “iššokt” iš generavimo algoritmo bevykdant generavima, nebent per interrupt kodą. Kadangi pabandymui naudojau ATmega8 tai negalėlaju panaudot nei External Interrupt nei USART interrupt. Todėl norint pakeisti dažnį tekdavo perkompiliuot kodą ir jį irašyti į atmegą.

avr dds

Kaip matosi DAC (skaitmeninis signalas verčiamas į analoginį) per R2R Ladder varžų tinklą. Todėl reikalingi visi 8 pinai (visas portas) O Atmega ir teturi tik vieną tokį pilną portą. Tai gan gražiai veikė tiesiai už DAC :

sin100hz

Paskubomis pradėjau braižyti PCB kur iš pradžių buvau sugalvojęs šiek tiek daugiau provalumų, kaip kad HS dažnio reguliavimas su POT. Pasipiešiau kaip daug maž viskas turėtu atrodyt kad galėčiau pagal kažką bražyt PCB, o tai gan svarbu norint turėt bent lašelį sistematiškumo:

DDS Front

Pagal tai bent jau galima įsivaizduoti kaip braižyti PCB. Taip ir buvo padaryta PCB neskaitant kelių pokyčių:

PCB

Kolkas viskas kaip ir gražu 🙂 Toliau sulituojamos detalės ir “jump’eriai” kurių nepavyko išvengt 🙂

HW

Tiek surinkus šiek tiek pakoregavau kodą, kad veiktų pagal mano pajungimą, nes tiek DAC tiek LCD buvo pajungti ant kitų portų. Taip pat LCD pašvietimas padarytas su valdymu iš atmegos. Surašius i atmegą pasirodė vaizdelis, vadinasi bent LCD veikia. Toliau pradėjau žiūrėti kaip DAC veikia. Bet pasirodo jis neveikia, o paleidus generavimą, LCD pradeda rodyti kažkokias šiukšles, tiesiog bėga taškiukai randomu. 🙂 Nors kode viskas paprastai define’inta kur LCD, kur DAC. Viskas pakeista gerai, bet vistiek gaunamos šiukšlės ekrane paleidus generavimą. Ir tik po kelių minučių kodo naršymo pastebejau, kad pagrindinis generavimo algoritmas turi “hardcoded” portą per kurį generuojama forma ir aišku, kad ten buvo palikęs tas portas ant kurio kabo mano LCD. Easy fix. Viskas generuojama gerai už DAC.

Prasidėjo sunkioji dalis. Kadangi visi potenciometrai kabo ant laidukų, LCD  irgi pakeltas gan aukštai ant savo lizdo tai norėjosi į kažka viska sudėt. Taip pradėjau daryti Front Panel:

Front

Matosi, kad teko išmest HS pot’ą, kadangi buvo išnaudoti visi ADC pinai ant kurių kabo LCD 🙁 Šiek tiek Black Mat dažo ir jau kitaip atrodo:

black_front

Toliau sukišau BNC lizdus. Su kuriais buvau šiek tiek pradėjęs galvot kaip bus su GND, kadangi korpusas plastikinis. Galvojau gal dėt porą poveržlių su liežuvėliais ir lituot laidukus. Bet kilo kita geresnė įdėja:

back

0.25mm PCB tiko labai gerai (dėkui Dariui a.k.a Nitro199). Sukišus viską (na beveik viską) į savo vietas, viskas kaip ir gerai atitiko. Toliau bėda kaip pačias plokštes sutvirtint tarpusavyje. Kadangi LCD plokštė stovi aukščiau, reikia kokių nors strypelių tarp plokščių, kad būtų galima jas susukt į kruvą. Vėl teko pafantazuot ir kažką pritaikyt iš to ką galima rast namie po ranka. Aišku yra pirkti tų strypelių elektronikos prekių parduotuvėse, bet man iki jų arčiausiai būtų 100Km (Klaipėdos Lemona). Tad tam puikiai tiko laidų sujungimo kaladėlės:

standoffs

Atsukus varžtelius ir iškarpius plastiką yra metaliniai strypeliai, kurių ilgis čia tiko kaip čia buvęs 🙂

standoffsB

Kai LCD su plokšte jau stovi gerai, reikia dar sugalvoti kaip visą šitą sumuštinį įtivirtint i priekinę panelę. Kadangi LCD skylę padariau, kad lystų gan kietai, tai beliko antrą plokštės pusę kažkaip sutvirtint, o ten stovi mygtukai. Tai vėl ta pati bėda dėl strypelių. Plius dar nenorėjau varžtų iš priekio. Taip sugalvojau, kad iš potenciometrų ašelių, kurios yra gan ilgos ir jas reik betkokiu atveju trumpint, tai nupjovus jas, išgręžus skylutes viename gale ir sudildžius iki reikiamo ilgio jas priklijavau su “superiukais” ir į skylutes susukau varžtelius 🙂

Kitas dalykas, kad sudėjus plokštes i panelę  vistiek nenorejau lituot laido nuo BNC GND į plokštės GND, tai vėl pasitarnavo 0.25mm PCB:

gnd

Na ir pagaliau viskas dėžutėje:

inside

Belieka jungt ir žiūreti kaip bendras vaizdas atrodo:

DDSFG

Viskas kaip ir nieko, bet kiek aš pravargau kol mygtukus prailginau 😀 Niekaip negalėjau rasti plastikinio strypelio, tai galiausiai jį ištraukiau iš TV antenos kabelio (rusiško juodo kabelio) ten jis plastikinis, šiek tiek minkštas, bet kadangi jų tereik tik po ~1,5cm ilgumo tai tiks. Priklijavau juos prie “tactile” mygtukų ir savo darba atlieka, bent jau nereik kaišiot kokį atsuktuvą, kad nuspaust mygtuką 🙂 Tai bendras mastelis atrodo taip:

setup

Reikėtų tik kokių užrašų ant jo, nes nesinaudojus gali būti ne įtin patogu naudotis.

Toliau fotos iš skopo:

Sine1k

Sine 1kHz

Sq1k

Square 1kHz

tr1k

Triangle 1kHz

sw1k

Saw 1kHz

rsw1k

Rev. Saw 1kHz

ECG1k

ECG 1kHz

Noise

Noise (Random)

60k

60kHz Square (analogine dalis biški grybauja)

s60k

60kHz Sine

hs8mdirect

8MHz Square (HS Output)

Bandymu metu bandžiau padaryti sweep funkciją, bet labai kenčia rezoliucija ir matosi junginėjimas. Tai nelabai tiko. Reikės gal pamėginti kada su spec. DDS čipuku kaip AD9850. Nes dabar visą tą sunkų darba atlieka Atmega po prakaitu 🙂 Jaučiu, kad jau pabodo skaityti, nes man pabodo rašyti 😀 Nors dar būtų apie ką, bet perdaug būtų išsiplėsta. Pagrinde šitas DDS yra kilęs iš http://www.myplace.nu taigi jei truksta informacijos užeikite ir ten pasiskaitinet 🙂 Tam kartui tiek.

Tags: , , , , , , ,

7 Responses to “AVR DDS Funkcijų Generatorius”

  1. Alis says:

    Sveikas,
    Galetum pasidalint kokius fuse bitus nustatei? Nes pats dariausi sita projekta, pasiskaiciavau fuse’us ir panasu, jog uzbrickinau savo atmega, nes raso, jog nebera signalo su valdikliu ir kompu 🙁

  2. admin says:

    Sveikas, dabar tiksliai nepamenu nustatymu.. bet kiek pamenu tai ten tik isorini crystal pastatai ir tiek 🙂

  3. scale aeree says:

    I used this device and I followed your instructions, but nothing happens between 65000 and 65355 Hz. I like this article, but please help me, thank you

  4. admin says:

    Hi, it works for me from 0 to 65535.

  5. Thank you, I made this project following your instructions and it works properly from 0 to 65535.
    I have to say a big thank to you

  6. Finally! Thank you for the article!

  7. 83Alysa says:

    Hi admin, i must say you have hi quality content here.
    Your website should go viral. You need initial traffic boost only.
    How to get it? Search for; Mertiso’s tips go viral

Leave a Reply

You can add images to your comment by clicking here.

Spam Protection by WP-SpamFree