سلام دوستان چطوری با تایمر میکرو زمان نیم ثانیه تولید کنم ؟؟
اطلاعیه
Collapse
No announcement yet.
کمک در تولید زمان نیم ثانیه
Collapse
X
-
پاسخ : کمک در تولید زمان نیم ثانیه
خب این راحته
یه راه اینه که از تایمر 1 کمک بگیرید و مستقیما 500 میلی رو تولید کنید.
راه دیگه اینه که یه مرجع(مثلا" 1 یا 10 یا 100 میلی)بسازید و ازش انشعاب بیشتری بگیرید.
من خودم اکثرا راه دوم رو انتخاب میکنم. چون با یه تایمر چندین زمان میشه ساخت!!!
راه اول:
این فرمول رو یکی از آشناهامون بهم داد و توی همین سایت هم گذاشتتش:
(کریستال/پرسکال/زمان)=n
یعنی مثلا:
(0.5/8/1000000)=62500
یعنی باید این مقدار تایمر 1 کار کنه
پس:
3035=62500-65535
یعنی باید همیشه مقدار تایمر 1 برابر 3035 باشه تا تایمر در .0.5 ثانیه سرریز بشه
راه دوم:
همون قضایای بالا برای 100 میلی ثانیه:
که مقدار فرمول میشه 12500 و مقدار تایمر در میاد 53035
و طرز استفادش هم اینطوره که شما توی سرریز تایمرتون یه متغیر میزارید که هی بهش اضافه بشه.
بعد در هر جای برنامه که خواستین میاین میگید که اونو چک کنه و اگه به مقدار دلخواه رسید استفاده بشه و دوباره صفر بشه.
مثلا میگید اگر 100 شد(یعنی 10 ثانیه) کاری رو که میخواید انجام بده و دوباره 0 بشه. همین(فقط فکرشو بکنید شما چقدر زمان میتونید اینطور بسازید) البته فراموش نشه که اگر زیر روال وقفه تایمر از یه حدی بیشتر بشه ممکنه زمان رو بهم بریزه!!!
نیست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر یاد نداد استادم
دیدگاه
-
پاسخ : کمک در تولید زمان نیم ثانیه
:cry:
من یه مشکلی با این مدل برنامه نویسی دارم
وقتی به تایمر مقدار میدی تایمر سرریز نمیشه
میشه برنامه نمونه بزارین ساناز خانوم ؟
فقط میخوام ببینم ریجیستر ایمر رو چه طور پر میکنید
مقدار دهی شما به تایمر چه طوره ؟ ؟
timer1=120
?[move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]
دیدگاه
-
پاسخ : کمک در تولید زمان نیم ثانیه
نوشته اصلی توسط arashdjممنون
اگه میشه توی تایمر 3 فرکانس 8
یه کلید دارم با یه بار فشار 5 ثانیه ست بشه بعد خاموش بشه
روش اول یا دوم فرق نمیکنه
نوشته اصلی توسط حامد رحیمیمن یه مشکلی با این مدل برنامه نویسی دارم
وقتی به تایمر مقدار میدی تایمر سرریز نمیشه
میشه برنامه نمونه بزارین ساناز خانوم ؟
فقط میخوام ببینم ریجیستر ایمر رو چه طور پر میکنید
مقدار دهی شما به تایمر چه طوره ؟ ؟
timer1=120
اینو که الان نوشتم برای 500 میلی ثانیه هستش و کاملا هم دقیقه. میتونید امتحانش هم کنید.
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Timer , Prescale = 8 ' For 500 mili Secend
Enable Interrupts
Enable Ovf1
On Ovf1 Tiker
Timer1 = 3035
Start Timer1
Ddrb.0 = 1 : Portb.0 = 0
Do
Wait 1
Loop
Tiker:
Timer1 = 3035
Toggle Portb.0
Return
نیست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر یاد نداد استادم
دیدگاه
-
پاسخ : کمک در تولید زمان نیم ثانیه
خیلی عالی ببود
برای کار با ساعت
ایده ی خوبی دارم
میشه ساعتی رو که میخوای اون موقع رله خاموش شه تو خود دی اس ذخیره کرد
اخه 60 تا فضای 1 بایتی داره :redface:
تو خود e2 میکرو هم میشه ذخیره کرد که اگه برق میکرو قطع شد پاک نشه[move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]
دیدگاه
-
پاسخ : کمک در تولید زمان نیم ثانیه
سلام من مد تایمر را CTC گذاشتم و باتوجه به اینکه می خواهم هر 15.3میکروثانیه اینتراپت بده مقدارش را f4 قرار دادم حالا که میخوام چک کنم ببینم ،تایمر کانتر من درست کار می کند گفتم یکی از پورتامو مکمل کند ،متاسفانه در پرتئوس ورزن 7.7 هر 15.3 میکروثانیه پورتم را مکمل نمی کند؟(یا موج مربعی تشکیل می شود ولی هر15.3میکروثانیه این اتفاق نمی افتد؟؟)من سعی می کنم برنامه ام را در این پست شر کنم به نظرتون مشکل من در چیست؟
مراحل تولید:
با استفاده از فرمول زیر (فرمول از دیتا شیت مگا 16 گرفته شده) مقدار OCRn را محاسبه کردم:
fOCn=1/(2*15.3 us) ,
fclk_I/O=16 MHz ,
N=1 ,
OCRn=243.8
که چون این عدد باید به صورت دیجیتال باشد آن را به مقدار 244 تقریب میزنیم که در این صورت فاصله اینتراپت به 15.3125 us تغییر می یابد ، حال اگر مقدار 244 را به مبنای 16 ببریم برابر مقدار f4 میآشود.
244 = (f4)16
سپس در ویزارد یکی از تایمرها را مطابق شکل زیر تنظیم کردم و همانطور که در شکل دیده میآشود مقدار f4 را نیز در باکس compare وارد کردم .
و همچنین برنامه را به صورت زیر نوشتم :
PORTB.0=!PORTB.0;
http://up6.iranblog.com/files2/c1squere-wave-test-timer-.rar
دیدگاه
دیدگاه