صفحه 1 از 1
تایمر
ارسال شده: جمعه ۲۷ فروردین ۱۳۹۵, ۵:۲۸ ب.ظ
توسط javad_2010
سلام
من تونستم زمان 1ثانیه رو بعد از کلی اینور و اونور تو کد ویژن درست کنم

الان نمیدونم چطور ازش استفاده کنم!!!!!!
تابع DELAY میشه استفاده کرد یا باید اینو تبدیل به تابع کنم!!!!
نمیدونم

مثلا بخوام به صورت VOID درستش کنم یا DEFINE
Please Login or Register to see this code
Re: تایمر
ارسال شده: جمعه ۲۷ فروردین ۱۳۹۵, ۹:۰۳ ب.ظ
توسط sinaset
با سلام
چه نوع زمانی و برای چه کاری می خواهید درست کنید؟!
اگر هدفتان فقط درست کردن زمان 1 ثانیه برای تاخیر می باشد .
می توانید در هر خط مد نظرتان تایپ کنید
;(delay_ms(1000
اما اگر می خواهید به صورت جداگانه زمان را درست کنید باید از وقفه تایمر استفاده کنید ، تا به صورت جداگانه زمان را محاسبه کند.
فرقی این زمان به تاخیر delay این است که همه چیز مجزا از برنامه اصلی کار می کند . این در حالی است که وقتی شما ;(delay_ms(1000 را در برنامه می نویسید. وقتی سی پی یو به این خط می رسد! کل برنامه را به مدت 1 ثانیه نگه میدارید (و در این لحظه دیگر هیچ خط برنامه اجرا نمی شود!)
باتشکر.
Re: تایمر
ارسال شده: جمعه ۲۷ فروردین ۱۳۹۵, ۹:۵۷ ب.ظ
توسط javad_2010
با سلام
یعنی با تنظیمات انجام شده بالا.
فقط تنظیماتو انجام بدم.و بعد DELAY_MS(1000) رو بزنم یثانیه دقیق رپ انجام میده؟؟؟؟
من میخوام به صورت دقیق با وقفه 40 ثانیه ایی ال ای دی چشمک بزنه.
........................................................................................................
چون بدونه تنظیمات تایمر و استفاده از دستور delay زمانش دقیق نیست.اگر عدد4000 رو وارپ کنم دوره 40 ثانیه ایی نداره.
الان این تنظیمات رو انجام دادم نمیدونم درسته یا غلط بازم.تازه استفاده دقیق ازش رو هم نمیدونم.برای adc فهمیدم باید تبدیل به یه تابع بشه و بعد ازش استفاده کرد.ولی اینو نمیدونم
Re: تایمر
ارسال شده: شنبه ۲۸ فروردین ۱۳۹۵, ۸:۳۲ ق.ظ
توسط sinaset
سلام بر شما
البته باید بدانید چه فرکانسی هستید،سپس به کمک یک فرمول زمان تاخیر delay را بدست اورید .
اما اگر واقعا قصد شما،ساخت یک زمان دقیق است،باید از تایمر ها مجزا و به کمک وقفه های انها این مشکل رو حل کنید .
(که البته در مثال بالا شما از تایمر کانتر 1 ،که دقت بالایی دارد استفاده کردید.)
برای استفاده از تایمرها مجزا،شما باید بعد از مقدار دهی تایمر مد نظرتان. از توابع وقفه استفاده کنید، و بعد دستورات مد نظرتان را در انجا قید کنید.
به عنوان مثال:
Please Login or Register to see this codeبرای استفاده از بهتر از تایمرها،همیشه باید،از توابع وقفه ی استفاده کنید.
در مثال بالا،تایمر 0 میکروکنترولر، تا زمان 1 میلی ثانیه را می شمارد،(نسبتا دقیق و برای دقت بالا باید از کریستال استفاده کنید) سپس overflow می شود،یه به عبارت ساده تر،از حد و سقف مشخص توسط ما بیشتر میشود،سپس بعد از overflow شدن، دستورات وقفه را اجرا می کند.
پس هر دستوری که شما در تابع وقفه، بگذارید،بعد از overflow شدن تایمر،خوانده میشود .
در مثال بالا یک شرط گذاشته شده ، درصورتی که x تا عدد 1000 رسید، پورت D باید فعال شود. تابع هر 1 میلی ثانیه ی یک بار اجرا میشود،پس وقتی x به عدد 1000 میلی ثانیه می رسد،یعنی 1 ثانیه شده است .
باتشکر.
Re: تایمر
ارسال شده: شنبه ۲۸ فروردین ۱۳۹۵, ۷:۱۰ ب.ظ
توسط javad_2010
دوباره سلام
ببخشید من اصلا این قسمت تایمرها رو نمیتونم کامل درک کنم
ساختن زمان دلخواه
استفاده بع عنوان یع تابع ازش.مثل دیفاین کردن یه پورت
...................
مثال بالا اول تایمر مقدار دهی شد بعد یه دستور گرفت.بعد اومد پایین دویاره رجیستر مقدار دهی شد بعد دوباره دستور گرفت مثل دستور قبل.کانلا تو مبحث تایمرا گیج شدم.
Re: تایمر
ارسال شده: شنبه ۲۸ فروردین ۱۳۹۵, ۹:۱۰ ب.ظ
توسط sinaset
با سلام
اجازه بدید،توضیحات کامل تر رو بعدا در تاپیک آموزش ها قرار بدهم.
فقط این رو بدونید.تایمرها یک واحد جداگانه درون میکروکنترولر می باشند.که هر وقت میکروکنترولر در هر حالتی باشد! می تواند دستورات خودش را به صورت جداگانه اجرا کند!(که این کار رو به کمک وقفه ها انجام میدهد)
که این دستورات باید در اینتراپت ها (همان توابع که ذکر کردم) نوشته شود،تا بلافاصله بعد از اینکه،تایمر به میزان تایین شده رسید،دستورات را بررسی و کارهای لازم را انجام دهد.
باتشکر.