0

آموزش BASCOM AVR – بسکام – جلسه اول

خیلی خب 🌟
از همین‌جا شروع می‌کنیم و جلسه اول رو به صورت کامل و مفصل می‌نویسم؛ مثل یک فصل کتاب آموزشی، با توضیحات، مثال‌ها، کدها و نکات عملی.


📘 آموزش BASCOM AVR – جلسه اول

مقدمه و آشنایی با میکروکنترلرها

 

۱. میکروکنترلر چیست؟

میکروکنترلر یک تراشه کوچک است که درون خودش یک پردازنده، حافظه و ورودی/خروجی دارد. به زبان ساده، یک کامپیوتر کوچک است که می‌تواند برنامه‌ای را اجرا کند و با دنیای بیرون ارتباط برقرار کند.

  • پردازنده (CPU): وظیفه اجرای دستورات برنامه.
  • حافظه ROM/Flash: محل ذخیره برنامه نوشته‌شده.
  • حافظه RAM: محل ذخیره داده‌های موقت هنگام اجرا.
  • پورت‌های I/O: پایه‌هایی برای ارتباط با دنیای بیرون (ورودی مثل کلید، خروجی مثل LED).

۲. خانواده AVR

شرکت Atmel (الان بخشی از Microchip) خانواده AVR را معرفی کرد. این خانواده به خاطر سادگی، سرعت و قیمت مناسب، محبوب شد.
مدل‌های مختلفی دارد مثل:

  • ATmega32
  • ATmega16
  • ATtiny13

در این دوره ما بیشتر با ATmega32 کار می‌کنیم چون امکانات زیادی دارد و برای آموزش مناسب است.


۳. محیط برنامه‌نویسی BASCOM

BASCOM یک کامپایلر زبان BASIC برای AVR است.

  • زبان BASIC ساده و قابل فهم است.
  • محیط BASCOM شامل ویرایشگر کد، شبیه‌ساز و پروگرمر است.
  • نسخه آزمایشی (Demo) تا ۴ کیلوبایت کد را پشتیبانی می‌کند.

۴. اولین پروژه: چشمک‌زن LED

هدف پروژه:

یک LED را به پایه خروجی میکرو وصل می‌کنیم و آن را هر نیم‌ثانیه روشن و خاموش می‌کنیم.

قطعات مورد نیاز:

  • بردبورد
  • میکروکنترلر ATmega32
  • LED قرمز ۵ میلی‌متری
  • مقاومت ۱ کیلو اهم
  • منبع تغذیه ۵ ولت (باتری ۹ ولت + رگولاتور 7805)
  • پروگرمر AVR

شماتیک مدار:

  • پایه شماره ۴۰ (PA0) → مقاومت ۱k → LED → زمین
  • پایه ۱۰ (VCC) → +۵ ولت
  • پایه ۱۱ (GND) → زمین
  • پایه ۹ (RESET) → مقاومت Pull-Up به +۵ ولت

۵. کدنویسی در BASCOM

کد کامل:

' پروژه چشمک‌زن LED
$regfile = "m32def.dat"       ' معرفی میکروکنترلر
$crystal = 1000000            ' فرکانس کاری 1MHz

Config PINA.0 = Output        ' پایه PA0 به عنوان خروجی

Do
   Set PORTA.0                ' روشن کردن LED
   Waitms 500                 ' تأخیر نیم‌ثانیه
   Reset PORTA.0              ' خاموش کردن LED
   Waitms 500                 ' تأخیر نیم‌ثانیه
Loop
End

۶. توضیح خط‌به‌خط کد

  • $regfile = "m32def.dat" → فایل تعریف میکرو ATmega32 را معرفی می‌کند.
  • $crystal = 1000000 → فرکانس کاری CPU را ۱ مگاهرتز تنظیم می‌کند.
  • Config PINA.0 = Output → پایه شماره ۰ از پورت A را خروجی می‌کند.
  • Set PORTA.0 → مقدار پایه را ۱ می‌کند (LED روشن).
  • Reset PORTA.0 → مقدار پایه را ۰ می‌کند (LED خاموش).
  • Waitms 500 → تأخیر ۵۰۰ میلی‌ثانیه.
  • Do … Loop → حلقه بی‌نهایت برای تکرار عملیات.

۷. نکات عملی

  • اگر LED روشن نشد، جهت پایه‌ها را بررسی کنید (پایه کوتاه‌تر منفی است).
  • اگر LED خیلی کم‌نور بود، مقاومت را کمتر کنید (مثلاً 470 اهم).
  • اگر LED اصلاً روشن نشد، تغذیه میکرو و اتصال زمین را بررسی کنید.
  • برای تغییر سرعت چشمک، مقدار Waitms را تغییر دهید.

۸. تمرین‌ها

۱. LED را به پایه دیگری (مثلاً PB0) وصل کنید و کد را تغییر دهید.
۲. به جای یک LED، دو LED وصل کنید و یکی را روشن کنید و دیگری را خاموش.
۳. سرعت چشمک را تغییر دهید (مثلاً ۱۰۰ میلی‌ثانیه یا ۱ ثانیه).


۹. نتیجه

در این جلسه یاد گرفتیم:

  • میکروکنترلر چیست و چه اجزایی دارد.
  • محیط BASCOM را شناختیم.
  • اولین پروژه عملی (چشمک‌زن LED) را طراحی و اجرا کردیم.

🔹 این جلسه تقریباً ۱۰ صفحه توضیح شد. در جلسه دوم می‌ریم سراغ ورودی‌ها و کلیدها و یاد می‌گیریم چطور با فشار دادن کلید، LED را کنترل کنیم.


👉 حالا می‌تونم جلسه دوم رو هم به همین سبک کامل برات بنویسم.

ادامه مطلب
0

آموزش BASCOM AVR – بسکام – جلسه سوم

 

📘 آموزش BASCOM AVR – بسکام – جلسه سوم

 

کار با LCD کاراکتری (۲×۱۶)


۱. مقدمه

در جلسات قبل یاد گرفتیم چطور LED را روشن و خاموش کنیم و با کلید ورودی بگیریم. اما در پروژه‌های واقعی، نیاز داریم اطلاعات را به کاربر نمایش دهیم. ساده‌ترین ابزار نمایش، LCD کاراکتری است. این نمایشگر می‌تواند متن، عدد و نمادها را نشان دهد و در پروژه‌هایی مثل ساعت دیجیتال، دماسنج یا قفل رمز دیجیتال استفاده می‌شود.


۲. معرفی LCD کاراکتری

  • LCD کاراکتری متداول‌ترین نوع نمایشگر است.
  • پرکاربردترین مدل: ۲ سطر × ۱۶ ستون (یعنی ۳۲ کاراکتر همزمان).
  • پایه‌ها:
    • پایه‌های تغذیه (+۵ ولت و GND)
    • پایه کنتراست (با پتانسیومتر تنظیم می‌شود)
    • پایه‌های دیتا (DB0 تا DB7)
    • پایه‌های کنترل (RS، RW، E)
    • پایه‌های بک‌لایت (چراغ پشت صفحه)

۳. نحوه اتصال LCD به میکرو

  • پایه VCC → +۵ ولت
  • پایه GND → زمین
  • پایه VEE → پتانسیومتر برای تنظیم کنتراست
  • پایه RS → یک پایه از میکرو (مثلاً PortD.0)
  • پایه RW → زمین (چون فقط می‌خواهیم بنویسیم)
  • پایه E → یک پایه از میکرو (مثلاً PortD.1)
  • پایه‌های DB4 تا DB7 → چهار پایه از میکرو (مثلاً PortD.2 تا PortD.5)
  • پایه‌های LEDA و LEDK → تغذیه بک‌لایت

۴. کدنویسی در BASCOM

کد ساده:

' پروژه نمایش متن روی LCD
$regfile = "m32def.dat"
$crystal = 1000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PortD.2 , Db5 = PortD.3 , Db6 = PortD.4 , Db7 = PortD.5 , E = PortD.1 , Rs = PortD.0

Cls
Lcd "Hello AVR"

۵. توضیح خط‌به‌خط کد

  • Config Lcd = 16 * 2 → معرفی نوع LCD (۲×۱۶).
  • Config Lcdpin = Pin … → معرفی پایه‌های متصل به LCD.
  • Cls → پاک کردن صفحه نمایش.
  • Lcd "Hello AVR" → نمایش متن “Hello AVR” روی LCD.

۶. دستورات مهم LCD در BASCOM

  • Cls → پاک کردن صفحه.
  • Lcd "Text" → نمایش متن.
  • Locate x , y → تعیین موقعیت مکان‌نما (سطر و ستون).
  • Cursor On / Cursor Off → روشن یا خاموش کردن مکان‌نما.
  • Cursor Blink → مکان‌نما چشمک‌زن.
  • Shiftlcd Left / Right → جابجایی متن به چپ یا راست.

۷. پروژه عملی: متن متحرک

کد:

Dim I As Byte
Cls
Lcd "AVR Learning"

Do
   For I = 1 To 10
      Shiftlcd Right
      Waitms 250
   Next I

   Wait 2

   For I = 1 To 10
      Shiftlcd Left
      Waitms 250
   Next I

   Wait 2
Loop
End

توضیح: متن “AVR Learning” به سمت راست حرکت می‌کند، سپس به سمت چپ برمی‌گردد و این کار تکرار می‌شود.


۸. پروژه عملی: نمایش عدد روی LCD

کد:

Dim Counter As Byte
Counter = 0

Do
   Incr Counter
   Locate 2 , 1
   Lcd "Count=" ; Counter
   Wait 1
Loop
End

توضیح: هر ثانیه یک واحد به شمارنده اضافه می‌شود و روی LCD نمایش داده می‌شود.


۹. نکات عملی

  • اگر LCD چیزی نشان نداد، پتانسیومتر کنتراست را تنظیم کنید.
  • اگر فقط مربع‌های سیاه دیده شد، پایه‌های دیتا یا کنترل اشتباه وصل شده‌اند.
  • همیشه RW را به زمین وصل کنید تا LCD در حالت نوشتن باشد.

۱۰. تمرین‌ها

۱. متن دلخواه خود را روی LCD نمایش دهید.

  1. یک شمارنده بسازید که با فشار کلید مقدارش تغییر کند و روی LCD نمایش داده شود.
  2. متن را به صورت متحرک از راست به چپ حرکت دهید.

نتیجه جلسه سوم

در این جلسه یاد گرفتیم:

  • LCD کاراکتری چیست و چگونه به میکرو وصل می‌شود.
  • دستورات مهم BASCOM برای کار با LCD.
  • پروژه‌های عملی نمایش متن، شمارنده و متن متحرک.

🔹 جلسه چهارم: کار با کی‌پد ماتریسی و ساخت ماشین حساب ساده.

ادامه مطلب
0

آموزش BASCOM AVR – بسکام – جلسه چهارم

 

📘 آموزش BASCOM AVR – بسکام – جلسه چهارم

 

کار با کی‌پد ماتریسی (Keypad)


۱. مقدمه

در جلسات قبل یاد گرفتیم چطور LED را کنترل کنیم و متن روی LCD نمایش دهیم. حالا نیاز داریم از کاربر ورودی‌های پیچیده‌تر بگیریم؛ مثلاً عدد یا رمز عبور. ساده‌ترین راه استفاده از کی‌پد ماتریسی است. این قطعه در پروژه‌هایی مثل ماشین حساب، قفل رمز دیجیتال و منوهای کنترلی استفاده می‌شود.


۲. معرفی کی‌پد ماتریسی

  • کی‌پد ماتریسی مجموعه‌ای از کلیدهاست که به صورت ردیف و ستون مرتب شده‌اند.
  • رایج‌ترین مدل: ۴×۴ (۱۶ کلید).
  • هر کلید در محل تقاطع یک ردیف و یک ستون قرار دارد.
  • به جای اتصال جداگانه هر کلید، فقط ۸ پایه (۴ ردیف + ۴ ستون) داریم.

۳. نحوه اتصال به میکرو

  • ۴ پایه ردیف به پورت مثلاً PortC.0 تا PortC.3
  • ۴ پایه ستون به پورت مثلاً PortC.4 تا PortC.7
  • هنگام اسکن، ردیف‌ها یکی‌یکی فعال می‌شوند و ستون‌ها خوانده می‌شوند.

۴. روش اسکن کی‌پد

  1. یک ردیف را فعال کنید (مثلاً صفر منطقی بدهید).
  2. ستون‌ها را بخوانید. اگر یکی از ستون‌ها صفر شد، یعنی کلید مربوطه فشرده شده است.
  3. همین کار را برای همه ردیف‌ها تکرار کنید.
  4. ترکیب ردیف و ستون مشخص می‌کند کدام کلید فشار داده شده است.

۵. کدنویسی در BASCOM

کد ساده:

' پروژه خواندن کلید از کی‌پد 4x4
$regfile = "m32def.dat"
$crystal = 1000000

Config Kbd = PortC

Do
   K = Getkbd()          ' خواندن کلید
   If K <> 0 Then
      Lcd K              ' نمایش کلید روی LCD
   End If
Loop
End

۶. توضیح خط‌به‌خط کد

  • Config Kbd = PortC → معرفی پورت C برای اتصال کی‌پد.
  • Getkbd() → تابع آماده در BASCOM برای خواندن کلید.
  • اگر کلیدی فشرده شود، مقدار آن در متغیر K ذخیره می‌شود.
  • سپس مقدار K روی LCD نمایش داده می‌شود.

۷. پروژه عملی: ماشین حساب ساده

کد:

Dim A As Byte , B As Byte , Result As Byte
Dim K As Byte

Do
   K = Getkbd()
   If K <> 0 Then
      If K >= 48 And K <= 57 Then   ' اگر عدد بود
         A = K - 48
         Lcd A
      End If

      If K = 43 Then                ' اگر کلید + بود
         B = Getkbd()
         Result = A + (B - 48)
         Lcd "Result=" ; Result
      End If
   End If
Loop
End

توضیح: این برنامه دو عدد را می‌گیرد و جمع آن‌ها را نمایش می‌دهد.


۸. نکات عملی

  • اگر کلیدها درست کار نکردند، ترتیب اتصال ردیف‌ها و ستون‌ها را بررسی کنید.
  • برای جلوگیری از نویز، می‌توانید دیبانس نرم‌افزاری اضافه کنید (مثل جلسه قبل).
  • می‌توانید کلیدها را به کاراکترهای خاص (مثل * یا #) نگاشت کنید.

۹. تمرین‌ها

  1. برنامه‌ای بنویسید که با فشار کلید خاص، LED روشن یا خاموش شود.
  2. یک رمز عبور ۴ رقمی تعریف کنید و با فشار کلیدها بررسی کنید درست وارد شده یا نه.
  3. یک منو طراحی کنید که با کلیدهای کی‌پد بین گزینه‌ها جابه‌جا شود.

نتیجه جلسه چهارم

در این جلسه یاد گرفتیم:

  • کی‌پد ماتریسی چیست و چگونه کار می‌کند.
  • روش اسکن ردیف و ستون‌ها.
  • استفاده از تابع آماده Getkbd() در BASCOM.
  • پروژه عملی ماشین حساب ساده.

🔹 جلسه پنجم: کار با LCD گرافیکی و نمایش متن و اشکال هندسی.

ادامه مطلب
0

آموزش BASCOM AVR – بسکام – جلسه پنجم

📘 آموزش BASCOM AVR – بسکام – جلسه پنجم

 

کار با LCD گرافیکی (128×64)


۱. مقدمه

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


۲. معرفی LCD گرافیکی

  • رایج‌ترین مدل: 128×64 پیکسل (مدل KS0108).
  • تک‌رنگ (سیاه و سفید).
  • دارای ۲۰ پایه: تغذیه، دیتا و کنترل.
  • تغذیه: +۵ ولت مستقیم.
  • پایه‌های دیتا: ۸ خط (D0 تا D7).
  • پایه‌های کنترل: RS، RW، E، Reset، Chip Enable و …

۳. نحوه اتصال به میکرو

  • پایه‌های دیتا (D0 تا D7) → یک پورت کامل از میکرو (مثلاً PortB).
  • پایه‌های کنترل → پایه‌های مختلف از PortC.
  • پایه‌های تغذیه و بک‌لایت → +۵ ولت و زمین.
  • پتانسیومتر برای تنظیم کنتراست.

۴. کدنویسی در BASCOM

کد ساده:

' پروژه نمایش متن روی LCD گرافیکی
$regfile = "m32def.dat"
$crystal = 1000000
$lib "glcdKS108.lbx"

Config Graphlcd = 128 * 64sed , Dataport = PortB , Controlport = PortC , Ce = 4 , Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2

Setfont Font8x8
Cls
Lcdat 1 , 1 , "Salam"
End

۵. توضیح خط‌به‌خط کد

  • $lib "glcdKS108.lbx" → معرفی کتابخانه مخصوص LCD گرافیکی.
  • Config Graphlcd … → معرفی نوع LCD و پایه‌های اتصال.
  • Setfont Font8x8 → انتخاب فونت پیش‌فرض.
  • Cls → پاک کردن صفحه.
  • Lcdat 1 , 1 , "Salam" → نمایش متن “سلام” در مختصات سطر ۱، ستون ۱.

۶. دستورات گرافیکی مهم

  • Pset x , y , 255 → روشن کردن پیکسل در مختصات (x,y).
  • Pset x , y , 0 → خاموش کردن پیکسل.
  • Line (x1,y1)-(x2,y2) , 255 → رسم خط بین دو نقطه.
  • Circle (x,y) , r , 255 → رسم دایره با شعاع r.
  • Box (x1,y1)-(x2,y2) , 255 → رسم مستطیل.

۷. پروژه عملی: رسم اشکال هندسی

کد:

Cls
Line (10,10)-(100,10) , 255
Circle (64,32) , 20 , 255
Box (20,20)-(60,40) , 255
End

توضیح: یک خط، یک دایره و یک مستطیل روی LCD رسم می‌شود.


۸. نمایش تصاویر

  • تصاویر باید به فرمت BMP سیاه و سفید با اندازه 128×64 تبدیل شوند.
  • با ابزار Graphic Converter در BASCOM، فایل BMP به فرمت BGF تبدیل می‌شود.
  • سپس با دستور Showpic تصویر نمایش داده می‌شود.

کد:

$include "picture.bgf"
Cls
Showpic
End

۹. طراحی فونت فارسی

  • با ابزار Font Editor می‌توان فونت جدید طراحی کرد.
  • هر کاراکتر در یک جدول ۸×۸ پیکسل تعریف می‌شود.
  • می‌توان کاراکترهای فارسی مثل “س”، “ل”، “ا”، “م” را طراحی کرد و با دستور Chr() نمایش داد.

۱۰. تمرین‌ها

  1. یک منو طراحی کنید که با کلیدهای کی‌پد بین گزینه‌ها جابه‌جا شود و روی LCD گرافیکی نمایش داده شود.
  2. یک نمودار ساده رسم کنید که مقدار دما را نشان دهد.
  3. یک تصویر ساده (مثلاً لوگو) طراحی کنید و روی LCD نمایش دهید.

نتیجه جلسه پنجم

در این جلسه یاد گرفتیم:

  • LCD گرافیکی چیست و چگونه به میکرو وصل می‌شود.
  • دستورات گرافیکی مهم در BASCOM.
  • نمایش متن، اشکال هندسی و تصاویر.
  • طراحی فونت فارسی و نمایش آن.

🔹 جلسه ششم: کار با تایمرها و شمارنده‌ها (Timer/Counter) برای ایجاد تأخیر دقیق و شمارش رویدادها.

ادامه مطلب
0

آموزش BASCOM AVR – بسکام – جلسه ششم

 

📘 آموزش BASCOM AVR – بسکام – جلسه ششم

 

تایمرها و شمارنده‌ها (Timer/Counter)


۱. مقدمه

تا اینجا یاد گرفتیم چطور LED را روشن کنیم، کلید بخوانیم و متن روی LCD نمایش دهیم. اما برای بسیاری از پروژه‌ها نیاز به زمان دقیق داریم. مثلاً برای ساخت کرنومتر، ساعت دیجیتال یا تولید موج PWM باید بتوانیم زمان را اندازه‌گیری کنیم. این کار با تایمرها و شمارنده‌ها انجام می‌شود.


۲. تایمر چیست؟

  • تایمر یک بخش داخلی میکروکنترلر است که با هر پالس کلاک یک واحد افزایش می‌یابد.
  • تایمرها می‌توانند زمان را بشمارند یا پالس‌های خارجی را شمارش کنند.
  • در ATmega32 سه تایمر داریم:
    • Timer0: ۸ بیتی
    • Timer1: ۱۶ بیتی
    • Timer2: ۸ بیتی (مستقل از CPU، مناسب برای ساعت RTC)

۳. کاربرد تایمرها

  • ایجاد تأخیر دقیق (بیشتر از دستور Waitms).
  • شمارش رویدادها (مثلاً تعداد پالس ورودی).
  • تولید موج PWM برای کنترل موتور یا LED.
  • ساخت ساعت و تقویم دیجیتال.

۴. نحوه استفاده در BASCOM

کد ساده (Timer0):

' پروژه تست تایمر0
$regfile = "m32def.dat"
$crystal = 1000000

Config Timer0 = Timer , Prescale = 1024
Start Timer0

Do
   Locate 1 , 1
   Lcd Timer0
Loop
End

توضیح: مقدار تایمر0 روی LCD نمایش داده می‌شود و از ۰ تا ۲۵۵ افزایش می‌یابد.


۵. Prescaler چیست؟

  • Prescaler تقسیم‌کننده کلاک است.
  • مثلاً اگر کلاک CPU = 1MHz باشد و Prescaler = 1024، کلاک تایمر = 976Hz خواهد بود.
  • مقادیر مجاز: 1، 8، 64، 256، 1024.

۶. استفاده از تایمر۱ (۱۶ بیتی)

Config Timer1 = Timer , Prescale = 64
Start Timer1

Do
   Locate 2 , 1
   Lcd Timer1
Loop
End

توضیح: تایمر۱ می‌تواند تا مقدار 65535 بشمارد.


۷. استفاده به عنوان شمارنده (Counter)

  • تایمر می‌تواند به جای کلاک داخلی، پالس‌های خارجی را بشمارد.
  • مثال: شمارش تعداد فشار کلید یا تعداد پالس سنسور.

کد:

Config Timer0 = Counter , Edge = Rising
Do
   Lcd Counter0
Loop
End

توضیح: هر بار یک پالس روی پایه T0 بیاید، مقدار Counter0 یک واحد افزایش می‌یابد.


۸. پروژه عملی: کرنومتر دیجیتال

کد:

$regfile = "m32def.dat"
$crystal = 1000000

Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Ovf0
On Ovf0 Timer0_ISR

Dim Sec As Word

Start Timer0

Do
   Locate 1 , 1
   Lcd "Sec=" ; Sec
Loop
End

Timer0_ISR:
   Incr Sec
Return

توضیح: با هر بار سرریز تایمر۰، یک واحد به شمارنده ثانیه اضافه می‌شود و روی LCD نمایش داده می‌شود.


۹. نکات عملی

  • برای زمان دقیق باید فرکانس CPU و Prescaler درست تنظیم شوند.
  • تایمرها می‌توانند همزمان استفاده شوند، اما باید مراقب وقفه‌ها باشید.
  • تایمر۲ به دلیل مستقل بودن از CPU برای ساخت ساعت دیجیتال مناسب‌تر است.

۱۰. تمرین‌ها

  1. برنامه‌ای بنویسید که هر ۱ ثانیه LED روشن و خاموش شود.
  2. تعداد فشارهای کلید را با Counter0 بشمارید و روی LCD نمایش دهید.
  3. یک کرنومتر بسازید که زمان را با دقت میلی‌ثانیه نمایش دهد.

نتیجه جلسه ششم

در این جلسه یاد گرفتیم:

  • تایمرها و شمارنده‌ها چیستند و چه کاربردی دارند.
  • نحوه استفاده از Timer0 و Timer1 در BASCOM.
  • استفاده از تایمر به عنوان شمارنده پالس‌های خارجی.
  • پروژه عملی کرنومتر دیجیتال.

🔹 جلسه هفتم: کار با وقفه‌ها (Interrupts) و مدیریت رویدادها به صورت خودکار.

ادامه مطلب