نکته ای در کار با LCD های گرافیکی رنگی:
در اتصال LCD های گرافیکی رنگی به میکروکنترلرها به دلیل حجم بالای اطلاعاتی که برای نمایش یک صفحه باید به LCD ارسال شود و برای بالا بردن سرعت نمایش صفحه، علاوه بر رعایت یکسری موارد در نحوه کدنویسی که باید در فرصت دیگری به آن پرداخته شود، فراموش نکنیم که سطح Optimization کامپایلر را در وضعیت بهینه سازی برای حداکثر سرعت تنظیم کنیم.
@KnowledgePlus
در اتصال LCD های گرافیکی رنگی به میکروکنترلرها به دلیل حجم بالای اطلاعاتی که برای نمایش یک صفحه باید به LCD ارسال شود و برای بالا بردن سرعت نمایش صفحه، علاوه بر رعایت یکسری موارد در نحوه کدنویسی که باید در فرصت دیگری به آن پرداخته شود، فراموش نکنیم که سطح Optimization کامپایلر را در وضعیت بهینه سازی برای حداکثر سرعت تنظیم کنیم.
@KnowledgePlus
نکته آموزشی:
در صفحه کلیدهای ماتریسی، فشار دادن توام بیش از دو کلید بسته به محل سطر و ستون می تواند منجر به اشتباه در تشخیص کلیدهای فشار داده شده شود (به این پدیده Ghosting گفته می شود). یک روش عمومی برای برطرف کردن این پدیده، سری کردن دیود با هر کلید در جهت متناسب است.
@KnowledgePlus
در صفحه کلیدهای ماتریسی، فشار دادن توام بیش از دو کلید بسته به محل سطر و ستون می تواند منجر به اشتباه در تشخیص کلیدهای فشار داده شده شود (به این پدیده Ghosting گفته می شود). یک روش عمومی برای برطرف کردن این پدیده، سری کردن دیود با هر کلید در جهت متناسب است.
@KnowledgePlus
گیربکس الکترونیکی در سرو موتورها:
در درایورهای سرو موتور صنعتی، از طریق تنظیم ضرایبی می توان تعداد تقسیمات در یک دور موتور را متفاوت از دقت ناشی از انکودر موتور تعریف کرد. به عنوان مثال در سرو موتورهای سری 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 پالس باعث چرخش موتور به میزان یک دور می شود. به همین ترتیب می توان با تنظیم مناسب این پارامترها، سایر تقسیمات دلخواه برای یک دور موتور را ایجاد کرد. برای سرو موتورهای دیگر هم شبیه همین پارامترها به عنوان گیربکس الکترونیکی با نام های دیگر وجود دارد. در برخی از درایورهای استپر موتور با موتور انکودر دار هم امکان تنظیم گیربکس الکترونیکی می تواند وجود داشته باشد.
@KnowledgePlus
در درایورهای سرو موتور صنعتی، از طریق تنظیم ضرایبی می توان تعداد تقسیمات در یک دور موتور را متفاوت از دقت ناشی از انکودر موتور تعریف کرد. به عنوان مثال در سرو موتورهای سری 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 پالس باعث چرخش موتور به میزان یک دور می شود. به همین ترتیب می توان با تنظیم مناسب این پارامترها، سایر تقسیمات دلخواه برای یک دور موتور را ایجاد کرد. برای سرو موتورهای دیگر هم شبیه همین پارامترها به عنوان گیربکس الکترونیکی با نام های دیگر وجود دارد. در برخی از درایورهای استپر موتور با موتور انکودر دار هم امکان تنظیم گیربکس الکترونیکی می تواند وجود داشته باشد.
@KnowledgePlus
نکته ای در برنامه نویسی اسمبلی AVR و XMEGA:
برای صرفه جویی و کوتاه تر کردن زمان اجرای برنامه در کاربردهای بسیار Time critical که صرفه جویی در دستورالعمل ها و بهینه بودن کد مهم است، می توان یکی از رجیسترهای ترجیحا R2 تا R15 را در ابتدای برنامه با صفر مقداردهی کرد و در طول برنامه هر جا که نیاز به مقداردهی با صفر باشد از این رجیستر استفاده کرد. در اینصورت در برنامه های بزرگ، نیاز به تکرار مداوم دستور clr در نقاط مختلف کد برای صفر کردن رجیسترها برطرف می شود که حذف این دستورات clr باعث صرفه جویی هر چه بیشتر در زمان می شود.
@KnowledgePlus
برای صرفه جویی و کوتاه تر کردن زمان اجرای برنامه در کاربردهای بسیار Time critical که صرفه جویی در دستورالعمل ها و بهینه بودن کد مهم است، می توان یکی از رجیسترهای ترجیحا R2 تا R15 را در ابتدای برنامه با صفر مقداردهی کرد و در طول برنامه هر جا که نیاز به مقداردهی با صفر باشد از این رجیستر استفاده کرد. در اینصورت در برنامه های بزرگ، نیاز به تکرار مداوم دستور clr در نقاط مختلف کد برای صفر کردن رجیسترها برطرف می شود که حذف این دستورات clr باعث صرفه جویی هر چه بیشتر در زمان می شود.
@KnowledgePlus
نکته طراحی مدار:
در مدل واقعی ماسفت، خازن هایی بین گیت سورس و گیت درین و سلف های سری در مسیر درین و سورس مدل می شوند که در مدارات قدرت با نوسانات سریع، وجود این مدل غیر ایده آل یکسری ضرورت ها را در طراحی مدار ایجاب می کند. در این رابطه یکی از مواردی که می تواند از سوختن ماسفت به دلیل سرایت ولتاژ های ناخواسته به گیت ناشی از همین مدل غیر ایده آل جلوگیری کند، قرار دادن یک دیود زنر به موازات گیت سورس با ولتاژی بالاتر از ولتاژ فرمان به گیت است (مثلا یک زنر 15v در شرایطی که پالس 12v به گیت اعمال می شود).
@KnowledgePlus
در مدل واقعی ماسفت، خازن هایی بین گیت سورس و گیت درین و سلف های سری در مسیر درین و سورس مدل می شوند که در مدارات قدرت با نوسانات سریع، وجود این مدل غیر ایده آل یکسری ضرورت ها را در طراحی مدار ایجاب می کند. در این رابطه یکی از مواردی که می تواند از سوختن ماسفت به دلیل سرایت ولتاژ های ناخواسته به گیت ناشی از همین مدل غیر ایده آل جلوگیری کند، قرار دادن یک دیود زنر به موازات گیت سورس با ولتاژی بالاتر از ولتاژ فرمان به گیت است (مثلا یک زنر 15v در شرایطی که پالس 12v به گیت اعمال می شود).
@KnowledgePlus
معرفی یک سایت مفید برای یافتن قیمت جهانی و فروشنده های قطعات الکترونیک:
https://www.findchips.com
@KnowledgePlus
https://www.findchips.com
@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
عبارت:
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
نکاتی از زبان برنامه نویسی c:
عبارت:
char *a[10];
معرف یک آرایه به نام a با 10 عضو است که اعضای آرایه از نوع اشاره گر به char هستند.
عبارت:
char (*a)[10];
معرف یک اشاره گر به نام a است که به آرایه ای با 10 عضو از نوع char اشاره می کند.
@KnowledgePlus
عبارت:
char *a[10];
معرف یک آرایه به نام a با 10 عضو است که اعضای آرایه از نوع اشاره گر به char هستند.
عبارت:
char (*a)[10];
معرف یک اشاره گر به نام a است که به آرایه ای با 10 عضو از نوع char اشاره می کند.
@KnowledgePlus
نکته آموزشی:
در ارتباط USART با طول دیتای 9 بیتی ، بیت نهم می تواند به عنوان شاخص تعیین کننده Command یا Data بودن 8 بیت دیگر بکار رود. از این بیت از طریق کدنویسی مناسب حتی می توان برای reset کردن و شروع مجدد ارتباط هایی استفاده کرد که ارتباط در وسط تبادل دیتا قطع شده باشد.
@KnowledgePlus
در ارتباط USART با طول دیتای 9 بیتی ، بیت نهم می تواند به عنوان شاخص تعیین کننده Command یا Data بودن 8 بیت دیگر بکار رود. از این بیت از طریق کدنویسی مناسب حتی می توان برای reset کردن و شروع مجدد ارتباط هایی استفاده کرد که ارتباط در وسط تبادل دیتا قطع شده باشد.
@KnowledgePlus
توصیه ای برای علاقه مندان به برنامه نویسی:
هرچند مطالعه و تحلیل برنامه ها و مثال های آماده می تواند برای درک نحوه برنامه نویسی صحیح و اصولی مفید باشد. اما یک فرد مبتدی تنها با مطالعه و تحلیل برنامه های آماده یا copy/paste کردن کد های موجود نمی تواند به مهارت حرفه ای در برنامه نویسی برسد. به اینگونه افراد توصیه می شود که علاوه بر تحلیل کدهای آماده، به عنوان تمرین سعی کنند برخی کد های مورد نیاز برای انجام عملیات مختلف را حتی در صورت موجود بودن، شخصا بنویسند و حاصل کار خود را با کدهای موجود مقایسه کنند تا در مرور زمان بتوانند به تسلط و تجربه کافی دست یابند. به بیان دیگر، با خواندن و تحلیل کردن کد به تنهایی نمی توان برنامه نویس شد و برنامه نویس باید شخصا روی نوشتن کدها تمرین زیادی را انجام دهد.
@KnowledgePlus
هرچند مطالعه و تحلیل برنامه ها و مثال های آماده می تواند برای درک نحوه برنامه نویسی صحیح و اصولی مفید باشد. اما یک فرد مبتدی تنها با مطالعه و تحلیل برنامه های آماده یا copy/paste کردن کد های موجود نمی تواند به مهارت حرفه ای در برنامه نویسی برسد. به اینگونه افراد توصیه می شود که علاوه بر تحلیل کدهای آماده، به عنوان تمرین سعی کنند برخی کد های مورد نیاز برای انجام عملیات مختلف را حتی در صورت موجود بودن، شخصا بنویسند و حاصل کار خود را با کدهای موجود مقایسه کنند تا در مرور زمان بتوانند به تسلط و تجربه کافی دست یابند. به بیان دیگر، با خواندن و تحلیل کردن کد به تنهایی نمی توان برنامه نویس شد و برنامه نویس باید شخصا روی نوشتن کدها تمرین زیادی را انجام دهد.
@KnowledgePlus
نکته آموزشی:
یک تفاوت قابل توجه در نحوه ارتباط با LCD های کاراکتری مبتنی بر کنترلر HD44780 و شبیه آن و همچنین LCD های گرافیکی مبتنی بر کنترلر KS0108 نسبت به LCD های گرافیکی مبتنی بر کنترلر T6963C این است که در دو نوع LCD اول، امکان ارتباط بصورت یک طرفه و بدون نیاز به خواندن اطلاعات با قرار دادن تاخیر کافی بین نوشتن بایت های مختلف وجود دارد. اما در ارتباط با LCD های گرافیکی مبتنی بر کنترلر T6963C ضروری است که امکان ارتباط دو طرفه فراهم باشد و علاوه بر نوشتن اطلاعات به LCD، قابلیت خواندن اطلاعات از LCD هم وجود داشته باشد.
@KnowledgePlus
یک تفاوت قابل توجه در نحوه ارتباط با LCD های کاراکتری مبتنی بر کنترلر HD44780 و شبیه آن و همچنین LCD های گرافیکی مبتنی بر کنترلر KS0108 نسبت به LCD های گرافیکی مبتنی بر کنترلر T6963C این است که در دو نوع LCD اول، امکان ارتباط بصورت یک طرفه و بدون نیاز به خواندن اطلاعات با قرار دادن تاخیر کافی بین نوشتن بایت های مختلف وجود دارد. اما در ارتباط با LCD های گرافیکی مبتنی بر کنترلر T6963C ضروری است که امکان ارتباط دو طرفه فراهم باشد و علاوه بر نوشتن اطلاعات به LCD، قابلیت خواندن اطلاعات از LCD هم وجود داشته باشد.
@KnowledgePlus
برای برطرف کردن نوسانات قرائت شده در اتصال تاچ های مقاومتی بصورت مستقیم به ADC، روش میانگین گیری از مختصات خوانده شده با تعداد نمونه کافی می تواند نوسانات را تا حد زیادی برطرف کند.
@KnowledgePlus
@KnowledgePlus
نکته ای در برنامه نویسی:
در گرد کردن اعداد میانی بین دو عدد با استفاده از توابع هر زبان برنامه نویسی، باید به روش مورد استفاده برای گرد کردن توجه کنیم تا خطای ناخواسته ای در محاسبات ایجاد نشود. به عنوان توضیح بیشتر، عملیات گرد کردن یا 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 عمل می کند و عدم توجه به روش مورد استفاده می تواند باعث ایجاد خطا در محاسبات شود.
@KnowledgePlus
در گرد کردن اعداد میانی بین دو عدد با استفاده از توابع هر زبان برنامه نویسی، باید به روش مورد استفاده برای گرد کردن توجه کنیم تا خطای ناخواسته ای در محاسبات ایجاد نشود. به عنوان توضیح بیشتر، عملیات گرد کردن یا 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 عمل می کند و عدم توجه به روش مورد استفاده می تواند باعث ایجاد خطا در محاسبات شود.
@KnowledgePlus
در پاسخ به دوستانی که برای انتخاب مسیر خود در کار کردن با خانواده های مختلف میکروکنترلر و ابزارهای برنامه نویسی سردرگم هستند، معمولا این پاسخ ارائه می شود که برای رهایی از سردرگمی و فراهم شدن امکان قضاوت بهتر، یک "با" را از سوال ذهنی خود حذف کنید. اگر بجای این سوال که "باید با چه کار کنم؟" بیشتر روی این سوال متمرکز شویم که "باید چکار کنم؟" آنگاه با مشخص شدن هدف و کار مورد نظر برای انجام دادن، ابزارهای سخت افزاری و نرم افزاری به شکل مشخص تری قابل انتخاب خواهند بود. به عبارت دیگر، در صورتی که نیاز جاری را بشناسیم بهتر می توانیم ابزار مناسب را برای رفع این نیاز انتخاب کنیم.
@KnowledgePlus
@KnowledgePlus
نکاتی از زبان برنامه نویسی c:
متغیرهای نوع char همیشه یک بایتی هستند. اما سایز متغیرهای نوع int بسته به کامپایلر لزوما 16 بیت نیست (حداقل سایز این نوع متغیر 16 بیت است).
@KnowledgePlus
متغیرهای نوع char همیشه یک بایتی هستند. اما سایز متغیرهای نوع int بسته به کامپایلر لزوما 16 بیت نیست (حداقل سایز این نوع متغیر 16 بیت است).
@KnowledgePlus
نکته آموزشی:
عمر و ساعت کار عملکرد برخی از انواع خازن های الکترولیت مطابق فرمول شیمیایی Arrhenius به ازای هر ده درجه کاهش در دمای محیط، دو برابر می شود. یعنی اگر مثلا در 105 درجه 2000 ساعت باشد، در 95 درجه 4000 ساعت خواهد بود.
@KnowledgePlus
عمر و ساعت کار عملکرد برخی از انواع خازن های الکترولیت مطابق فرمول شیمیایی Arrhenius به ازای هر ده درجه کاهش در دمای محیط، دو برابر می شود. یعنی اگر مثلا در 105 درجه 2000 ساعت باشد، در 95 درجه 4000 ساعت خواهد بود.
@KnowledgePlus
نکته آموزشی:
گشتاور حاصل از درایو کردن استپر موتورها به روش Bipolar تقریبا 40 درصد بیشتر از گشتاور در روش Unipolar است.
@KnowledgePlus
گشتاور حاصل از درایو کردن استپر موتورها به روش Bipolar تقریبا 40 درصد بیشتر از گشتاور در روش Unipolar است.
@KnowledgePlus
نکته طراحی مدار:
در طراحی مدار کنترل دور موتور DC در دو جهت، اگرتغییر جهت موتور با تعداد دفعات کم در واحد زمان اتفاق بیافتد، بجای استفاده از 4 سوییچ نیمه هادی و بستن مدار پل می توانیم از یک سوییچ نیمه هادی و یک رله با دو کنتاکت باز و بسته استفاده کنیم. در روش اخیر سرهای موتور DC به سر های وسط دو کنتاکت رله متصل می شوند و سرهای کناری رله هم بصورت ضربدری به خروجی PWM و تغذیه متصل می شوند که با این آرایش در صورت تغییر وضعیت رله، جهت ولتاژ PWM اعمال شده به دو سر موتور معکوس می شود. در این روش دیود هرزگرد بجای قرار گرفتن به موازات موتور باید در جهت مناسب بین خروجی PWM و تغذیه متصل شود.
@KnowledgePlus
در طراحی مدار کنترل دور موتور DC در دو جهت، اگرتغییر جهت موتور با تعداد دفعات کم در واحد زمان اتفاق بیافتد، بجای استفاده از 4 سوییچ نیمه هادی و بستن مدار پل می توانیم از یک سوییچ نیمه هادی و یک رله با دو کنتاکت باز و بسته استفاده کنیم. در روش اخیر سرهای موتور DC به سر های وسط دو کنتاکت رله متصل می شوند و سرهای کناری رله هم بصورت ضربدری به خروجی PWM و تغذیه متصل می شوند که با این آرایش در صورت تغییر وضعیت رله، جهت ولتاژ PWM اعمال شده به دو سر موتور معکوس می شود. در این روش دیود هرزگرد بجای قرار گرفتن به موازات موتور باید در جهت مناسب بین خروجی PWM و تغذیه متصل شود.
@KnowledgePlus
نکاتی از زبان برنامه نویسی C:
عبارت های زیر معادل یکدیگر هستند
&a[0]
و
a
-------------------------------
a[0]
و
*a
-------------------------------
a[i]
و
*(a+i)
@KnowledgePlus
عبارت های زیر معادل یکدیگر هستند
&a[0]
و
a
-------------------------------
a[0]
و
*a
-------------------------------
a[i]
و
*(a+i)
@KnowledgePlus
نکته ای در کار با درایورهای استپر موتور:
در درایورهایی که از جریان موتور فیدبک گرفته نمی شود و از این نظر بصورت حلقه باز عمل می کنند، تغذیه درایور باید مطابق با ولتاژ نامی استپر موتور اعمال شود. اما در درایورهایی که از جریان موتور فیدبک گرفته می شود و از این نظر بصورت حلقه بسته عمل می کنند، لازم نیست تغذیه درایور محدود به ولتاژ نامی استپر موتور باشد و اتفاقا هر چه این ولتاژ بیشتر باشد، دورهای بالاتری برای استپر موتور توسط درایور با حفظ گشتاور قابل تامین خواهد بود.
@KnowledgePlus
در درایورهایی که از جریان موتور فیدبک گرفته نمی شود و از این نظر بصورت حلقه باز عمل می کنند، تغذیه درایور باید مطابق با ولتاژ نامی استپر موتور اعمال شود. اما در درایورهایی که از جریان موتور فیدبک گرفته می شود و از این نظر بصورت حلقه بسته عمل می کنند، لازم نیست تغذیه درایور محدود به ولتاژ نامی استپر موتور باشد و اتفاقا هر چه این ولتاژ بیشتر باشد، دورهای بالاتری برای استپر موتور توسط درایور با حفظ گشتاور قابل تامین خواهد بود.
@KnowledgePlus