نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی زمانی

آموزش آرم stm32f103 جلسه ۶ دیلای های دقیق

339

سلام دوباره؛ جلسه قبلی ( آموزش آرم stm32f103 جلسه ۵ کانفیگ اولیه تایمر ) رو یادتونه؟ خب داخلش ی قولی دادیم که بریم سراغ اینکه با تایمر یکسری دیلای بسازیم تا دقیق دربیاد؛ حالا میخوایم ی تایمر رو جوری پیکر بندی کنیم که چنتا زمان دقیق رو بهمون بده و روی دستورات تاخیر استفاده کنیم.
آموزش آرم stm32f103 جلسه 6 دیلای های دقیق

آموزش آرم stm32f103 جلسه ۶ دیلای های دقیق


برای این کار من دوتا تابع مینویسم یکی برای تاخیر میلی ثانیه و دیگری برای تاخیر میکرو ثانیه؛ برای راحتی کار اول تاخیر میکرو ثانیه رو میسازیم (واحد کوچیک تر) و بعدش تاخیر میلی ثانیه رو بر اساس میکرو ثانیه میسازیم (مثلا توی میلی ثانیه مینویسم اینقد میکرو ثانیه صبر کن )؛ خب، این توابع رو اینجوری اسم میزارم و یک ورودی براش تعریف میکنم

حالا باید یک متغیر سراسری تعریف کنیم تا کل زمان ها رو داخلش نگه داریم برای اینکار هم یک متغیر گلوبال تعریف میکنم؛ اینجوری :

میریم توی وقفه تایمر تا دستورات مربوطه رو اونجا بنویسیم؛ اونجا باید اگر متغیر DELAY_US مقدار داشت ازش کم کنیم (یعنی هر باری که تایمر سر ریز میشه یکی از این متغیر کم کنه تا به ۰ برسه؛ پس یک شرط  میزاریم برای اینکار و دستور کم شدن مقدار رو توی اون شرط مینویسیم (تا اگر متغیر ۰ بود  دیگه ازش کم نکنه )؛ اینجوری مینویسیم :

حالا کل تابع تایمر ما میشه این :

میریم سراغ اصل تابع دیلای اونجا باید ی دستوری بنویسیم تا مقدار متغیر زمان یعنی DELAY_US مساوی با ۰ نشده برنامه رو توی همون خط نگه داره اینجوری مینویسیم :

خط اول میاد ورودی تابع رو میریزه توی متغیر زمان تا تایمر بتونه ازش کم کنه
خط دوم هم میاد منتظر میمونه تا مقدار متغیر که یکی یکی توسط تایمر کم میشه صفر بشه ……
خب تا اینجا میکرو ثانیه رو ساختیم برای میلی ثانیه هم اینجوری عمل میکنیم که برای هر میلی ثانیه ۱۰۰ میکرو ثانیه توقف میکنیم یعنی از میلی ثانیه رو هم بر اساس تابع میکرو ثانیه میسازیم که کل این تابع میشه ابن :

خب تمومه دیگه الان دوتا تابع داریم که دیلای هایی دقیق رو برامون بر اساس تایمر میسازن smile
از تاخیر بین جلسات عذر خواهی میکنم سرم شلوغ شده درگیر چنتا پروژه هستم
انشالله سری بعد اموزش ها تایمر هست و بعدش کتابخونه برای nokia 5110 lcd مینویسم.
در ضمن stm یک انجمن قوی و خوب هم داره میتونید برای سوالتتون ازش کمک بگیرید : انجمن stm
موفق باشید  heart

EscortNavi

درباره : 
تعداد مطالب : 20 تا
مهدی زمانی هستم متنفر از کلیشه های تکراری پادگان انجام پروژه های التیوم و برنامه نویسی میکروکنترلر پذیرفته میشود تلگرام : @stm32f اینستاگرام:zamanimahdi77 ایمیل:timahdizamani@gmail.com
بقیه جلسات : آموزش آرم stm32f103
ارسال دیدگاه
10
نظرات این مطلب بسته شده است.
  1. مهدی

    مهمان

    مهدی

    سلام استفاده از وقفه برای تولید تاخیر اگر توی یک تابع وقفه باشیم مشکل بوجود نمیاره؟ توی تابع وقفه ها به طور خودکار وقفه غیر فعال میشه و ورود به دستور تاخیری که با وقفه غیر فعال شده کار میکنه باعث یه حلقه بی نهایت میشه
    راه حلی بجوز استفاده از تکنیک وقفه های تو در تو وجود داره برای stem ها؟

  2. محمد

    مهمان

    محمد

    سلام
    آقا ما موفق نشدیم
    میشه بیشتر راهنمایی کنید؟تاخیر ایجاد میشه ولی دقیق نیست اصلا
    خیلی فرق میکنه با مقدار تنظیم شده

    مشاهده پاسخ ها (1)
    • حمید

      مهمان

      حمید

      سلام به دوستان. در تایپیک من یه مشکل کوچیک دیدم اونم اینکه هر 1000 میکرو ثانیه میشه 1 میلی ثانیه نه هر 100 میکرو
      پس احتمالا اگه بجای 100 عدد 1000 بزارین در صورت صحیح بودن برنامه تون تاخیر خیلی دقیقی بدست میارین

  3. مجید

    مهمان

    مجید

    اگه میشه آموزشا رو کامل کنید

    مشاهده پاسخ ها (1)
    • مهدی زمانی

      نویسنده این مطلب

      مهدی زمانی

      سلام بلهیکم وقتم ازاد بشه

  4. احسان

    مهمان

    احسان

    خیلی عالی هستین خدا خیرتون بده جهاد علم و ذکاته خوبی برای خودتون میدین..
    ادامه بدین لطفا…

    مشاهده پاسخ ها (2)
    • مهدی زمانی

      مهمان

      مهدی زمانی

      چشم حتما

    • مهدی زمانی

      نویسنده این مطلب

      مهدی زمانی

      چشم حتما

  5. دانیال

    مهمان

    دانیال

    واقعا افرین باید بهت گفت
    خسته نباشید و ارزوی موفقیت دارم براتون

    مشاهده پاسخ ها (1)
    • مهدی زمانی

      نویسنده این مطلب

      مهدی زمانی

      مچکرم قربان