X
تبلیغات
رایتل
26 اردیبهشت 1387 ساعت 09:53 ب.ظ

این پست را برای ارتقاء مطالب سایت قرار داده ام . امیدوارم دوستان نیز یاری کنند .

مطالب این قسمت بعد از یک ماه در گروه مربوطه قرار میگیرند و برای مطالعه باید در گروه مربوطه انرا بیابید .

 

پروژه دانشجویی  (شماره گیر تلفن با 24 حافظه با استفاده از AVR)

 مدار داخلی

میکسر استودیو صدابرداری 

 

هواپیمای مدل    برای دیدن تصویر در اندازه واقعی کلیک کنید

 

 

مداری که ملاحظه می کنید توسط بنده طراحی و برنامه نویسی شده و قادر است 24 شماره تلفن را در حافظه خود نگهداری کند به طوری که با برداشتن گوشی تلفن و فشار هر یک از 24 کلید، شماره تلفن مربوط به آن کلید با سرعت فوق العاده بالایی گرفته می شود.

برای دیدن نقشه اینجا کلیک کنید :


  پروژه دانشجویی  (شماره گیر تلفن با 24 حافظه با استفاده از AVR

    همانطوریکه می دانید در سیستمهای تلفن قدیم برای شماره گیری از پالس استفاده می شد و به برای گرفتن هر رقم میبایستی به تعداد آن رقم دو سر خط را اتصال کوتاه کرده و قطع کنیم. به طور مثال برای گرفتن شماره 9 مجبور بودیم که 9 بار سیم های تلفن را قطع و وصل کنیم به عبارت دیگر 9 پالس متوالی سریال به خط بدهیم.

   ولی در سیستم های تلفن جدید برای شماره گیری از تن دی تی ام اف DTMF به جای پالس استفاده می شود و هر به هر رقم یک تن صوتی خاص اختصاص داده شده است که استاندارد بین المللی می باشد و در تمام دنیا مورد توافق و استفاده قرار گرفته است. (در تلفن های استاندارد 16 کلید وجود دارد که معمولاً 12 کلید استفاده می شود؛ 10 کلید برای ارقام و 2 کلید * و # ) 

   با فشار هر کلید تن های مربوط به سطر و ستون آن کلید با هم پخش می شوند:

 (Dual Tone Multi Frequency) 

1209 Hz
1336 Hz
1477 Hz
1633 Hz
697 Hz
1
2
3
A
770 Hz
4
5
6
B
852 Hz
7
8
9
C
941 Hz
*
0
#
D

 

   این پروژه نیز برای شماره گیری از همین پروتکل استفاده می کند و به صورت Open Source می باشد. یعنی کد برنامه باز بوده و شما می توانید شماره تلفن های خاص خود را در قسمت DATA بنویسید و سپس برنامه را کامپایل کنید. دقت کنید که برنامه به زبان بیسیک بوده و در محیط Bascom 1.11.7.4 نوشته شده است.

 ساخته شده

   هسته اصلی این پروژه استفاده از تابع DTMFOUT موجود در میکروی AVR به شماره ATMEGA8 می باشد که می تواند با استفاده از تایمر شماره یک تن صوتی مورد نظر را تولید کند (برای اطلاعات بیشتر در مورد چگونگی عملکرد این دستور به پست "شماره گیری تلفن با میکروکنترلر AVR" در پایین همین صفحه مراجعه فرمایید). در قسمت ارتباط با کاربر از صفحه کلید 24 رقمی استفاده شده تا از حداکثر کلید های مجاز بتوان برای حافظه استفاده کرد. البته می توان از کی پد های 16 رقمی استاندارد نیز برای این پروژه استفاده کرد ولی در این صورت می بایستی در خط 5 برنامه Config Kbd = Portd , Rows = 6 , Row5 = Pinb.2 , Row6 = Pinb.3 قسمت های اضافه پاک کنید تا به صورت Config Kbd = Portd در بیاید  و نیز در خط 22 برنامه If Key > 23 Then Goto Memory_key عدد 23 را به 16 تغییر دهید چرا که  تابع کی پد های 24 کلیدی در صورت فشار ندادن کلید ها عدد 24 را بر می گرداند و تابع کلید های 16 کلیدی در صورت فشار ندادن کلید ها عدد 17 را بر می گرداند که بایستی توجه شود.

  مدار داخلی

 بخش دیگر برنامه استفاده از تایمر 0 برای چشمکزدن LED قرمز می باشد. همانطوریکه ملاحظه می فرمایید از تایمر 0 به عنوان زمانسنج استفاده کرده ایم و مقدار پرسکالر آن را روی حد اکثر ممکن یعنی 1024 قرار داده ایم تا فرکانس اسیلاتور میکرو را به کمترین مقدار ممکن تبدیل کند و به عبارتی بیشترین تاخیر زمانی را تولید نماید. استفاده از این تایمر اختیاری بوده و تاثیری در عملکرد کلی مدار ندارد فقط سبب چشمک زدن LED قرمز می شود که نشان دهنده آماده به کار بودن سیستم است. طرز کار آن نیز بدین صورت می باشد که تایمر پس از سر ریز شدن به برچسب Blink_led پرش می کند و مقدار Time_led را که بر حسب بایت می باشد یک واحد افزایش می دهد. این کار در هر ثانیه ده ها بار اتفاق می افتد. سپس مقدار Time_led مورد بررسی قرار می گیرد. در صورتی که این مقدار از 50 بزرگتر شد مساوی با صفر می گردد. تا اینجا موفق شدیم که با استفاده از تایمر صفر یک مقدار عددی را از 0 تا 50 به طور متوالی افزایش دهیم. در شرط بعدی برای بار دوم مقدار Time_led بررسی می شود. در صورتی که این مقدار در بازه بین 0 تا 2 قرار داشت دیود LED قرمز روشن می شود و در غیر این صورت (در بازه بین 3 تا 50 ) LED خاموش می شود. با توجه به این که زمان تغییر عدد از 0 تا 50 حدود ۴ ثانیه طول می کشد، تقریباً یک پنجاهم این زمان LED روشن بوده و در بقیه زمان خاموش می باشد و در نهایت یک لامپ چشکمزن خواهیم داشت که آماده به کار بودن مدار را نشان می دهد.

   اما بخش اصلی برنامه پردازش در حلقه در یافت از کی پد می باشد که در خطوط 20 تا 29 قرار دارد. با فشار هر یک از کلید های روی کی پد عدد متناظر با آن در متغیر Key از نوع بایت قرار گرفته سپس رله و چراغ سبز روشن می شوند و دستور Number = Lookupstr(key , Memory اجرا می گردد. در این دستور شماره تلفن متناظر با کلید فشار داده شده از جدول Memory  استخراج شده و در متغیر رشته ای Number قرار می گیرد. این متغیر یک متغیر موقتی می باشد که طول آن را متناسب با بزگترین شماره تلفن موجود در جدول انتخاب کنید. (توجه کنید که منظور از بزرگترین، یعنی طولانی ترین شماره) در خط بعد شماره مورد نظر توسط دستور DTMFOUT شماره گیری می شود و منظور از عدد 50 در جلوی آن اینست که هر یک از ارقام شماره تلفن به مدت 50 میلی ثانیه تولید می شوند و در واقع گرفتن یک شماره تلفن 10 رقمی حدود نیم الی یک ثانیه طول می کشد که کمترین سرعت ممکن برای مخابرات ایران است. ( مقادیر کمتر از 50 را نیز امتحان کردم ولی توسط سیستم های مخابرات آشکار نمی گردد!)
پس از این دستور رله و چراغ سبز بلافاصله خاموش می شوند و چوک کوپل را از خط تلفن آزاد می کنند.( این چوک معروف به چوک آبی رادیو می باشد که می توانید از تمام مغازه های تعمیرات رادیو و یا الکترونیکی ها تهیه فرمایید و برای جدا کردن خط تلفن از مدار شماره گیر به کار می رود). توجه کنید هنگامی که قصد شماره گیری دارید می بایستی حتماً گوشی تلفن را برداشته باشید تا خط آزاد بماند چه در غیر این صورت هیچ شماره ای گرفته نمی شود و قبل از پردازش تن توسط مخابرات، خط توسط میکرو قطع می گردد.

   بخش حافظه دستگاه در قسمت آخر برنامه قرار گرفته و شامل 24 قسمت می باشد. (در صورتی که از کی پد 16 کلیدی استفاده کنید باید تعداد آن را به 16 کاهش دهید). در این قسمت تعداد خطها اهمیتی ندارد و  می توان هر 24 رقم را در یک خط DATA پشت سر هم نوشت ولی به خاطر تطبیق شماره ها با کلید های کی پد به صورت 6 خط 4 تایی نوشته شده است. شایان ذکر است که هر یک از ارقام نوشته شده یک بایت از حافظه کدی میکرو ROM را اشغال می کنند و اگر هر شماره تلفن را 10 رقم فرض کنیم (10 بایت) حدود 6هزار شماره تلفن را می توان در این میکرو نوشت که با توجه با محدودیت کلید های کی پد کار مشکلی می باشد و نیاز به برنامه نویسی حرفه ای تر و استفاده از LCD دارد ولی در صورتی که تمایل به ساخت چنین چیزی داشتید می توانید با من تماس بگیرید.

   ضمیمه این پروژه یک پوشه حاوی کد بیسیک و فایل پروتیوس Proteus 6.2 و نیز شماتیک مدار به صورت فایل تصویر  PNG و چند عکس از مدار ساخته شده توسط اینجانب می باشد که می توانید این پوشه را از اینجا دانلود کنید.   (محتوای این پوشه در تاریخ 09 فروردین 87 به روز آوری شد)

برنامه به زبان بیسیک:

'24 Memory Dialer By Behnam @ 22.Day.86    Rev:09.01.87
$regfile = "m8def.dat"
$crystal = 4000000
Config Kbd = Portd , Rows = 6 , Row5 = Pinb.2 , Row6 = Pinb.3
Enable Interrupts
Config Portc = Output
Dim Number As String * 20
Dim Key As Byte
'********************** Blink LED ***********************
'Blink Ready LED Timer
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
On Ovf0 Blink_led
Start Timer0
Dim Time_led As Byte
'********************** Main Prog **********************
Memory_key:
Key = Getkbd()
If Key > 23 Then Goto Memory_key
'********************************* Search & Dial *******************************
Set Portc.4 : Waitms 10 : Set Portc.3
Number = Lookupstr(key , Memory)
Dtmfout Number , 50
Reset Portc.3 : Waitms 10 : Reset Portc.4
'********************************* End Dialing *********************************
jmp memory_key
End

Memory:
Data "09329484669" , "192" , "110" , "118" , "0000" , "0" , "00000" , "0000" , "000"
Data "00000" , "000" , "000000" , "00000" , "00000" , "0000" , "0000" , "000"
Data "0000" , "0000" , "00" , "0000" , "0000" , "00000" , "0000"

Blink_led:
Incr Time_led
If Time_led > 50 Then Time_led = 0
If Time_led > 0 And Time_led < 2 Then '<-'-'------>
Set Portc.5 'On LED
Else
Reset Portc.5 'Off LED
End If
Return 

del.icio.us  digg  newsvine  furl  Y!  smarking  segnalo
>