AVR, آموزش, توصیه شده, دوره آموزش جامع میکروکنترلر AVR, مقاله های سیسوگ, میکروکنترلر

پیاده سازی دکودر BCD-7segment با کدویژن و بسکام | قسمت 6 آموزش میکروکنترلر AVR

آموزش میکروکنترلر AVR قسمت 6

این سری آموزش‌ های میکروکنترلر AVR که به جرات می توان آنها را کامل‌ترین آموزش‌های موجود دانست با صرف هزینه زیاد و با کیفیت و جزییات بالا توسط استاد ارجمند جناب آقای کی‌نژاد تهیه شده است و به صورت رایگان در اختیار عموم قرار گرفته است.

سیسوگ در قسمت پنجم آموزش میکروکنترلر AVR توضیحاتی به صورت خلاصه درمورد امکانات موجود در سخت افزار AVR بیان کرد، حال در این قسمت از آموزش میکروکنترلر AVR می‌خواهیم با نوشتن برنامه ­هایی، مراحل راه اندازی یک دیکودر BCD به 7segment را به وسیله­ ی کامپایلرهای بسکام و کدویژن بررسی کنیم.

در ابتدا به معرفی مختصری در مورد سون سگمنت می‌پردازیم. سون سگمنت قطعه ای است که معمولاً به عنوان نمایشگر اعداد (از 0 تا 9) و برخی حروف انگلیسی به کار می‌رود. همچنین قابلیت نمایش برخی نمادها مانند مساوی، سه خط  موازی و نقطه را دارد. معمولا از نقطه که در پایین قطعه در کنار سگمنت هشتم قرار دارد به عنوان ممیز استفاده می‌­شود. هم‌چنین مواردی مانند چشمک زدن، چرخش سگمنت ها و … امکان نشان دادن اطلاعات بسیاری را از طریق این قطعه فراهم می­‌کند.

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

در واقع ساختمان داخلی سون سگمنت از LEDهایی تشکیل شده است که یا به صورت آند مشترک و یا به صورت کاتد مشترک به یکدیگر متصل هستند، از همین رو سون‌ سگمنت ها به دو دسته­ کاتد مشترک و آند مشترک تقسیم بندی می‌­شوند.

سون سگمنت کاتد و آند مشترک

 

در کاتد مشترک سیگنال HIGH و در آند مشترک سیگنال LOW سبب روشن شدن سگمنت ها می­‌شود. برای اتصال سون سگمنت به میکروکنترلر از مقاومت برای محدود کردن جریان استفاده می‌شود. برای محاسبه این مقاومت باید مقدار افت ولتاژ روی سون سگمنت را بدانیم، که این مقدار در هر سون سگمنت متفاوت می­‌باشد.

(ولتاژ پورت – ولتاژ سگمنت) / مقاومت = جریان هر سگمنت

مقدار جریان مورد نیاز سگمنت به نوع ساخت و اندازه آن بستگی دارد. مثلا یک سون سگمنت نور بیشتر و دیگری نور کمتری دارد. به صورت معمول برای سون سگمنت های کوچک مقاومتی در حد چند صد اهم کفایت می­‌کند.

در شکل زیر پورت B به عنوان خروجی و 4 پین اول پورت A به عنوان ورودی در نظر گرفته شده است، با توجه به این که از طریق  4 بیت امکان نمایش 16 حالت یعنی اعداد از 0 تا 15 یا 0 تا F در مبنای هگزا دسیمال وجود دارد، اگر بخواهیم این دیکودر را به عنوان تبدیل کننده BCD به سون سگمنت استفاده کنیم (اعداد BCD شامل 0 تا 9 هستند)، باید برای حالت های 10 تا 15 هم پیش بینی هایی به عمل آید. در این برنامه بعد از عدد 9  نقطه سون سگمنت روشن می‌شود.

 

شماتیک اتصال سون سگمنت به اتمگا

کامپایلر کدویژن:

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

در خط اول برنامه نوع میکروکنترلر را مشخص می­‌کنیم.

 

در خط بعدی کدهای سون سگمنت نوشته شده است که با توجه به جدول زیر می­توان روش بدست آوردن این کدها را پیدا کرد.

 

کدهای سون سگمنت

در این خط برنامه یک آرایه با 11 عنصر تعریف می­‌شود. اجزای این آرایه از نوع بایت هستند که با عبارت unsigned char مشخص می­‌شوند. در ابتدای این خط از کلمه flash استفاده می‌­شود، بدین معنا که اجزای این آرایه در هنگام پروگرام شدن بر روی حافظه flash ذخیره می‌­شوند.

همانطور که قبلا اشاره شد، دیتاهایی که قرار است در طول برنامه مقدار آن‌ها ثابت بماند و تغییری نکند، باید در حافظه flash پروگرام نمود. هم‌چنین اگر در تعریف آرایه نوع حافظه مشخص نشود، آرایه در حافظه SRAM ذخیره می­‌شود و برای مثال در این برنامه عملا 11بایت از حافظه اشغال می­‌شود. این مساله در این برنامه مشکلی ایجاد نمی‌کند ولی در برنامه‌های وسیع­تر که مصرف حافظه بیشتر می‌­شود، روش اصولی دربرنامه نویسی استفاده از حافظه SLASH می‌­باشد.

در ادامه برنامه تابع main را تعریف می‌­کنیم، در این تابع باید متغییر برنامه را مشخص نماییم. در این برنامه متغییر ما کدهای سون سگمنت می‌­باشند که از نوع بایت هستند پس به صورت ;unsigned char bcd تعریف می‌شوند.

هم‌چنین باید پورت B به عنوان خروجی در نظر گرفته شود که از تساوی DDRB=0XFF استفاده می‌­شود.

در ادامه، حلقه while استفاده می­‌شود که برنامه داخل این حلقه باید به صورت مداوم اطلاعات را از روی PORTA بخواند و کد معادل سون سگمنت را در خروجی PORTB قرار دهد و این کار به صورت دائم در حال انجام است.

عبارت بعدی در حلقه while یعنی ( bcd = (PINA&0x0f بدین منظور است که 4 بیت پایین PORTA مورد استفاده قرار بگیرد و اگر 4 بیت بالا وضعیتی خارج از محدوده استفاده ما داشتند مقدار آنها صفر قرار داده شود.

خط بعدی دستور if می‌باشد، این دستور بیانگر این است که اگر مقدار bcd کمتر از 10 باشد، کد معادل آن در آرایه bcd­_7seg نمایش داده شود. یعنی مقدار bcd که در آرایه bcd­_7seg قرار می­‌گیرد متناظر با خود bcd می‌باشد. یعنی اگر bcd=0 باشد [bcd_7seg[0 برابر 0x3f خواهد بود.

حال اگر عدد ما از 10 بیشتر بود برنامه وارد خط else می­‌شود و عضو 11ام آرایه که منظور نقطه 7سگمنت می­‌باشد روشن خواهد شد.

در نهایت هم حلقه های باز شده بسته خواهند شد.

 

 

حال اگر بخواهیم این برنامه را به صورتی تغییر دهیم که یک دیکودر هگزا دسیمال به سون سگمنت باشد یعنی بتواند حروف a تا f را نمایش دهد کافی است دستور if را به صورت زیر تغییر دهیم و دستور else را حذف کنیم.

 

هم‌چنین باید در ادامه اجزا آرایه، کدهای مربوط به حروف a تا f را از روی جدول در آورده و اضافه کرد.

کامپایلر بسکام:

در قسمت بعدی،همین برنامه را با کامپایلر بسکام بررسی و تشریح می­کنیم.ساختار برنامه بسیار شبیه به کامپایلر کد ویژن می­باشد.

در ابتدا به وسیله دستور ”regfile”m32def.dat$ نوع میکروکنترلر را مشخص می­کنیم.

در ادامه نوع فرکانس کریستال مشخص می‌شود. $crystal=1000000

باید به وسلیه دستور config PORTB=output پورت B را خروجی قرار دهیم و سپس حلقه DO LOOP ایجاد شود.

در این حلقه متغییر bcd برابر با PinA قرار داده می‌­شود،سپس مقدار آن با 0F اند می‌­شود. نکته ای که در اینجا وجود دارد این است که برعکس برنامه نویسی C  که امکان انجام چندین عملیات ترکیبی در یک دستور وجود دارد در برنامه نویسی یسکام باید این عملیات به صورت مرحله به مرحله انجام گیرد.

*ساختار دستور if Then در بسکام :

اگر این دستور به صورت if then  باشد جواب دستور در جلو  then نوشته می­‌شود، ولی اگر به صورت if else باشد باید جواب دستور در خط بعدی نوشته شود.

در اینجا متغیر ها با دستور lookup احضار می­‌شوند. look up table موجود در این برنامه در انتها نوشته می­‌شود.

دستور lookup به صورت زیر نوشته می‌شود.

 

و در ادامه به همین روش ادامه می­‌یاید که با توجه به برنامه نوشته شده در زیر می‌توانید اطلاعات بیشتری را کسب کنید.

 

سیسوگ در قسمت هفتم آموزش میکروکنترلر AVR  به آشنایی با منابع کلاک می‌پردازد. با سیسوگ همراه باشید.

 

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

4 دیدگاه در “پیاده سازی دکودر BCD-7segment با کدویژن و بسکام | قسمت 6 آموزش میکروکنترلر AVR

  1. Avatar for farshidm2 farshidm2 گفت:

    با سلام
    کد هگز عدد 2 (0x5b) می باشد ولی در برنامه کدویژن (0x58) نوشته شده که عدد c رانشان میدهد. (خط3)
    و کمی در مورد خط 17 کدویژن میشه توضیح بدین؟
    چیزی که متوجه شدم همزمان 4 پین اول پورت A به عنوان ورودی و مقدارش داخل bcd ریخته میشه؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      توی کد کدویژن مقدار ۵۸ بود – ولی کد بیسیک بله حق با شما بود – کد اصلاح شد
      بله درست متوجه شدید – چهار بیت پایین از ورودی پورت b خوانده میشه و توی متغییر bcd ذخیره میشه

  2. Avatar for mahdi mahdi گفت:

    سلام
    خط 17 برنامه بسکام نباید Lookup باشه؟؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام
      بله دوست عزیز همینطوره ؛متشکر از شما برای تذکر
      برنامه اصلاح شد.

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

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