نمونه برنامه بیسیک برای میکروکنترلر

برنامه بیسیک
این برنامه ها برای یادگیری کار با میکروکنترلر بسیار مناسب می باشند. برای شروع یادگیری میکروکنترلر ابتدا فایل های آموزش میکروکنترلر با زبان ساده را از قسمت آموزش دانلود نمایید و کاملا مطالعه کنید، سپس کتاب میکروکنترلر های AVR نویسنده علی کاهه (از انتشارات نص) را تهیه نمایید. در این صورت برنامه های این قسمت برای شروع یادگیری میکروکنترلر از صفر بسیار مفید خواهند بود. توصیه می شود در ابتدا تمامی مدارات این قسمت را پروگرام کرده و بر روی برد برد ببندید. سپس بعد از این مرحله سعی کنید قسمت هایی از برنامه را تغییر دهید. این برنامه ها با نرم افزار Bascom AVR نوشته شده اند. لازم به ذکر است که نرم افزار Bascom AVR برای کسانی مناسب است که نخواهند کار حرفه ای با میکروکنترلر انجام دهند و فقط برای کارهای ساده از آن استفاده کنند. زیرا این زبان ساخت یافته نیست به این معنی که دستورات نرم افزار Bascom AVR با نرم افزار های دیگر مانند PIC Basic یا Fast AVR تفاوت دارد. اما این نرم افزار با نرم افزار Bascom 8051 بسیار شبیه هم هستند. در عوض زبان C ساخت یافته است و در تمامی کامپایلر ها قالب یکسانی دارد. در ضمن برای میکروکنترلری مانند ARM زبان بیسیک وجود ندارد. یکی از ویژگی های مثبت یادگیری برنامه نویسی به زبان Basic این است که می توان برنامه های نوشته شده به این زبان را به زبان C تبدیل نمود.  

فقط این قسمت جهت یادگیری بیشتر برنامه نویسی کاربرد دارد.


نمایش یک ثانیه بر روی LCD کاراکتری

Basic Source

در این برنامه فرکانس میکرو 4 مگاهرتز است و تقسیم فرکانسی تایمر 1 برابر 64 است در نتیجه فرکانس تایمر 1 برابر 62500 هرتز می شود و تا سرریز شدن تایمر، 3036 شمارش باقی می ماند. در این برنامه با دستور on timer1 allah با سرریز شدن تایمر 1 تابع allah اجرا می شود و در این تابع تایمر 1 با مقدار 3036 بار شده و ثانیه یک واحد زیاد می شود. باید سعی شود دستورات داخل تابع وقفه یا همان allah زیاد نشود چون در این صورت باید مقدار 3036 زیاد تر شود تا 1 ثانیه به درستی ایجاد شود.


فرکانس متر دیجیتالی

Basic Source

در این برنامه از تایمر صفر جهت شمارش یک ثانیه و از تایمر 1 جهت شمارش فرکانس استفاده شده است. از آنجایی که فرکانس میکروکنترلر برابر 8MHz است و تقسیم فرکانسی تایمر صفر 1024 است، در نتیجه فرکانس این تایمر حدود 7800Hz می شود که در یک ثانیه تایمر 30 بار سرریز می شود. پس از سر ریز شدن 30 بار، در وقفه ی تایمر 0 فرکانس محاسبه شده و بر روی LCD نشان داده می شود. این فرکانس متر همراه با فیبر مدار چاپی رسم شده می باشد. که هم با نرم افزار Proteus و هم Protel باز می شود.

Basic Source


اسکن صفحه کلید ماتریسی

Basic Source

در این برنامه با استفاده از چند حالت مختلف برنامه نوشته شده است: با دستور Select-Case با استفاده از تابع و با استفاده از زیر برنامه در این برنامه ها توسط دستور ()getkbd کلیدی از صفحه کلید دریافت می شود. اگر کاربر هیچ کلیدی را فشار ندهد، خروجی صفحه کلید عدد 16 است. سپس با استفاده از عدد گرفته شده، کد متناظر آن روی نمایشگر نمایش داده می شود.
وقفه ی خارجی INT0

Basic Source

در این برنامه با هربار فشردن کلید، یک لبه ی پایین رونده رخ داده و شمارنده زیاد می شود و اگر شمارنده زوج باشد، LED خاموش می شود. با هر بار فشردن کلید، بازر نیز صدا پخش می کند. که توسط دستور Sound این کار را انجام می دهد.


ماشین حساب ساده

Basic Source

در این ماشین حساب، فقط می توان چهار عمل اصلی را بین اعداد تک رقمی انجام داد. می توان این برنامه را کامل نمود و آن را برای اعداد چند رقمی نیز استفاده کنیم. در این برنامه با استفاده از تابع Lookup با توجه به مقدار عدد دریافت شده از صفحه کلید، مقدار درست آن در خط آخر برنامه که allah نام دارد، پیدا می شود و جایگزین خود A می گردد.
نمایش حروف فارسی بر روی LCD

Basic Source

LCD های کاراکتری 64 بایت حافظه ی RAM داخلی دارند که می توان در آن 8 حرف فارسی با استفاده از دستور deflcdchar قرار داد. کدهای این دستور در منوی Tools نرم افزار Bascom در قسمت LCD Designer تولید شده اند.
نمایش ساعت و زمان روی LCD

Basic Source

این برنامه به دو شکل نوشته شده است. در یک حالت از تایمر 1 و در حالت دیگر به صورت نرم افزاری که دقت نرم افزار بسیار کمتر از سخت افزار است.
نمایش ساعت همزمان روی LCD و سون سگمنت

Basic Source

در این برنامه برای راحت شدن کار کردن با سون سگمنت ها از مبدل BCD به سون سگمنت یا همان آی سی مشهور 7447 استفاده شده است. با استفاده از این آی سی دیگر نیازی به Refresh در سون سگمنت نیست (یا به عبارتی اسکن کردن سون سگمنت) اما در عوض پورت های بیشتری از سون سگمنت اشغال می شوند. عیب این مدار در این است که سون سگمنت سمت چپ فقط صفر و یک را نمایش می دهد و برای نمایش 2 باید از ترانزیستور های کمکی استفاده نمود. در ضمن عیب دیگر آن این است که فقط می توان زمان را رو به بالا تنظیم کرد.
نمایش ساعت بر روی LCD و ارتباط دو میکروکنترلر با هم

Basic Source

در این مدار هر دقیقه یک بار یک سیگنال از میکروکنترلر سمت راست برای میکروکنترلر سمت چپ ارسال می شود و میکروکنترلر سمت چپ با دریافت آن متنی را روی LCD می نویسد. در صورتی که کلید متصل شده به میکروکنترلر سمت چپ فشرده شود، 16 LED موجود به صورت فلاشر می شوند. این LED ها در محیط شبیه سازی خوب دیده نمی شوند ولی در واقعیت عملکرد آنها به این صورت است که سرعت فلاش آنها تغییر می کند. با استفاده از کلید های موجود برای میکروکنترلر سمت راست می توان ساعت را به صورتنزولی و صعودی تغییر داد. در این مدار نیز برای راحتی برنامه نویسی از آی سی 7447 استفاده شده است. سنسور دمای بکار رفته در این مدار LM35 می باشد که با مبدل آنالوگ به دیجیتال به عدد قابل نمایش روی سون سگمنت تبدیل می شود.
نمایش متن متحرک روی LCD با میکروکنترلر 8051

Basic Source

در این مدار با استفاده از نرم افزار Bascom 8051 که 90 درصد دستورات آن شبیه دستورات نرم افزار Bascom AVR می باشد، بر روی میکروکنترلر 8051 مدل AT89C51 متن متحرک نمایش داده شده است. در این مدار سه LED سمت راست مستقیما به 8051 وصل شده اند که در عمل به دلیل جریان بسیار کم پورت های 8051 نور نسیار کمی دارند که برای افزایش جریان خروجی باید یک آی سی بافر یا یک ترانزیستور در خروجی قرار داد.
نمایش متن متحرک بر روی LCD کاراکتری با استفاده از AVR

Basic Source

این برنامه خود به سه شکل مختلف نوشته شده است، در مد اول تعداد خط های برنامه زیاد است، در مد دوم تعداد خط های برنامه کمتر شده است و در مد سوم برنامه فشرده شده است. تمامی این سه مد عملکردی شبیه به هم دارند.
نمایش ساعت و متن متحرک بر روی LCD

Basic Source

در این برنامه هر دقیقه یک بار متنی به صورت متحرک بر روی LCD ظاهر می شود که می تواند حداکثر 255 کاراکتر داشته باشد. در این مدار با فشردن کلید شارپ # می توان دقیقه و ساعت را تنظیم نمود و با فشردن کلید * می توان مقدار روز، ماه و سال را به ترتیب تغییر داد. LCD بکار رفته در این مدار مدل 4*20 می باشد.
اتصال LCD گرافیکی

Basic Source

با استفاده از LCD گرافیکی می توان تصاویر سیاه و سفید را روی LCD نمایش داد. در این برنامه فایل هایی با پسوند BGF قابل نمایش روی LCD گرافیکی هستند که این فایل ها در منوی Tools نرم افزار Bascom AVR در قسمت Graphic Converter با استفاده از فایل های BMB با رزولوشن 1Bit و ابعاد 128 در 64 پیکسل ساخته شده اند.
دماسنج با استفاده از سنسور LM335

Basic Source

در این دماسنج از سنسور LM335 استفاده شده است. نقشه ی مدار چاپی این مدار نیز در آن وجود دارد که با نرم افزار Proteus رسم شده است. این نقشه را به صورت سه بعدی در شکل زیر می بینید: (فایل Protel این نقشه نیز موجود است)

Basic Source


دماسنج با استفاده از سون سگمنت و سنسور دمای DS1621

Basic Source

سنسور دمای DS1621 یک سنسور I2C می باشد که دقت نسبتا خوبی در دریافت دما دارد. در این مدار از سون سگمنت سه رقمی مولتی پلکس کاتد مشترک استفاده شده است. (ممکن است کمی سخت این سنسور را پیدا کنید). فایل شبیه سازی این مدار به خوبی جواب نمی دهد و ترانزیستور های موجود در قسمت کاتد مشترک سون سگمنت ها که ترانزیستور های NPN می باشند، برای شبیه سازی بهتر حذف شده اند که این ترانزیستور ها در نقشه ی PCB وجود دارند. موقع پروگرم کردن میکروکنترلر فایل Main.hex را داخل میکروکنترلر بریزید و فیوز بیت های CKSEL را برابر 1 (یا همان اتصال کریستال خارجی) قرار دهید.

Basic Sourceمدار چاپی دماسنج


قفل رمزی

Basic Sourceقفل رمزی

در این برنامه باید رمز 10 رقمی وارد شود که به صورت پیش فرض این رمز 0123456789 می باشد. در صورت قطع برق، به دلیل ذخیره ی رمز در حافظه ی EEPROM رمز بدون بازگشت به مقدار 0123456789 باقی خواهد ماند. در صورتی که رمز بیش از سه بار اشتباه وارد شود، آژیر به صدا در می آید (در این شبیه سازی به عنوان نمونه یک LED است که با استفاده از یک ترانزیستور می توان از آن هر خروجی گرفت).
تابلوی روان 8 در 40 با نرم افزار مخصوص تولید کد و برنامه

Basic Source

این برنامه به صورت نمونه متنی از زیارت عاشورا را بر روی تابلوی روان می نویسد. برنامه ی ساخت کدهای دات ماتریس از سایت لاچینی گرفته شده است. این برنامه علاوه بر اینکه کد های دات ماتریس را تولید می کند، برنامه ی لازم برای ماتریس ها را هم ایجاد می نماید. در این برنامه از 5 ماتریس 8*8 استفاده شده است که برای افزایش تعداد ماتریس ها باید به همان نسبت آی سی لچ مدل 74573 اضافه شود. نقشه ی مدار چاپی موجود در شکل زیر آمده است که برای ماتریس 8*8 در ابعاد 6 سانت در 6 سانت ساخته شده است. (هنگام خرید، در انتخاب دات ماتریس ها دقت کنید زیرا دو نوع دات ماتریس سطری و ستونی وجود دارد).

Basic Sourceمدار چاپی تابلوی روان


اندازه گیری دماهای منفی با استفاده از سنسور LM35

Basic Source

در این برنامه دما از دو پایه ی ADC به صورت دیفرانسیلی اندازه گیری می شود به طوری که از دو دیود 1N4148 و یک مقاومت 10 کیلو اهم استفاده شده است. در دمای مثبت پایه ی آند دیود بالایی حدود صفر ولت و در دما های منفی این پایه نسبت به پایه ی PA3 مثبت تر می شود و با استفاده از دو پایه ی ADC می توان دما را به صورت دیفرانسیلی اندازه گیری نمود.


ارتباط دو میکروکنترلر به صورت SPI

Basic Source

در این برنامه در میکروکنترلر بالایی که نقش Master را بازی می کند، کاربر کلیدی را فشار می دهد و شماره ی این کلید از 0 تا 15 نمایش می یابد، سپس با فشار دادن Push Button کد این کلید برای میکروکنترلر پایینی ارسال می شود و این میکروکنترلر که نقش Slave را دارد، به تعداد کد ارسالی متنی را به صورت روان می نویسد. به عنوان مثال اگر عدد 5 را وارد کرده و کلید را فشار دهیم، میکروی پایینی 5 بار متنی را به صورت روان نمایش می دهد.
اتصال حافظه ی MMC یا همان MiniSD یا uSD به میکروکنترلر و ساخت Wav Player

Basic Sourceپخش صدا با MMC و میکرو

در این برنامه میکروکنترلر به صورت SPI نرم افزاری از حافظه ی Micro SD اطلاعات فایل صوتی را می خواند و با استفاده از PWM آنها را در پایه ی OC1A ظاهر می کند. با اتصال یک ترانزیستور و یک بلندگو می توان صدای پخش شده را شنید. توجه کنید که فایل شما باید حتما با فرمت Wav باشد و به صورت 8 بیتی ذخیره شود تا قابل پخش باشد. البته در حافظه های مختلف به دلیل اینکه حجم حافظه ها با هم فرق دارد، در متغیر Adres = 1960 * 512 نیاز است تا عدد 1960 تغییر یابد تا کد اولین حرف بعد از فرمت Fat32 بدست آید. در صورت عدم انجام این کار ممکن است از وسط صدا شروع به پخش صدا شود و یا صدا کمی طول بکشد تا پخش شود. اما چیزی که در اینجا مهم است این است که باید حافظه را یک بار فرمت کنید تا آدرس آن صفر شود و سپس اقدام به ریختن فایل صوتی در داخل آن کنید. برای آشنایی با نحوه ی تبدیل فایل Wav به فرمت 8 بیتی اینجا کلیک کنید. در این مدار به دلیل اینکه حافظه ی MMC با تغذیه ی 3.3V کار می کند، بهتر است از ATmega8L استفاده کنید و تغذیه ی آن را 3.3 ولت کنید. پایه های حافظه ی MMC به صورت زیر می باشد:

Basic Sourceپایه های MMC


ارتباط دو میکروکنترلر به صورت I2C

Basic Source

در این ارتباط یک عدد از صفر تا 255 از میکروکنترلر سمت چپ برای میکروکنترلر سمت راست ارسال می شود. زمانی که این عدد به 30 برسد، LED بالایی روشن می شود و زمانی که این عدد به 130 برسد، LED پایینی روشن می شود و در شماره ی 150 دیود بالایی خاموش و در شماره ی 250 دیود پایینی خاموش می شود.

14 thoughts on “نمونه برنامه بیسیک برای میکروکنترلر

  1. آیدین says:

    با عرض سلام خدمت استاد محترم
    ضمن تشکر از بابت تمامی آموزشها و پروژه ها
    استاد بنده یه برنامه ساعت دارم که کلید های تنظیم کار نمیکنه در ضمن میخواستم این کلید ها سه عدد باشه و با فشردن شصتی اول بشه با دو شستی دیگر ساعت و دقیقه رو کم و زیاد کنیم و با فشردن دوباره شستی اول این بار روز و ماه و سال رو تنظیم کنیم اگه آموزشی در این مورد دارید خیلی خوشحال میشم در شمن برنامه موجود با بسکام نوشته شده
    با تشکر از جنابعالی

  2. مجتبی says:

    سلام
    برنامه هاتون واقعا کاربردی و بدرد بخوره
    لطف کنید اگه میشه ارتباط i2cرو فایل بسکامشو هم بذارید ممنون میشم من پروژم به این خیلی احتیاج داره

  3. کریمی says:

    با سلام و احترام
    لطفا تصویر قابل وضوح تابلو روان 8 در 40 که قطعاتش جهت ساخت مشخص باشد را در سایت قرار دهید یا اگر امکانش باشد برای بنده ایمیل فرمایید این تابلو را بعد از ساخت با توجه به محتوایش در مسجد قرار خواهم داد ، ضمنا از سایت پر محتوا و وزین شما نهایت تشکر را دارم.
    با سپاس
    کریمی

  4. علیرضا blaed says:

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

  5. بابک says:

    استاد با عرض سلام و عرض ادب

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

  6. امینی says:

    سلام برنامه ها بسیار عالی بود کلی دعایت کردم .سربلند باشی

  7. مهرداد says:

    با تشكر از شما . دمت گرم . واقعا سایت عالی و پر محتوایی دارید

  8. محمد رضا says:

    سلام ممنون از اموزشها اگر امکان دارد بیشتر با زبان PIC اموزش دهید در ضمن در صورت امکان آموزش ربات انباردار را هم اموزش دهید

    مرسی

     

     

     

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *