ايران ويج

نسخه‌ی کامل: ساختن فرکانس
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام دوستان

می خواستم بدونم مشکل این کد چیه.برای ساختن فرکانس 38 کیلو هرتز هست برای فتوترانزیستور
کد:
$regfile = "m8def.dat"
$crystal = 8000000

Config Pind.1 = Output
Do

Set Portd.1
Waitus 13
Reset Portd.1
Waitus 13
nop
Loop
برای ساختن فرکانس بهتره از تایمر استفاده کنید
دستور wait برای این کار مناسب و دقیق نیست
میشه کامل توضیح بدید؟؟
برای ساختن فرکانس 38 کیلو هرتز چه کار کنم؟من اول راهم
مثلاً:
فرکانس 8 مگ
پری اسکیل 8

در نتیجه در یک ثانیه تا 1 میلیون میکرو میشمره

اگه از تایمر 1 استفاده کنید چون 16 بیتیه یعنی حداکثر تا عدد 65536 میشمره در نتیجه در یک ثانیه 15 بار تایمر یک از اول تا آخر میشمره بعد یک بار هم تا 16960 میشمره. یعنی در یک ثانیه 15 بار پرچم سر ریز بالا میره و تا 16960 هم میشمره.

تا اینجا مقدمه ای بود در مورد تایمر

حالا:
فرکانس 38 کیلو یعنی طول موج هر سیکل 26.3 میکرو ثانیه است
فرکانس 8 مگ با پری اسکیل 8 میشه 1 مگ شمارش در یک ثانیه یعنی کافیه هر 13 میکروثانیه (نیم سیکل) یک بار تغییر وضعیت بده. برای این کار هم کافیه تا عدد 13 بشمره که این کارو با تایمر های 0 و 2 که 8 بیتی هستند هم میشه انجام داد.

حالا برای اینکه دقت بالا بره پری اسکیلو 1 بگیرین و تا 210 بشمرین
یه برنامه نمونه طبق صحبت های ایلگار جون :

کد php:
$regfile "m32def.dat" $crystal 8000000

Config Timer2 
Timer Prescale 1
On Timer2 Ant 
Enable Interrupts Enable Timer2 Start Timer2

Ddrb 
255

Do
Loop

Ant
:
   
Timer2 151
   Toggle Portb.0
Return 
سلام به دوستان

به به تاپیک زیر خاکی پیدا کردم :-)

میگم شرمنده ها، Shy اول اینکه توضیح بدین فرکانس یعنی چی ؟ تا بعد بگم چه فرکانسی می خوام تولید کنم.
من تا اسم فرکانس رو میشنوم ، یه شکل موج توصفحه اسیلوسکوپ میاد توذهنم ، بگین که همینطوریه :-)
اطلاعاتم فوران کرد :-)

نقل قول: اول اینکه توضیح بدین فرکانس یعنی چی ؟

خب مسلم جان،‌ فرکانس، اندازه گیری تعداد تکرار اتفاقی در واحد زمان است. برای محاسبه فرکانس بر روی یک بازه زمانی ثابت، تعداد دفعات وقوع یک حادثه را در آن بازه می شماریم و سپس این تعداد را بر طول بازه زمانی تقسیم می کنیم. پس از فیزیک دان آلمانی هاینریش رودولف هرتز، در سیستم واحدهای SI فرکانس با هرتز(Hz) اندازه گیری می‌شود. یک هرتز به این معنی است که یک واقعه یک بار بر ثانیه رخ می‌دهد.

واحدهای دیگری که برای اندازه گیری فرکانس بکار می‌روند به این شرح هستند: سیکل بر ثانیه، دور بر دقیقه (rpm). سرعت قلب توسط واحد ضربان بر دقیقه اندازه گیری می‌شود. یک روش جایگزین برای محاسبه فرکانس، اندازه گیری زمان بین دو رخداد متوالی حادثه‌ای است (دوره تناوب) و سپس محاسبه فرکانس به صورت عددی متقابل این زمان مانند زیر:


f=1/T
[تصویر:  350px-Wave_frequency.gif]

که در آن T دوره تناوب است.

خب یک از دوستان لطف کنه اون کد پست شماره 5 رو یه توضیح کوچولو بده، پست علی تریپ جان .

ایکه اون اعداد برا چی اون اعداد هستن و ...

[attachment=9663]
سلام

خب من الان می خوام فرکانس 50 هرتز تولید کنم، توکد بالا باید چه تغییری بدم؟ اصلاً اون کد بالا فرکانس چند هرتز درست می کنه؟
بازم سلام

مرتضی جان میگم من توخم ابروی طرف موندم چه برسه به قلب و مغز طرف :-)

من اگه بخوام با تایمر 1 زمان و فرکانس تولید کنم فرمولش میشه این :

زمان = (تایمر بیت * Prescale) / مقدار کریستال
فرکانس = مقدار کریستال / Prescale

طبق مثال یک نفر امده با استفاده از کریستال 4 مگا هرتز و Prescale 64 مقدار 1.04 ثانیه تولید کرده، فعلاً می خوام بدونم که این اعداد چطوری داخل فرمول زمان قرار گرفتن که شده این؟ و تایمر 1 ،16 بیتیه دیگه؟
فرکانس شمارش : F_MCU/Prescale
زمان 1 شمارش تایمر ، می شه عکس رابطه ی بالا.
اگر تایمر 8 بیتی باشه ، مثل تایمر0 :
256 * رابطه ی زمانی بالا کنی ، زمانی که طول می کشه تایمر 8بیتی 1 بار سر ریز بشه بدست می یاد.
دوبارهه عکس اش کنی فرکانسش دست می یاد. که همون فرکانس سیگنالی هست که ساختی.

تمام چیزایی که می گم برای مود fast pwm هست.

در این حالت OCR0 یا در بسکام pwma ( ؟ ) می تونه بین 0 تا 255 تغییر کنه و DutyCycle سیگنال ساخته شده رو تغییر بدهه.

اگر بخوای فرکانس دقیق بسازی ، باید به رجیستر تایمر مقدار اولیه بدی که مثلا از 0 شروع نکنه به شمارش و از 25 شروع کنه .
یعنی :
Timer0 = 25

حالا به جای اینکه 256 تا بشمارهه ، تایمر0 - 256 می شمارهه و اینطوری می تونی فرکانس دقیق بسازی.
نکته !
بعد از سر ریز شدن تایمر0 ، مقدار تایمر0 از 0 شروع می شه ، نه اون 25 ای که اول کار بهش دادی . باید چکار کنیم؟
ساده ست ، وقفه ی سر ریز تایمر0 رو فعال می کنی و با وقوع وقفه ، در روال وقفه تایمر0 رو دوبارهه مقدار دهی می کنیم.
مثلا :
کد php:
_Isr
{
timer0 25;


با این کار OCR رو بین تایمر0 تا 255 برای تایمر 8 بیتی میتونی مقدار دهی کنی.
-------------
یه تشکری کنم بابت سوالی که کردی :)
خودم با محاسبه کار می کردم می دیدم جواب چیزی نیست که می خوام ، تجربی تا حدودی حلش کردم ( حوصله نداشتم ببینم مشکل از کجاست :) )
الان باعث شد اشکال کار منم درآد :)
هم جدول کتابم مشکل داشت که دیتاشیت دانلود کردم و تصحیحش کردم ، هم فرکانس متری که ساخنه بودم و نتایج رو توش می دیدم :)

موفق باشی :)
منم یه سوال این وسط بپرسم ؟
بهترین راه برای نمونه برداری از یه فرکانس چیه (فرکانس که نمیشه گفت اما نمونه برداری از یک سری پالس با سرعت بالا یعنی بالاتر از یک وصفر شدن پین ) بعد چطور اینا را با همون ترتیب روی سیستم مانیتور کنم
کار با پورت سریال را بلدم
صفحه‌ها: 1 2