امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل با تایمرها در atmega8
نویسنده پیام
Morteza_rk آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 2
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 1
( 2 تشکر در 1 ارسال )
ارسال: #1
مشکل با تایمرها در 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 فرکانس مناسب رو در خروجی ایجاد کردم (یعنی با معکوس کردن وضعیت خروجی تایمر)

ضمنا حل این مشکل خیلی خیلی برام اهمیت داره و پای آبروم در مینه! لطفا کمکهاتونو دریغ نکنید.

ممنون
(آخرین ویرایش در این ارسال: ۰۷-اسفند-۱۳۸۸, ۲۰:۲۹:۲۳، توسط Morteza_rk.)
۰۷-اسفند-۱۳۸۸, ۲۰:۲۸:۲۶
ارسال‌ها
پاسخ
Morteza_rk آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 2
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 1
( 2 تشکر در 1 ارسال )
ارسال: #2
RE: مشکل با تایمرها در atmega8
سلام

یعنی اینجا کسی نمی تونه به من کمکی بکنه؟

بابا یه راهنمایی یا کمکی ، بالاخره اینجا انجمن الکترونیکه و سوال منم الکترونیکی.
۰۸-اسفند-۱۳۸۸, ۲۱:۰۰:۰۷
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  2 در یک (خازن و سلف سنج) دقیق LC Meter با ATMega8 alimogmov 2 6,813 ۲۰-آبان-۱۳۹۷, ۰۳:۱۶:۵۰
آخرین ارسال: DJ-Sichan
  کمک....کار با تایمرها mahdieh_sh 10 5,061 ۱۰-آذر-۱۳۹۴, ۲۱:۴۶:۰۰
آخرین ارسال: alimogmov
  کریستال خارجی+کریستال ساعت در atmega8 cortex-m3 1 2,967 ۰۳-مرداد-۱۳۹۴, ۲۰:۱۳:۰۳
آخرین ارسال: sharin
  مشكل در راه اندازي ميكرو atmega8 fateme67hj 9 6,255 ۲۸-خرداد-۱۳۹۴, ۱۳:۳۲:۱۲
آخرین ارسال: fateme67hj
  [سوال] فرق میکرو atmega8 با atmega8-16ac biner 6 3,737 ۲۷-آبان-۱۳۹۳, ۱۸:۱۷:۴۳
آخرین ارسال: biner
  داغ شدن atmega8! behzady 12 11,368 ۱۳-آبان-۱۳۹۱, ۰۴:۲۰:۳۲
آخرین ارسال: delazad
  چگونگی ارسال اطلاعات به LCD توسط میکروکنترلر ATmega8 mohammadmiri 1 3,639 ۱۷-مهر-۱۳۹۱, ۲۳:۲۲:۴۱
آخرین ارسال: vigraz
  [سوال] ساختن فرکانس PWM 36KHz با تایمر 8 بیتی شماره 2 در ATMEGA8 jenab 5 7,615 ۱۸-اردیبهشت-۱۳۹۱, ۱۰:۰۴:۰۷
آخرین ارسال: ha_60
  راهنمایی برای ساخت دزدگیر با atmega8 alasht 7 9,878 ۱۴-فروردین-۱۳۹۱, ۰۶:۴۸:۳۹
آخرین ارسال: robojalal
Question استفاده از پورت سی در atmega8 Ambassador 12 9,331 ۱۶-بهمن-۱۳۹۰, ۱۸:۳۸:۰۴
آخرین ارسال: maxn@morteza

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS