پیام های آموزشی کانال تلگرام www.telegram.me/KnowledgePlus در سال ۱۳۹۴

(لطفا از کپی کردن مطالب بدون ذکر منبع خودداری کنید)

آذر:


نکته آموزشی:
مطابق مشاهدات و آزمایش های عملی، DAC در XMEGA سری A در شرایط Over clock همچنان عمل می کند. اما در سری AU از کار می افتد.

--
نکته آموزشی:
یکی از روش های انتقال مطمئن تر بیت های اطلاعات در محیط های پر نویز، استفاده از بستر ارتباطی rs422 است.

--
نکته طراحی مدار:
سری کردن مقاومتی در حدود 10 تا 22 اهم با خطوط دیتا (موازی یا سریال) می تواند مانع سوختن مدارات در هنگام اتصال یا قطع کردن کانکتور های دیتا بین دو برد یا دستگاه شود.
--
نکته طراحی مدار:
جرقه های ایجاد شده روی کنتاکت برخی از رله ها علیرغم ایزوله بودن ظاهری کنتاکت ها از سیم پیچ تحریک کننده رله، ممکن است باعث القاء ولتاژ ناخواسته روی سیم پیچ و سرایت آن و هنگ کردن میکروکنترلری شود که به رله فرمان می دهد. بنابراین برای بالا بردن حفاظت میکروکنترلر در مواردی لازم است بجای استفاده از یک سوئیچ ترانزیستوری ساده، از ترکیب اپتوکوپلر برای فرمان به رله استفاده شود.
--
معرفی دو آی سی موجود در بازار برای اتصال به میکروکنتزلرهای با تغذیه 3.3 ولت:
ISL83485 برای ارتباط RS485
MAX3232 برای ارتباط  RS232

--
نکته آموزشی:
یک استپر موتور پنج سیم، ممکن است:
1- استپر دو فاز با آرایش uni polar
2- استپر موتور پنج فاز با آرایش پنج ضلعی باشد.

یک استپر موتور شش سیم ممکن است:
1- استپر موتور دو فاز با دو سر وسط اضافی
2-استپر موتور سه فاز با سیم پیچ های مجزا
3-استپر موتور پنج فاز با آرایش ستاره باشد.


دی:

نکته طراحی مدار:
دیودهای زنر عادی به لحاظ زمان روشن شدن اصولا کند عمل می کنند و بنابراین برای برش اسپایک های سریع نویز درخطوط تغذیه، عملکرد مناسبی ندارند.
--
نکته آموزشی:
برای استفاده از اسیلاتور داخلی 2MHz یا 32MHz در XMEGA برای تامین Baud Rate در ارتباط USART لازم است حتما مکانیزم DFLL برای بالا بردن دقت اسیلاتور فعال شود. استفاده از کریستال یا اسیلاتور دقیق خارجی با دقت بالاتر، برای این نوع ارتباط ارجحیت دارد.
--
نکته آموزشی:
استپر موتور های چهار فاز با سری یا موازی کردن دو به دو فازها، با درایورهای دو فاز قابل کنترل هستند.
--
نکته آموزشی:
هر چیپ XMEGA دارای یک شماره سریال داخلی منحصر به فرد است.

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

--
نکته آموزشی:
استفاده از روش وقفه خارجی برای اتصال Quadrature Encoder ها به میکروکنترلر می تواند دز شرایط وجود لرزش های مکانیکی، توام با خطا باشد. روش اصولی برای اتصال و قرائت بدون خطا، استفاده از واحدهای سخت افزاری مانند QDEC در XMEGA یا QEI در سری LPC یا مد Encoder interface در STM32 می باشد.
--
نکته آموزشی:
با یک تایمر در میکروکنترلر، به تعداد واحدهای compare در آن تایمر می توان پایه (base) زمانی مستقل از هم ایجاد کرد. مثلا اگر یک تایمر دارای سه واحد مقایسه باشد، از طریق این تایمر و وقفه های مقایسه یا بررسی flag های آن می توان سه پایه زمانی مختلف و مستقل از هم را ایجاد کرد. برای این کار باید تایمر در مد نرمال خود قرار بگیرد و بعد از هر بار عملیات مقایسه، بسته به زمان مورد نیاز مقدار مشخصی با رجیستر مقایسه جمع شود.
--
نکته طراحی مدار:
یکسوسازی سینوسی با پل دیود باعث دو برابر شدن فرکانس میشود. بنابراین در یکسوسازی ترانس تغذیه شده از برق شهر، فرکانس تغییرات ریپل بعد از پل دیود و خازن بجای 50 هرتز، 100 هرتز خواهد بود. این فرکانس می تواند بسته به نوع مدارات از طریق تغذیه به مدار نفوذ کند. بنابراین در طراحی مدارات حساس به نویز در صورت استفاده از این روش برای تامین تغذیه، علاوه بر تاثیر نویز 50 هرتز ناشی از برق شهر، تاثیر نویز 100 هرتز هم باید مد نظر قرار بگیرد.
--
نکته ای در استفاده از اسیلوسکوپ:
اتصال probe اسیلوسکوپ در وضعیت x1 به پایه های کریستال متصل به میکروکنترلر، می تواند باعث از کار افتادن اسیلاتور و عدم مشاهده صحیح نوسان شود و برای اندازه گیری در این شرایط باید از وضعیت x10 استفاده شود.
--
نکته طراحی مدار:
قرار دادن خازن های بزرگ (مثلا 1000 میکروفاراد) در خروجی رگولاتورهای سری 78 و رگولاتورهای مشابه در زمان خاموش شدن مدار و در صورتی که ولتاژ ورودی رگولاتور سریع تر از ولتاژ خروجی آن افت کند، به دلیل تخلیه خازن از طریق پین خروجی رگولاتور می تواند باعث سوختن آن شود. بنابراین در صورت وجود خازن های بزرگ در خروجی این نوع رگولاتورها باید یک دیود بصورت معکوس از خروجی به ورودی رگولاتور متصل شود تا مسیر دشارژ خازن را فراهم کند و مانع از سوختن احتمالی آن شود.
--
برای هر استپر موتور، عددی به عنوان گشتاور بر حسب واحدهای مختلف مانند N.m یا kgf.cm بیان می شود. برای درک بهتر این عدد، فرض کنیم شفت یک استپر موتور در وضعیت قفل به موازات افق قرار بگیرد و میله ای عمود بر شفت به آن متصل باشد و این میله هم در وضعیت افقی باشد. اگر وزنه ای را به سر این میله آویزان کنیم، سوال این است که این استپر موتور تا چه وزنه ای را می تواند بدون اینکه بچرخد در حالت قفل نگه دارد؟ پاسخ این سوال به گشتاور موتور و جرم وزنه و فاصله آن از مرکز شفت بستگی دارد. یک استپر موتور با Holding Torque یا همان گشتاور وضعیت قفل برابر با 1kgf.cm می تواند در فاصله 1cm از مرکز شفت خود، نیروی 1kgf را عمود بر محور چرخش وارد کند. همین موتور می تواند در فاصله 10cm از مرکز شفت خود، نیروی 0.1kgf را عمود بر محور چرخش وارد کند. به همین ترتیب می توان در هر فاصله ای از محور موتور، حداکثر نیروی اعمال شده را محاسبه کرد. بنابراین در مثال اخیر با آگاهی از گشتاور موتور که به نوع موتور و مشخصات آن بستگی دارد و فاصله وزنه، میتوان حداکثر وزن قابل تحمل توسط استپر موتور را در فاصله مشخص محاسبه کرد.

--
نکته طراحی مدار:
در صورت نیاز به وجود مقاومت pull up در پین ورودی میکروکنترلر، فعال کردن این مقاومت بصورت داخلی ممکن است به تنهایی در محیط های پر نویز کافی نباشد و در مواقعی لازم است مقاومت pull up با مقدار مناسب بصورت خارجی قرار داده شود. همچنین در صورت نیاز به مقاومت pull down برای خانواده هایی که امکان فعال کردن این نوع مقاومت در آنها وجود دارد، در شرایط پرنویز ممکن است لازم باشد این مقاومت بصورت خارجی قرار داده شود.
--
نکته طراحی مدار:
در برخی از کاربردها، استفاده از دیود داخلی ماسفت ها به عنوان دیود هرزگرد به دلیل مشخصات و نحوه عملکرد آن مطلوب نیست و لازم است این دیود بای پس شود و بجای آن یک دیود بصورت خارجی قرار داده شود. برای بای پس کردن دیود داخلی ماسفت های کانال N میتوان با پایه درین(drain) آن یک دیود مناسب را سری کرد به نحوی که کاتد دیود به درین ماسفت متصل شود. حال برای اتصال دیود هرزگرد خارجی می توان آند آن را به سورس ماسفت و کاتد آن را به آند دیود سری شده با ماسفت متصل کرد. با این آرایش، جریان معکوس امکان عبور از دیود داخلی ماسفت را نخواهد داشت و بجای دیود داخلی از مسیر دیود معکوس خارجی عبور خواهد کرد.
--
توصیه ای برای برنامه نویسان خانواده های AVR و XMEGA:
اگر قصد استفاده از حداکثر ظرفیت و توانمندی AVR یا XMEGA را دارید، حتما برنامه نویسی اسمبلی برای این خانواده ها را در سطح حرفه ای یاد بگیرید.
--
اتصال کوتاه کردن سیم های یکی از فازهای استپر موتور، باعث ایجاد نیروی مخالف در برابر حرکت و وضعیتی مانند قفل شدن موتور می شود. از این خاصیت می توان بدون استفاده از مولتی متر برای تشخیص فازهای موتورهایی استفاده کرد که سیم پیچ فازها بصورت مجزا خارج شده باشند. مثلا در یک استپر موتور دو فاز و چهار سیم، از این روش می توان برای تشخیص هر یک از دو فاز استفاده کرد. در این شرایط اگر سیم پیچ های مربوط به دو فاز مختلف به هم متصل شوند، حالت قفل ابجاد نمی شود. در موتورهایی مانند استپر موتوهای دو فاز و پنج سیم که سیم پیچ ها بصورت داخلی به هم متصل شده اند، این روش برای تشخیص فازها قابل استفاده نیست.
--
در AVR برای جلوگیری از پاک شدن eeprom داخلی باید Brownout detection فعال شود و سطح ولتاژ آن با توجه به مقدار تغذیه، در بالاترین سطح ممکن تنظیم شود.
--
نکته ای در برنامه نویسی:
برای کاهش حجم کد و افزایش سرعت اجرای عملیات در استفاده از عبارت های با دسترسی چند مرحله ای، بجای تکرار عبارتی که هر بار ذکر آن باعث چند مرحله عملیات می شود می توان عملیات را روی یک کپی از آن عبارت انجام داد.
برای درک بهتر، فرض کنیم در برنامه نویسی c اعضای آرایه a به عنوان index آرایه b در نظر گرفته شده باشند و عبارت زیر در برنامه برای دسترسی به آرایه b بکار رفته باشد:

b[a[i]]

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

بهمن:

نکته طراحی مدار:
استفاده از مقاومت های با سلف معادل زیاد به عنوان مقاومت شنت برای اندازه گیری جریان در کاربرد هایی که سوییچ جریان های زیاد در زمان های کوتاه اتفاق می افتد، به دلیل ولتاژ ایجاد شده دو سر مقاومت ناشی از جمله Ldi/dt که L سلف معادل در مدل مقاومت است، باعث خطا در قرائت جریان واقعی در لحظات سوییچ جریان می شود.
--
سخنی با دوستان طالب پیشرفت و کسب مهارت و تخصص:
برخی از دوستان تصور می کنند با شرکت در یک کلاس یا خواندن جزوه یا کتاب خاصی می توان به مرحله تخصص و طراحی رسید. در حالی که هیچ کتاب و کلاسی وجود ندارد که به تنهایی بتواند یک نفر را مبدل به طراح و برنامه نویس در سطح حرفه ای کند. بلکه در کنار منابع آموزشی لازم است ده ها و صد ها ساعت زمان برای آزمایش و تمرین و آزمودن آموخته ها صرف شود تا در مرور زمان، تجربه و تسلط کافی بدست آید. به خصوص اینکه در بخش برق و الکترونیک، رقابت و تعداد نفرات بسیار زیاد است و کسب یکسری آموزش های اولیه به تنهایی کافی نیست و شرط لازم برای شاخص و متمایز شدن نسبت به دیگران به لحاظ توانمندی، صرف وقت کافی برای کسب تجربه و مهارت بصورت عملی است.

--
نکته آموزشی در کار با درایورهای استپر و سروموتور:
روش clock-direction که در آن به یک ورودی درایور، پالس های فرمان حرکت و به ورودی دیگر فرمان جهت اعمال می شود، تنها روش موجود برای اعمال پالس به درایورها نیست. دو روش دیگر که در برخی از درایورها از آنها پشتیبانی می شود، عبارت اند از:
- روش CW-CCW که در آن دو ورودی مجزا در درایور برای کلاک هر جهت چرخش وجود دارد و با اعمال کلاک به هر ورودی، موتور در جهت متناظر با همان کلاک می چرخد.
-روش AB Phase که در آن قابلیت اعمال پالس های Quadrature -پالس خروجی انکودرها- برای چرخش موتور در دو جهت وجود دارد. با استفاده از این مد می توان از انکودرها برای فرمان به درایور در دو جهت استفاده کرد.
--
در سنسورهای صنعتی که دارای خروجی های NPN یا PNP هستند، انواع NPN بصورت مستقیم قابل اتصال به میکروکنترلر هستند. یک مقاومت Pull up مناسب هم باید از پین متصل به سنسور به تغذیه میکروکنترلر متصل شود.
سنسورهای با خروجی PNP در وضعیت High، دارای مقداری نزدیک به Vcc سنسور هستند که این ولتاژ معمولا بیشتر از مقدار مجاز برای اعمال به میکروکنترلر است. در چنین شرایطی نمی توان این سنسور را بصورت مستقیم به پین میکروکنترلر متصل کرد و بین خروجی سنسور و پین میکروکنترلر باید مدار واسطه مناسبی قرار بگیرد.
--
برای جلوگیری از پاک شدن یا نوشته شدن اطلاعات ناخواسته بر اثر نویز و نوسانات در eeprom های خارجی مانند سری 24 بهتر است پین write protect به یکی از پین های میکروکنترلر متصل شود و با کد نویسی مناسب در تمام زمان ها به غیر از لحظات نوشتن، eeprom در وضعیت محافظت در برابر نوشته شدن قرار بگیرد.
--

نکته طراحی مدار:
ولتاژ خروجی بسیاری از رگولاتورهای ولتاژ به لحاظ دقت، برای استفاده به عنوان ولتاژ مرجع و دقیق مناسب نیستند. مثلا تضمینی از طرف کارخانه سازنده رگولاتور 7805 وجود ندارد که خروجی آن دقیقا 5 ولت باشد. بلکه محدوده ای برای خروجی تعریف شده که ولتاژ خروجی در آن محدوده مجاز است. بنابراین ممکن است خروجی یک رگولاتور 7805 مثلا 5.1 ولت و  دیگری 4.9 ولت باشد. به همین دلیل در کاربرد های دقیق، استفاده از ولتاژ خروجی این نوع رگولاتور ها به عنوان ولتاژ مرجع مناسب نیست. همین مسئله در مورد دیودهای زنر هم برقرار است که ولتاژ خروجی آنها دقیق نیست و با دما هم متغیر است.
در کاربردهایی که نیاز به ولتاژ مرجع دقیقی وجود دارد، باید از آی سی های مخصوص این کار که با دما هم جبران سازی شده اند ( مانند LM336-5.0 و REF02 و انواع شماره های دیگر) استفاده شود.

--
خازن ها به دلیل مدل غیر ایده آلی که دارند، با افزایش فرکانس خاصیت خازنی خود را از دست می دهند و به عنوان سلف عمل می کنند. برای خازن های مختلف، این محدوده فرکانس بالا متفاوت است. خازن های الکترولیت از این نظر مشخصه نامناسبی دارند و به همین دلیل، در بسیاری از کاربردها به موازات خازن های الکترولیت خازن هایی با مشخصه ایده آل تر و ظرفیت کمتر بصورت موازی قرار داده می شود تا در فرکانس های بالاتر که خازن الکترولیت خاصیت خازنی خود را از دست می دهد، این خازن های موازی همچنان به عنوان خازن عمل کنند.
--
نکته طراحی مدار:
ولتاژ برق شهر بر حسب نوع منطقه و شبکه برق و ساعات شبانه روز ممکن است متفاوت از 220v باشد و در جایی مثلا 240v و در جای دیگر مثلا 200v باشد. بنابراین در طراحی مدارات و انتخاب قطعاتی که به برق شهر متصل می شوند، بر حسب نوع مدار ممکن است لازم باشد بجای 220v، بدترین شرایط ممکن برای ولتاژ برق شهر را در نظر بگیریم تا در صورت تغییر ولتاژ برق شهر نسبت به 220v آسیبی به مدار وارد نشود یا عملکرد آن مختل نشود.
--
نکته ای در برنامه نویسی:
در کد نویسی برای هر گونه ارتباطی که انتظار برای پاسخ سمت مقابل وجود دارد، باید مکانیزم timeout در انتظار برای دریافت در نظر گرفته شود تا در صورت قطع ارتباط و عدم پاسخ سمت مقابل، برنامه در یک حلقه بی نهایت انتظار قرار نگیرد. منظور از timeout این است که اگر سمت مقابل برای مدت مشخصی پاسخ نداد، اجرای برنامه از حلقه انتظار خارج شود و روتین مناسب خطا اجرا شود.

--
نکته ای در برنامه نویسی:
در کدنویسی برای میکروکنترلرها، برای خودداری از استفاده از متغیرها و محاسبات اعشاری که در مواردی می تواند منجر به طولانی شدن زمان اجرای برنامه یا افزایش حجم آن شود، یک روش این است که اگر تعداد مشخصی از اعداد بعد از ممیز مورد نظر باشد، کلیه اعداد را با مقیاسی در نظر بگیریم که همه اعداد اعشاری به صحیح تبدیل شوند و محاسبات بصورت صحیح انجام شوند و در نهایت هنگام نمایش و ارسال و ...، ممیز را در محل مناسب قرار دهیم. به عنوان مثال اگر در اعداد و متغیرهای مورد استفاده تا دو رقم اعشار مورد نظر باشد، می توان عددها و متغیرها را از همان ابتدا با مقیاس صد برابر در نظر گرفت و در نهایت ممیز را در محل مناسب اعمال کرد. مثلا بجای حاصلضرب 1.99 در 2.1 می توان با صد برابر در نظر گرفتن اعداد، حاصلضرب 199 در 210 را محاسبه کرد و در نهایت برای نمایش نتیجه، چهار رقم ممیز در نظر گرفت. در اینحالت روش حذف صفرهای اضافه سمت راست هم می تواند مورد استفاده قرار بگیرد. چنانکه در همین مثال بجای 4.1790 به عنوان نتیجه می توان صفر اضافه سمت راست را حذف کرد و 4.179 را نمایش داد یا ارسال کرد. البته جزییات و نکات این روش مفصل تر از آن است که در چارچوب یک پست تلگرام قابل توضیح باشد.
--
در ارتباط rs485 هنگامی که بایتی ارسال می شود و سمت مقابل باید پاسخ دهد، به دلیل یک طرفه بودن ارتباط باید تاخیر کافی در پاسخ دادن سمت مقابل لحاظ شود تا فرستنده فرصت داشته باشد وضعیت خود را به گیرنده تغییر دهد و قبل از تغییر وضعیت از فرستنده به گیرنده، ارسال پاسخ از سمت مقابل آغاز نشود. همچنین کدنویسی بخش فرستنده باید به گونه ای باشد که بعد از ارسال و برای دریافت پاسخ، در حداقل زمان ممکن جهت خط به عنوان گیرنده تغییر داده شود و مواردی مانند وقوع یک وقفه نتواند تاخیری را در این تغییر جهت از فرستنده به گیرنده ایجاد کند.
--
نکته طراحی مدار:
در IC های Gate driver سری IR2xxx مانند IR2113، رعایت یکسری نکات فراتر از آنچه در datasheet نوشته شده برای جلوگیری از روشن شدن ناخواسته سوییچ بخش high side در هنگام روشن شدن مدار و سوختن احتمالی سوییچ های قدرت لازم است. در این رابطه به توضیحات فایل pdf زیر مراجعه کنید
http://www.irf.com/technical-info/designtp/dt99-7.pdf

--
نکته مهم در برنامه نویسی:
یکی از موارد مهم در کدنویسی که عدم توجه به آن می تواند منجر به اشکالات غیر تکراری و با عملکرد به ظاهر تصادفی در اجرای برنامه شود، دسترسی به متغیرها از دو سطح مختلف برنامه است. منظور از دو سطح مختلف برنامه، حلقه اصلی و یک وقفه و یا دو سطح وقفه مختلف است. دسترسی از سطوح مختلف به یک متغیر در صورتی که  یک سطح از برنامه مقدار متغیر را تغییر دهد، در صورت عدم توجه برنامه نویس به تبعات این نوع دسترسی می تواند در عملکرد برنامه خطاهایی را ایجاد کند.
برای توضیح بیشتر فرض کنید در AVR به یک متغیر چهار بایتی در حلقه اصلی برنامه و یکی از وقفه ها دسترسی وجود داشته باشد، به نحوی که حلقه اصلی مقدار این متغیر را تغییر دهد. به عنوان مثال عددی، اگر یک متغیر چهار بایتی دارای مقدار 0x10ff0000 باشد و لازم باشد در حلقه اصلی با متغیر چهار بایتی دیگری با مقدار 0x00010000 جمع شود و در محل متغیر اولیه ذخیره شود که حاصل این جمع در نهایت 0x11000000 خواهد بود. اما با توجه به هشت بیتی بودن ساختار AVR این جمع بصورت بایت به بایت انجام و ذخیره سازی می شود . حال اگر فرض کنیم وقفه ای در بین ذخیره سازی این متغیر و بعد از ذخیره سازی سه بایت با ارزش کمتر پذیرفته شود و در روتین آن وقفه مقدار این متغیر از حافظه خوانده شود، در این وضعیت مقدار متغیر 0x10000000 خوانده خواهد شد چون بایت با ارزش بیشتر که قبلا 0x10 بوده و اکنون باید 0x11 باشد، هنوز ذخیره سازی نشده است. بنابراین مقدار خوانده شده صحیح نخواهد بود و می تواند باعث خطا در عملکرد برنامه شود. شبیه همین مثال را می توان برای تغییر مقدار یک متغیر توسط روتین وقفه و قضاوت اشتباه روی مقدار متغیر در حلقه اصلی مطرح کرد. 
بطور کلی در این نوع دسترسی ها که از دو سطح مختلف برنامه انجام می شود، باید در شیوه کدنویسی مراقب چنین خطاهای احتمالی باشیم که یک روش برای جلوگیری از چنین خطاهایی این است که قبل از انجام عملیات روی این نوع متغیرها، وقفه هایی که می توانند منجر به چنین تغییراتی شوند بصورت موقت غیر فعال و بعد مجددا فعال شوند.
* مطلب اخیر تجربه ای است که در جریان چند صد هزار خط برنامه نویسی و انجام پروژه های متعدد حاصل شده است.


اسفند:


نکته آموزشی:
در XMEGA با استفاده از DMA می توان محتوای رجیسترهای کنترل کننده سخت افزار را با کپی کردن بخشی از حافظه که قبلا بصورت مناسب مقداردهی شده و بدون مقدار دهی مستقیم تغییر داد. با استفاده از این تکنیک می توان عملکرد های خاصی را در کمترین زمان پیاده سازی کرد. مثلا فرض کنیم که لازم باشد با وارد شدن لبه پالس به یکی از پین ها، یکی از پورت ها از حالت ورودی به خروجی تغییر وضعیت دهد. برای این کار به غیر از استفاده از روش وقفه یا polling و اجرای کد که روش کند و زمان بری است، می توان از DMA استفاده کرد به نحوی که لبه بالا رونده به عنوان فرمان DMA عمل کند و مقدار مناسب برای خروجی شدن پورت که از قبل در حافظه نوشته شده، توسط DMA در رجیستر جهت پورت نوشته شود.
--
نکته طراحی مدار:
جریانی که برای سوییچ های نیمه هادی قدرت مانند ماسفت و IGBT به عنوان جریان مجاز ذکر می شود، مربوط به دمای مشخصی است و با افزایش دما، حداکثر جریان مجاز کاهش می یابد. مثلا در اطلاعات ماسفت IRF640 جریان پیوسته 18A در دمای 25C به عنوان حداکثر جریان مجاز ذکر شده است. اما برای همین ماسفت حداکثر جریان مجاز در دمای 100C تنها 11A است. یا به عنوان مثال دبگر حداکثر جریان برای ماسفت IRFP460 در دمای 25C برابر 20A و در دمای 100C تنها 13A است. بنابراین در طراحی مدار با استفاده از این نوع سوییچ ها باید به مسئله کاهش جریان مجاز در شرایط افزایش دما توجه کنیم.
--
نکته ای در کار با LCD های گرافیکی رنگی:
در اتصال LCD های گرافیکی رنگی به میکروکنترلرها به دلیل حجم بالای اطلاعاتی که برای نمایش یک صفحه باید به LCD ارسال شود و برای بالا بردن سرعت نمایش صفحه، علاوه بر رعایت یکسری موارد در نحوه کدنویسی که باید در فرصت دیگری به آن پرداخته شود، فراموش نکنیم که سطح Optimization کامپایلر را در وضعیت بهینه سازی برای حداکثر سرعت تنظیم کنیم.
--
نکته آموزشی:
در صفحه کلیدهای ماتریسی، فشار دادن توام بیش از دو کلید بسته به محل سطر و ستون می تواند منجر به اشتباه در تشخیص کلیدهای فشار داده شده شود (به این پدیده Ghosting گفته می شود). یک روش عمومی برای برطرف کردن این پدیده، سری کردن دیود با هر کلید در جهت متناسب است.

--
گیربکس الکترونیکی در سرو موتورها:
در درایورهای سرو موتور صنعتی، از طریق تنظیم ضرایبی می توان تعداد تقسیمات در یک دور موتور را متفاوت از دقت ناشی از انکودر موتور تعریف کرد. به عنوان مثال در سرو موتورهای سری Delta-B2 که تعداد تقسیمات در یک دور موتور 160000 قسمت است، از طریق تنظیم پارامترهای P1-44 و P1-45 می توان به تقسیمات متفاوتی رسید که تقسیمات نهایی در یک دور موتور برابر حاصلضرب 160000 ضرب در P1-45 تقسیم بر P1-44 خواهد بود (تاکید می شود که P1-44 در مخرج کسر قرار دارد). در این درایور، نسبت P1-44/P1-45 به عنوان گیربکس الکترونیکی نامیده می شود و کسری است که در تعداد پالس ورودی ضرب می شود. به همین دلیل در محاسبه تقسیمات موتور، صورت این کسر در مخرج محاسبه قرار می گیرد. به عنوان مثال عددی، با تنظیم مقدار P1-44 برابر 16 و P1-45 برابر 1 تعداد تقسیمات برابر 160000x1/16=10000 قسمت در دور است و اعمال 10000 پالس باعث چرخش موتور به میزان یک دور می شود. به همین ترتیب می توان با تنظیم مناسب این پارامترها، سایر تقسیمات دلخواه برای یک دور موتور را ایجاد کرد. برای سرو موتورهای دیگر هم شبیه همین پارامترها به عنوان گیربکس الکترونیکی با نام های دیگر وجود دارد. در برخی از درایورهای استپر موتور با موتور انکودر دار هم امکان تنظیم گیربکس الکترونیکی می تواند وجود داشته باشد.
--
نکته ای در برنامه نویسی اسمبلی AVR و XMEGA:
برای صرفه جویی و کوتاه تر کردن زمان اجرای برنامه در کاربردهای بسیار Time critical که صرفه جویی در دستورالعمل ها و بهینه بودن کد مهم است، می توان یکی از رجیسترهای ترجیحا R2 تا R15 را در ابتدای برنامه با صفر مقداردهی کرد و در طول برنامه هر جا که نیاز به مقداردهی با صفر باشد از این رجیستر استفاده کرد. در اینصورت در برنامه های بزرگ، نیاز به تکرار مداوم دستور clr در نقاط مختلف کد برای صفر کردن رجیسترها برطرف می شود که حذف این دستورات clr باعث صرفه جویی هر چه بیشتر در زمان می شود.
--
نکته طراحی مدار:
در مدل واقعی ماسفت، خازن هایی بین گیت سورس و گیت درین و سلف های سری در مسیر درین و سورس مدل می شوند که در مدارات قدرت با نوسانات سریع، وجود این مدل غیر ایده آل یکسری ضرورت ها را در طراحی مدار ایجاب می کند. در این رابطه یکی از مواردی که می تواند از سوختن ماسفت به دلیل سرایت ولتاژ های ناخواسته به گیت ناشی از همین مدل غیر ایده آل جلوگیری کند، قرار دادن یک دیود زنر به موازات گیت سورس با ولتاژی بالاتر از ولتاژ فرمان به گیت است (مثلا یک زنر 15v در شرایطی که پالس 12v به گیت اعمال می شود).

--
نکاتی از زبان برنامه نویسی 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 است.
--
نکاتی از زبان برنامه نویسی c:

عبارت:
char *a[10];

معرف یک آرایه به نام a با 10 عضو است که اعضای آرایه از نوع اشاره گر به char هستند.

عبارت:
char (*a)[10];

معرف یک اشاره گر به نام a است که به آرایه ای با 10 عضو از نوع char اشاره می کند.
--
نکته آموزشی:
در ارتباط USART با طول دیتای 9 بیتی ، بیت نهم می تواند به عنوان شاخص تعیین کننده Command یا Data بودن 8 بیت دیگر بکار رود. از این بیت از طریق کدنویسی مناسب حتی می توان برای reset کردن و شروع مجدد ارتباط هایی استفاده کرد که ارتباط در وسط تبادل دیتا قطع شده باشد.

--
توصیه ای برای علاقه مندان به برنامه نویسی:
هرچند مطالعه و تحلیل برنامه ها و مثال های آماده می تواند برای درک نحوه برنامه نویسی صحیح و اصولی مفید باشد. اما یک فرد مبتدی تنها با مطالعه و تحلیل برنامه های آماده یا copy/paste کردن کد های موجود نمی تواند به مهارت حرفه ای در برنامه نویسی برسد. به اینگونه افراد توصیه می شود که علاوه بر تحلیل کدهای آماده، به عنوان تمرین سعی کنند برخی کد های مورد نیاز برای انجام عملیات مختلف را حتی در صورت موجود بودن، شخصا بنویسند و حاصل کار خود را با کدهای موجود مقایسه کنند تا در مرور زمان بتوانند به تسلط و تجربه کافی دست یابند. به بیان دیگر، با خواندن و تحلیل کردن کد به تنهایی نمی توان برنامه نویس شد و برنامه نویس باید شخصا روی نوشتن کدها تمرین زیادی را انجام دهد.

--
نکته آموزشی:
یک تفاوت قابل توجه در نحوه ارتباط با LCD های کاراکتری مبتنی بر کنترلر HD44780 و شبیه آن و همچنین LCD های گرافیکی مبتنی بر کنترلر KS0108 نسبت به LCD های گرافیکی مبتنی بر کنترلر T6963C این است که در دو نوع LCD اول، امکان ارتباط بصورت یک طرفه و بدون نیاز به خواندن اطلاعات با قرار دادن تاخیر کافی بین نوشتن بایت های مختلف وجود دارد. اما در ارتباط با LCD های گرافیکی مبتنی بر کنترلر T6963C ضروری است که امکان ارتباط دو طرفه فراهم باشد و علاوه بر نوشتن اطلاعات به LCD، قابلیت خواندن اطلاعات از LCD هم وجود داشته باشد.

--
برای برطرف کردن نوسانات قرائت شده در اتصال تاچ های مقاومتی بصورت مستقیم به ADC، روش میانگین گیری از مختصات خوانده شده با تعداد نمونه کافی می تواند نوسانات را تا حد زیادی برطرف کند.
--
نکته ای در برنامه نویسی:
در گرد کردن اعداد میانی بین دو عدد با استفاده از توابع هر زبان برنامه نویسی، باید به روش مورد استفاده برای گرد کردن توجه کنیم تا خطای ناخواسته ای در محاسبات ایجاد نشود. به عنوان توضیح بیشتر، عملیات گرد کردن یا Rounding برای نقاط میانی بر دو نوع است. در نوع اول که در اصطلاح Rounding away from zero گفته می شود، گرد کردن به سمت اعداد دورتر از صفر است. در این روش به عنوان مثال حاصل گرد کردن 1.5 برابر با 2 و حاصل گرد کردن 2.5 برابر 3 است. در روش دیگر که در اصطلاح Banker's rounding گفته می شود، گرد کردن به سمت عدد نزدیک تر است. نکته مهم در این روش این است که برای اعداد میانی، گرد کردن به سمت عدد زوج انجام می شود. بنابراین با این روش، حاصل گرد کردن 1.5 برابر 2 و حاصل گرد کردن 2.5 باز هم برابر 2 خواهد بود. به عنوان نمونه در visual basic 6.0 گرد کردن با تابع Round بر اساس روش  banker's rounding عمل می کند و عدم توجه به روش مورد استفاده می تواند باعث ایجاد خطا در محاسبات شود.

--
در پاسخ به دوستانی که برای انتخاب مسیر خود در کار کردن با خانواده های مختلف میکروکنترلر و ابزارهای برنامه نویسی سردرگم هستند، معمولا این پاسخ ارائه می شود که برای رهایی از سردرگمی و فراهم شدن امکان قضاوت بهتر، یک "با" را از سوال ذهنی خود حذف کنید. اگر بجای این سوال که "باید با چه کار کنم؟" بیشتر روی این سوال متمرکز شویم که "باید چکار کنم؟" آنگاه با مشخص شدن هدف و کار مورد نظر برای انجام دادن، ابزارهای سخت افزاری و نرم افزاری به شکل مشخص تری قابل انتخاب خواهند بود. به عبارت دیگر، در صورتی که نیاز جاری را بشناسیم بهتر می توانیم ابزار مناسب را برای رفع این نیاز انتخاب کنیم.
--
نکاتی از زبان برنامه نویسی c:
متغیرهای نوع char همیشه یک بایتی هستند. اما سایز متغیرهای نوع int بسته به کامپایلر لزوما 16 بیت نیست (حداقل سایز این نوع متغیر 16 بیت است).