- ڈی ڈی ایس فنکشن جنریٹر کیا ہے؟
- AD9833 فنکشن جنریٹر IC کی ورکنگ کو سمجھیں
- اجزاء کو AD9833 پر مبنی فنکشن جنریٹر بنانے کی ضرورت ہے
- AD9833 بیسڈ فنکشن جنریٹر - اسکیمیٹک ڈایاگرام
- AD9833 بیسڈ فنکشن جنریٹر - ارڈینو کوڈ
- AD9833 پر مبنی فنکشن جنریٹر کی جانچ ہو رہی ہے
- مزید افزودگی
اگر آپ مجھ جیسے الیکٹرانک شوق ہیں جو مختلف الیکٹرانک سرکٹس کے ساتھ گھومنا چاہتے ہیں تو ، کبھی کبھی معقول فنکشن جنریٹر رکھنا لازمی ہوجاتا ہے۔ لیکن ایک کا مالک ہونا ایک مسئلہ ہے کیونکہ اس طرح کے بنیادی سامان میں ایک خوش قسمتی کا خرچ آسکتا ہے۔ اپنے ٹیسٹ کے سامان کو تعمیر کرنا نہ صرف سستا ہے بلکہ اپنے علم کو بہتر بنانے کا ایک بہترین طریقہ ہے۔
لہذا اس مضمون میں ، ہم اردوینو اور AD9833 ڈی ڈی ایس فنکشن جنریٹر ماڈیول کے ساتھ ایک سادہ سگنل جنریٹر بنانے جارہے ہیں جو آؤٹ پٹ میں زیادہ سے زیادہ 12 میگاہرٹج تعدد کے ساتھ جیب ، مربع ، اور مثلث کی لہریں تیار کرسکتا ہے۔ اور آخر کار ، ہم اپنے آسکولوسکوپ کی مدد سے آؤٹ پٹ فریکوئنسی کی جانچ کرنے جارہے ہیں۔
اس سے پہلے ہم بنیادی ینالاگ سرکٹس کی مدد سے ایک سادہ سائن ویو جنریٹر ، ایک مربع لہر جنریٹر ، اور ایک مثلث لہر جنریٹر بنا چکے ہیں۔ اگر آپ کچھ بنیادی Waveform جنریٹر سرکٹس کی تلاش کر رہے ہیں تو آپ ان کو چیک کرسکتے ہیں۔ اس کے علاوہ ، اگر آپ AD9833 ماڈیول کا استعمال کیے بغیر ایک سستا اردوینو فنکشن جنریٹر بنانا چاہتے ہیں تو ، آپ DIY اردوینو واوفارم جنریٹر پروجیکٹ چیک کرسکتے ہیں۔
ڈی ڈی ایس فنکشن جنریٹر کیا ہے؟
جیسا کہ نام سے ظاہر ہوتا ہے ، فنکشن جنریٹر ایک ایسا آلہ ہے جو ترتیب کے وقت ایک مخصوص فریکوئینسی کے ساتھ ایک مخصوص ویو فارم کو آؤٹ پٹ کرسکتا ہے۔ مثال کے طور پر ، غور کریں کہ آپ کے پاس ایل سی فلٹر ہے جس کے ل you آپ اپنی آؤٹ پٹ فریکوینسی جواب کو جانچنا چاہتے ہیں ، آپ آسانی سے کسی فنکشن جنریٹر کی مدد سے یہ کام کرسکتے ہیں۔ آپ کو اپنی مطلوبہ آؤٹ پٹ فریکوئنسی اور موجوں کو مرتب کرنے کی ضرورت ہے ، تب آپ جواب کو جانچنے کے ل it اسے نیچے یا اوپر کرینک کر سکتے ہیں۔ یہ صرف ایک مثال تھی ، فہرست کے چلتے ہی آپ اس کے ساتھ مزید کام کرسکتے ہیں۔
ڈی ڈی ایس کا مطلب ڈائریکٹ ڈیجیٹل ترکیب ہے ۔ یہ ایک قسم کا طول موج جنریٹر ہے جو زمین سے سگنل بنانے کے لئے ڈیجیٹل ٹو اینالاگ کنورٹرز (ڈی اے سی) کا استعمال کرتا ہے۔ یہ طریقہ خاص طور پر ایک جیب کی لہر پیدا کرنے کے لئے استعمال کیا جاتا ہے۔ لیکن ہم جس آایسی کو استعمال کررہے ہیں وہ اسکوائر یا ٹرائنگولر لہر سگنل تیار کرسکتا ہے۔ ڈی ڈی ایس چپ کے اندر جو آپریشن ہوئے وہ ڈیجیٹل ہیں لہذا یہ فریکوینسی کو بہت تیزی سے بدل سکتا ہے یا یہ ایک سگنل سے دوسرے میں بہت تیزی سے سوئچ کرسکتا ہے۔ اس آلہ میں ایک فریکوئینسی اسپیکٹرم کے ساتھ عمدہ فریکوئنسی ریزولوشن ہے۔
AD9833 فنکشن جنریٹر IC کی ورکنگ کو سمجھیں
ہمارے پروجیکٹ کے مرکز میں AD9833 پروگرام ویوفورم جنریٹر آئی سی ہے جو ینالاگ آلات کے ذریعہ ڈیزائن اور تیار کیا گیا ہے۔ یہ ایک کم طاقت ، پروگرام لائق ویوفورم جنریٹر ہے جس میں 12 میگا ہرٹز کی زیادہ سے زیادہ تعدد کے ساتھ جیب ، سہ رخی اور مربع لہر پیدا کرنے کی صلاحیت رکھتی ہے ۔ یہ ایک بہت ہی منفرد آئی سی ہے جو صرف ایک سوفٹویئر پروگرام کے ذریعہ آؤٹ پٹ فریکوینسی اور مرحلے میں ردوبدل کرنے کی صلاحیت رکھتی ہے۔ اس میں 3 تار ایس پی آئی انٹرفیس ہے جس کی وجہ سے اس آئی سی سے بات چیت کرنا بہت آسان اور آسان ہوجاتا ہے۔ اس آایسی کا فعال بلاک ڈایاگرام نیچے دکھایا گیا ہے۔
اس آئی سی کا کام کرنا بہت آسان ہے۔ اگر ہم اوپر فنکشنل بلاک ڈایاگرام پر ایک نگاہ ڈالیں تو ، ہم مشاہدہ کریں گے کہ ہمارے پاس ایک فیز اکومیولیٹر ہے جس کا کام 0 سے 2π تک شروع ہو کر ، سائن لہر کی تمام ممکنہ ڈیجیٹل اقدار کو محفوظ کرنا ہے۔ اگلا ، ہمارے پاس SIN ROM ہے جس کا کام مرحلے کی معلومات کو تبدیل کرنا ہے جسے بعد میں طول و عرض میں براہ راست نقشہ بنایا جاسکتا ہے۔ SIN ROM ڈیجیٹل مرحلے کی معلومات کو تلاش کے ٹیبل پر بطور ایڈریس استعمال کرتا ہے اور مرحلے کی معلومات کو طول و عرض میں تبدیل کرتا ہے۔ اور آخر میں ، ہمارے پاس ینالاگ کنورٹر میں 10 بٹ ڈیجیٹل ہے جس کا کام SIN ROM سے ڈیجیٹل ڈیٹا وصول کرنا اور اسے اسی طرح کے مطابق وولٹیجز میں تبدیل کرنا ہے ، یہی نتیجہ ہم آؤٹ پٹ سے حاصل کرتے ہیں۔ آؤٹ پٹ پر ، ہمارے پاس سوئچ بھی ہے جو ہم تھوڑا سا سافٹ ویئر کوڈ کے ذریعے آن یا آف کرسکتے ہیں۔ اس بارے میں ہم بعد میں مضمون میں بات کریں گے۔آپ جو تفصیلات اوپر دیکھ رہے ہیں اس کا ایک بہت ہی نیچے کا ورژن ہے جو آئی سی کے اندر پیش آرہا ہے ، اور آپ جو اوپر کی تفصیل دیکھ رہے ہیں وہ بیشتر AD9833 ڈیٹا شیٹ سے لی گئی ہے ، آپ مزید معلومات کے لئے بھی چیک کرسکتے ہیں۔
اجزاء کو AD9833 پر مبنی فنکشن جنریٹر بنانے کی ضرورت ہے
AD9833 پر مبنی فنکشن جنریٹر بنانے کے ل to مطلوبہ اجزاء ذیل میں درج ہیں ، ہم نے اس سرکٹ کو بہت ہی عمومی اجزاء کے ساتھ ڈیزائن کیا ہے ، جس کی وجہ سے نقل کی عمل بہت آسان ہوجاتی ہے۔
- ارڈینو نینو - 1
- AD9833 ڈی ڈی ایس فنکشن جنریٹر - 1
- 128 X 64 OLED ڈسپلے - 1
- عام روٹری انکوڈر - 1
- ڈی سی بیرل جیک - 1
- LM7809 وولٹیج ریگولیٹر - 1
- 470uF کاپاکیٹر - 1
- 220uF کاپاکیٹر - 1
- 104pF کاپاکیسیٹر - 1
- 10K ریزسٹر - 6
- سپرش سوئچز - 4
- سکرو ٹرمینل 5.04 ملی میٹر - 1
- خواتین ہیڈر - 1
- 12V پاور ماخذ - 1
AD9833 بیسڈ فنکشن جنریٹر - اسکیمیٹک ڈایاگرام
AD9833 اور ارڈینو بیسڈ فنکشن جنریٹر کے لئے مکمل سرکٹ ڈایاگرام ذیل میں دکھایا گیا ہے۔
ہم اپنی مطلوبہ تعدد پیدا کرنے کیلئے AD9833 کو Ardino کے ساتھ استعمال کرنے جارہے ہیں ۔ اور اس حصے میں ، ہم اسکیمیٹک کی مدد سے تمام تفصیلات بیان کریں گے۔ میں آپ کو سرکٹ کے ساتھ کیا ہو رہا ہے اس کا ایک مختصر جائزہ دوں۔ آئیے AD9833 ماڈیول کے ساتھ شروع کریں. AD9833 ماڈیول فنکشن جنریٹر ماڈیول ہے اور یہ اسکیمیٹک کے مطابق آرڈینو کے ساتھ جڑا ہوا ہے۔ سرکٹ کو طاقت دینے کے ل we ، ہم ایل ایم 7809 وولٹیج ریگولیٹر آئی سی استعمال کررہے ہیں ، ایک مہذب ڈیکوپلنگ کیپسیٹر کے ساتھ ، یہ ضروری ہے کیونکہ سپلائی شور ناپسندیدہ آؤٹ پٹ کے نتیجے میں آؤٹ پٹ سگنل میں مداخلت کرسکتا ہے۔ ہمیشہ کی طرح ، اردوینو اس منصوبے کے لئے بطور دماغ کام کر رہا ہے۔ سیٹ فریکوئنسی اور دیگر قیمتی معلومات کو ظاہر کرنے کے لئے ، ہم نے ایک 128 X 64 OLED ڈسپلے ماڈیول منسلک کیا ہے۔ تعدد کی حد کو تبدیل کرنے کے ل change ، ہم تین سوئچ استعمال کر رہے ہیں۔ پہلا ایک فریکوئنسی کو ہرٹج میں متعین کرتا ہے ، دوسرا آؤٹ پٹ فریکوئینسی کو ہرٹج میں سیٹ کرتا ہے ، اور تیسرا ایک تعدد میگا ہرٹز پر سیٹ کرتا ہے ، ہمارے پاس ایک اور بٹن بھی ہے جو آؤٹ پٹ کو قابل یا غیر فعال کرنے کے لئے استعمال ہوسکتا ہے۔ آخر میں ، ہمارے پاس روٹری انکوڈر ہے ،اور ہمیں اس کے ساتھ کچھ پل اپ ریزٹر منسلک کرنا ہوگا بصورت دیگر وہ سوئچ کام نہیں کریں گے کیونکہ ہم پولنگ کے طریقہ کار پر بٹن پریس ایونٹ کو چیک کر رہے ہیں۔ روٹری انکوڈر تعدد کو تبدیل کرنے کے لئے استعمال ہوتا ہے اور سیٹ روٹی کو منتخب کرنے کے لئے روٹری انکوڈر کے اندر سپرش سوئچ استعمال ہوتا ہے۔
AD9833 بیسڈ فنکشن جنریٹر - ارڈینو کوڈ
اس منصوبے میں استعمال ہونے والا مکمل کوڈ اس صفحے کے نیچے پایا جاسکتا ہے۔ ضروری ہیڈر فائلوں اور سورس فائلوں کو شامل کرنے کے بعد ، آپ کو ارڈینو فائل کو براہ راست مرتب کرنے کے قابل ہونا چاہئے۔ آپ ذیل میں دیئے گئے لنک سے ad9833 ارڈینو لائبریری اور دیگر لائبریریوں کو ڈاؤن لوڈ کرسکتے ہیں ورنہ آپ لائبریری کو انسٹال کرنے کے لئے بورڈ منیجر کا طریقہ استعمال کرسکتے ہیں۔
- AD9833 لائبریری بل ولیمز کے ذریعہ ڈاؤن لوڈ کریں
- ایس ڈی ڈی1306 اولیڈ لائبریری اڈافروٹ کے ذریعہ ڈاؤن لوڈ کریں
- اڈفریٹ جی ایف ایکس لائبریری ڈاؤن لوڈ کریں
آئی این او میں کوڈ کی وضاحت ۔ فائل درج ذیل ہے۔ پہلے ، ہم تمام مطلوبہ لائبریریوں کو شامل کرکے شروع کرتے ہیں۔ AD9833 ڈی ڈی ایس ماڈیول کے لئے لائبریری پہلے OLED کیلئے لائبریری کے بعد ہے اور ہمارے کچھ حساب کتابوں کے لئے ریاضی کی لائبریری کی ضرورت ہے۔
# شامل کریں // AD9833 ماڈیول کے لئے لائبریری # شامل کریں
اگلا ، ہم بٹن ، سوئچ ، روٹری انکوڈر ، اور OLEDs کے لئے تمام ضروری ان پٹ اور آؤٹ پٹ پنوں کی وضاحت کرتے ہیں۔
# وضاحت SCREEN_WIDATA_PINH 128 // پکسلز میں OLED ڈسپلے کی چوڑائی # طے شدہ SCREEN_HEIGHT 64 // OLED ڈسپلے اونچائی ، پکسلز میں # تعیین SET_FREQUENCY_HZ A2 // پش بٹن Hz میں تعدد مرتب کرنے کے لئے # ڈفائن SE_FREQUENCY_KZZ فریکوینسی_جٹ A6 // پش بٹن میگاہرٹز میں تعدد متعین کرنے کے لئے # ڈیفائن ENABLE_DISABLE_OUTPUT_PIN A7 // پش بٹن #difine کو آؤٹ پٹ کو غیر فعال / غیر فعال کرنے کے لئے FNC_PIN 4 // AD9833 ماڈیول کے ذریعہ مطلوبہ # Fsync #DineDDine / DeDineINDDINKDDININ / انکوڈر کا ڈیٹا پن # ڈیفائن BTN_PIN 9 // انکوڈر پر اندرونی پش بٹن
اس کے بعد ، ہم تمام ضروری متغیرات کی وضاحت کرتے ہیں جو اس کوڈ میں مطلوب ہیں۔ پہلے ، ہم ایک عددی متغیر کاؤنٹر کی وضاحت کرتے ہیں جو روٹری انکوڈر ویلیو کو محفوظ کرے گا۔ اگلے دو متغیر کلاک پن اور کلاک پنسٹ اسٹیٹ میں پن مجسمہ اسٹور کیا گیا ہے جسے انکوڈر سمت کو سمجھنے کی ضرورت ہے۔ ہمارے پاس ایک ٹائم متغیر ہے جس میں موجودہ ٹائمر کاؤنٹر کی اقدار ہیں ، یہ متغیر بٹن دبانے کے لئے استعمال ہوتا ہے۔ اگلا ، ہمارے پاس ایک دستخط شدہ طویل متغیر ماڈیول فریکوئینسی ہے جس میں حسابی تعدد موجود ہے جو لاگو ہونے والی ہے۔ اگلا ، ہمارے پاس لانچ میں تاخیر ہے ۔ اس تاخیر کو ضرورت کے مطابق ایڈجسٹ کیا جاسکتا ہے۔ اگلا ، ہمارے پاس تین بولین متغیر سیٹ_فریکونسی_ ہرٹج ہیں ، ماڈیول کی موجودہ ترتیب کا تعین کرنے کے لئے یہ تینوں متغیر سیٹ_ فریکوئینسی_کھز ، اور سیٹ_ فریکوئینسی_ میگاہرٹز استعمال کیے جاتے ہیں۔ ہم اس کے بارے میں مزید تفصیل سے مضمون میں بعد میں بات کریں گے۔ اگلا ، ہمارے پاس متغیر ہے جو آؤٹ پٹ ویوفارم کی حیثیت رکھتا ہے ، ڈیفالٹ آؤٹ پٹ ویوفارم ایک سائن لہر ہے۔ اور آخر کار ، ہمارے پاس انکوڈر_بی ٹی این_کاؤنٹ متغیر ہے جس میں انکوڈر بٹن کا شمار ہوتا ہے جو آؤٹ پٹ ویوفورف سیٹ کرنے کے لئے استعمال ہوتا ہے۔
انٹ کاؤنٹر = 1؛ // اس کاؤنٹر کی قیمت میں اضافہ یا کمی آجائے گی جب جب روٹری انکوڈر کو کلاک پن میں تبدیل کیا جاتا ہے۔ // روٹری انکوڈر انٹ کلاک پنسٹیٹ کے ذریعہ استعمال کردہ پن کی حیثیت کے لئے پلیس ہولڈر؛ // روٹری انکوڈر کے ذریعہ استعمال کردہ پن کی حیثیت کے لئے پلیس ہولڈر بغیر دستخط شدہ = = 0؛ // دستخط کیے بغیر طویل ماڈیول فریکوئینسی کے لئے استعمال کیا جاتا ہے۔ // آؤٹ پٹ فریکوینسی لانگ ڈیبونس = 220 سیٹ کرنے کے لئے استعمال کیا جاتا ہے؛ // ڈیبونس میں تاخیر boln btn_state؛ // AD98333 ماڈیول بول سیٹ_فریکونسی_حز = 1 کے آؤٹ پٹ کو غیر فعال کرنے کے لئے استعمال کیا گیا۔ // AD9833 ماڈیول بول سیٹ_ فریکوئینسی_کھز کی ڈیفالٹ فریکوئنسی۔ بول سیٹ_ فریکوئینسی_محز؛ سٹرنگ ویو سلیک = "SIN"؛ // ماڈیول انٹ کوڈر_بی ٹی این_کاونٹ کے اسٹارٹ ویوفارم = 0؛ // انکوڈر بٹن کو دبانے کے لئے استعمال کیا جاتا ہے اگلا ، ہمارے پاس ہمارے دو اشیاء ہیں ایک OLED ڈسپلے کے لئے ہے اور دوسرا AD9833 ماڈیول کے لئے ہے۔اڈفروٹ_ ایس ایس ڈی1306 ڈسپلے (SCREEN_WIDATA_PINH ، SCREEN_HEIGHT ، اور وائر ، -1)؛ AD9833 جین (FNC_PIN)؛
اگلا ، ہمارے پاس اپنا سیٹ اپ () فنکشن ہے ، اس سیٹ اپ فنکشن میں ، ہم ڈیبگنگ کے لئے سیریل کو چالو کرنے کے ساتھ شروع کرتے ہیں۔ ہم شروع () طریقہ کی مدد سے AD9833 ماڈیول کا آغاز کرتے ہیں ۔ اگلا ، ہم نے تفویض کردہ تمام روٹری انکوڈر پنوں کو ان پٹ کے بطور سیٹ کیا۔ اور ہم گھڑی کے پن کی قدر کو گھڑی کے پن اسٹیٹ متغیر میں اسٹور کرتے ہیں ، یہ روٹری انکوڈر کے لئے ضروری اقدام ہے۔
اگلا ، ہم نے تمام بٹن پنوں کو ان پٹ کے بطور سیٹ کیا اور ڈسپلے.بین () طریقہ کی مدد سے او ایل ای ڈی ڈسپلے کو اہل بنادیا ، اور ہم آئی ایف اسٹیٹمنٹ میں کسی بھی غلطی کی بھی جانچ کرتے ہیں ۔ جب یہ ہو جاتا ہے تو ، ہم ڈسپلے صاف کرتے ہیں اور ایک اسٹارٹپ اسپلش اسکرین پرنٹ کرتے ہیں ، ہم 2 سیکنڈ کی تاخیر کا اضافہ کرتے ہیں جو سپلیش اسکرین کے لئے بھی تاخیر ہے ، اور آخر میں ، ہم اپ ڈیٹ_ڈسپلے () فنکشن کہتے ہیں جو اسکرین کو صاف کرتا ہے اور اپ ڈیٹس کو اپ ڈیٹ کرتا ہے۔ ایک بار پھر ڈسپلے کریں۔ اپ ڈیٹ_ ڈسپلے () طریقہ کار کی تفصیلات مضمون میں بعد میں زیر بحث آئیں گی۔
باطل سیٹ اپ () {سیریل.بیگین (9600)؛ // سیریل کو قابل بنائیں @ 9600 باؤڈ جنن.بیگین ()؛ // AD9833 آبجیکٹ پن موڈ (CLK_PIN، INPUT) کے اعلان کے بعد یہ پہلا کمانڈ ہونا چاہئے؛ // ان پٹ کے طور پر پنوں کو ترتیب سے پن موڈ (ڈیٹا_پِن ، INPUT)؛ پن موڈ (BTN_PIN، INPUT_PULLUP)؛ گھڑی کے پن اسٹیٹ = ڈیجیٹل ریڈ (CLK_PIN)؛ پن موڈ (SET_FREQUENCY_HZ، INPUT)؛ // ان پٹ ان پون موڈ (SET_FREQUENCY_KHZ ، INPUT) کے طور پر پنوں کی ترتیب؛ پن موڈ (SET_FREQUENCY_MHZ، INPUT)؛ پن موڈ (ENABLE_DISABLE_OUTPUT_PIN، INPUT)؛ اگر (! کے لئے (؛؛)؛.c ڈسپلے.کلیئرڈسپلے ()؛ // اسکرین ڈسپلے کو صاف کریں۔ سیٹ ٹیکسٹ سائز (2)؛ // ٹیکسٹ سائز ڈسپلے سیٹ کریں۔ سیٹ ٹیکسٹ کلر (وائٹ)؛ // سیٹ ایل سی ڈی رنگین ڈسپلے.سیٹ کرسر (30 ، 0)؛ // سیٹ کرسر پوزیشن ڈسپلے.پرنٹلن ("AD9833")؛ // اس ٹیکسٹ ڈسپلے کو پرنٹ کریں۔سیٹ کرسر (17 ، 20)؛ // سیٹ کرسر پوزیشن ڈسپلے.پرنٹلن ("فنکشن")؛ // اس متن کو پرنٹ کریں۔ سیٹ کرسر (13 ، 40)؛ // سیٹ کرسر پوزیشن ڈسپلے.پرنٹلن ("جنریٹر")؛ // اس متن کو پرنٹ کریں۔ ڈسپلے کریں ()؛ // ڈسپلے کی تاخیر کو اپ ڈیٹ کریں (2000)؛ // 2 ایس ای سی اپ ڈیٹ_ڈس پلے () میں تاخیر؛ // کال اپ ڈیٹ_ڈسپلے فنکشن}
اگلا ، ہمارے پاس ہماری لوپ () فنکشن ہے ، لوپ سیکشن میں تمام اہم فنکشنلٹی لکھی گئی ہیں۔
پہلے ، ہم روٹری انکوڈر کا کلاک پن پڑھتے ہیں اور اسے گھڑی کے متغیر میں اسٹور کرتے ہیں جس کا اعلان ہم پہلے کر چکے ہیں۔ اگلا ، if بیان میں ، ہم چیک کرتے ہیں کہ پن کی سابقہ قدر اور پن کی موجودہ قیمت ایک جیسی ہے یا نہیں اور ہم پن کی موجودہ قیمت بھی چیک کرتے ہیں۔ اگر یہ سب سچ ہے تو ، ہم ڈیٹا پن کو چیک کرتے ہیں ، اگر سچ ہے تو اس کا مطلب یہ ہے کہ انکوڈر گھڑی کی سمت میں گھوم رہا ہے اور ہم کاؤنٹر-- کمانڈ کی مدد سے کاؤنٹر ویلیو کو گھٹا دیتے ہیں ۔ ورنہ ہم انسداد ++ کمانڈ کے ساتھ انسداد قیمت میں اضافہ کرتے ہیں ۔ آخر میں ، ہم ایک اور بیان دیتے ہیں اگر کم سے کم قیمت 1 پر رکھی جائے تو اگلا ، ہم موجودہ گھڑی کے پن کے ساتھ گھڑی کے پن اسٹیٹ کو اپ ڈیٹ کرتے ہیں۔مستقبل کے استعمال کے ل value قدر
باطل لوپ () {کلاک پن = ڈیجیٹل ریڈ (CLK_PIN)؛ اگر (کلاک پن! = گھڑی کے پناسٹیٹ && کلاک پن == 1) {اگر (ڈیجیٹل ریڈ (ڈیٹا_پیئن)! = گھڑی پن) {کاؤنٹر -؛ } دوسری {کاؤنٹر ++؛ // انکوڈر CW گھوم رہا ہے لہذا اضافہ} اگر (انسداد <1) انسداد = 1؛ سیریل.پرنٹلن (کاؤنٹر)؛ update_display ()؛ }
اگلا ، ہمارے پاس بٹن پریس کا پتہ لگانے کے لئے ہمارے پاس کوڈ ہے۔ اس سیکشن میں ، ہمیں انکوڈر کے اندر موجود بٹن کا پتہ لگ گیا ہے اگر کچھ بیانات کی مدد سے ، اگر (ڈیجیٹلریڈ (BTN_PIN) == LOW && millis () - وقت> مذمت) ، اس بیان میں ، ہم پہلے چیک کرتے ہیں کہ آیا بٹن پن کم ہے یا نہیں ، اگر یہ کم ہے تو ، پھر اسے دبایا جاتا ہے۔ پھر ہم دوبارہ شروع کرنے میں تاخیر کے ساتھ ٹائمر ویلیو کی جانچ کرتے ہیں ، اگر دونوں ہی بیانات سچ ہیں تو ہم اسے کامیاب بٹن پریس ایکشن قرار دیتے ہیں اگر ایسا ہے تو ہم انکوڈر_بی ٹی این_کاؤنٹ ویلیو میں اضافہ کرتے ہیں ۔ اگلا ، ہم ایک اور اعلان کرتے ہیں اگر بیان کو زیادہ سے زیادہ انسداد قیمت 2 پر مقرر کیا جائے ، ہمیں اس کی ضرورت ہے کیونکہ ہم اسے آؤٹ پٹ ویوفورف سیٹ کرنے کے لئے استعمال کر رہے ہیں ۔لگاتار تین اگر بیانات یہ کرتے ہیں ، اگر قیمت صفر ہے تو ، سائن ویوفورف منتخب کیا جاتا ہے ، اگر یہ ایک ہے تو یہ مربع لہر ہے ، اور اگر قیمت 2 ہے تو ، یہ سہ رخی لہر ہے۔ ان تینوں میں اگر بیانات ہوں تو ، ہم ڈسپلے کو اپ ڈیٹ_ڈسپلے () فنکشن کے ساتھ اپ ڈیٹ کرتے ہیں۔ اور آخر میں ، ہم موجودہ ٹائمر کاؤنٹر ویلیو کے ساتھ ٹائم متغیر کو اپ ڈیٹ کرتے ہیں۔
// اگر ہمیں ایک LOW سگنل کا پتہ چلتا ہے تو ، بٹن دب جاتا ہے اگر (ڈیجیٹلریڈ (BTN_PIN) == LOW &&Milis () - وقت> آغاز) {encoder_btn_count ++؛ // اقدار میں اضافہ کریں اگر (encoder_btn_count> 2) // اگر قدر 2 سے زیادہ ہو تو اسے 0 {encoder_btn_count = 0 پر ری سیٹ کریں۔ } if (encoder_btn_count == 0) {// اگر قیمت 0 sine Wave کی ہو تو WaveSelect = "SIN" منتخب کی گئی ہے۔ // گناہ کی قیمت کے ساتھ اسٹرنگ ایبل کو اپ ڈیٹ کریں update_display ()؛ // ڈسپلے کو اپ ڈیٹ کریں} if (encoder_btn_count == 1) {// اگر قیمت 1 مربع لہر منتخب ہو تو waveSelect = "SQR"؛ // ایس کیو آر ویلیو کے ساتھ اسٹرنگ متغیر کی تازہ کاری کریں update_display ()؛ // ڈسپلے کو اپ ڈیٹ کریں} if (encoder_btn_count == 2) {// اگر قدر 1 مثلث کی لہر منتخب ہو تو WaveSelect = "TRI"؛ // TRI ویلیو update_display () کے ساتھ سٹرنگ ایبل کو اپ ڈیٹ کریں۔// ڈسپلے کو اپ ڈیٹ کریں} وقت = ملیس ()؛ // وقت متغیر کو اپ ڈیٹ کریں}
اگلا ، ہم تمام ضروری کوڈ کی وضاحت کرتے ہیں جس میں ایک بٹن کی تاخیر کے ساتھ تمام بٹنوں کو ترتیب دینے کی ضرورت ہوتی ہے۔ جیسا کہ بٹن آرڈینوو کے ینالاگ پنوں سے جڑے ہوئے ہیں ، ہم بٹن پریس کی شناخت کے لئے ینالاگ ریڈ کمانڈ کا استعمال کر رہے ہیں اگر ینالاگ پڑھنے کی قدر 30 سے کم ہوجاتی ہے تو ہم اسے کامیاب بٹن پریس کا پتہ لگاتے ہیں ، اور ہم 200 ایم ایس کا انتظار کرتے ہیں۔ چیک کریں کہ آیا یہ اصل بٹن پریس ہے یا صرف شور۔ اگر یہ بیان درست ہے تو ، ہم بولین متغیر کو ان اقدار کے ساتھ تفویض کرتے ہیں جو فنکشن جنریٹر کی ہرٹج ، کھز ، اور میگاہرٹز قدروں کو متعین کرنے کے لئے استعمال ہوتے ہیں۔ اگلا ، ہم ڈسپلے کو اپ ڈیٹ کرتے ہیں اور وقت کے متغیر کو اپ ڈیٹ کرتے ہیں۔ ہم ارڈینو کے ساتھ جڑے ہوئے چاروں بٹنوں کے ل. کرتے ہیں۔
اگر (ینالاگ پڑھیں (SET_FREQUENCY_HZ) <30 && ملیس () - وقت> آغاز) {set_fre वारंवार_hz = 1؛ // اپ ڈیٹ بولین ویلیو سیٹ_فریکونسی_خز = 0؛ سیٹ_فریکونسی_محز = 0؛ update_display ()؛ // اپ ڈیٹ کریں ڈسپلے ٹائم = ملیس ()؛ // وقت متغیر کو اپ ڈیٹ کریں} اگر (ینالاگ پڑھیں (SET_FREQUENCY_KHZ) <30 & ملیس () - وقت> آغاز) {set_fre वारंवार_hz = 0؛ // اپ ڈیٹ بولین ویلیو سیٹ_فریکونسی_خز = 1؛ سیٹ_فریکونسی_محز = 0؛ ماڈیولفریکونسی = انسداد * 1000؛ update_display ()؛ // ڈسپلے ٹائم = ملیس () کو اپ ڈیٹ کریں // // وقت متغیر کو اپ ڈیٹ کریں} اگر (اینالاگ ریڈ (SET_FREQUENCY_MHZ) <30 & ملیس () - وقت> ڈیبونس) {// ڈیباؤن تاخیر کے ساتھ ینالاگ پن چیک کریں set_fre वारंवार_hz = 0؛ // اپ ڈیٹ بولین ویلیو سیٹ_فریکونسی_خز = 0؛ سیٹ_فریکونسی_محز = 1؛ ماڈیولفریکونسی = انسداد * 1000000؛ update_display ()؛// ڈسپلے ٹائم = ملیس () اپ ڈیٹ کریں // // وقت متغیر کو اپ ڈیٹ کریں} اگر (اینالاگ ریڈ (ENABLE_DISABLE_OUTPUT_PIN) <30 && ملیس () - وقت> آغاز) {// ڈیباؤن تاخیر کے ساتھ ینالاگ پن چیک کریں btn_state =! btn_state؛ // بٹن کی حالت جین کو تبدیل کریں۔ قابل آؤٹ پٹ (btn_state)؛ // بٹن اسٹیٹ update_display () پر انحصار کرتے ہوئے فنکشن جنریٹر کے آؤٹ پٹ کو فعال / غیر فعال کریں؛ // ڈسپلے ٹائم = ملیس () کو اپ ڈیٹ کریں // // وقت متغیر کو اپ ڈیٹ کریں}}// وقت متغیر کو اپ ڈیٹ کریں}}// وقت متغیر کو اپ ڈیٹ کریں}}
آخر میں ، ہمارے پاس ہمارے اپ ڈیٹ_ڈسپلے () فنکشن موجود ہیں۔ اس فنکشن میں ، ہم نے اس ڈسپلے کو اپ ڈیٹ کرنے کے علاوہ بہت کچھ کیا کیونکہ ڈسپلے کے کچھ حص portionے کو OLED میں اپ ڈیٹ نہیں کیا جاسکتا ہے۔ اسے اپ ڈیٹ کرنے کے ل you ، آپ کو اسے نئی اقدار سے دوبارہ رنگانا ہوگا۔ اس سے کوڈنگ کا عمل کافی مشکل ہو جاتا ہے۔
اس فنکشن کے اندر ، ہم ڈسپلے کو صاف کرنے کے ساتھ شروع کرتے ہیں۔ اگلا ، ہم اپنے مطلوبہ متن کا سائز طے کرتے ہیں۔ اس کے بعد ، ہم نے اپنے کرسر کو مقرر کیا اور فنکشن جنریٹر کو ڈسپلے کے ساتھ پرنٹ کیا۔ پرنٹلن ("فنکشن فنکشن")؛ کمانڈ. ہم نے ایک بار پھر ڈسپلے.سیٹ کرسر (0 ، 20) فنکشن کی مدد سے ٹیکسٹ سائز 2 ، اور کرسر (0،20) پر سیٹ کردی ۔
یہ وہ جگہ ہے جہاں ہم معلومات پرنٹ کرتے ہیں کہ یہ کس لہر کی لہر ہے۔
display.clearDisplay ()؛ // سب سے پہلے ڈسپلے ڈسپلے کو صاف کریں۔ سیٹ ٹیکسٹ سائز (1)؛ // سیٹ ٹیکسٹ سائز ڈسپلے.سیٹ کرسر (10 ، 0)؛ // سیٹ کرسر پوزیشن ڈسپلے.پرنٹلن ("فنکشن جنریٹر")؛ // ٹیکسٹ ڈسپلے پرنٹ کریں۔ سیٹ ٹیکسٹ سائز (2)؛ // ٹیکسٹ سائز سائز ڈسپلے کریں۔ سیٹ کرسر (0 ، 20)؛ // سیٹ کرسر پوزیشن
اگلا ، ہم تعدد کی تفصیلات کے لئے بولین متغیرات کو چیک کرتے ہیں اور ماڈیول فریکوئینسی متغیر میں قیمت کو اپ ڈیٹ کرتے ہیں۔ ہم یہ ہرٹج ، کے ہرٹز اور میگاہرٹز قدروں کے ل do کرتے ہیں۔ اگلا، ہم چیک waveSelect متغیر اور جس لہر منتخب کیا جاتا ہے کی شناخت. اب ، ہمارے پاس لہر کی قسم اور تعدد کو متعین کرنے کی اقدار ہیں۔
اگر (set_fre वारंवार_hz == 1 && set_frequency_khz == 0 && set_fre वारंवार_mhz == 0) {// ہرٹج میں تعدد کی ترتیب کے لئے بٹن پر ماڈیول فریکوینسی = کاؤنٹر دبائیں۔ // موجودہ انسداد قیمت کے ساتھ ماڈیول فریکوئینسی متغیر کو اپ ڈیٹ کریں} اگر (set_fre वारंवार_hz == 0 && set_frequency_khz == 1 && set_fre वारंवार_mhz == 0) {// کے ایچ ہرٹز میں تعدد کی ترتیب کے لئے بٹن دبائیں ماڈیول فریکوئینسی = کاؤنٹر * 1000؛ // موجودہ کاؤنٹر ویلیو کے ساتھ ماڈیول فریکوئینسی متغیر کو اپ ڈیٹ کریں لیکن ہم اسے KHZ پر سیٹ کرنے کے لئے 1000 کو ضرب دیں} اگر (set_fre वारंवार_hz == 0 && set_fre वारंवार_khz == 0 && set_fre वारंवार_mhz == 1) check // میگا ہرٹز میں تعدد کی ترتیب کے لئے بٹن دبائیں یا نہیں۔ = انسداد * 1000000؛ اگر (ماڈیولفریکونسی> 12000000) {ماڈیولفریکونسی = 12000000؛// فریکوئینسی کو گرٹر نہیں ہونے دیں گے کہ 12 میگاہرٹز کاؤنٹر = 12؛ }} if (waveSelect == "SIN") {// سائن لہر ڈسپلے منتخب ہوئی ہے۔ پرنٹ لین ("SIN")؛ gen.applySignal (SINE_WAVE، REG0، ماڈیول فریکوینسی)؛ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ } if (waveSelect == "SQR") {// Sqr کی لہر ڈسپلے.پرنٹ لین منتخب کی گئی ہے۔ gen.ApplySignal (SQUARE_WAVE، REG0، ماڈیول فریکوینسی)؛ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ } if (waveSelect == "TRI") {// ٹرائی ویو کو منتخب کیا گیا ہے۔ gen.ApplySignal (TRIANGLE_WAVE، REG0، ماڈیول فریکوینسی)؛ // AD9833 ماڈیول کو اپ ڈیٹ کریں۔ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ }} if (waveSelect == "SQR") {// Sqr کی لہر ڈسپلے.پرنٹ لین منتخب کی گئی ہے۔ gen.ApplySignal (SQUARE_WAVE، REG0، ماڈیول فریکوینسی)؛ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ } if (waveSelect == "TRI") {// ٹرائی ویو کو منتخب کیا گیا ہے ڈسپلے۔ پرنٹ لین ("TRI")؛ gen.ApplySignal (TRIANGLE_WAVE، REG0، ماڈیول فریکوینسی)؛ // AD9833 ماڈیول کو اپ ڈیٹ کریں۔ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ }} if (waveSelect == "SQR") {// Sqr کی لہر ڈسپلے.پرنٹ لین منتخب کی گئی ہے۔ gen.ApplySignal (SQUARE_WAVE، REG0، ماڈیول فریکوینسی)؛ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ } if (waveSelect == "TRI") {// ٹرائی ویو کو منتخب کیا گیا ہے۔ gen.ApplySignal (TRIANGLE_WAVE، REG0، ماڈیول فریکوینسی)؛ // AD9833 ماڈیول کو اپ ڈیٹ کریں۔ سیریل.پرنٹلن (ماڈیول فریکوینسی)؛ }
ہم نے کرسر دوبارہ قائم کیا اور انسداد کی قدروں کو اپ ڈیٹ کریں۔ ایک بار پھر ہم ڈسپلے پر تعدد کی حد کو اپ ڈیٹ کرنے کے لئے بولین کی جانچ کرتے ہیں ، ہمیں یہ کرنا پڑتا ہے کیونکہ OLED کا عملی اصول بہت ہی عجیب ہے۔
ڈسپلے.سیٹ کرسر (45 ، 20)؛ display.println (کاؤنٹر)؛ // نمائش پر انسداد معلومات پرنٹ کریں۔ اگر (set_fre वारंवार_hz == 1 && set_fre वारंवारता_خز == 0 && set_fre वारंवार_mhz == 0) {ڈسپلے.سیٹ کرسر (90 ، 20)؛ display.println ("ہرٹز")؛ ڈسپلے پر // پرنٹ ہرٹج۔ ڈسپلے ()؛ // جب سبھی سیٹ ڈسپلے کو اپ ڈیٹ کرتے ہیں} اگر (set_fre वारंवार_hz == 0 && set_fre वारंवार_khz == 1 && set_fre वारंवार_mhz == 0) {ڈسپلے.سیٹ کرسر (90 ، 20)؛ display.println ("Khz")؛ display.display ()؛ // جب سبھی سیٹ ڈسپلے کو اپ ڈیٹ کرتے ہیں} اگر (set_fre वारंवार_hz == 0 && set_fre वारंवार_khz == 0 && set_fre वारंवार_mhz == 1) {ڈسپلے.سیٹ کرسر (90 ، 20)؛ display.println ("میگاہرٹز")؛ display.display ()؛ // جب تمام سیٹ ڈسپلے کو اپ ڈیٹ کرتے ہیں}
اگلا ، ہم OLED پر آؤٹ پٹ آف / آؤٹ پٹ پرنٹ کرنے کے لئے بٹن پریس متغیر کی جانچ کرتے ہیں۔ پھر OLED ماڈیول کی وجہ سے ایسا کرنے کی ضرورت ہے۔
اگر (btn_state) {display.setTextSize (1)؛ ڈسپلے.سیٹ کرسر (65 ، 45)؛ ڈسپلے.پرنٹ ("آؤٹ پٹ آن")؛ // پرنٹ آؤٹ پٹ پر ڈسپلے ڈسپلے۔ ڈسپلے ()؛ display.setTextSize (2)؛ } else {display.setTextSize (1)؛ ڈسپلے.سیٹ کرسر (65 ، 45)؛ display.print ("آؤٹ پٹ آف")؛ // پرنٹ آؤٹ پٹ ڈسپلے پر بند کریں۔ ڈسپلے ()؛ display.setTextSize (2)؛ }
یہ ہمارے کوڈنگ عمل کے اختتام کی نشاندہی کرتا ہے۔ اگر آپ اس مقام پر الجھن میں ہیں تو ، آپ مزید تفہیم کے لئے کوڈ میں تبصرے چیک کرسکتے ہیں۔
AD9833 پر مبنی فنکشن جنریٹر کی جانچ ہو رہی ہے
سرکٹ کو جانچنے کے لئے ، مندرجہ بالا سیٹ اپ استعمال کیا جاتا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں ، ہم نے 12V ڈی سی پاور اڈاپٹر کو ڈی سی بیرل جیک سے منسلک کیا ہے اور ہم نے ہنٹیک آسکلوسکوپ کو سرکٹ کے آؤٹ پٹ سے منسلک کیا ہے۔ آؤٹ پٹ فریکوینسی کو دیکھنے اور ناپنے کے ل We ہم نے آسلیسکوپ کو لیپ ٹاپ سے بھی جوڑا ہے۔
ایک بار جب یہ کام ہو گیا تو ، ہم نے روٹری انکوڈر کی مدد سے آؤٹ پٹ فریکوینسی 5Khz پر رکھی اور ہم آؤٹ پٹ سائن لہر کو جانچتے ہیں اور یقینی طور پر ، یہ آؤٹ پٹ میں 5Khz سائین لہر ہے۔
اگلا ، ہم نے آؤٹ پٹ ویوفارم کو ایک مثلث لہر میں تبدیل کردیا ہے لیکن تعدد ایک ہی رہتا ہے ، آؤٹ پٹ ویوفورم نیچے دکھایا گیا ہے۔
پھر ہم نے آؤٹ پٹ کو مربع لہر میں تبدیل کیا اور آؤٹ پٹ کا مشاہدہ کیا ، اور یہ ایک کامل مربع لہر تھی۔
ہم نے تعدد حدود کو بھی تبدیل کیا اور آؤٹ پٹ کا تجربہ کیا ، اور یہ بہتر کام کر رہا تھا۔
مزید افزودگی
یہ سرکٹ صرف تصور کا ثبوت ہے اور اس میں مزید اضافہ کی ضرورت ہے۔ پہلے ، ہمیں آؤٹ پٹ کے لئے ایک اچھے معیار کے پی سی بی اور کچھ اچھے معیار کے بی این سی کنیکٹر کی ضرورت ہے ورنہ ہم اعلی تعدد حاصل نہیں کرسکتے ہیں۔ ماڈیول کا طول و عرض بہت کم ہے ، لہذا اس کو بڑھانے کے ل we ، ہمیں آؤٹ پٹ وولٹیج کو بڑھانے کے ل some کچھ اوپی امپ سرکٹس کی ضرورت ہے۔ آؤٹ پٹ طول و عرض کو مختلف کرنے کے لئے ایک پوٹینومیٹر منسلک کیا جاسکتا ہے۔ سگنل آفسیٹ کرنے کے ل A ایک سوئچ منسلک کیا جاسکتا ہے۔ یہ بھی ایک خصوصیت ہونا ضروری ہے۔ اور مزید یہ کہ اس کوڈ کو بہت زیادہ بہتری کی ضرورت ہے کیونکہ یہ چھوٹی چھوٹی چھوٹی چھوٹی چھوٹی چھوٹی چھوٹی گاڑی ہے۔ آخر میں ، OLED ڈسپلے کو تبدیل کرنے کی ضرورت ہے بصورت دیگر آسانی سے قابل فہم کوڈ لکھنا ناممکن ہے۔
اس سے اس ٹیوٹوریل کا اختتام ہوتا ہے ، مجھے امید ہے کہ آپ کو مضمون پسند آیا ہو اور آپ نے کچھ نیا سیکھا ہو۔ اگر آپ کو مضمون سے متعلق کوئی سوالات ہیں تو ، آپ انہیں نیچے تبصرہ سیکشن میں چھوڑ سکتے ہیں یا آپ ہمارے الیکٹرانکس فورم کا استعمال کرسکتے ہیں۔