پروژه شماره گير (DTMF) TONE بوسيلة AVR

چكيده:
DTMF يا Dual Tone Multiple Frequecies روشي است براي توليد سيگنالهاي Tone به منظور استفاده در سيستمهاي تلفن، مودم، كارتهاي صوتي و غيره. اين روش با توجه به استاندارهاي مشخصي كه دارد اين امكان و قابليت را به ما مي دهد تا سيگنال Tone مورد نظر را توسط ميكروكنترلرها و يا AVR طراحي و پياده سازي كنيم.

فهرست مطالب:
• مقدمه
• DTMF و روش توليد آن
– DTMF چيست؟
– روش توليد DTMF

– مدولاسيون پهناي پالس PWM
• ميكروكنترلز AVR AT9058515
– اجزاء اصلي
– توضيح پايه ها

– معماري AVR
– ساختمان فضاي حافظه
– مدهاي آدرس دهي
• توليد DTMF نوسط AT9058515
– آشنايي با تايمر ۱
– تعيين مدهاي تايمر براي توليد DTMF

• نرم افزار مربوط به پروژه:
– الگوريتم و فلوچارت برنامه
– جزئيات برنامه
• سخت افزار و شماتيك پروژه

مقدمه:
در اين پروژه ما به بررسي چگونگي عملكرد DTMF Generator مي پردازيم و خواهيم ديد كه سيگنال DTMF چيست و چگونه مي توان آنرا توليد كرد براي اين منظور روشي را باختصار توضيح مي دهيم كه با نحوه ساخت يك سيگنال DTMF بطور كامل آشنا شويم.

بعد از اينكه در مورد DTMF صحبت كرديم با ميكروكنترلري كه در اين پروژه مورد استفاده قرار گرفته اشنا مي شويم. ميكروكنترلر AVR با سريال AT9058515 ساخت شركت Atmel مي باشد كه ابتدا با قابليتها و اجزاء آشنا مي شويم و بعد از آن خواهيم ديد چگونه مي توان براي توليد موج DTMF به ما كمك كند.
بعد از اينكه با DTMF آشنا شديم و AT9058515 را مورد بررسي قرار داديم مي خواهيم ببينيم كه چگونه مي توان با استفاده از AT9058515 سيگنال مورد نظر را توليد كرد. براي اين منظور رجيسترها، پايه ها و ديگر اجزايي كه در توليد DTMF سهيم هستند را بررسي مي كنيم.

در قسمت بعدي نرم افزار مربوط به پروژه را خواهيم ديد و الكوريتمها و فلوچارتهاي مربوط به برنامه را بررسي مي كنيم.
در نهايت و در آخرين بخش سخت افزار و شماتيك پروژه را مي بينيم و راجع به آن صحبت خواهيم كرد. البته لازم به ذكر است با توجه به اينكه در اين پروژه ما به طراحي و پياده سازي DTMF توسط AT9058515 پرداختيم و عملاً اين مسئله را شبيه سازي كرديم لذا IC هايي كه در بازار موجود هستند، موج DTMF را توليد مي كنند معرفي مي كنيم، ICهايي مانند AT94K يا AT94S يا AT90S4414 و غيره ساخت شركت Atmel براي همين منظور طراحي و ساخته شده اند و مي توان از آنها براي مصارف مربوط به DTMF استفاده كرد.

• DTMF و روش توليد آن:
DTMF چيست؟ (Uual Tone Multiple Freg.)
در اين قسمت مي خواهيم به شرح DTMF بپردازيم و ببينيم چگونه مي توان آنرا توسط يك ميكروكنترلر AVR با PWM و SRAM پياده سازي كرد.
در كاربردهايي مانند تلفن براي انتقال اطلاعات شماره گيري از DTMF استفاده مي كنند. عملاً در توليد يك سيگنال DTMF، دو فركانس متفاوت با هم جمع مي شوند و يك سيگنال DTMF صحيح را توليد مي كنند. يك فركانس پائين يا (fb) و يك فركانس بالا يا (fa) جدول زير نشان مكي دهد كه چگونه دو فركانس متفاوت با هم ترميب مي شوند و به فرم موج DTMF درمي آيند.
(فايل DTMFTable از پوشه Articlepix)

. شكل جدول DTMFTable.
سطرهاي نشان داده شده در جدول فوق ارائه دهنده فركانسهاي پائين (fb) درحاليكه ستونهاي جدول ارائه دهنده مقدار فركانسهاي بالا (fa) هستند. بطور مثال، اين جدول ماتريسي نشان مي دهد كه عدد ۵ توسط دو فركانس پائين fb=770Hz و فركانس بالاي fa=1336Hz نشان داده مي شود. دو فركانس fa و fb بوسيله فرمول فوق به يك موج DTMF تبديل مي شوند.

(فايل Formula 182 از پوشه Articlepix)
كه البته بايد به نكته و شرط بالا در مورد دامنه دو فركانس توجه داشت.
– روش توليد DTMF:
در اين قسمت ابتدا بايد يك توضيح كلي از استفاده PNM براي توليد DTMF مي دهيم و مي بينيم كه DWM چطور به ما كمك مي كند كه يك موج سينوسي توليد كنيم.

توليد موج سينوسي:
با توجه به رابطه ميان سطح بالايي ولتاژ و سطح پائيني ولتاژ خروجي پايه PWM مي بينيم كه ولتاژ ميانگين در اين پايه چطور تغيير خواهد كرد. همانطوذ كه مي بينيم اگر در رابطه زير هر دو سطح ولتاژ ثابت باشند لذا يك سطح ولتاژ ثابت خواهيم داشت. اما اگر x و y را تغيير دهيم با كم و زياد كردن ط و y مقدار VAV ما تغيير خواهد كرد. پس به اين ترتيب مي بينيم كه يك موج سينوسي در صورتي توليد مي شود كه ميانگين ولتاژ پايه PWM در هر سيكل تغيير كند.
(فايل VAV از پوشه Articlepix)

(فايل VAV Formula از پوشه Articlepix)
رابزه ميان سطح بالا و پائين ولتاژ در رابطه فوق سطح ولتاژ سينوسي ما را در زمانهاي مخصوص تنظيم مي كند با توجه به شكل زير مي بينيم كه يك موج سينوسي با پريود T چطور توليد شده است.

(فايل Sinware از پوشه Articlepix)
شكل بالا رابطه ميان فركانس پايه موج سينوسي و ميزان نمونه ها را بايان مي كند هرچه تعداد نمونه ها (Nc) بيشتر باشد دقت سيگنال خروجي بيشتر خواهد بود. معادله زير بيانگر رابطه ميان فركانس موج پايه و تعداد نمونه هاست.

(فايل FpwmFormula از پوشه Articlepix)
همانطور كه مي بينيم فركانس pwm به دقت وضوح pwm بستگي دارد بطور مثال براي دقت وضوح ۸ بيتي بيشترين مقدار تاييد براب با OXFF يا همان (۲۵۵) مي باشد. براي اينكه تايمر بالا و پائين مي رود اين مقدار بايد دو برابر باشد با تقسيم فركانس FCK يز عدد ۵۱۰ فركانس موج pwm بدست مي ايد پس اگر فرض كنيم فركانس FCK برابر با ۸MHZ باشد درنتيجه فركانس موج PWM برابر ۱۵٫۶KHZ مي باشد. شكل زري مشخص كننده موج سينوسي با ۱۲ نمونه پالس است.
(فايل SinwaveFig از پوشه Articlepix)

با توجه به شكل مي بينيم كه براي تنظيم مقادير PWM مي توان يا آنرا در هر سيكل محاسبه كرد يا مقادير آن در يك (LUT) look-up Table ذخيره كرد. اكنون اگر بخواهيم موجي با فركانس ديگري داشته باشيم مي توانيم بجاي اينكه همة PWM ها را بطور مرتب و با ترتيب كنار هم قرار دهيم اعدادي از آنها را انتخاب مي كنيم مثلاً اگر بخواهيم فركانس دو برابر شود بايد بجاي اينكه مقادير PWM در هر ثانيه را انتخاب كنيم مقادير آنرا در هر ثانيه يكبار از LUT انتخاب كنيم پس با اين وجود اگر بيائيم بجاي آنكه در هر ثانيه نمونه را انتخاب كنيم مثلاً هر سه يا چهار يا پنج يا … ثانيه يكبار نمونه ها را از LUT انتخاب فركانس ما سه يا چهار يا پنج يا … مي شود و عملاً مي توانيم موجهايي با فركانسهاي مختلف از هرتز تا صفر هرتز داشته باشيم.

(فايل XSW از پوشه Articlepix)
با توجه به شكا فوق مي بينيم كه عرض هر پالس در هر نمونه يا فاصله و گام بين هر نمونه با XSW مشخص مي شود. معادله بالا بيانگر رابطة XSW با تعداد نمونه ها و فركانس موج سينوسي است. در ادامه رابطه اي را مي بينيم براي انتخاب XSW در حر حالت، يعني مقدار XSW در حالت جديد برابر است با X’LUT يعني مقدلر ما در جدول به اضافه XSW كه در نهايت XLUT را در حالت جديد به ما مي دهد.
(فايل XLUT از پوشه Article pix)
نكته قابل توجه براي ما اينست كه بايد XSW را روند كنيم و اين عمل را بوسيلة فرمول زير انجام ميدهيم:
(فايل RXSW از پوشه Article pix)
اكنون با توجه به اينكه در اين پرئژه ما با استفاده از NC=128 نمونه موج سينوسي را توليد مي كنيم با استفاده n=7 بيت جدولي را با استفاده از فزمول زير مي سازيم.

(فايل Fx از پوشه Article pix)
در نهايت بطور مثال شكل موج حاصل از كليد ۸ كه تشكيل شده است از هر فركانس fb=852HZ و فركانس ستون fa=1336HZ در زير مي بينيم:
(فايل oscope از پوشه Article pix)

• مدولاسيون پهناي پالس (Pulse Width Modulation):PWM
براي ساخت يك شكل موج سينوسي با سطح DC متغير مي توان سطوح مختلف DC را كنار هم قرار داد و شكل موح سينوسي را تقريب بزنيم. اگر تعداد پله ها براي رسيدن به Vomax، n باشد آنگاه تعداد كل در يك پريود ۲n خواهد بود كه با فرض پهناي پله T0 آنگاه T دوره تناوب برابر است با ۲nT0 (T=2nT0 دوره تناوب)
براي ساخت dc متغير با n سطح مي توان T0 را بر n تقسيم كرد و عدد بدست آمده t’۰ كه همان حداقل زمان قابل تشخيص است را بدست مي آوريم. براي داشتن سطح dc متفاوت با توجه به شكل زير مقدار dc برابر خواهدبود با

بنابراين مي توان Vdc با n سطح قابل تشخيص را با PWM توليد كرد مثلاً براي موج ۱KHZ پريود برابر خواهد بود كه اگر ۱۶ ۱/n بگيريم آنگاه تعداد پله ها برابر ۲ ۱۶=۳۲ خواهد بود كه عرض هر پله برابر ۳۲ است بنابراين است كه ميكروكنترلر قادر است در اين زمان يك دستورالعمل را انجام دهد.

براي فركانسهاي پائين تر كه معني داشتن T هاي بالاتر است دو راه وجود دارد كه يكي افزايش n يا تعداد پله هاست، ديگري تكرار پالس dc است.يعني يا قدرت تفكيك را افزايش مي دهيم و يا مثل شكل زير هر پالس dc متغير را M بار تكرار مي كنيم تا شكل مطلوب آيد بطور مثال يك شكل موج با M=4 مي بينيم.

اما براي مثلاً فركانس ۱۰۰HZ با n=16 چطور بايد M را انتخاب كرد؟ بايد بصورت زير عمل كرد:
تعداد پله هاي قابل = عرض هر پله پياده سازي برابر با ۳۲ است
پريود يعني با ۳۲ پله كه هر پله به ۱۶ قسمت تقسيم شده است.
و طولي برابر با دارد ما بايد هر پله را ۱۰ بار تكرار كنيم تا در نهايت پريود كل ۱۰ برابر شود. در اينصورت براي ۱HZ بايد ۱۰۰۰ بار پاله اي را تكرار كنيم كه راه حل معقول تر استفاده از n بزرگتر مثل n=256 با M=4 است.

بدين ترتيب براي فركانسهاي مختلف n و m مناسب را يافته و در يك جدول مي ريزيم و در يك EEPROM ذخيره مي كنيم و بسته به فركانس درخواستي n و m مناسب را فرا مي خوانيم. در اين برنامه فرض بر آن است كه n در خانه ۴۰h و n در خانه ۴h از قبل ذخيره شده باشند برنامه نويس به وسيلة برنامه زير شكل موج درخواستي ما را توليد مي كند.
N Equ 30h
M Equ 30h
TH Equ 30h
T’H Equ 30h
.
.
.
.
Mov N,40h
Loop1: Call Pwm
Cjne TH,n,inc-TH
Jmp Loop2
Inc-TH: Inc TH
Jmp Loop1
Loop2: Call PWM
Djnz TH,100P2
Jmp Loop1
.
.
.
.
PWM: Mov TH’ , TH
Setb Pout
Djnz T’H , $
Mov A,n
Sub A,TH
CLR Pout
Djnz A,$
Mov T’H,TH
Djnz M, PWM
Ret

يكي ديگر از روشهاي پياده سازي PTMF كه روش سخت افزاري مي باشد استفاده از R و C هاي مختلف براي توليد فركانس هاي سورزنوا در جدول است بدين ترتيب كه با داستن پريود و دانستن را بطري T=RC كه T پريود موج ما مي باشد مي توانيم فركانس مورد نظر را توليد كنيم مثلاً با معلوم بودن مقاومت و پريود ما ظرفيت خازني كه مي تواند فركانس مورد نظر را به ما دهد مشخص خواهد شد. البته در اين طراحي ملاحظاتي از قبيل مقدار جريان متناسب با R و يا نويز توليد شده توسط R و C در اثر گرما وجود خواهد داشت كه در طراحي ما تأثير گذار خواهد بود.

• ميكروكنترلر AVR AT9058515:
• اجزاء اصلي:
• در اين AVR از معماري RISC استفاده شده است.
– داراي ۱۱۸ دستورالعمل قدرتمند است كه قابليت اجراي سريع در يك سيكل ساعت را ارند.
– ۳۲ رجيستر ۸ بيتي براي اهداف عمومي
– قابليت اجراي ۸MIPS يعني ۸ ميليون دستورالعمل در ثانيه را دارد
* حافظه داده و حافظه برنامه غير فرار
– ۸ kbyte حافظه Flash قابل برنامه نويسي داخلي.
– ۵۱۲byte حافظه SRAM.
– 512 byte حافظه EEPROM داخلي قابل برنامه نويسي.
– قفل برنامه براي امنيت حافظه برنامه Flash و حافظه EEPROM.
* اجزاء جانبي
– يك تايمر / شمارنده ۸ بيتي با مقياس مجزا.
– يك تايمر / شمارنده ۱۶ بيتي با مقياس مجزا و مدهاي مقايسه، Capture و موج PWM 9-8 و يا ۱۰ بيتي.
– مقايسه كننده آنالوگ برروي تراشه.
– تايمر نگهبان قابل برنامه نويسي با نوسان ساز برروي تراشه.
– UART سريال قابل برنامه نويسي
– مدار واسط سريال Master/Slave
* اجزاء مخصوص ميكروكنترلر.
– مدهاي مخصوص كم مصرف و Power down و idle
– منايع وقفه داخلي و خارجي
* خصوصيات
– ساخته شده با تكنولوژي پردازش CMOS با سرعت بالا و توان كم
– عمليات كاملاً ايستا
* در ترانشه با نوسان ساز ۴MHZ داراي توان مصرفي ۳v در دماي ۲۵۰c مي باشد.
– جريان در حالت فعال ۳٫۰MA است.
– جريان در حالت idle يا بيكار ۱٫۰MA است.
– جريان در حالت power down برابر با است.
* اجزاء I/O و بسته ها.
– ۳۲ خط ورودي / خروجي يا I/O قابل برنامه ريزي دارد.
– براي تراشه ۴۰٫PDIP پايه و براي ترانشه PLCC و TQFP داراي ۴۴ پايه است.
* ولتاژ كاري.
– در AT905815-4 برابر با ۲٫۷ تا ۶٫۰ است.
– در AT905815-8 برابر با ۴٫۰ تا ۶٫۰ است.
* توضيح پايه ها:
قبل از اينكه در بارة پايه هاي اين ميكروكنترلر صحبت كنيم بصورت كلي با AT905815 آشنا مي شويم. اين تراشه يك ميكروكنترلر ۸ بيتي بر پايه معماري RISC ساخته شده از CMOS كم مصرف است. بعلت داشتن دستورالعملهاي قدرتمند كه در يك سيكل ساعت كاري كار مي كنند اين ميكروكنترلر امكان اجراي يك ميليون دستور العمل در هر ثانيه به ازاي هر يك مگاهرتز سرعت دارد كه به طراح اجازه يم دهد بهينه توان مصرفي را در مقابل بيشترين سرعت پردازش داشته باشد.