آموزش BASCOM AVR – بسکام – جلسه دوم
📘 آموزش BASCOM AVR – بسکام – جلسه دوم
ورودیها و کلیدها (Input/Output)
۱. مقدمه
در جلسه قبل یاد گرفتیم چطور یک LED را با میکروکنترلر روشن و خاموش کنیم. اما یک سیستم واقعی فقط خروجی ندارد؛ باید بتواند از محیط بیرون فرمان بگیرد. سادهترین ورودی، کلید فشاری (Push Button) است. در این جلسه یاد میگیریم چطور وضعیت کلید را بخوانیم و بر اساس آن LED را کنترل کنیم.
۲. کلید فشاری چیست؟
کلید فشاری یک قطعه مکانیکی است که با فشار دادن آن، دو پایه به هم وصل میشوند و جریان عبور میکند.
- در حالت عادی: مدار باز (قطع).
- هنگام فشار: مدار بسته (وصل).
کلیدها معمولاً چهار پایه دارند که دو به دو به هم متصلاند. در بردبورد کافی است دو پایه مقابل هم را استفاده کنیم.
۳. مقاومت Pull-Up و Pull-Down
مشکل کلیدها این است که وقتی آزاد هستند، پایه ورودی میکرو در حالت شناور (Floating) قرار میگیرد و نویز باعث میشود مقدار آن نامشخص باشد. برای حل این مشکل از مقاومتهای Pull-Up یا Pull-Down استفاده میکنیم:
- Pull-Up: پایه ورودی در حالت عادی به +۵ ولت وصل است و هنگام فشار کلید به زمین وصل میشود.
- Pull-Down: پایه ورودی در حالت عادی به زمین وصل است و هنگام فشار کلید به +۵ ولت وصل میشود.
در AVR یک مقاومت Pull-Up داخلی وجود دارد که میتوانیم با نرمافزار فعال کنیم و دیگر نیازی به مقاومت خارجی نیست.
۴. شماتیک مدار
- LED به پایه PA0 وصل شده (مثل جلسه قبل).
- کلید فشاری به پایه PB0 وصل شده.
- یک سر کلید به زمین، سر دیگر به پایه PB0.
- مقاومت Pull-Up داخلی فعال میشود تا در حالت عادی پایه PB0 برابر ۱ منطقی باشد.
۵. کدنویسی در BASCOM
کد کامل:
' پروژه کنترل LED با کلید
$regfile = "m32def.dat"
$crystal = 1000000
Config PINA.0 = Output ' LED روی پایه PA0
Config PINB.0 = Input ' کلید روی پایه PB0
Set PORTB.0 ' فعالسازی Pull-Up داخلی
Do
If PINB.0 = 0 Then ' اگر کلید فشار داده شد
Set PORTA.0 ' LED روشن شود
Else
Reset PORTA.0 ' LED خاموش شود
End If
Loop
End
۶. توضیح خطبهخط کد
Config PINB.0 = Input→ پایه PB0 به عنوان ورودی تعریف میشود.Set PORTB.0→ مقاومت Pull-Up داخلی فعال میشود.If PINB.0 = 0 Then→ اگر کلید فشار داده شود (پایه به زمین وصل شود)، شرط برقرار است.Set PORTA.0→ LED روشن میشود.Else … Reset PORTA.0→ در غیر این صورت LED خاموش میشود.
۷. نکات عملی
- اگر LED همیشه روشن بود، جهت اتصال کلید را بررسی کنید.
- اگر LED هیچوقت روشن نشد، مطمئن شوید Pull-Up فعال شده است.
- کلیدهای مکانیکی هنگام فشار چندین پالس کوچک تولید میکنند (پدیده Bounce). برای جلوگیری از خطا باید از دیبانس نرمافزاری استفاده کنیم.
۸. دیبانس نرمافزاری
برای حذف نویز کلید، پس از فشار باید کمی صبر کنیم تا پالسهای اضافی تمام شوند.
کد با دیبانس:
Do
If PINB.0 = 0 Then
Waitms 50 ' صبر برای حذف نویز
If PINB.0 = 0 Then
Toggle PORTA.0 ' تغییر وضعیت LED
Waitms 300 ' جلوگیری از چند بار تغییر
End If
End If
Loop
End
۹. پروژه عملی: کلید روشن/خاموش
در این پروژه با هر بار فشار کلید، LED وضعیتش تغییر میکند (اگر خاموش بود روشن شود و برعکس). این کار با دستور Toggle انجام میشود.
۱۰. تمرینها
۱. دو کلید اضافه کنید: یکی برای روشن کردن LED و دیگری برای خاموش کردن.
۲. با هر بار فشار کلید، LED برای مدت ۲ ثانیه روشن شود و سپس خاموش شود.
۳. یک شمارنده بسازید که تعداد دفعات فشار کلید را روی LCD نمایش دهد.
نتیجه جلسه دوم
در این جلسه یاد گرفتیم:
- چطور یک پایه را ورودی تعریف کنیم.
- مفهوم Pull-Up داخلی و استفاده از آن.
- خواندن وضعیت کلید و کنترل LED.
- دیبانس نرمافزاری برای حذف نویز کلید.
- پروژه عملی روشن/خاموش کردن LED با کلید.
🔹 جلسه سوم: کار با LCD کاراکتری و نمایش متن روی آن.