X
تبلیغات
رایتل

طراح

KnowledgePlus.ir

منبع :
KnowledgePlus.ir
(لطفا از کپی کردن پست ها بدون منبع(KnowledgePlus.ir) خودداری کنید)
------------------------------------------------------------------------------------------------------------------------
برای مقداردهی مستقیم به آدرس مشخص در حافظه با فرض اینکه برای آن آدرس قابلیت ذخیره سازی وجود داشته باشد، می توان مانند مثال های زیر عمل کرد.
عبارت های زیر معادل با هم هستند و در آدرس 0x200 مقدار 0x98 را ذخیره می کنند:
(*(unsigned char*) 0x200)=0x98;
((unsigned char*) 0x200)[0]=0x98;

عبارت های زیر معادل با هم هستند و با فرض ساختار بایتی برای حافظه از آدرس 0x10002000 به بعد 4 بایت با مقدار 0x0000fe55 را ذخیره می کنند:
(*(unsigned long*) 0x10002000)=0xfe55;
((unsigned long*) 0x10002000)[0]=0xfe55;

همچنین نسبت به یک آدرس پایه می توان offset اعمال کرد. مثلا عبارت زیر یک بایت با مقدار 0x54 را در آدرس 0x206 ذخیره می کند:
((unsigned char*) 0x200)[6]=0x54;
در این روش اگر اشاره گر به بیش از یک بایت اشاره کند، به ازای هر واحد افزایش offset نسبت به آدرس پایه، آدرس مقصد به اندازه تعداد بایت مورد اشاره افزایش پیدا می کند. مثلا عبارت زیر باعث ذخیره سازی 0x54 در آدرس 0x204 و 0x00 در سه بایت بعدی خواهد شد:
((unsigned long*) 0x200)[1]=0x54;
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نکته آموزشی:
اسیلاتورهای RC داخلی در شماره های مختلف AVR دارای ساختارهای مختلف به لحاظ طراحی هستند و عملکرد آنها نسبت به تغییرات دما یکسان نیست. بنابراین در برخی شماره ها فرکانس اسیلاتورهای داخلی با افزایش دما کاهش می یابد (مانند ATmega8 و ATmega16 و ATmega32 و ATmega64) و در برخی از شماره های دیگر فرکانس آنها با افزایش دما افزایش می یابد (مانند ATtiny13 و ATmega48 و ATmega2560).
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
در Application Note منتشر شده از طرف شرکت Atmel به نام AVR1000 در مورد برنامه نویسی به زبان C برای خانواده XMEGA، نکات مفید و سودمندی درباره نحوه برنامه نویسی C ذکر شده که مطالعه آن به کسانی که قصد برنامه نویسی به این زبان برای میکروکنترلرها را دارند، توصیه می شود:
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نقل یک تجربه عملی: 
در هنگام شستشوی مدار چاپی، ریختن حلال های استفاده شده برای شستشو روی سوییچ های Push button و نفوذ آن به محل تماس کنتاکت ها معمولا باعث خرابی سوییچ می شود.
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نگهداری اطلاعات در حافظه های flash و eeprom میکروکنترلرها دارای یک محدودیت زمانی است که معمولا حداقلی برای این زمان بر حسب محدوده دما از طرف کارخانه سازنده اعلام می گردد. به عنوان مثال شرکت Atmel زمان نگهداری اطلاعات برای برخی از شماره های AVR را حداقل 100 سال در دمای 25 درجه یا 20 سال در دمای 85 درجه ذکر کرده است. برای XMEGA هم حداقل 100 سال در دمای 25 درجه یا 25 سال در دمای 55 درجه ذکر شده است. یا به عنوان مثال دیگر در میکروکنترلرهای سری LPC1788 زمان نگهداری اطلاعات برای حافظه های flash و eeprom در محدوده دمای منفی 40 درجه تا 85 درجه در صورت اتصال میکروکنترلر به تغذیه حداقل 10 سال و در صورت عدم اتصال به تغذیه این زمان برای حافظه flash حداقل تا 20 سال ذکر شده است.
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
پاسخ به چند سوال متداول درباره وقفه ها در AVR:

سوال: آیا بین وقفه های AVR اولویتی وجود دارد؟
پاسخ: در AVR وقفه هایی که دارای آدرس بردار کوچکتری در حافظه flash هستند نسبت به وقفه های دارای آدرس بردار وقفه بزرگتر، در شرایط درخواست همزمان دارای اولویت هستند. بنابراین اگر دو وقفه بصورت همزمان درخواست شوند، وقفه ای پذیرفته می شود که بردار وقفه آن دارای آدرس کوچکتری در حافظه flash باشد. اما تعیین اولویت بصورتی که در برخی میکروکنترلرهای دیگر مانند XMEGA قابل تعریف است در AVR وجود ندارد.

سوال: آیا امکان پذیرش وقفه در وقفه وجود دارد؟
پاسخ: در AVR با پذیرش هر وقفه، بیت I در SREG که مجوز سراسری وقفه است بصورت خودکار صفر می شود و در پایان وقفه مجددا یک می شود که در این شرایط پذیرش هر وقفه جدید تا پایان وقفه جاری ممکن نیست. اما با اجرای دستورالعمل ها می توان بیت I را در روتین وقفه بصورت نرم افزاری یک کرد که در این صورت امکان پذیرش وقفه دیگری در هنگام اجرای وقفه جاری وجود دارد. نکته قابل ذکر این است که بعد از پذیرش وقفه جدید و اتمام روتین آن، اجرای روتین وقفه جاری ادامه پیدا خواهد کرد.

سوال: اگر در هنگام اجرای یک وقفه، تقاضای وقفه دیگری ایجاد شود آیا ممکن است این تقاضا توسط CPU دیده نشود و به اصطلاح وقفه از بین برود؟
پاسخ: وقفه ها در AVR بصورت کلی دو دسته هستند. دسته اول که اکثریت وقفه ها را تشکیل می دهند دارای یک پرچم (Flag) درخواست وقفه هستند. حتی در صورتی که وقفه ای در حال اجرا باشد، درخواست این نوع وقفه ها بعد از اتمام وقفه جاری به دلیل یک ماندن پرچم وقفه، از طرف CPU دیده می شود و تقاضای وقفه به اصطلاح از بین نمی رود. اما نوع دومی از درخواست وقفه هم مانند وقفه خارجی پورت ها در سطح Low وجود دارد که علیرغم وجود پرچم درخواست وقفه برای وقفه های خارجی، اما در صورت تنظیم منبع درخواست وقفه روی سطح Low تاثیری روی پرچم وقفه ایجاد نمی شود. بنابراین اگر در هنگام درخواست این نوع وقفه ها وقفه دیگری در حال اجرا باشد و تا قبل از پایان آن، درخواست وقفه از طرف منبع آن متوقف شود (مثلا برای سطح Low پین به وضعیت High بر گردد) در اینصورت چنین در خواستی از طرف CPU دیده نخواهد شد و به اصطلاح وقفه از بین می رود. این مورد البته جنبه استثنا دارد و فقط شامل وقفه هایی است که پرچم وقفه برای آنها عمل نمی کند.

سوال: آیا ممکن است به دلیل درخواست های مکرر چند منبع وقفه، برخی از آنها اصلا پذیرفته نشوند؟
پاسخ: در شرایطی پاسخ به این سوال می تواند مثبت باشد. اگر وقفه ای با آدرس بردار کوچکتر در حافظه flash به صورت مکرر درخواست شود و با برگشت از روتین وقفه پرچم وقفه یک باشد و بلافاصله وقفه دیگری اجرا شود، در این شرایط وقفه های با آدرس بردار بزرگتر امکان پذیرش از طرف CPU را نخواهند داشت.

سوال: آیا وقفه های پشت سر هم می تواند اجرای برنامه در حلقه اصلی را متوقف کند؟
پاسخ: بعد از بازگشت از هر وقفه، CPU حداقل یک دستورالعمل اسمبلی را اجرا می کند. بنابراین اجرای وقفه ها بصورت مکرر و پشت سرهم علیرغم اینکه می تواند باعث کند شدن اجرای حلقه اصلی شود اما نمی تواند اجرای آن را متوقف کند.
@KnowledgePlus
-----------------------------------------------------------------------------------------------------------------------
نکته طراحی مدار:
قرار دادن یک خازن با ظرفیت کم (مثلا 1nF) روی پین های فعال وقفه خارجی می تواند باعث جلوگیری از وقفه های ناخواسته ناشی از نویز شود.
@KnowledgePlus
-----------------------------------------------------------------------------------------------------------------------
نکاتی از زبان برنامه نویسی C:
فرض کنیم که در برنامه نویسی C لازم باشد که در متن یک تابع، تابع دیگری اجرا شود که این تابع دوم یک تابع ثابت و معین نباشد و بلکه بتوانیم در هنگام احضار تابع اصلی، تابعی را که باید درون آن اجرا شود برحسب شرایط تعیین کنیم. برای این کار می توانیم از اشاره گر به تابع استفاده کنیم و به عنوان یکی از ورودی های تابع اصلی، اشاره گری به تابع مورد نظر را به عنوان ورودی ارسال کنیم و در متن تابع اصلی هم از همین اشاره گر برای اجرای تابعی استفاده کنیم که توسط اشاره گر به آن اشاره می شود.
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نمونه ای از مزیت های XMEGA نسبت به AVR:
در برخی از کاربردها لازم است که در تولید pwm علاوه بر بالا بودن فرکانس حامل (Carrier)، دقت (Resolution) در pwm هم تا حد امکان بالا باشد. اما بالا بردن دقت pwm، برای فرکانس حامل محدودیت ایجاد می کند. مثلا در AVR با فرض کلاک 16MHz و در مد Fast pwm، برای حداکثر دقت ممکن که 16 بیتی است، فرکانس حامل برابر 16000000/65536 یا 244.14 هرتز خواهد بود که ممکن است در یک سری از کاربردها کافی نباشد. اما در XMEGA  با استفاده از مد High Resolution Plus و در کلاک 32MHz برای CPU امکان اعمال کلاک موثر تا 256MHz به تایمر وجود دارد که در تولید شکل موج pwm در مقایسه با AVR می تواند فرکانس حاملی تا 16 برابر یعنی 3906.25 هرتز در دقت 16 بیتی را ایجاد کند.
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
یکی از نکاتی که در کار با ابزارهایی مانند میکروکنترلرها باید مورد توجه قرار بگیرد این است که رسیدن به مرحله راه اندازی اجزای سخت افزار ممکن است درصد بسیار کمی از طی مسیر برای انجام یک پروژه ارزشمند را به خود اختصاص دهد و تصور اینکه راه اندازی یک مجموعه از سخت افزارها لزوما به معنای قابلیت انجام پروژه های سنگین و پیچیده با آن امکانات است، در بسیاری موارد تصور درستی نیست. به عنوان مثال فرض کنیم که در یک مجموعه سخت افزاری شامل LCD گرافیکی و تاچ و تعدادی ورودی و خروجی آنالوگ و دیجیتال و ارتباطاتی نظیر RS485 و USB و غیره، کلیه بخش های این سخت افزار بصورت مجزا راه اندازی شده باشند. اما ای بسا صورت مسئله های گوناگونی با همین ترکیب سخت افزاری قابل تعریف باشد که فردی که تک تک بخش ها را راه اندازی کرده از عهده انجام آنها بصورت ترکیبی بر نیاید. بنابراین تمرین و ممارست در کار با ابزارهای سخت افزاری و نرم افزاری یک فاز مهم و طولانی بعد از مرحله آشنایی و راه اندازی است که نیازمند صرف انرژی بسیار برای رسیدن به مهارت و تجربه است و در عمل بخش بسیار کوچکی از افراد هستند که به این مرحله می رسند.
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
چگونه می توان از طریق PC با usart میکروکنترلر با فرمت 9 بیتی ارتباط برقرار کرد:

برای برقراری ارتباط PC از طریق پورت com با usart میکروکنترلر با طول دیتای 9 بیتی باید به این نکته توجه کنیم که در سمت PC در تنظیمات بیت Parity علاوه بر وضعیت های Odd و Even و None، دو وضعیت Mark و Space هم قابل انتخاب هستند که در صورت انتخاب گزینه Mark، بیت نهم از طرف PC در وضعیت 1 و در صورت انتخاب Space بیت نهم در وضعیت 0 ارسال می شود و با این روش می توان بیت نهم ارسال شده از طرف PC را تعیین کرد.

@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
حداکثر سرعت تغییرات پورت در AVR چقدر است؟
در خانواده AVR با استفاده از دستور اسمبلی OUT می توان تنها در یک سیکل کلاک cpu، وضعیت یک پورت را تغییر داد. مثلا در کد زیر در یک مرحله از برنامه در فاصله 6 سیکل کلاک، 6 بار وضعیت کلیه بیت های PORTA تغییر می کنند و 0 و 1 می شوند :
CLR    R16
SER    R17
...
OUT    PORTA,R16
OUT    PORTA,R17
OUT    PORTA,R16
OUT    PORTA,R17
OUT    PORTA,R16
OUT    PORTA,R17
....

با استفاده از دستورات SBI و CBI هم در برخی از شماره ها در دو سیکل و در برخی شماره های دیگر تنها در یک سیکل کلاک cpu می توان وضعیت یک پین را set یا clear کرد. برای اطلاع از زمان اجرای این دستورالعمل ها باید به بخش Instruction Set Summary در datasheet شماره مورد نظر مراجعه شود. مثال:

SBI    PORTA,0
CBI    PORTC,7

@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نکاتی از زبان برنامه نویسی c:
عبارت:
char *a[10];
معرف یک آرایه به نام a با 10 عضو است که اعضای آرایه از نوع اشاره گر به char هستند.

عبارت:
char (*a)[10];
معرف یک اشاره گر به نام a است که به آرایه ای با 10 عضو از نوع char اشاره می کند.

عبارت های زیر معادل یکدیگر هستند
&a[0]
و
a
-------------------------------
a[0]
و
*a
-------------------------------
a[i]
و
*(a+i)
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نکاتی از زبان برنامه نویسی c:

عبارت:
char *f(char);
معرف تابعی با نام f با ورودی از نوع char و مقدار بازگشتی از نوع اشاره گر به char است.

عبارت:
char  (*f)(char);
معرف اشاره گری با نام f به تابعی با ورودی از نوع char و مقدار بازگشتی از نوع char است.

عبارت:
char * (*f)(char);
معرف اشاره گری با نام f به تابعی با ورودی از نوع char و مقدار بازگشتی از نوع اشاره گر به char است.

عبارت:
char * (*f)(char *);
معرف اشاره گری با نام f به تابعی با ورودی از نوع اشاره گر به char و مقدار بازگشتی از نوع اشاره گر به char است.

@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------
نتیجه گرایی و قانون اصالت جواب در الکترونیک:

در الکترونیک مواردی مانند اینکه چه تکنولوژی در یک مدار بکار رفته باشد یا برد آن چند لایه باشد یا قطعات آن dip باشند یا smd یا چقدر جدید یا قدیمی باشد یا ظاهر آن چقدر زیبا باشد و موارد اینچنین نسبت به هدف اصلی یعنی جواب دادن و عملکرد درست سخت افزار و نرم افزار، همگی مسائل فرعی و ثانویه هستند. اگر مجموعه همه این عوامل منجر به جواب دادن و کار کردن یک سخت افزار یا نرم افزار شد که نتیجه حاصل شده است. و گرنه برای مداری که جواب نمی دهد و نرم افزاری که درست عمل نمی کند، مجموعه عوامل ذکر شده ارزش خاصی را ایجاد نمی کنند. پس اصالت و اولویت با نتیجه درست و جواب دادن و کار کردن سخت افزار و نرم افزار است و بقیه موارد در خدمت این هدف هستند. از این منظر بسیاری از افراد موفق در رشته الکترونیک دارای رویکرد نتیجه گرا هستند و اگر لازم باشد با جدیدترین و پیچیده ترین موضوعات دست و پنجه نرم می کنند و در صورت لزوم ممکن است از یک تکنولوژی و ابزار بسیار قدیمی هم بهترین استفاده ها را ببرند. مثالی در چندین سال پیش در یکی از انجمن ها در تشبیه ابزارهای نرم افزاری و سخت افزاری با خودروهای مختلف مطرح شد که در اینجا به صورت دیگر تکرار می شود. یک شخص نتیجه گرا به خودرو به عنوان وسیله ای برای رسیدن به مقصد نگاه می کند. در جایی که لازم باشد از سواری و کامیون و حتی تریلی و در جای دیگر بر حسب شرایط و اقتضائات صورت مسئله از موتور و دوچرخه برای رسیدن به مقصد استفاده می کند و تعصبی در استفاده از وسیله نقلیه خاصی ندارد. افراد نتیجه گرا راهی را انتخاب می کنند که با حداکثر بهره وری به نتیجه مورد نظر برسند. آنچه برای آنها مهم است، به جواب رساندن و کار کردن محصول نهایی است.
پی نوشت: عبارت "قانون اصالت جواب" یک اصطلاح شخصی است که در این پست بکار برده شده و مبنای آکادمیک ندارد.
@KnowledgePlus
------------------------------------------------------------------------------------------------------------------------

نظرات (0)
نام :
ایمیل : [پنهان میماند]
وب/وبلاگ :
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)