آموزش میکروکنترلر AVR – مرور مفاهیم

 

می دانیم که در دنیای امروز ردی از میکروکنترلر ها در تمامی وسایل الکترونیکی پیدا میشه مثل تلویزیون ، یخچال ، ماکروویو ، محصولات صنعتی ، نظامی و وسایل دیگر چون میکرو کنترلرها بخش جدا نشدنی از تمامی محصولات الکترونیکی می باشند. شرکت های زیادی هم در این زمینه با هم در رقابت هستند مثل اینتل ، ATMEL ، میکرو چیپ ، موتورولا و خیلی دیگر در حال حاضر شرکت Atmel توانسته با تولید میکرو کنترلر هایی با تنوع بالا و قیمت مناسب یک کار خانه موفق باشد و محصولاتش رو توی بازار داغ میکرو کنترلر جا بی اندازد.

 

هدف ۱: آموزش مقدماتی میکروکنترلر های AVR ساخت شرکت ATMEL
هدف ۲: آشنایی با نرم افزار برنامه نویسی code vision AVR به زبان های برنامه نویسی c و اسمبلی

مقدمه

می دانیم که در دنیای امروز ردی از میکروکنترلر ها در تمامی وسایل الکترونیکی پیدا میشه مثل تلویزیون ، یخچال ، ماکروویو ، محصولات صنعتی ، نظامی و وسایل دیگر چون میکرو کنترلرها بخش جدا نشدنی از تمامی محصولات الکترونیکی می باشند. شرکت های زیادی هم در این زمینه با هم در رقابت هستند مثل اینتل ، ATMEL ، میکرو چیپ ، موتورولا و خیلی دیگر در حال حاضر شرکت Atmel توانسته با تولید میکرو کنترلر هایی با تنوع بالا و قیمت مناسب یک کار خانه موفق باشد و محصولاتش رو توی بازار داغ میکرو کنترلر جا بی اندازد.

یک سوالی که به ذهن هر دانشجو یا مهندس و یا استادی می رسد این است که میکرو کنترلر AVR یا میکرو کنترلر pic؟ AVR یا ARM؟

جواب: چرا نگوییم AVR یا pic چرا بگوییم AVR و pic یعنی هر دو را یاد بگیریم. چون اگه هر دو را بلد باشیم می توانیم طرح هایی خیلی بهتر با تلفیق این دو بدهیم.

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

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

تنوع در میکرو کنترلر های AVR بسیار زیاد است من اگر قرار باشه خانواده AVR را یه دسته بندی کلی انجام بدم آنها رو به سه دسته AVR های ۳۲ بیتی، ۱۶ بیتی و ۸ بیتی تقسیم می کنم.
AVR های ۳۲ بیتی که با نام AVR 32 معروف شده اند البته زیاد کاربرد عمومی پیدا نکرده اند و فقط برای موارد خاص استفاده می شوند.
AVR های ۱۶ بیتی که با نام XMEGA و با پیشوند ATXMEGA روانه بازار شدند کم کم دارند جای خودشون را باز می کنند، که به نسبت قیمت شان امکانات خوبی هم دارند.
اما آن چیزی که جنبه کاربردی عمومی پیدا کرده AVR های ۸ بیتی هستند.

AVR های ۸ بیتی:

۱: سری کوچک آنها که با پیشوند ATTINY شروع می شوند. مثلا ( ATTINY13A یا ATTINY26 ) این سری معمولا پکیج های کوچکی دارند امکتناتشون هم نسبتا کم است، اما برای کاربردی که برد یا دستگاه قراره است کوچک در بیاید گزینه بسیار مناسبی می باشد.
۲: سری متوسط AVR که با AT90S شروع می شوند، این سری امکانات متوسطی دارند و امکاناتشون هم نسبتا متوسط می باشد مثلا (AT90S8515) که اگر به دیتا شیت آن مراجعه کنید می بینید که امکانات متوسطی دارد مثل پورت سریال، INTERUPT ها و یک سری امکانات دیگر.
۳: سری مگا میکروکنترلر های AVR که با پیشوند ATMEGA شروع می شوند. مثل (ATMEGA 8 , ATMEGA 16 ,ATMEGA 32 , …) این سری پکیج های بزرگتری دارد و به نسبت امکانات شان هم بیشتر می باشد و برای کار هایی که امکانات بالایی می خواهد بسیار مناسب می باشند. اگر به دیتا شیت ATMEGA 128 دقت کنید می بینید که یک قطعه ۶۴ بیت است و SMD QFB است و اگر به PIN OUT آن دقت کنید متوجه می شوید که امکانات زیادی دارد.

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

تعاریفی که نیاز داریم بدانیم:

۱ : فیوز بیت ( FUSE BIT )

بیت های فیوز یا فیوز بیت ها بخشی از حافظه ی غیر فرار داخلی میکرو کنترلر هستند . که کار انها پیکر بندی کلی سخت افزار میکرو کنترلر است مثلا : منبع کلاک چی باشد ، ارتباط JTAG برقرار باشد یا مه ، زمان START UP چقدر باشد یا خیلی دیگر از پیکر بندی های سخت افزاری
بیایید به دیتاشیت ATMEGA 128 مراجعه کنیم. چند تا جدول داره که فیوز بیت هارو تو اون توضیح می دهد.

مثلا فیوز بیت JTAGEN یا ENABLE JTAG که مشخص می کند که ارتباط JTAG بر قرار باشد یا نه. یا مثلا فیوز بیت های CKSEL از ۰ تا ۳ که مشخص می کند که منبع کلاک سیستم چی باشد. یا BODEN که مشخص می کند که آیا قابلیت BROWN OUT DETECTOR فعال باشد یا خیر که البته هر کدام از این ها کار برد خودشان را دارند و بسته به نیاز ما باید به دیتا شیت مراجعه کنیم و انها را فعال کنیم.

۲ : بیت قفل (LOCK BIT)

بیت قفل یا لاک بیت به زبان ساده بخشی از حافظه ی غیر فرار داخلی است که برای مخافظت برنامه از خوانده شدن و اضافه شدن بیشتر برنامه می باشد.

فرض کنید برنامه ای نوشتید و روی آی سی لو کردید و میخواید آن را قفل کنید که کس دیگه نتواند از آن برنامه کپی برداری کند . با مراجعه به دیتا شیت ATMEGA 128 مشاهده می کنید که آن ۶ تا بیت قفل دارد که ۴ تای آن مربوط به حافظه ی بوت می باشند BLB01 تا BLB12 و دو تای آن مربوط به حافظه ی برنامه اپلیکیشن ما هستند. که اگر در جدول ۱۱۷ نگاه کنید می بینید که با فعال یا غیر فعال کردن بیت های قفل به سری امکانات خاص را به ما می دهد.

چند نکته که باید به آنها توجه کرد:

الف: در منطق برنامه نویسی میکرو ها منطق ۱ به معنای برنامه ریزی نشده و منطق ۰ به معنای برنامه ریزی شده می باشد. پس من اگر مثلا بخواهم فیوز بیت JTAG را برنامه ریزی کنم مقدار آن را صفا در نظر میگیرم.

ب: دسترسی به بیت های فیوز و قفل در زمان برنامه ریزی میکرو کمنرلر به وسیله پروگرمر یا JTAG امکان پذیر است.

ج: در صورت استفاده از بیت های قفل ، این کار باید در انتهای برنامه ریزی بقیه قسمت ها انجام شود. یعنی نمی توان ابتدا بیت ها را برنامه ریزی کرد و سپس خود آی سی رو برنامه ریزی کرد . ابتدا برنامه ریزی آی سی سپس برنامه ریزی فیوز بیت و پس از آن برنامه ریزی بیت قفل را باید انجام داد.

د: بیت های قفل با پاک کردن آی سی پاک می شوند اما بیت های فیوز دست نخورده باقی می مانند.

۳: می دانیم که ریز پردازنده ها برای انجام عمل پردازش نیاز به منبع کلاک دارند این منبع کلاک واحد زمان بندی پردازش را تعیین می کند. هر چه منبع کلاک سریع تر باشد یعنی فرکانس بالاتری داشته باشد قاعدتا سرعت پردازنده هم بالاتر می رود اما از طرفی فرکانس کلاک نمی تواند تا هر مقداری بالا برود و محدودیت فرکانس کلاک هر آی سی در دیتا شیت آن موجود است مثلا در سری مگا برخی می توانند تا فرکانس ۸ مگا هرتز برخی تا ۱۶ و برهی تا ۲۰ مگت هرتز بالا روند.

اما کلاک سیستم چه منابعی را می پذیرد.

منابع کلاک سیستم

۱: اسیلاتور کریستالی
۲: اسیلاتور کریستالی فرکانس پایین
۳: اسیلاتور RC خارجی ( خارجی یعنی این RC رو بیرون از آی سی قرار می دهیم )
۴: اسیلاتور RC کالیبره شده داخلی
۵: کلاک خارجی

۱: به دیتا شیت مراجعه می کنیم و ابتدا اسیلاتور کریستالی را بررسی می کنیم. خب یک قطعه به نام کریستال که فرکانسش مشخص است و روی کریستال نوشته شده را بیت دو پایه XTAL1 و XTAL2 فرار می دهیم که البته دو تا خازن هم وجود دارد که با مراجعه به دیتا شیت می توانیم ببینیم که چه خازن هایی قرار دهیم. به شدت تحت تاثیر ولتاژ و دمای محیط است.

۲: دومین کلاکی که مورد بحث قرار می دهیم اسیلاتور کریستالی فرکانس پایین است. که به عنوان کریستال ساعت شناخته می شوند و فرکانس آن پایین است.

۳ : اسلاتور RC خارجی است که یک مقاومت و خازن این منبع کلاک را تشکیل می دهند و مشخص است که به چه پایه هایی متصل می شوند.

۴ : اسیلانور آر سی داخلی است که می توانیم فرکانس آن را مشخص کنیم و نیازی به مدار خارجی نداریم.

۵ : کلاک خارجی که باد یک مدار جانبی طراحی کنیم که فرکانس کلاک بسازه مثلا یک آی سی ۵۵۵ می تواند به عنوان منبع کلاک باشد و خروجی آن را به عنوان ورودی به پلیه XTAL1 متصل کنیم. 

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

منابع ریست سیستم RESET:

ساده ترین منبع ریست سیستم POWER ON شدن خود میکروکنترل است. یعنی زمانی که منبع تغزیه میروکنترلر را وصل می کنید سیستم خود به خود ریست می شود و برنامه از ابتدا شروع به کار می کند. دومین منبع ریست پایه ریست میکروکنترلر می باشد که اگر این پایه را به زمین یا ۰ ولت وصل کنید میکرو ریست می شود. سومین منبع ریست تایمر نگهبان یا WATCHDOG TIMER است. یک منبع ریست است که آن را کوک می کنیم در زمان هایی خاص قبل از اینکه تایمر سر ریز شود آن را ریست نکنیم این تایمر سیستم را ریست می کند. چهارمین منبع کاهش ولتاژ تغذیه از جد BROWN OUT است. با فعال کردن این فیوز بیت اگر ولتاژ تغذیه از حدی پایین تر بیاد خود به خود سیستم را ریست می کند. آخرین منبع ریست دریافت فرمان ریست از JTAG می باشد.

ساختار حافظه

به طور کلی سه نوع حافظه در AVR موجود است.

۱: حافظه برنامه PROGAM MEMORY

جنس این نوع حافظه از جنس فلش FLASH است، حافظه فلش یک نوع حافظه ماندگار است یعنی با قطع شدن تغذیه دادها از بین نمی رود پس می تواند به عنوان ذخیره برنامه نوشته شده توسط کاربر به کار رود یعنی وقتی برنامه را با پروگرمر برنامه ریزی می کنیم روی حافظه ی فلش ذخیره می گردد و بعد از اتمام برنامه ریزی CPU دستوراتش را از آنجا می گیرد. این حافظه می تواند برای ذخیره مقادیر ثابت برنامه استفاده شود که با کلمه کلیدی CONST و FLASH تعریف شود. این حافظه برای CPU فقط خواندنی است.

حافظه به دو بخش تقسیم می شود:

الف: BOOT

ب: کاربردی APPLICATION

این که بخواهیم بدانیم که چه مقدار از حافظه مربوط به بخش بوت وچه مقدار مربوط به بخش کاربردی می شود به وسیله فیوز بیت های BOOTSZ تعیین می شود.

۲: حافظه داده از نوع RAM

این حافظه از جنس رم استاتیک می باشد. یعنی رمی که نیاز به رفرش ندارد. این حافظه می تواند برای ذخیره داده های موقت برنامه استفاده شود چون فرار است همچنین متغیر های تعریف شده در برنامه در این فضا ذخیره می شود. 

فضای رم به سه بخش تثسیم می شود:

الف: بخش فایل رجیستری REGISTER FILE که رجیستر های R0 تا R31 در این فضا قرار می گیرند. این رجیستر ها در واقع انباره یا آکومولاتور برای انجام دستورات CPU هستند.

ب: بخش I/O یعنی با این بخش می توانیم به امکانات درونی میکرو کنترلر دسترسی پیدا کنیم مثلا اگر بخواهیم به یکی از پورت ها دسترسی پیدا کنیم از این بخش استفاده می کنیم.

نکته : ۳۲ بایت اول این بخش بیت آدرس پدیرند یعنی می توانیم بیت های انها را تک به تک بخوانیم یا بنویسیم مثلا

ADMUX.ADLAR = 1 ;

یعنی از رجیستر ADMUX بیت ADLAR را یک کن.که فقط برای ۳۲ خانه اول امکان پذیر است.

ج : بخش رم کاربر یعنی فضایی که کاربر می تواند برای برنامش استفاده کنه که به دو بخش رم داخلی یا رم خارجی می تواند تقسیم بندی شود .

۳ : حافظه داده از نوع EEPROM

این حافظه از این نظر که قابل خواندن و نوشتن هست شبیه رم است و از این نظر که در زمان قطع برق داده هایش را حفظ می کند شبیه ROM است. این حافظه می توند برای ذهیره حافظه ی ماندگار استفاده شود. در زبان C متغر های ذخیره شده از نوع EEPROM در این فضا ذخیره می شوند. مثلا

EEPROM CHAR E1 ;

یعنی یک متغیر به نام E1 از نوع CHAR یعنی کاراکتر تو فضای EEPROM ذخیره می شود یا

EEPROM UNSIGNED INT E2 = 1234 ;

که کامپایلر یک فایل با پسوند EEP میسازد که در بر گیرنده حافظه EEPROM می باشد.

از معایب آن سرعت آن می باشد که از حافظه های دیگر پایین تر است.

دومین عیب آن محدودیت تعداد نوشته شدن را دارد.

ساختار پورت ها

پورت به زبان ساده درگاه تبادل داده های سیستم با محیط بیرون می باشد.

پورت خروجی: پورتی خروجی است که داده هاس سیستم را به بیرون انتقال دهد.

پورت ورودی: پورتی ورودی است که داده هایی را از بیرون وارد سیستم کند.

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

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

دسترسی به پورت ها از طریق برنامه نویسی و اعمال تنظیمات در رجیستر های مربوط به آن ها در فضای I/O حافظه RAM قرار دارد ، امکان پذیر است . پورت ها در AVR با حروف نام گذاری می شوند مثلا A , B , C , .. این که یک میکرو چند تا وچه پورت هایی دارد در دیتا شیت آن میکرو نوشته شده است. مثلا اگه به دیتا شیت ATMEGA 128 مراجعه فرمایید نقشه PIN OUT مشخض می کند که چه پورت هایی دارد. مثلا ATMEGA 128 پورت A پورت B پورت C پورت D , E , F و چند تا پایه از پورت G را دارد. اگه به پایه ها دقت کنید می بینید که اکثر پورت ها چند کاره هستند مثلا پایه ۶ از پورت D رویش نوشته شده T1 یعنی ورودی تایمر یک همچنین D7 ورودی تایمر دو می باشد که با توجه به نیاز از آن استفاده می شود.

نکات کاربردی:

۱: بعضی از پورت ها بیت آدرس پذیرند و بعضی خیر. مثلا

PORTB.3 = 0 ;

یعنی به پایه سوم پورت b دسترسی پیدا کرده ام و آن را صفر قرار داده ام.

۲: از پورت های خروجی جریان اضافه نکشید یعنی بار اضافی بهش ندید وهم چنین روی پورت های ورودی ولتاژ غیر مجاز وارد نکنید مثلا یک LED را بدون مقاومت به پایه خروجی وصل نکنید چون این یک وضعیت نا پایدار به وجود می آورد چرا که محدود کننده جریان که همون مقاومت باشه سر راه LED نیست که این در دراز مدت به پورت ما آسیب می رساند چرا که LED یک قطعه غیر خطی می باشد و از یک جایی به بعد جریان زیادی می کشد. مثلا روی پورت ورودی مداری نصب شده که ولتاژی بیشتر از حد مجاز ولتاژ ورودی میکرو کنترلر تولید می کند مثلا یک ولتاژ ۱۲ ولت را روی آن پایه قرار بدیم در این حالت باید با یک مقاومت و یک دیود زنر این ولتاژ رو محدود کنیم.

۳: بعضی از پین ها مربوط به JTAG می باشند اگر می خواهیم از این پین ها به عنوان ورودی و خروجی استفاده کنیم باید فیوز بیت مربوط به آن JTAGEN را غیر فعال کنیم.

حال چگونه از پورت ها استفاده کنیم.

معرفی رجیستر های مربوط به پورت ها:

هر پورت سه رجیستر مخصوص به خودش تو فضای I/O دارد.

۱: رجیستر DDR مثلا DDRC برای پورت C

این رجیستر برای تنظیم جهت تبادل روی پورت مورد استفاده قرار می گیرد یعنی مشخص می کند که کدام پین ها روی برد ورودی باشند و کدام خروجی باشند. قرار دادن یک در هر بیت این رجیستر پین متناظر با آن را به عنوان خروجی تعریف می کند و بالعکس قرار دادن صفر در هر بیت ، پین متناظر با آن را به عنوان ورودی تعریف می کند.

مثلا اگر DDRB = 11010101 تنظیم شود وضعیت پین های پورت B به این صورت خواهد بود:

خروجیPB0 = ورودیPB1 = خروجیPB2 = ورودی PB3 = خروجیPB4 = ورودیPB5 = خروجیPB6 =

خروجیPB7 =

۲: رجیستر PIN مثلا PINA برای پورت A

این رجیستر فقط خواندنی است و برای خواندن داده های روی پورت به کار می رود یعنی اگر بخواهیم یک پین از یک پورت را بخوانیم از این رجیستر استفاده می کنیم.

مثلا:

INP = PINC ;

یعنی کل پورت C را می خواند و روی این متغیر قرار می دهد.

B = PIND.3 ;

یعنی پین سوم پورت دی را می خواند و روی یک متغیر تک بیتی قرار می دهد.

IF ( PINA.7 == 0 ) BREAK ;

یعنی اگر پین شماره ۷ از پورت A برابر ۰ شد از او حلقه یا شرط برک کن.

۳: رجیستر PORT مثلا PORTD برای پورت D

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

اول در حالتی که پورت خروجی تعریف شد باشد در این حالت نوشتن صفر یا یک در این رجیستر باعث صفر یا یک شدن پین متناظر با آن پورت می شود . مقدار این رجیستر مستقیما روی پین های پورت منتقل می شود .

اما در حالتی که پورت به عنوان ورودی تعریف شده باشد در این حالت پورت ورودی را به دو مود عملکرد مختلف می تواند تنظیم کند مود TRI – STATE و مود PULL – UP دارد در این حالت با نوشتن صفر در این رجیستر ورودی را به صورت امپدانس بالا ( TRI – STATE ) و نوشتن یک در آن ورودی را به صورت پول آپ دار پیکر بندی می کند .

TRI – STATE اون نوع از ورودی است که امپدانس بالایی دارد و اگه مدار بیرونی متصل به آن اون را درایو نکند یعنی صفر یا یک روی آن نیاورد می تواند کوچک ترین نویز محیط را بگیرد به عنوان صفر یا یک پس از این مود وقتی استفاده می شود که مطمین باشیم به مدار بیرونی متصل است که آن را درایو می کند .

PULL – UP دار: همان طور که می دانیم پول آپ یک امپدانس داخلی است یعنی داخل آی سی قرار دارد که ورودی را به تغذیه متصل میکند یعنی اگر مدار بیرونی نباشد که آن را صفر کند این خود به خود یک را وارد می کند مگر این که مدار بیرونی روی اون پایه صفر بذارد که به زمین وصل کند البته مود مقابل آن PULL DOWN است که یک امپدانس داخلی ورودی را به زمین وصل می کند .

مثلا

DDRB = 0B00101100

PORTB = 0B01101001

که نتیجه ان به این صورت می باشد .

ورودی پول آپ دار PB0 = ورودی امپدانس بالا PB1 = خروجی صفر PB2 = خروجی یک PB3 =

ورودی امپدانس بالا PB4 = خروجی یک PB5 = ورودی پول آپ دار PB6 = ورودی امپدانس بالا PB7 =

کار با نرم افزار CODEVISION AVR

نرم افزار CODEVISIONAVR یک IDE توانمند را برای برنامه نویسی به زبان C واسمبلی برای میکرو کنترلر های AVR فراهم می آورد .

امکانات جانبی نرم افزار:

۱ : راه انداز پروگرمر : برای پروگرم کردن آی سی بعد از نوشتن برنامه .

۲ : ترمینال سربال : محیطی است که به وسیله آن می توان با ابزار جانبی که با RS232 کار می کنند ارتباط بر قرار کند .

۳ : ابزار دیباگ : برای دیباگ کردن برنامه .

نکات:

۱: تعاریف و نام رجیستر ها در هدر فایل مربوط به میکرو کنترلر همگی با حروف بزرگ تعریف شده اند .

۲: در بین برنامه زبان C می توان از کد های اسمبلی نیز استفاده کرد . این دستورات بین دو عبارت پیش پردازنده #ASM و #ENDASM قرار می گیرند .

مثلا

PORTB.2 = 1 ;

#asm

Nop

Add r0 , r1

#endasm

یا اگر بخواهیم یک یا چند دستور را در یک خط بنویسیم باید به فرم زیر عمل نماییم .

#asm ( “ nop \ add r0 , r1 “ )

۳: کدویژن از انواع داده های استاندارد زبان c پشتیبانی می کند .

داده هایی مثل float , long , int , char , bool

البته تفاوت های جزیی هم وجود دارد :

  • اضافه شدن داده تک بیتی bit که محدودیت هایی هم هم دارد اول اینکه فقط مقدار صفر و یک می گیرد ، دوم اینکه تعریفش به صورت سراسری ( global ) می باشد یعنی این متغیر را توی زیر برنامه هایمان نمی توانیم استفاده کنیم و همچنین به صورت آرایه ، ساختار و یا یونیو نمی تواند استفاده شود .
  • عدم وجود داده اعشاری با دقت مضاعف در نسخه های غیر از professional که در ورژن های دیگر داده double و float یکسانند .
  • در صورت استفاده از داده bool ، هدر فایل stdbool.h به برنامه اضافه شود .

در برنامه

روش اول ساخت پروژه

برای ساخت پروژه از گزینه file ، گزینه new project را میزنیم تا یک پروژه جدید بسازیم و در صفحه باز شده جای ذخیره پروژه را مشخص می نماییم بعد در پنجره باز شده میکرو مورد نظر را انتخاب می کنید و ok میزنیم . در پنجره باز شده تنظیماتی را که لازم داریم را وارد می کنیم . در قسمت هدر فایل برای تعریف المان هایی که می خواهیم در برنامه استفاده کنیم از آن استفاده می کنیم . قسمت بعدی تابع اصلی شماست که با void main نشان داده شده است که برنامه های شما درون آن نوشته می شود . در قسمت بعدی while ( 1 ) می باشد که یک حلقه بی نهایت است و برنامه تکرار شونده ما درون آن نوشته می شود .

روش دوم ساخت پروژه استفاده از code wizard

در قسمتی که سوال می شود می خواهید از کد ویزارد استفاده کنید yes را یزنید . وظیفه کد ویزارد این است که تنظیماتی را که ما قرار است به صورت دستی به برنامه وارد کنیم کنیم را به صورت ویژوال برای ما وارد کند . تنظیمات chip انتخاب فرکانس و میکرو می باشد . تنظیمات port برای ورودی یا خروجی کردن پورت ها می باشد . حال برای تبدیل شدن این تنظیمات به کد برنامه تبدیل شود گزینه generate save and exit را می زنیم . بعد از زدن این گزینه مسیر و نام برنامه را ذخیره و می سازید .

برای ایجاد تغییرات درون برنامه از طریق کد ویزارد از گزینه tool گزینه کد ویزارد را انتخاب می کنیم بعد از گزینه file برنامه خود را باز می کنیم و تغییرات لازم را مبذول می کنیم . حال باید برنامه نوشته شده خود را کامپایل کنیم بدین منظور از گزینه project ابتدا گزینه check syntax را انتخاب می کنیم تا اگر برنامه غلطی دارد به من هشدار دهد وبعد اگر برنامه خطایی نداشت گزینه دوم compile را می زنیم این گزینه برنامه شما را ترجمه می کند . در پنجره باز شده به شما طلاعات برنامه ای که نوشتید را می دهد .

کامپایل کد ماشین را نمی سازد برای این که کد ماشین ساخته شود از همان منو گزینه build را انتخاب می کنیم حال برای اینکه بفهمیم فایل های ما کجا ذخیره شدند از همان منو گزینه اخر را انتخاب کرده و در پنجره باز شده گزینه output directoris را انتخاب می کنیم که در انجا فایل های ذخیره شده مربوط به بخش را می توانیم مشاهده کنیم .

تفاوت گزینه build و build all :

گزینه build فقط فایل هایی را که دچار تغییر شدند را تبدیل می کند اما گزینه build all تمامی فایل ها را یک بار دیگر به کد ماشین تبدیل و ذخیره می کند .

برنامه ریزی آی سی میکروکنترلر

اولین چیزی که نیاز داریم یک سخت افزار به نام programmer می باشد که یک رابط بین pc و میکرو می باشد .

دو نوع پروگرمر داریم .

۱ : نوعی که روی پروگرمر جای برای آی سی قرار دارد و بعد از قرار دادن آی سی می توانیم آن را پروگرم کنیم . این نوع روش برای چیپ های با پکیج dip امکان پذیر است و smd را ساپورت نمی کند .

۲ : روش روی برد on board : در این روش یک سری سیم هایی به پروگرمر وصل شده و این سیم ها مستقیما به برد متصل می شوند . این روش خود به دو روش امکان پذیر می باشد :

روش اول : پروگرمر ISP .

روش دوم : روش JTAG . مزییت این روش این است که می توانیم علاوه بر پروگرم کردن برنامه آن را دیباگ نماییم .

پروگرمر ISP :

برنامه ریزی را به روش سریال و از پورت SPI انجام می دهد .

پیش نیاز ها :

۱ : منبع تغزیه میکرو کنترلر .

۲ : منبع کلاک میکرو کنترلر .

ارتباط پروگرمر با PC به از سه طریق PARALLEL یعنی کابل پرینتر ، SERIAL و USB امکان پذیر می باشد که USB بهترین این سه روش می باشد چون هم فراگیر تر از اون دو طریق دیگر هست و هم تغذیه پروگرمر را هم می تواند تامین کند . ارتباط میکرو و پروگرمر هم از طریق پهار پایه متصل می شوند .

برای پروگرم کردن میکرو آن را وصل می کنیم اگر مدل آن درو خود کد ویژن بود آن را انتخاب می کنیم و اگر نبود نرم افزار مورد نیاز آن را نصب می کنیم برای اتخاب کردن نوع پروگرمر از گزینه SETING گزینه PROGRAMER را انتخاب می کنیم و نوع پروگرمر را در صورت وجود انتخاب می کنیم . بعد از انتخاب پروگرمر از گزینه TOOLS گزینه س CHIP PROGRAMER را انتخاب می کنیم و وارد تنظیمات نهایی میکرو می شوم .

در این تنظیما با توجه به منو های موجود می توانیم حافظه های مربوط به FLASH و EEPROM را بخوانیم کامپایل کنیم و دیگر تنظیمات را روی ان انجام دهیم همچنین در قسمت PROGRAM FUSE BIT ما می توانیم تنظیمات مربوط به فیوز بیت ها و بیت های قفل را با توجه به نیازمون انجام داده و به میکرو بفهمانیم . باید توجه داشت که بیت های فیوز مخصوصا CKSEL ها را به درستی وارد کنیم چون در صورت عدم وجود آن کلاک روی پروگرمر باعث می شود که دیگر ان پروگرمر خوانده نشود .

حال میخواهیم آی سی را پروگرم کنیم

اولین کاری که باید انجام دهیم این است که آی سی را پاک کنیم برای این کار از گزینه PROGRAM گزینه ERASE CHIP را انتخاب می کنیم تا برنامه های قبلی روی میکرو پاک شود .

حال با انتخاب گزینه FLASH از همان منو عمل برنامه ریزی انجام می شود .همچنین با انتخاب EEPROM می شود آن را هم برنامه ریزی کرد .حال برای تنظیم بیت های قفل و فیوز بیت ها اول فیوز بیت ها را برنامه ریزی می کنیم و در مرحله آخر بیت های قفل را برنامه ریزی می کنیم . برای تنظیم فیوز بیت ها برای اینکه مشکلی پیش نیاید ما بهتر است فیوز بیت ها را در ابتدا با استفاده ازگزینه read بخوانیم تا به تنظیماتی که از قبل دارند دسترسی داشته باشیم .

وظیفا گزینه read این است که ما می توانیم اطلاعات موجود در برنامه را با استفاده از این گزینه بخوانیم .

انجام پروژه ی نمونه و شبیه سازی در نرم افزار پروتیوس

برای شروع کار با نرم افزار از گزینه فایل گزینه new را انتخاب می کنیم حال مسیر و نام پروژه را انتخاب می کنیم و next را میزنیم و در گزینه بعدی با شماتیک سازی مدارد موافقط می کنید و بعد سایز کاغذ را انتخاب کرده و در آخر finish زده و وارد شماتیک مدار می شویم . برای انتخاب المان ها گزینه p را میزنیم و قطعاتی را که نیاز داریم را انتخاب می کنیم .

بعد از انتخاب قطعات مثلا آی سی مورد نظر و مثلا مقاومت و خازن و دیود و دیگر قطعات مورد نیاز شماتیک مداری که می خواهیم بسازیم را روی صفحه شماتیک پروتیوس قرار می دهیم و طبق مدارمون آن ها را به هم متصل می کنیم حال به نرم افزار codevision avr رفته و برنامه نویسی مربوط به آن مداری که می خواهیم را می نویسیم و بعد از کامپایل کردن و خطا نگرفتن حال موقع این است که آن را به آی سی مورد نظر روی شبیه سازمون متصل کنیم تا ببینیم جواب می گیریم یا خیر .

برای این کار ابتدا روی آی سی مورد نظر درون شبیه ساز دابل کلیک کرده و در جلوب گزینه program file عکس یک پوشه است روی آن زده و برنامه نوشته شده خود را از آدرسی که برای آن تعریف کرده ایم را لود می کنیم .

پس از لود برنامه ok را میزنیم و در پایین صفحه علامت play را کلیک می کنیم اگر برنامه و مدار درست کار کرد که یعنی مدار ما آماده پروگرم کردن روی آی سی درون محیط واقعی می باشد اما اگر خطا داد ما بعد از بررسی خطا ها و رفع آنها دوباره این مراحل را طی می کنیم .
مثال یک led چشمک زن را به این صورت شبیه سازی می کنیم

ابتدا شماتیک آن را رسم می کنیم

حال برنامه آن را درون codevision مینویسیم و بع آی سی اضافه می کنیم .

 

و پس از جواب گرفتن آن را روی آی سی پروگرم می کنیم .

 

آنچه مطالعه کردید، توسط جناب آقای ابراهیم آقاکثیری به عنوان پیاده سازی و برداشت متنی بخش هایی از «مجموعه آموزش های پایه ای میکروکنترلر AVR و نرم افزار CodevisionAVR» تهیه شده و جهت استفاده مخاطبین گرامی در فرادرس منتشر می شود.

 

 

 

 

 

 

پاسخی بگذارید

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