آی سی AD9850 یک تولید کننده شکل موج سینوسی و مربعی با فرکانس متغیره که به صورت ماژول آماده توی بازار پیدا می شه. این آی سی در بهترین حالت می تونه فرکانس تا 125MHz که البته در فرکانسهای بالا ممکنه Duty Cycle 50 درصد نداشته باشه.

این ماژول یک DDS Synthesizer محسوب می شه و برای راه اندازی باید از یک میکروکنترلر استفاده بشه. اگه از آردوینو استفاده می کنین احتمالا کتابخونه آماده براش بتونین پیدا کنین. اما اگه خودتون بخواین برنامه میکرو بنویسین خیلی بعیده بتونین حداقل به زبان فارسی راهنمای مناسبی پیدا کنین. به همین علت راهنمای راه اندازی این ماژول به کمک میکروکنترلر AVR آماده شده و برنامه ش هم به زبان بیسیک تحت کامپایلر BASCOM توضیح داده شده.
بهترین راه برای راه اندازی این ماژول مراجعه به دیتاشیت و بعد مثال های موجود در اینترنته. طبق گفته دیتاشیت باید 5 بایت به ماژول فرستاده بشه. دو راه سریال و موازی برای برنامه ریزی این ماژول وجود داره که در اینجا مد سریال معرفی شده.
اول باید پایه D2 رو به زمین و D0 و D1 رو به vcc وصل کنید. بعد پایه RESET رو به مدت خیلی کوتاه high و بعد low کنید. بعد همین کار رو با پایه W_CLK و بعد با پایه FQ_UD انجام بدید. بعد باید کل 40 بیت داده رو به ترتیب روی پایه DATA قرار بدید. قالب این بیتها به این صورته:

W0 W1 W2 W3 W4 W5 ————- W28 W29 W30 W31 0 0 0 0 0 0 0 0

از بیت اول تا 32 مربوط به فرکانس دلخواه شماست و W0 بیت LSB شماست و اول فرستاده می شه. اول بیت مورد نظر رو تنظیم می کنید و بعد یه پالس روی پایه W_CLK بفرستید. محاسبه این 32 بیت طبق رابطه زیر انجام می شه:

Value = Frequency * 4 294 967 296 / 125 000 000

که فرکانس مورد نظرتون رو به جای Frequency قرار می دین و با تغییر مبنا یک عدد 32 بیتی به دست میارین که بیتهای اونو باید به ترتیب طبق روال بالا به آی سی بفرستین.
دو تا بیت بعدی کنترلی هستند و حتما باید 0 باشند. بقیه بیتها رو هم 0 قرار بدید و با همون روال قبل برای هر کدوم یه کلاک بفرستین. حالا یه پالس دیگه روی FQ_UD بفرستید و دیگه برنامه باید همین جا تموم شه. می تونید نتیجه سینوسی یا مربعی رو با اسکوپ مشاهده کنید.
برای اطمینان بیشتر بین قرار دادن هر بیت روی پین DATA و ارسال کلاک به W_CLK یه تاخیر کوچیک مثلا 10 میکرو ثانیه قرار داده شده.
قابل ذکره که اگه vcc ماژول رو برابر 5 ولت قرار بدید احتمالا دامنه خروجیتون بزرگتر خواهد بود. ولی 3.3 هم می تونید بهش وصل کنید.
برنامه نمونه رو می تونین در زیر مشاهده کنین:

'Project name: ad9850
	'Author: Karakit.ir
	$regfile = "m8adef.dat"
	$crystal = 8000000
	$hwstack = 64
	$swstack = 64
	$framesize = 64

	Config Portb = Output  
	'1: W_CLK   2: FQ_UD   3: DATA   4: RESET
	Clk Alias Portb.1
	Fq Alias Portb.2
	Dta Alias Portb.3
	Rst Alias Portb.4

	Config Watchdog = 512   
	'از واچ داگ برای ریست شدن میکرو در هر 512 
	'میلی ثانیه استفاده شده تا در صورت بروز هر اختلالی ماژول متوقف نشه

	Dim W(40) As Byte
	Dim I As Byte
	Dim V As Word

	Set Rst
	Waitus 1
	Reset Rst

	Set Clk
	Waitus 1
	Reset Clk

	Set Fq
	Waitus 1
	Reset Fq

	For I = 0 To 39	'ابتدا همه بیتها رو صفر می کنیم 
		W(i) = 0
	Next I

	W(24) = 1 		'حالا بیتهای مورد نیاز رو 1 می کنیم

	V = 0

	Start Watchdog

	Do		     	'حالا همه بیتها رو به ترتیب می فرستیم به ماژول 
		For I = 1 To 40
			If W(i) = 1 Then
				Set Dta
			Else
				Reset Dta
			End If
			Waitus 10
			Set Clk
			Waitus 1
			Reset Clk
		Next I

		Set Fq
		Waitus 1
		Reset Fq

		Do

		Loop

	Loop

	End

برای اینکه فرکانس دلخواه خودتون رو داشته باشین لازمه که بیتها رو مطابق با عددی که از رابطه بدست آوردین تنظیم کنین یا حتی براش یه تابع بنویسین. با اضافه کردن دکمه یا ولوم یا انکدر به مدار و تغییر برنامه هم می تونین یه DDS با فرکانس متغیر داشته باشین.
در صورتی که دامنه ولتاژ خروجی این DDS براتون کافی نیست و یا ممکنه بار جریان زیادی بکشه باید از یک مدار تقویت کننده استفاده کنین که در همین سایت معرفی شده.