KnowledgePlus.ir
5.48K subscribers
47 photos
11 videos
16 files
176 links
کانال مهندس اوژن کی نژاد
کلیه مطالب این کانال به جز مواردی که صریحا در متن آن ذکر شده باشد جنبه تالیفی دارد و از جایی کپی نشده است.
کانال اشتغال:
@KnowledgePlusir
@StepMotor
@MC3Delta
@FindChips
instagram.com/knowledgeplus.ir
aparat.com/KnowledgePlus
Download Telegram
پاسخ به چند سوال متداول درباره وقفه ها در AVR:

سوال: آیا بین وقفه های AVR اولویتی وجود دارد؟

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

سوال: آیا امکان پذیرش وقفه در وقفه وجود دارد؟

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

سوال: اگر در هنگام اجرای یک وقفه، تقاضای وقفه دیگری ایجاد شود آیا ممکن است این تقاضا توسط CPU دیده نشود و به اصطلاح وقفه از بین برود؟

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

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

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

سوال: آیا وقفه های پشت سر هم می تواند اجرای برنامه در حلقه اصلی را متوقف کند؟

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

(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)

@KnowledgePlus
بخشی از برنامه نوشته شده برای یک کنترلر صنعتی معتبر و در حال کار با بیش از 20000 خط برنامه نویسی به زبان اسمبلی.

@KnowledgePlus
مزیتی که صرف نظر از امکانات سحت افزاری برای برخی از میکروکنترلرهای در دسترس نسبت به برخی دیگر وجود دارد و در کاربردهای صنعتی و حساس باید مد نظر قرار بگیرد این است که برای یکسری از خانواده ها، گزارش ها و مشاهدات زیادی مبنی بر وجود میکروکنترلرهای تقلبی و Clone وجود دارد. در حالی که برای برخی خانواده ها تاکنون موردی مبنی بر وجود نسخه های تقلبی مطرح نشده است.

@KnowledgePlus
نمونه ای از قدرت برنامه نویسی اسمبلی:

پروژه نمایش متن دلخواه روی اسیلوسکوپ در مد Lissajous Pattern با استفاده از اعمال سیگنال های آنالوگ تولید شده توسط DAC به ورودی دو کانال اسیلوسکوپ:

https://knowledgeplus.ir/userimages/XYscope.jpg

این پروژه علاوه بر XMEGA با AVR هم انجام شده است. سورس پروژه در سایت موجود است.

@KnowledgePlus
نکته طراحی مدار:

قرار دادن یک خازن با ظرفیت کم (مثلا 1nF) روی پین های فعال وقفه خارجی می تواند باعث جلوگیری از وقفه های ناخواسته ناشی از نویز شود.

@KnowledgePlus
نکاتی از زبان برنامه نویسی C:

فرض کنیم که در برنامه نویسی C لازم باشد که در متن یک تابع، تابع دیگری اجرا شود که این تابع دوم یک تابع ثابت و معین نباشد و بلکه بتوانیم در هنگام احضار تابع اصلی، تابعی را که باید درون آن اجرا شود برحسب شرایط تعیین کنیم. برای این کار می توانیم از اشاره گر به تابع استفاده کنیم و به عنوان یکی از ورودی های تابع اصلی، اشاره گری به تابع مورد نظر را به عنوان ورودی ارسال کنیم و در متن تابع اصلی هم از همین اشاره گر برای اجرای تابعی استفاده کنیم که توسط اشاره گر به آن اشاره می شود.

@KnowledgePlus
برد emi filter طراحی شده برای اتصال اینورتر و سرو موتور و شیر برقی و ... بصورت همزمان با تغذیه کنترلر و کامپیوتر به برق شهر. توضیح بیشتر:

https://telegram.me/KnowledgePlus/194

@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
یک توضیح تکمیلی در مورد مقاله قرار داده شده برای جلوگیری از کپی غیر مجاز محتوای حافظه برنامه:

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

@KnowledgePlus
نکته ای در موضوع بازاریابی و جذب مشتری:

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

@KnowledgePlus
نکاتی از زبان برنامه نویسی C:

برای مقداردهی به اعضای یک struct یک روش سریع و خلاصه این است که در یک union، آرایه ای معادل با اعضای struct را تشکیل دهیم و مقداردهی را بجای struct به آرایه انجام دهیم. مثال در کامپایلر IAR:

union
{
unsigned char mystruct_array[10];
struct
{
unsigned long a;
unsigned char b;
unsigned char c;
unsigned long d;
}mystruct;
};

حال مثلا برای مقداردهی به اعضای mystruct به منظور مقداردهی اولیه از eeprom می توان در یک حلقه for به آرایه mystruct_array مقداردهی کرد که در صورت طولانی بودن struct این روش بسیار خلاصه تر از مقداردهی به تک تک اعضا است.

@KnowledgePlus
نقل یک تجربه:

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

@KnowledgePlus
نکته ای در مورد لحیم کاری:

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

@KnowledgePlus
طرح یک موضوع برای بررسی:

با توجه به قابلیت ویژه میکروکنترلر XMEGA برای ظاهر کردن clkper4 روی پین های خاص که فرکانس آن حداکثر 128MHz است و از طریق تنظیم pll هم می توان به فرکانس های مختلفی رسید، موضوعی که در این رابطه جای بررسی و کار دارد بهره بردن از این قابلیت برای استفاده از XMEGA به عنوان یک فرستنده RF است. مثلا به صورت نرم افزاری می توان خروجی پین را قطع و وصل کرد و یک مدولاسیون ASK را ایجاد کرد. یا برای پیاده سازی مدولاسیون FSK از طریق انتخاب منبع کلاک از اسیلاتور RC داخلی و تغییر بایت calibration یا اعمال کلاک خارجی و تغییر فرکانس آن اقدام کرد. در این رابطه آزمایشی در سال های گذشته انجام شد که صدای تقویت شده از میکروفن بصورت نه چندان واضح روی یک گیرنده FM دریافت شد. به هر حال بدینوسیله این موضوع مطرح شد تا دوستان در صورت علاقه روی کاربردهای این قابلیت کار کنند.

@KnowledgePlus
خلاصه ای از زبان برنامه نویسی C:

https://users.ece.utexas.edu/~adnan/c-refcard.pdf

@KnowledgePlus
تولید یک سری از محصولات با دانش فنی بالا و ساختار پیچیده که از عهده کمتر کسی بر می آید در مقایسه با تولید محصولات آسان و انجام پروژه های زود بازده که از عهده افراد زیادی بر می آید را می توان به کاشت درخت گردو تشبیه کرد که ممکن است خیلی دیر و با زحمات فراوان به نتیجه برسد. اما وقتی محصولش به بار نشست، ارزش افزوده و تضمین تداوم آن قابل مقایسه با کشت محصولات زود بازده و کم ارزش نیست.

@KnowledgePlus
همانطور که در بخش 65 فیلم آموزش XMEGA توضیح داده می شود، با توجه به حداکثر دمای مجاز 85 درجه برای XMEGA و علیرغم دقت کم سنسور دمای داخلی، برای فعال کردن شرایط حفاظت و آلارم و مانند آن در صورت افزایش دمای غیر مجاز و فراتر از ظرفیت میکروکنترلر می توان از اندازه گیری که در هنگام تولید میکروکنترلر توسط سنسور داخلی در دمای 85 درجه انجام شده و در حافظه ذخیره شده استفاده کرد.

@KnowledgePlus
یک صورت مسئله ساده برای به چالش کشیدن ابزارهای برنامه نویسی:

برای به چالش کشیدن ابزار های مختلف برنامه نویسی و سنجش آنها، صورت مسئله ساده ای مطرح می شود که در آینده پاسخ آن قرار داده خواهد شد.
در یکی از شماره های میکروکنترلر AVR به دلخواه و با فرض کلاک 16MHz محتوای یک پورت ورودی باید بصورت مداوم خوانده شود و بیت های شماره 0 و 2 و 4 و 6 و 7 خوانده شده از پورت ورودی بعد از Not شدن به ترتیب در بیت های شماره 5 و 0 و 1 و 3 و 4 پورت خروجی دیگری قرار بگیرد. در این صورت مسئله به دلیل نیازی که وجود دارد لازم است میکروکنترلر این عملیات را یک میلیون بار در ثانیه انجام دهد و سرعت کمتر از این تعداد نمونه قابل قبول نیست. به عبارت دیگر برای هر سیکل خواندن پورت ورودی و انتقال Not شده بیت ها به پورت خروجی با ترتیبی که توضیح داده شد، cpu در مجموع تنها 16 سیکل کلاک فرصت در اختیار دارد و باید یک میلیون بار در ثانیه این عملیات را انجام دهد. حال برای محک زدن ابزارهای برنامه نویسی و سنجش این مسئله که آیا با هر کامپایلری می توان از حداکثر ظزفیت یک میکروکنترلر استفاده کرد، سعی کنید این صورت مسئله را با هر ابزاری که به آن مسلط هستید (مانند بسکام و کدویژن و ...) انجام دهید و نتیجه را از طریق شبیه سازی یا بصورت عملی تست کنید و ببینید آیا قابلیت رسیدن به چنین سرعتی از طریق ابزار مورد استفاده وجود دارد یا نه. لازم به توضیح است که میکروکنترلر AVR با فرض کلاک 16MHz از توانایی لازم برای انجام چنین عملیاتی به تعداد یک میلیون بار در ثانیه برخوردار است و عدم توانایی در رسیدن به چنین سرعتی تنها می تواند ناشی از ابزار و کامپایلر مورد استفاده برای کد نویسی و نه قابلیت AVR باشد.

@KnowledgePlus
چگونه می توان از طریق PC با usart میکروکنترلر با فرمت 9 بیتی ارتباط برقرار کرد:

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

(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)

@KnowledgePlus