دوشنبه, اردیبهشت 24, 1403
More

    LED چشمک زن با میکروکنترلر AVR

    اموزش برنامه نویسی میکروکنترلرهای avr (جلسه نهم)

    در مطالب قبل شما با نحوه برنامه نویسی میکروکنترلر AVR و برنامه کدویژن اشنا شدید. برای درک بهتر شما از برنامه نویسی میکروکنترلر و نحوه ریختن برنامه روی میکرو و … تصمیم گرفتم در این پست یک پروژه ساده با عنوان led چشمک زن قرار بدهم.

    اهدف پروژه led چشمک زن :

    • اشنایی با پین های میکروکنترلر ATmega16
    • اشنایی با پروگرام کردن میکرو با نرم افزار AVR Studio
    • کتابخانه ها و نحوه استفاده از انها
    • اشنایی با برخی از دستورات در کدویژن
    • و …

    توضیح : در این پروژه ساده, دو led از طریق دو مقاومت به پایه های PC0 و PC1 (پین های 22 و 23) میکرو وصل شده اند. در صورتی که با پین های مگا 16 اشنا نیستید, حتما پست “اشنایی با پین های میکروکنترلر ATmega16/32” را مطالعه کنید. در ابتدا led متصل به پین PC0 روشن شده و پس از یک ثانیه این led خاموش, و led متصل به PC1 روشن می شود. پس از یک ثانیه led متصل به PC1 خاموش و led متصل به PC0 روشن می شود و این روند ادامه دارد… که به این پروژه ساده LED چشمک زن می گویند (البته اینجا دو ال ای دی استفاده شده) .
    شماتیک به صورت زیر می باشد :

    توجه : در شماتیک بالا بدلیل اینکه در برنامه پروتئوس پایه های تغذیه برای این میکرو وجود ندارد وصل نشده, ولی در عمل پایه های تغذیه میکرو(پایه 10 و 11) را به 5 ولت وصل کنید

    قبل از توضیح برنامه بهتره که با کتابخانه در کدویژن اشنا بشید:

    کتابخانه ها در کدویژن به زبان ساده, یکسری برنامه های از پیش نوشته شده هستند که به منظور راحتی ما برای کار با قطعات و ماژول های مختلف استفاده می شوند. هر کتابخانه در نرم افزار کدویژن دارای یک سری توابع هست که ما پس از معرفی کتابخانه مورد نظر در ابتدای برنامه, میتوانیم از توابع این کتابخانه در برنامه خود استفاده کنیم . نحوه معرفی کتابخانه در کدویژن به صورت زیر می باشد :

    به عنوان مثال یکی از پر استفاده ترین کتابخانه های کدویژن کتابخانه delay است که برای ایجاد تاخیر به مقدار مورد نظرمان استفاده می شود, معرفی این کتابخانه در ابتدای برنامه به صورت زیر است:

    که پس معرفی این کتابخانه, می توانیم از توابع ان در برنامه خود استفاده کنیم به عنوان مثال یکی از توابع این کتابخانه به صورت زیر می باشد :

    که این تابع از کتابخانه delay تاخیری به مدت 1000 میلی ثانیه یا معادل یک ثانیه ایجاد می کند که از این تابع در برنامه led چشمک زن استفاده شده است با تغییر مقدار عدد داخل پرانتز می توانیم مقدار تاخیر مورد نظر را ایجاد کنیم .

    برنامه : 

    در پست های قبل با محیط نرم افزار CodeVisionAVR اشنا شدید و نحوه ایجاد یک پروژه را یاد گرفتید و با قسمت های مختلف برنامه کدویژن اشنا شدید. در ادامه برنامه نوشته شده برای این پروژه خط به خط توضیح داده می شود :

    ابتدا یک پروژه ایجاد کنید و میکرو را ATmega16 انتخاب کنید. فرکانس را روی یک مگاهرتز تنظیم کنید و در قسمت port پین های 0 و 1 از پورت C را خروجی تنظیم کنید. در برنامه زیر کدهای اضافی ایجاد شده و توضیحات حذف شده است (می تونید حذف نکنید من برای ساده تر شدن برنامه حذف کردم)

    توجه :

    • تمام کدها بجز کدهای داخل حلقه while توسط خود کدویژن ایجاد شده است
    • در زبان c پس از هر دستور باید از علامت سیمی کالن (;) استفاده کرد, در صورت فراموشی کدویژن خطا (error) می گیرد
    • عباراتی که داخل   /*توضیحات*/   نوشته می شود, توضیحات برنامه هستند و تاثیری روی برنامه ندارند
    • توجه کنید که از هر میکرویی که استفاده می کنید در ابتدای برنامه باید کتابخانه ان را فراخوانی کنید
    • تابع DDRC برای تعیین خروجی یا ورودی بودن پین های پورت C استفاده می شود هر کدام از پین های 0 تا 7 در صورتی که صفر باشد به معنی ورودی و در صورت یک کردن به معنی خروجی بودن ان پین می باشد(برای بقیه پورت ها هم بجای C اخر تابع, پورت مورد نظر را می گذاریم)
    • تابع PORTC برای مشخص کردن این است که پین های پورت مورد نظر مقاومت بالا کش داشته باشند یا نه 

    پروگرام کردن میکروکنترلر (ریختن برنامه روی میکرو) :

    مرحله اخر این پروژه پروگرام کردن میکرو می باشد, توسط خود کدویژن هم می شود میکرو را پروگرام کرد ولی بهتره که پس از ایجاد فایل هگز توسط کدویژن این فایل را توسط برنامه دیگری به نام AVR Studio روی میکروکنترلر پروگرام کنید. AVR Studio یک کامپایلر بسیار حرفه ای برای برنامه نویسی و پروگرام کردن میکرو می باشد که ما فقط برای پروگرام کردن فایل هگز روی میکرو از ان استفاده می کنیم . در ادامه نحوه ریختن برنامه روی میکرو با این نرم افزار توضیح داده می شود .

    1- ابتدا این برنامه را تهیه و نصب کنید.

    2- پس از باز کردن برنامه با پنجره روبرو مواجه می شوید که روی Cancel کلیک کنید و بر روی قسمت مشخص شده در تصویر دوم کلیک کنید

    3- در پنجره باز شده نوع پروگرامر خود و برای انتخاب شماره ی COM در device manager کامپیوتر خود در قسمت Ports ببینید پروگرامر شما به کدام شماره ی COM متصل است و در نهایت روی Connect کلیک کنید

    4- پنجره زیر باز می شود, در قسمت Main نوع میکرو را انتخاب کنید

    5- در قسمت Program ابتدا با کلیک بر روی Erase Device حافظه فلش میکروکنترلر را پاک کنید. در بخش Flash فایل هگز را انتخاب کنید و بر روی Program کلیک کنید تا برنامه روی میکرو ریخته شود 

    6-  در قسمت Fuses فرکانس مورد نظر (برای این پروژه یک مگاهرتز) را از بخش SUT_CKSEL انتخاب کنید و درصورتی که JTAGEN تیک داشت بردارید و در نهایت بر روی Program کلیک کنید تا فیوز بیت های میکرو هم تنظیم شود 

    اگر تمام مراحل را به درستی انجام داده اید میکرو به درستی پروگرام شده و می توانید ان را در مدار قرار دهید

    کلیپ تست عملی :

    دانلود فایل ها

    پسورد فایل زیپ : www.emic.ir

    نظر یادتون نره…

     

    اموزش برنامه نویسی میکروکنترلرهای avr :

     

     

    عابد رازانی
    عابد رازانیhttps://emic.ir/
    فارغ التحصیل کارشناسی الکترونیک از دانشکده باهنر شیراز و علاقمند به برنامه نویسی و طراحی مدارات الکترونیکی, در حال حاضر به تولید محتوای آموزشی و طراحی و انجام پروژه مشغول هستم.

    17 نظرات

    1. کسی میتونه این سوال رو حل کنه؟
      برنامه ای بنویسید که یک LED متصل به پایه ی دلخواه میکروکنترلر را ده بار خاموش و روشن کند پ سپس برنامه پایان یابد(در محیط کد ویژن)؟

      • سلام مهندس جان خوب هستی میتونید طب مالیه چشمک زدن این ال ای دی ها رو به این صورت که میگم برام برنامه ریزی کنید
        Led1: *-*———————————-
        Led2: —–*-*—————————–
        اگر هر خط تیره مثلا معادل یک دهم ثانیه خاموشی باشه و هر * معادل یک دهم ثانیه روشن بودن .
        هر ال ای دی پس از دو بار چشمک سریع (double flash) مدت ۲.۵ ثانیه خاموش میمونه و حلقه ادامه داره
        ولی شروع چشمک زدن Led2 , (مدت مثلا ۲دهم ثانیه) پس از خاموشی Led1 شروع میشه.

    2. سلام خسته نباشید
      با چه برنامه ای میتونم شبیه ساز رو ببینم
      و چجوری میتونیم بفهمیم خروجی از کدوم پایه ها هستن؟

    3. با سلام و تشکر از مطالب مفیدتون
      دو تا سوال داشتم
      با ریختن بوت لودر اردوینو در میکروی اتمگا16 پایه های میکرو عوض میشه و برنامه هایی که قبلا با کدویژن نوشتیم نیاز به تغیر داره یا نه؟؟
      سوال دومم اینه که این کار قابل برگشته ؟؟ یعنی میشه دوباره به همون میکروی تنظیم کارخونه برگردوند؟چگونه

      • سلام, معمولا برای ساخت برد اردوینو از میکروکنترلر ATmega328 یا ATmega2560 یا دیگر میکروکنترلرهایی که بردهای اردوینو را با انها می سازند, استفاده می شود و توصیه می کنم که از این میکروها استفاده کنی نه mega16 یا… و بله برنامه نوشته شده با کدویژن برای اردوینو باید تغییر کند. از اونجایی که بوت لودر روی حافظه فلش میکرو ریخته میشه پس میشه دوباره اونو از روی میکرو حذف کرد که می تونید در موردش سرچ کنید

      • سلام میخواستم یک کمکی کنید برام من امتحان دارم میکرو کامپیوتر که یک پروژه است یک ledیک ثانیه روشن ویک ثانیه خاموش با تایمر برنامه نویسی تورو خدا هرکی بلده به این شماره پیام بده تو واتساپ09337626559

    4. سلام ببخشید میشه خیلی ساده و روان جوری که متوجه شم کاربرد تایمرها و وقفه در میکرو کنترلر رو بهم توضیح بدید من خودم دانشجو رشته الکترونیک هستم اما هیچ دقیق و خوب این موضوع رو نفهمیدم که چه موقع خوبه از تایمرها و وقفه ها استفاده کنم ممنون

      • سلام, مطالب زیادی در مورد تایمر/کانتر و وقفه در اینترنت هست که می تونید مطالعه کنید, ولی معمولا از تایمر برای تولید شکل موج در خروجی میکرو یا شمارش یک پالس استفاده میشه و وقفه هم کاربرد ان به این صورت است که در زمانی که اتفاق بیفتد روال عادی اجرای برنامه متوقف میشه و زیر برنامه ای که برای وقفه نوشتیم اجرا میشه و بعد از اتمام اون دوباره ادامه برنامه اجرا می شود که با استفاده از وقفه کدنویسی ما بسیار کمتر می شود. مثلا فرض کنید ما یک پروژه طراحی کرده ایم که کارهای مختلفی مانند کنترل دمای محیط, کنترل روشنایی و … انجام می دهد, در این پروژه در صورتی که دمای محیط به 30 درجه رسید باید سریعا یک فن روشن شود. در این شرایط می تونیم از وقفه استفاده کنیم تا زمانی که دما به 30 درجه رسید اجرای برنامه متوقف شود و سریعا یک فن روشن شود و پس از روشن شدن فن دوباره ادامه برنامه اجرا شود

        • برنامه ای بنویسید که یک LED متصل به پایه ی دلخواه میکروکنترلر را ده بار خاموش و روشن کند پ سپس برنامه پایان یابد(در محیط کد ویژن)؟
          اینو میشه حل کنید

    5. سلام.
      یه سوالی داشتم در مورد تاخیر.
      من چنتا ال ای دی دارم میی خوام که متفاوت از هم روشن بشن. ولی مشکل اینجاس که وقتی ال ای دی اول روشن می شه تا بر نامه برسه به روشن کردن ال ای دی 4 تاخیرا باعث می شه که فواصل زمانی بهم بخوره.
      چاره چیه؟ (:unknw:)

      • خوب وقتی تاخیر در برنامه بزارین تا زمان تاخیر سپری نشه کار دیگه ای انجام نمیشه
        اینجاست ک تایمرها به کار میان
        شما باید برای هر تاخیر از تایمر میکرو استفاده کنید
        اینجوری میکرو به بقیه دستورات عمل میکنه و تایمر هم مسول تاخیر زمانی میشه

    ارسال دیدگاه

    لطفا نظر خود را وارد کنید!
    لطفا نام خود را اینجا وارد کنید

    spot_img