MicroController – Solved

$ 24.99
Category:

Description

دانشگاه صنعتی شریف
دانشکده مهندسی برق درس ساختار کامپیوتر و ریزپردازنده و آزمایشگاه
(25754)

آزمایش شماره 5
راهاندازی کیپد ماتریسی با میکروکنترلر 32PIC

دکتر موحدیان

تهیهکنندگان:

سید امیرحسین آقاجری سینا اکبری سینا رادمهر
به نــــام خـــــدا

راهاندازی کیپد ماتریسی با میکروکنترلر 32PIC

هدف از این آزمایش آشنایی با راهاندازی keypad ماتریسی و 7segment با استفاده از میکروکنترلر PIC32 است.
پیش از شروع آزمایشگاه :

به دلیل حجیم بودن کدهای این قسمت از آزمایشگاه، کدهای مربوط به هر قسمت را حتما قبل از آزمایشگاه به طور کامل بنویسید، تا در آزمایشگاه دچار مشکل نشوید.

قبل از شروع آزمایش میبایست با نحوهی راهاندازی keypad و 4digit 7seg آشنا شوید:
نحوه راهاندازی segmant-7:
سون سگمت چهار رقمی از چهار سون سگمنت تکی تشکیل شده است که پایه های مربوط به a تاg و نقطهی این چهار 7seg به طور متناظر به هم متصل شده اند و به ازای هر رقم یک پایه مشترک بیرون آمده است وقتی پایه مشترک یک رقم به زمین وصل شود 7seg متناظر آن طبق مقادیر a تاg و نقطه روشن میشود.
برای استفادهی همزمان از بیش از یک رقم ،باید در یک حلقه، با فرکانسی بیشتر از فرکانس دید انسان، رقمها را به ترتیب روی 7seg ها نمایش دهیم. در این صورت، هر لحظه، دقیقا یکی از 7seg ها روشن است اما ما همهی رقمها را روشن میبینیم.
برای روشن شدن هر یک از رقم ها طبق شماتیک زیر لازم است پین مربوط به بیس ترانزیستور آن رقم را ۱ کنیم.

شکل ۱( مدار 7segment ۴رقمی

شکل۲( مدار چاپی 7segment ۴رقمی نحوه راهاندازی keypad:

همانطور که در شکل زیر نشان داده شدهاست ،keypad هایی که در اختیار شما قرار میگیرند، دارای چهار سطر و پنج ستون میباشند. )شکل ۲( برای راهاندازی keypad، میتوان چهار سطر و پنج ستون را به پایههای I/O میکروکنترلر متصل کرد و سپس پینهای متصل به پنج ستون )پورت A( را در حالت خروجی و پینهای متصل به چهر سطر) ۴ پین آخر پورت B( را در حالت ورودی قرار داد. در ابتدا در کد تمامی پینهای خروجی را برابر با مقدار صفر قرار دهید و به ترتیب هر بار تنها یکی از این پینهای خروجی را ۱ کنید و به کمک polling که در آزمایش قبل نیز با نحوه کارکرد آن آشنا شدید ،چهار پین ورودی را چک کنید. سطر ها که به پینهای ورودی متصل هستند با یک مقاومت pull down به زمین متصل شدهاند. پس پینهای ورودی در حالت عادی، صفر منطقی هستند .با زدهشدن کلید و اتصال ستون متناظر آن کلید به سطر متناظر، مقدار سطر برابر با یک میشود.
)توجه کنید که زمان فشردهشدن کلید بسیار بیشتر از دورهی تناوب ۱ شدن سطر متناظر است(. در نتیجه میتوانیم با تشخیص سطری که مقدارش ۱ شدهاست و ستونی که در این مرحله ۱ کردهایم، کلید زده شده را بیابیم. مثلا در شکل زیر، اگر کلید متناظر با سطر سوم و ستون اول فشرده شود، پین متصل به سطر سوم از صفر به ۱ تغییر میکند.

شکل۳( مدار داخلی keypad ماتریسی

شکل۴( مدار چاپی keypad ماتریسی
روش دوم خواندن keypad:
توضیح رجیسترهای CNPUx و CNPDx:
برخی از پینهای میکروکنترلر قابلیت این را دارند که از داخل pull-up یا pull-down شوند .Pull-up یعنی اگر پین از بیرون مقدار نداشته باشد 1 خوانده میشود. در مورد PIC32MX110F016B همانطور که در دیتاشیت نوشته شده است همه ی I/O ها قابلیت pull-up و pull-down را دارند.

روش خواندن از keypad:
۴ردیف متصل به B12 تا B15 به صورت سخت افزاری pull-down هستند. برای این روش لازم است ۵ ستون متصل به A0 تا A4 را نیز pull-down کنید. برای این کار بیت های مربوطه در رجیستر CNPDA را فعال کنید.
ایده کلی:
ستون ها را 1 میکنیم و سطر ها را میخوانیم سپس سطر ها را 1 میکنیم و ستون ها را میخوانیم. یک ۴ بیتی و یک ۵ بیتی به دست میآید.)در صورتی که یکی از کلید ها فشرده شده باشد سطر و ستون خوانده شدهی مربوط به آن ،۱ میشوند.( تبدیل مکان ۱ها به عدد:
یک شمارنده را روی مقدار اولیه )که بسته به Look-Up Table شما متفاوت است مثلا ۱( تنظیم میکنیم و بیت lsb عدد ۴ بیتی خوانده شده را با ۱ مقایسه میکنیم. اگر ۱ نبود عدد را شیفت میدهیم و شمارنده را یک واحد افزایش )یا کاهش( میدهیم تا به انتها برسیم. رجیسترِ شمارنده، عدد مورد نظر ماست.
همین روش را برای تبدیل عدد ستون ها هم استفاده میکنیم.
تبدیل عدد به معادل آن روی کیپد:
یک Look-Up Table طراحی کنید که اعداد کیپد و سایر کلید ها را با یک عدد در حافظه) stack( معادل کند. برای تبدیل آدرس دو بعدی به دست آمده از قسمت قبل به آدرس word حافظه کافیست عدد مربوط به ستون را در ۴ ضرب کرده و با عدد مربوط به سطر ها جمع کنید. دقت کنید که در Look-Up Table برای سایر کلید ها به جز رقم های ۰ تا ۹ باید از اعداد دو رقمی استفاده کنید.

تذکّّر:
برای خواندن کیپد، برای این آزمایش، لبههای بالارونده با دقّّت خوبی نیازی به debounce ندارند اما برای لبهی پایینروندهی کلید، که نشانگر رهاشدن کلید است به debouncing نیاز داریم که مطمئن شویم که کلید واقعاً رها شده است. یعنی در صورتی که در استیت قبلی یک کلید فشرده شده بوده اگر کیپد را خواندیم و دیدیم همهی بیتها صفر هستند باید اندکی delay ایجاد کنیم و دوباره بررسی کنیم. این امر به این خاطر است که هنگام رها شدن یک کلید صفر و یک شدن های متوالی باعث نشود یک کلید را چند بار بخوانیم.)دقت کنید که اگر در همین حال ۰۱ بخوانیم باید تمهیدات مربوط به ۱ بودن را انجام دهیم؛ یا این که کاری نکنیم تا دفعه بعد که تابع صدا زده میشود و کلید پایدار شده است خوانده شود(

آزمایش اول:
تابعی بنویسید که یک عدد ۴رقمی را گرفته و آن را روی 7segment نمایش دهد.

آزمایش دوم:
با استفاده از تابع آزمایش اول و تایمر میکروکنترلر، یک زمانسنج طراحی کنید که با فشرده شدن یکی از push button های پورت A شروع به شمارش کند و با فشرده شدن دوبارهی آن، متوقف شود. زمان باید روی 7segment نمایش داده شود.
)نیازی نیست که زمان به صورت دقیق برحسب ثانیه شمرده شود. کافی است فرکانس شمارنده به گونهای باشد که با چشم دیدهشود(.

آزمایش سوم:
* قسمتهای الف و ب اجباری هستند. تکمیل یکی از قسمتهای ج یا د امتیازی است. )حداکثر یکی را انجام دهید(.
الف( تابعی برای خواندن ورودی از کیپد ماتریسی بنویسید. )تشخیص این که کدام کلید فشرده شدهاست(
ب( با استتفاده از تتابع قستمت التف و کتدی کته بترای آزمتایش اول نوشتتهاید، کتد را بته صتورتی تکمیتل کنیتد کته عتددی کته کتاربر در کیپتد وارد میکنتد، روی 7segment نمتتایش دادهشتود. عتدد وارد شتده میتوانتد حتداکثر 4 رقمتتی باشد و دقیقتا ماننتد وارد کتردن عتدد در ماشتین حستاب، بتا وارد کتردن هتر رقتم جدیتد، رقمهتای قبلتی یتک واحتد بته چت شتیفت ختورده و رقتم جدیتد ظتاهر میشتود. )بعتد از وارد کتردن رقتم چهتارم، کلیتدها میرفعتال میشتوند(. یتک کلیتد هتم برای پاک کردن عدد در نظر بگیرید. )با فشردن این کلید یک رقم 0 نمایش داده میشود(.
ج( فتر کنیتد میخواهیتد از ایتن متدار بته عنتوان یتک قفتل دیجیتتال استتفاده کنیتد. در برنامتهی خودتتان، یتک رمتز 4 رقمتی تعریتف کنیتد و در صتورتی کته کتاربر ایتتن عتدد را وارد کنتد، نقطتهی اعشتار) Decimal Point( یکتی از 7segmentها به دلخواه متدتی روشتن میشتود. اگتر بتوانیتد برنامته را بته نحتوی تکمیتل کنیتد کته کتاربر پتس از وارد کتردن رمز درست، بتواند رمز قبلی را عو کند، امتیاز بیشتری از این قسمت به دست میآورید.
د( برنامتهی قستمت ب را تکمیتل کنیتد و یتک ماشینحستاب ستاده بتا 4 عمتل اصتلی بستازید. ماشینحستاب در ابتتدا عملونتد اول، ستپس عملگتر و در آختر عملونتد دوم را از طریتق کیپتد میگیترد و بتا فشتردن کلیتد = نتیجته حاصتل را روی 7segment نمایش میدهد. هر 2 عدد ورودی در هنگام فشردهشدن کلیدها باید نمایش دادهشوند.

Reviews

There are no reviews yet.

Be the first to review “MicroController – Solved”

Your email address will not be published. Required fields are marked *