من این تاپیک رو چند هفتس گذاشتم ولی هیچ کس راهنمایی نکرده :sad: :sad: :sad:
سلام
راستش من سی کار نمیکنم :sad:
اما سوالهای شما یه جوریه
پیشنهاد من اینه که:
خودتون شروع به برنامه نویسی کنید بعد اگه به مشکل برخوردید یه تاپیک بزنید و از دوستان بخواید که کمکتون کنند
اما فکر نکنم کسی اینجوری به شما کمک کنه که کل برنامه رو همراه با شبیه سازی براتون بنویسه
موفق باشید
ِِDie for Life, Not Live to Die Freedom Fighter
" ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید
باید تایمر رو جوری برنامه ریزی کنی که هر 100میلی ثانیه بهت اینتراپت بده چون صدم شمار داشته باشی.
بعد یک متغیر توش میزای که هر وقت 10 شد یعنی یک ثانیه و دوباره صفر شه.وقتی 10 شد به متغیر ثانیه یه دونه اضافه میشه.وقتی متغیر ثانیه 60 شد صفر میشه و به متغیر دقیقه یک دونه اضافه میشه و دوباره وقتی 60 شد صفر میشه و به متغیر ساعت یک دونه اضاف میشه.بعد یک کلید به اینتراپت متصل میکنی که هر وقت زده شد برنامه تو یه Loop میفته وعدد متغیر ها رو LCD ثابت میشه.
و دوباره یک کلید میزاری که صفر کننده باشه و تمام متغیر ها رو مسوی صفر کنه و بپره اول برنامه و دوباره تایم گیری کنه
خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...
سلام
چطور میشه تایمر رو جوری برنامه ریزی کنی که هر 100میلی ثانیه(یا هر عدد دیگه ای) بهمون اینتراپت بده؟؟؟؟؟؟؟؟؟؟
فرمولش اینه:
n = ( ZamaneBeyneDoInterrupt * ClockCPU)/ prescaller
بعد از اینکه n رو تعیین کردی میتونی توی مد CTC مقدار رجیستر OCR را برابر با n-1 بزاری و سپس مقدار رجیستر TCCR رو به درستی (تعیین پری اسکیلر و مد) تنظیم کنی.
از این به بعد برنامت به اندازه ی ZamaneBeyneDoInterrupt یکبار وارد روتین وقفه مقایسه تایمر میشه
راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
انشالله به زودی تاپیک ها به روز رسانی خواهد شد،
با تشکر از جوابتون
یه سوال دیگه هم داشتم
اینکه مثلا اگر کریستال 16Mhz خارجی قرار دهیم و تایمر از 0x37 تا 0xff بشمرد این زمان 100 میلی ثانیه طول می کشد را چطور محاسبه می کنن؟(اینکه 100 میلی ثانیه طول میکشه چطور محاسبه میشه ؟)
با تشکر از جوابتون
یه سوال دیگه هم داشتم
اینکه مثلا اگر کریستال 16Mhz خارجی قرار دهیم و تایمر از 0x37 تا 0xff بشمرد این زمان 100 میلی ثانیه طول می کشد را چطور محاسبه می کنن؟(اینکه 100 میلی ثانیه طول میکشه چطور محاسبه میشه ؟)
خوب منکه فرمول کلی رو تو پست قبل دادم:
شما میخوای رو میکرو 16مگاهرتز 100 میلی ثانیه یکبار اینتراپت بخوری ،خوب بزار تو فرمول که میشه:
خوب حالا باید پری اسکیلر را معین کنید. اگر مقدارش رو برابر 8000 بزارید(که تو میکروهایی که حداقل من میشناسم امکان پذیر نیست) مقدار n=200 میشود ،پس تایمر باید 200تا بشمرد تا 100 میلی پانیه طول بکشه(اگه دقت کنید اختلاف 0x37 تا 0xff برابر 200 است)
البته با میکروهای معمولی که حداکثر پری اسکیلر برای تایمر در اونها 1024 است ، وقفه 100 میلی ثانیه را میتوان با تایمر های 2 بایتی یا به صورت نرم افزاری ،ایحاد کرد.
راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
انشالله به زودی تاپیک ها به روز رسانی خواهد شد،
خوب حالا باید پری اسکیلر را معین کنید. اگر مقدارش رو برابر 8000 بزارید(که تو میکروهایی که حداقل من میشناسم امکان پذیر نیست) مقدار n=200 میشود ،پس تایمر باید 200تا بشمرد تا 100 میلی پانیه طول بکشه(اگه دقت کنید اختلاف 0x37 تا 0xff برابر 200 است)
البته با میکروهای معمولی که حداکثر پری اسکیلر برای تایمر در اونها 1024 است ، وقفه 100 میلی ثانیه را میتوان با تایمر های 2 بایتی یا به صورت نرم افزاری ،ایحاد کرد.
ممنون از جوابتون
الان من اگر بخوام یه ساعت درست کنم با دقت صدم ثانیه باید فاصله بین هر دو اینتراپت برابر( 1/100) ثانیه باشد با قرار دادن در فرمول (با فرض کلاک 8MHZ برای میکرو) n برابر eft]n= (10 * 8*10)/ prescaller = 80000 /prescaler[/left]
اگر پری اسکالر را 1024 فرض کنم تعدادی که تایمر باید بشمرد می شود 78.125 که عددی اعشاری است و فکر نکنم تایمر بتواند بشمرد اگر هم پری اسکالر را 256 در نظر بگیرم تعدادی که تایمر باید بشمرد می شود 312.5 که تایمر صفر از 0 تا 255 می تواند بشمرد پس برای ساختن کلاک یک ساعت با تایمر صفر چه باید کرد لطفا راهنمایی فرمایید.
دیدگاه