در این آموزش سعی بر این داریم که شما را با اصول راه اندازی کیبردهای 3 در 4 و یا 4 در 4 با استفاده از میکروکنترلرهای AVR و به زبان بسکام، آشنا کنیم. در قالب این آموزش پروژه ای نیز ارائه خواهد شد که مدار یک زمان سنج (کرنومتر) و همچنین زمان سنج معکوس خواهد بود. در این پروژه خواهید آموخت که چگونه تایمرهای میکروکنترلرها را برای ساخت یک ثانیه دقیق و یا یک صدم ثانیه، پیکره بندی کنید.
مقدمه
یک کرنومتر در واقع زمان سنجی است که از سه پارامتر اصلی تشکیل می شود: زمان سنج، کلید شروع/توقف و کلید ریست. زمان سنج آن نیز از صدم ثانیه، ثانیه، دقیقه و در بعضی موارد، ساعت تشکیل می یابد. زمان سنج معکوس نیز مانند کرنومتر است؛ تنها اینکه قسمت صدم ثانیه حذف شده و زمان آن از زیاد به کم متغیر می باشد. حال با توجه به این توضیحات و همچنین ارزیابی امکانات میکروکنترلر و کامپایلر، می توان ساخت پروژه را شروع کرد.
شرح پروژه
برای ساخت یک ثانیه دقیق توسط میکروکنترلر ATMEGA32 می توان از تایمر دو استفاده نمود. چون تایمر دوم 8 بیتی است پس این تایمر از مقدار صفر الی 255 می شمارد تا سر ریز شود. حال برای تنظیم Prescale این تایمر مقدار 128 را انتخاب می کنیم. زیرا:
128 × 256 / 32768 = 1
یعنی دقیقا مقدار یک ثانیه را برای ما می سازد. این مقدار در میکروکنترلر ممکن است کمی در بازه های زمانی تغییرات زیادی را پدیدار کند؛ برای این منظور از یک کریستال که به عنوان کریستال RTC معروف است و فرکانس آن 32768 کیلوهرتز می باشد، استفاده می کنیم. این کریستال به پایه های PC.6 و PC.7 میکروکنترلر (TOSC1 و TOSC2) متصل می گردد و می توان با استفاده از این کریستال در برنامه مشخص کنیم که همگام سازی بین میکروکنترلر و این نوع کریستال اعمال شود. بدین منظور عبارت Async = On را به پیکره بندی تایمر اضافه می کنیم. عبارت پیکره بندی در این حالت به صورت زیر خواهد بود:
Config Timer2 = Timer , Async = On , Prescale = 128
برای ساخت یک صدم ثانیه (سانتی ثانیه) از تایمر یک میکروکنترلر استفاده می کنیم. این تایمر یک تایمر 16 بیتی است یعنی از صفر الی 65535 می شمارد. حال اگر مقدار Prescale را 8 انتخاب کنیم، هر 65536 میکروثانیه سر ریز خواهد شد که برای ساختن یک صدم ثانیه یا 10 میلی ثانیه، می توان با دادن مقدار اولیه 55536 به این تایمر و شروع کردن آن، یک صدم ثانیه را ایجاد کرد.
نمایش بر روی 8 عدد سون سگمنت آند مشترک انجام می شود. تنظیمات نیز توسط یک کیبرد 3 در 4 اعمال می شود. یک عدد کلید کشویی به میکروکنترلر متصل می گردد تا در بوت میکروکنترلر حالت کرنومتر و یا زمان سنج معکوس را طبق آن تعریف کند.
کیبرد 3 در 4 شامل چهار ردیف و سه ستون کلید است که اتصالات آن ها در شکل زیر آورده شده است:
برای اتصال آن به میکروکنترلر بایستی تمامی اتصالات ردیف ها و ستون ها را به یک پورت جداگانه از میکروکنترلر متصل کرد. برای فهمیدن آنکه کاربر چه کلیدی از این کلیدها را فشرده است، می توان از روش ها و دستورات متعددی کمک گرفت. از جمله آن ها می توان از دستور پیکره بندی کیبرد در بسکام استفاده کرد. اما برای آموزش بیشتر و مفیدتر از روشی غیر از دستور بسکام استفاده خواهیم کرد. در این روش بایستی میکروکنترلر کیبرد را اسکن کند. به این صورت که مقدار یک منطقی را به یکی از سطرها وارد کند و منتظر پاسخ آن (یک منطقی) از ردیف های یک الی آخر باشد. با این کار می توان کلید فشرده شده در این سطر را (در صورت وجود) یافت. سپس به سطر بعدی مقدار یک منطقی را دهد و بررسی کند که آیا ستونی پاسخ همان یک منطقی را باز می گرداند یا خیر. این روند ادامه خواهد یافت تا ردیف آخر. برای بررسی مقدار یک منطقی در خروجی از کیبرد و ورودی به میکروکنترلر می توان از دستور Debounce استفاده نمود. پیکره بندی این دستور به صورت زیر می باشد:
Debounce PinX.Y , 1 OR 0 , Label_Name , GoSub OR GoTo
که در اینجا X، شماره پایه از پورت Y میکروکنترلر است که می خواهیم عملیات بررسی را بر روی آن انجام دهیم. 1 یا 0 مربوط به شرط بررسی است که آیا می خواهیم مقدار 1 یا مقدار 0 را مورد بررسی دهیم. زمانی که شرط بر روی پایه موردنظر میکروکنترلر ایجاد شد، این دستور به قسمت Label_Name پرش می کند. عبارات GoSub یا GoTo نحوه پرش را تعیین می کند.
شماتیک مدار
تصاویری از عملکرد پروژه
بخش دانلود
شامل موارد زیر:
- فایل شبیه سازی Proteus
- سورس کد کامل برنامه به زبان بیسیک
- کد هگز مخصوص پروگرام کردن میکروکنترلر
- شماتیک مدار به صورت تصویر و فایل PDF
توجهات:
با سلام از جواب قبلی شما.
من نتوانستم به هیچ طریقی جواب سوالم پیدا کنم مگه با لینکی که شما فرستادید.
سوال دیگری هم. پرسیده بودم. فیوز بیت هارو چطوری می توانم بدانم داخل این پروژه و هیچ کدام از پروژه ها صحبتی نشده. و حتی میکرو atmega 32 رو با چه فرکانس داخلی ست کنم و بقیه فیوز بیت ها رو ممنون میشم بفرمایید. این پروژه کانتر هر کاری می کنم اکی نمیشه. ممنونم و متشکرم
سلام
اکثر مدارات سایت از جمله این مدار، بر روی فیوزبیت 8 مگاهرتز داخلی میکروکنترلر تنظیم می شوند. برای تنظیم این نوع فیوزبیت می توانید از تصویر زیر استفاده نمایید: