خوش آمديد!
14:24 يكشنبه 30 ارديبهشت ماه ، 1403
سايت مهندس لاچيني | پروژه ها و آموزش الكترونيك و تابلوروان: تالار گفتمان

HLachini.elewiz.com :: نمايش موضوعات - مشکل با تایمرها در atmega8

مشکل با تایمرها در atmega8

 

ارسال موضوع جديد  پاسخ به اين موضوع   ارسال تشکر 

   HLachini.elewiz.com صفحه اول انجمن -> AVR

نمايش موضوع قبلي :: نمايش موضوع بعدي  
نويسنده پيغام

morteza_rk
کاربر فعال
کاربر فعال

وضعيت: آفلاين
27 فروردين ماه ، 1388
تعداد ارسالها: 16
امتياز: 27
تشکر کرده: 0
تشکر شده 2 بار در 2 پست

محل سكونت: گرگان

ارسالارسال شده در: پنجشنبه، 6 اسفند ماه ، 1388 23:36:17    موضوع مطلب: مشکل با تایمرها در atmega8 پاسخ همراه با اعلان

با سلام به مهندس لاچینی و شما دوستان

من یه برنامه با atmega8 نوشتم که یک فرکانس در محدوده ی 0 تا 200 هرتز از ورودی می گیره و اونو در 1.38 ضرب می کنه و فرکانس معادل اونو در خروجی میسازه. مثلا در ورودی فرکانس 100 هرتز می گیره و در خروجی فرکانس 138 هرتز میده. همه چیزم به خوبی کار میکنه. فقط یه مشکلی هست و اونم اینه که وقتی من فرکانس ورودی رو بسرعت افزایش میدم برای یه لحظه فرکانس خروجی من صفر میشه و بعد به حالت نرمال میرسه. اما عکس این قضیه صادق نیست! یعنی اگه من فرکانس ورودی رو به سرعت کم کنم فرکانس خروجی هم بدون اینکه صفر بشه به بسرعت کم میشه.

حالا من کدی رو که نوشتم اینجا قرار میدم تا دوستان و مهندس لاچینی ببینن که کدوم قسمت از کد اشتباهه و اصلا چرا همچین حالتی پیش میاد.

:كد
 $regfile = "m8def.dat"
$crystal = 4000000

$hwstack = 32
$swstack = 10
$framesize = 40

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Config Timer0 = Counter , Edge = Rising , Prescale = 256    'count input frequency
Config Timer1 = Timer , Compare A = Toggle , Clear Timer = 1 , Prescale = 64       'generat suitable output frequency
Config Timer2 = Timer , Prescale = 256                      'generate 1 second duration

Enable Timer0
Enable Timer1
Enable Timer2

Enable Ovf2
Enable Oc1a

Enable Interrupts

Stop Timer1
Stop Timer2

Timer2 = 0
Timer1 = 0
Counter0 = 0

On Ovf2 One_secend

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Dim Fin As Single
Dim Tin As Single
Dim Tout As Single
Dim Tout1 As Integer

Dim Scale As Single : Scale = 1.38

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ initionaliz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Start Timer2

Start Timer1
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Do

Loop

End


One_secend:

 If K = 62 Then

   Stop Timer2

   K = 1

   Fin = Counter0
   Fin = Fin * Scale

   Tin = 1 / Fin
   Tin = Tin / 2                                            'Diuration of '1's

   Tout = 62500 * Tin

   Tout1 = Tout                                             'convert single value to integer value

   Compare1a = Tout1

   Timer2 = 0
   Counter0 = 0

   Start Timer2

  Else

    Incr K

 End If


Return 


و اما توضیح مختصر این برنامه ، من از تایمر 2 برای تولید زمان یک ثانیه استفاده کردم و از اونجائیکه این تایمر 8 بیتی هست با توجه به فرکانس تراشه و مقدار Prescale در مدت یک ثانیه تقریبا 62 بار سر ریز میشه.
توسط کانتر 0 تعداد لبه های بالا رونده در این یک ثانیه (که توسط تایمر 2 ایجاد شد) رو شمردم که میشه همون فرکانس موج ورودی و اونو در 1.38 ضرب کردم و دوره ی تناوبشو بدست آوردم ، بعد بوسیله ی تایمر 1 فرکانس مناسب رو در خروجی ایجاد کردم (یعنی با معکوس کردن وضعیت خروجی تایمر 1).

بازگشت به بالا

رويت مشخصات كاربر ارسال پيغام شخصي ارسال ايميل بازديد از سايت ارسال كننده مطلب شناسه Yahoo
تشکرهاي ثبت شده از ايجاد کننده تاپيک :
 

morteza_rk
کاربر فعال
کاربر فعال

وضعيت: آفلاين
27 فروردين ماه ، 1388
تعداد ارسالها: 16
امتياز: 27
تشکر کرده: 0
تشکر شده 2 بار در 2 پست

محل سكونت: گرگان

ارسالارسال شده در: جمعه، 7 اسفند ماه ، 1388 19:23:36    موضوع مطلب: پاسخ همراه با اعلان

از دوستان عزیز و مخصوصا مهندس لاچینی خواهش می کنم که کمک کنن. چون پای آبروم در میونه.

مهندس عزیز اگه وقتتون اجازه میده لطف کنید و در این مورد به من کمک کنید ، چون این یه موضوع کاریه و تمام مراحل به خوبی اجرا میشه بغیر از این مورد ، من باید این کار رو تا چند روز آینده تحویل یه شرکت فنی- مهندسی بدم ، واقعا برام عذاب شده.

نکته ی عجیب اینه که وقتی فرکانس از زیاد به کم تغییر می کنه هیچ مشکلی نیست ولی در جهت عکس یه لحظه صفر میشه.

تورو خدا یه همفکری بکنید. Crying or Very sad

بازگشت به بالا

رويت مشخصات كاربر ارسال پيغام شخصي ارسال ايميل بازديد از سايت ارسال كننده مطلب شناسه Yahoo
کاربرانی که برای این ارسال از morteza_rk تشکر کرده اند jafar_w1350
تمامي مطالب ارسال شده:   
ارسال موضوع جديد   پاسخ به اين موضوع   ارسال تشکر

   HLachini.elewiz.com صفحه اول انجمن -> AVR

زمان پيشفرض سايت: ساعت گرينويچ + 3.5 ساعت
صفحه 1 از 1
  
نام کاربري:      کلمه عبور:     

~ يا ~
عضويت در سايت

  


 


Powered by phpBB © 2001, 2008 phpBB Group
پروگرامر و تستر آِی سی سانا با قابلیت تشخیص اتوماتیک قطعه و درج تمامی قطعات از پین یک زیف و تامین کلاک قابل استفاده در بسکام و کدویژن