عیدی به علاقه مندان و متخصصان رشته الکترونیک:
برای دانلود طرح های برگزیده مسابقه علمی سال 1395 که برندگان و جوایز آن اخیرا اعلام شد، می توانید به لینک زیر مراجعه کنید:
https://knowledgeplus.ir/contest/download
@KnowledgePlus
برای دانلود طرح های برگزیده مسابقه علمی سال 1395 که برندگان و جوایز آن اخیرا اعلام شد، می توانید به لینک زیر مراجعه کنید:
https://knowledgeplus.ir/contest/download
@KnowledgePlus
یادی از ایامی که اینترنت وجود نداشت:
شاید سن و تجربه بسیاری از مخاطبین یاری نکند که زمانی را به یاد بیاورند که چیزی به نام اینترنت وجود نداشت که بتوانیم در آن جستجو کنیم و صدها و هزاران مطلب مرتبط با موضوع مورد سوال خود را در آن پیدا کنیم و دیتاشیت و نرم افزار و کتابخانه و انواع اطلاعات مورد نیاز را از آن دانلود کنیم. زمانی بود که برای راه اندازی یک مدار و سخت افزار ممکن بود تنها چند برگ اطلاعات محدود از یک کتاب در دسترس باشد که آن هم به سختی و گاهی با قیمت گزاف تهیه شده بود. اما این کمبود منابع هر چند محدودیت بسیاری را ایجاد می کرد ولی حداقل این خاصیت را داشت که اتکا و اعتماد به نفس را بسیار تقویت میکرد و کسی که قصد رشد داشت مجبور بود که فکر کردن و تحلیل کردن و به اصطلاح ماهیگیری را یاد بگیرد. این کمبود منابع و اطلاعات و امکانات هر جنبه منفی که داشت اما همچون یک معلم، سخت کوشی و استقامت و زود خسته نشدن را به افراد طالب پیشرفت یاد می داد. قدر امکاناتی را که امروز در دسترس ما هست بدانیم.
@KnowledgePlus
شاید سن و تجربه بسیاری از مخاطبین یاری نکند که زمانی را به یاد بیاورند که چیزی به نام اینترنت وجود نداشت که بتوانیم در آن جستجو کنیم و صدها و هزاران مطلب مرتبط با موضوع مورد سوال خود را در آن پیدا کنیم و دیتاشیت و نرم افزار و کتابخانه و انواع اطلاعات مورد نیاز را از آن دانلود کنیم. زمانی بود که برای راه اندازی یک مدار و سخت افزار ممکن بود تنها چند برگ اطلاعات محدود از یک کتاب در دسترس باشد که آن هم به سختی و گاهی با قیمت گزاف تهیه شده بود. اما این کمبود منابع هر چند محدودیت بسیاری را ایجاد می کرد ولی حداقل این خاصیت را داشت که اتکا و اعتماد به نفس را بسیار تقویت میکرد و کسی که قصد رشد داشت مجبور بود که فکر کردن و تحلیل کردن و به اصطلاح ماهیگیری را یاد بگیرد. این کمبود منابع و اطلاعات و امکانات هر جنبه منفی که داشت اما همچون یک معلم، سخت کوشی و استقامت و زود خسته نشدن را به افراد طالب پیشرفت یاد می داد. قدر امکاناتی را که امروز در دسترس ما هست بدانیم.
@KnowledgePlus
فایل مدار چاپی آخرین نسخه برد آموزشی XMEGA و AVR که یکی از محصولات تجاری سایت است، به عنوان هدیه ای به علاقه مندان رشته الکترونیک برای دانلود در سایت قرار داده شد. برای دسترسی به فایل ها به لینک زیر مراجعه کنید:
https://knowledgeplus.ir/download
لازم به ذکر است که این مدار چاپی از نوع یک رو بوده و با روش های دست ساز هم قابل ساخت است.
@KnowledgePlus
https://knowledgeplus.ir/download
لازم به ذکر است که این مدار چاپی از نوع یک رو بوده و با روش های دست ساز هم قابل ساخت است.
@KnowledgePlus
نکته ای در تعمیرات بردهای صنعتی:
یکی از اولین گام ها برای تعمیر یک برد صنعتی، خوب نگاه کردن به برد و بررسی دقیق اجزای آن بصورت چشمی است. درست نگاه کردن به یک برد و تشخیص مواردی مثل سیاه شدن قطعات یا باد کردن آنها یا قرار نداشتن قطعه ای در محل خود که می تواند ناشی از ترکیدن قطعه باشد، در موارد زیادی می تواند به تعیین علت خرابی آن کمک کند. بو کردن برد به منظور تشخیص بوی سوختگی در قطعات هم یکی دیگر از روش های اولیه برای بررسی وجود خرابی در یک برد است.
@KnowledgePlus
یکی از اولین گام ها برای تعمیر یک برد صنعتی، خوب نگاه کردن به برد و بررسی دقیق اجزای آن بصورت چشمی است. درست نگاه کردن به یک برد و تشخیص مواردی مثل سیاه شدن قطعات یا باد کردن آنها یا قرار نداشتن قطعه ای در محل خود که می تواند ناشی از ترکیدن قطعه باشد، در موارد زیادی می تواند به تعیین علت خرابی آن کمک کند. بو کردن برد به منظور تشخیص بوی سوختگی در قطعات هم یکی دیگر از روش های اولیه برای بررسی وجود خرابی در یک برد است.
@KnowledgePlus
نکته ای در کدنویسی:
در نامگذاری متغیرها و توابع و غیره استفاده از نام های کوتاهی که فاقد معنی مشخصی هستند (مثل a یا s یا tt و مانند آن) خوانایی کد را پایین می آورد و درک نحوه عملکرد کد را مشکل تر می کند. بنابراین بهتر است برای نامگذاری از اسامی معنی دار و متناسب با عملکرد استفاده شود. رعایت این مسئله معمولا تاثیر قابل توجهی در فهم محتوای کد در مراجعات بعدی خواهد داشت.
@KnowledgePlus
در نامگذاری متغیرها و توابع و غیره استفاده از نام های کوتاهی که فاقد معنی مشخصی هستند (مثل a یا s یا tt و مانند آن) خوانایی کد را پایین می آورد و درک نحوه عملکرد کد را مشکل تر می کند. بنابراین بهتر است برای نامگذاری از اسامی معنی دار و متناسب با عملکرد استفاده شود. رعایت این مسئله معمولا تاثیر قابل توجهی در فهم محتوای کد در مراجعات بعدی خواهد داشت.
@KnowledgePlus
اگر یک طراح در الکترونیک و نرم افزار هستید به این نکته مهم توجه کنید:
در طراحی سیستم های الکترونیک و به خصوص در کاربردهای صنعتی، موارد متعددی وجود دارد که یک طراح باید ساز و کار سیستم و امکانات در دسترس کاربر و عملکردها را خود طراحی کند و برای کاربر تنها نتیجه نهایی که همانا عملکرد درست دستگاه و نرم افزار و ... است، مهم است. مثلا از یک طراح درخواست می شود که دستگاهی طراحی کند یا نرم افزاری را بنویسد که عملیات x را انجام دهد و فرد یا مجموعه درخواست کننده ذهنیتی راجع به جزییاتی که طراح قرار است در دستگاه پیش بینی کند، ندارند. با توجه به اینکه ممکن است از نظر یک طراح امکانی بسیار مفید باشد اما از نظر کاربر واقعی، آن امکان در عمل کاربردی نداشته باشد یا حتی مزاحم کار باشد، یک طراح باید بجای تکیه صرف بر ذهنیات شخصی خود این قابلیت را داشته باشد که خود را بجای کاربر نهایی فرض کند و از آن موضع بررسی کند که چه امکانات و نحوه عملکردی برای این دستگاه مفیدتر و کاربردی تر است و برای احراز این مسئله تا حد مقدور با کاربران و اپراتورهایی که قرار است با آن دستگاه یا نرم افزار کار کنند، تعامل برقرار کند. در سال های گذشته با استفاده از همین روش فرض کردن خود بجای کاربر نهایی و برقراری تعامل با آنها در هنگام طراحی امکانات سخت افزاری و نرم افزاری، نتایج بسیار خوبی حاصل شده و در نهایت منجر به عملکردهایی شده که بسیار فراتر از انتظارات اولیه بوده و حتی خود سفارش دهندگان اولیه هم از ابتدا به ذهنشان نمی رسیده که چنین امکاناتی می توانسته در این دستگاه یا نرم افزار وجود داشته باشد.
@KnowledgePlus
در طراحی سیستم های الکترونیک و به خصوص در کاربردهای صنعتی، موارد متعددی وجود دارد که یک طراح باید ساز و کار سیستم و امکانات در دسترس کاربر و عملکردها را خود طراحی کند و برای کاربر تنها نتیجه نهایی که همانا عملکرد درست دستگاه و نرم افزار و ... است، مهم است. مثلا از یک طراح درخواست می شود که دستگاهی طراحی کند یا نرم افزاری را بنویسد که عملیات x را انجام دهد و فرد یا مجموعه درخواست کننده ذهنیتی راجع به جزییاتی که طراح قرار است در دستگاه پیش بینی کند، ندارند. با توجه به اینکه ممکن است از نظر یک طراح امکانی بسیار مفید باشد اما از نظر کاربر واقعی، آن امکان در عمل کاربردی نداشته باشد یا حتی مزاحم کار باشد، یک طراح باید بجای تکیه صرف بر ذهنیات شخصی خود این قابلیت را داشته باشد که خود را بجای کاربر نهایی فرض کند و از آن موضع بررسی کند که چه امکانات و نحوه عملکردی برای این دستگاه مفیدتر و کاربردی تر است و برای احراز این مسئله تا حد مقدور با کاربران و اپراتورهایی که قرار است با آن دستگاه یا نرم افزار کار کنند، تعامل برقرار کند. در سال های گذشته با استفاده از همین روش فرض کردن خود بجای کاربر نهایی و برقراری تعامل با آنها در هنگام طراحی امکانات سخت افزاری و نرم افزاری، نتایج بسیار خوبی حاصل شده و در نهایت منجر به عملکردهایی شده که بسیار فراتر از انتظارات اولیه بوده و حتی خود سفارش دهندگان اولیه هم از ابتدا به ذهنشان نمی رسیده که چنین امکاناتی می توانسته در این دستگاه یا نرم افزار وجود داشته باشد.
@KnowledgePlus
مشترک بودن فرمان های Run و Stop در کنترلرهای صنعتی و تبعات احتمالی آن:
فرض کنیم در یک دستگاه صنعتی با شروع به کار دستگاه مثلا یک جک حرکت می کند یا موتوری شروع به چرخش می کند یا گیوتینی عمل می کند و موارد مشابهی که اگر اشتباهی در راه اندازی دستگاه بوجود بیاید می تواند منجر به وارد شدن خسارت یا آسیب به کاربران دستگاه شود. برای کنترل چنین دستگاه هایی استفاده از روش Toggle کردن یک کلید یا ناحیه ای در صفحه تاچ به این ترتیب که یک بار به عنوان فرمان Run (یا Start) و بار دوم به عنوان فرمان Stop عمل کند، به هیچ عنوان مناسب نیست. زیرا ممکن است به دلیل عواملی مانند سر و صدا یا دید نداشتن اپراتور نسبت به وضعیت عملکرد فعلی دستگاه یا خستگی و مانند آن، اپراتور با این تصور که دستگاه از قبل در حال کار است، کلید مشترک Run/Stop را فشار دهد تا دستگاه را متوقف کند. اما بصورت سهوی باعث راه اندازی ناخواسته دستگاه و ایجاد آسیب و خسارت شود. اما وقتی فرمان های Run و Stop مجزا از یکدیگر باشند، اپراتور برای شروع و توقف دستگاه دو محل مختلف را لمس خواهد کرد و چنین خطایی رخ نخواهد داد. بنابراین اکیدا توصیه می شود در طراحی چنین سیستم هایی برای عملکردهای Run و Stop دو کلید مجزا در نظر گرفته شود.
@KnowledgePlus
فرض کنیم در یک دستگاه صنعتی با شروع به کار دستگاه مثلا یک جک حرکت می کند یا موتوری شروع به چرخش می کند یا گیوتینی عمل می کند و موارد مشابهی که اگر اشتباهی در راه اندازی دستگاه بوجود بیاید می تواند منجر به وارد شدن خسارت یا آسیب به کاربران دستگاه شود. برای کنترل چنین دستگاه هایی استفاده از روش Toggle کردن یک کلید یا ناحیه ای در صفحه تاچ به این ترتیب که یک بار به عنوان فرمان Run (یا Start) و بار دوم به عنوان فرمان Stop عمل کند، به هیچ عنوان مناسب نیست. زیرا ممکن است به دلیل عواملی مانند سر و صدا یا دید نداشتن اپراتور نسبت به وضعیت عملکرد فعلی دستگاه یا خستگی و مانند آن، اپراتور با این تصور که دستگاه از قبل در حال کار است، کلید مشترک Run/Stop را فشار دهد تا دستگاه را متوقف کند. اما بصورت سهوی باعث راه اندازی ناخواسته دستگاه و ایجاد آسیب و خسارت شود. اما وقتی فرمان های Run و Stop مجزا از یکدیگر باشند، اپراتور برای شروع و توقف دستگاه دو محل مختلف را لمس خواهد کرد و چنین خطایی رخ نخواهد داد. بنابراین اکیدا توصیه می شود در طراحی چنین سیستم هایی برای عملکردهای Run و Stop دو کلید مجزا در نظر گرفته شود.
@KnowledgePlus
با راه اندازی یک میکروکنترلر در چه مرحله ای از توانایی قرار داریم؟
فرض کنیم که یک خانواده از میکروکنترلرها را انتخاب کرده و با استفاده از رجیسترها و یا کتابخانه های آماده، سخت افزارهای مختلف آن مانند پورت و تایمر و ADC و USART و ... را راه اندازی کنیم. آیا رسیدن به چنین مرحله ای لزوما به معنای توانایی در نوشتن برنامه های پیچیده برای استفاده از قابلیت های آن میکروکنترلر است؟ پاسخ به این سوال منفی است. همانطور که آشنایی و توانایی در به دست گرفتن قلم و خط کشیدن روی کاغذ به معنای نقاش و طراح و خطاط شدن نیست و باید آن قلم را سالها روی کاغذ چرخاند و به حرکت در آورد تا مهارت و توانایی لازم کسب شود، راه اندازی سخت افزار هم تنها بخش کوچکی از مسیری است که برای طراح و برنامه نویسی حرفه ای شدن باید طی شود. همانطور که قبلا هم چند بار تاکید شده در این رابطه اصلی ترین عامل، تمرین و ممارست و نوشتن هزاران خط برنامه اصولی و پیاده سازی فلوچارت ها و الگوریتم ها و پروتکل های مختلف است که زمان بسیار بسیار بیشتری را در مقایسه با مرحله راه اندازی سخت افزار می طلبد. بنابراین دوستانی که عزم خود را برای طی این مسیر جزم کرده اند و از تجربه کافی هم برخوردار نیستند، به این نکته توجه داشته باشند که راه اندازی سخت افزار تازه ابتدای راه است و پیاده سازی کاربردها بر اساس این سخت افزار مرحله اصلی تری است که باید وقت اساسی را برای آن صرف کنند.
@KnowledgePlus
فرض کنیم که یک خانواده از میکروکنترلرها را انتخاب کرده و با استفاده از رجیسترها و یا کتابخانه های آماده، سخت افزارهای مختلف آن مانند پورت و تایمر و ADC و USART و ... را راه اندازی کنیم. آیا رسیدن به چنین مرحله ای لزوما به معنای توانایی در نوشتن برنامه های پیچیده برای استفاده از قابلیت های آن میکروکنترلر است؟ پاسخ به این سوال منفی است. همانطور که آشنایی و توانایی در به دست گرفتن قلم و خط کشیدن روی کاغذ به معنای نقاش و طراح و خطاط شدن نیست و باید آن قلم را سالها روی کاغذ چرخاند و به حرکت در آورد تا مهارت و توانایی لازم کسب شود، راه اندازی سخت افزار هم تنها بخش کوچکی از مسیری است که برای طراح و برنامه نویسی حرفه ای شدن باید طی شود. همانطور که قبلا هم چند بار تاکید شده در این رابطه اصلی ترین عامل، تمرین و ممارست و نوشتن هزاران خط برنامه اصولی و پیاده سازی فلوچارت ها و الگوریتم ها و پروتکل های مختلف است که زمان بسیار بسیار بیشتری را در مقایسه با مرحله راه اندازی سخت افزار می طلبد. بنابراین دوستانی که عزم خود را برای طی این مسیر جزم کرده اند و از تجربه کافی هم برخوردار نیستند، به این نکته توجه داشته باشند که راه اندازی سخت افزار تازه ابتدای راه است و پیاده سازی کاربردها بر اساس این سخت افزار مرحله اصلی تری است که باید وقت اساسی را برای آن صرف کنند.
@KnowledgePlus
نکته ای در تعمیرات منابع تغذیه سوییچینگ:
در منابع تغذیه سوییچینگ صنعتی بارها مشاهده شده که به دلیل اتمام عمر و خرابی خازن های الکترولیتی که در معرض پالس های جریان هستند، ولتاژ خروجی دچار افت شده و با تعویض خازن های مذکور ولتاژ خروجی منبع به وضعیت عادی بازگشته است.
@KnowledgePlus
در منابع تغذیه سوییچینگ صنعتی بارها مشاهده شده که به دلیل اتمام عمر و خرابی خازن های الکترولیتی که در معرض پالس های جریان هستند، ولتاژ خروجی دچار افت شده و با تعویض خازن های مذکور ولتاژ خروجی منبع به وضعیت عادی بازگشته است.
@KnowledgePlus
اتصال Quadrature encoder به XMEGA محدود به پین های خاصی نیست و می توانیم از پین های متوالی هر یک از پورت های A تا F برای این منظور استفاده کنیم. این میکروکنترلر از اتصال 3 عدد Quadrature encoder بصورت سخت افزاری پشتیبانی می کند.
@KnowledgePlus
@KnowledgePlus
نکاتی از زبان برنامه نویسی C:
برای نام گذاری متغیرها و توابع و ماکروها و ... یک سری قواعد نام گذاری شناخته شده وجود دارد که برنامه نویسان حرفه ای آنها را رعایت می کنند. برای آگاهی از جزییات این قواعد نام گذاری، در مورد Naming conventions در C مطالعه کنید.
@KnowledgePlus
برای نام گذاری متغیرها و توابع و ماکروها و ... یک سری قواعد نام گذاری شناخته شده وجود دارد که برنامه نویسان حرفه ای آنها را رعایت می کنند. برای آگاهی از جزییات این قواعد نام گذاری، در مورد Naming conventions در C مطالعه کنید.
@KnowledgePlus
مطلب زیر در سال 1391 در یکی از انجمن ها نوشته شد و به لحاظ اینکه ممکن است برای برخی مخاطبین مفید باشد در اینجا قرار داده می شود:
در یک سیستم مبتنی بر AVR و دارای ورودی های میکروسوئیچ و با حجم پردازش تا مرزهای توان CPU، گزارش شد که در مواقعی میکروسوییچ ها از کار می افتند و عمل نمی کنند. برای دست یافتن به منبع مشکل، مراحل زیر طی شد:
1- در ابتدا طبقه ورودی که میکرسوئیچ ها از طریق آن به میکروکنترلر متصل بودند، بررسی و مشخص شد که مدارات سالم هستند.
2- مسئله Hang کردن میکروکنترلر مورد بررسی قرار گرفت که معلوم شد در زمان بروز مشکل، میکروکنترلر سایر وظایف خود را به درستی انجام می دهد و بنابراین مسئله Hang کردن منتفی است.
3- با توجه به نویز القایی شدید ناشی از سروموتور ها و اینورتر و ... روی بدنه دستگاه، اصلاحاتی در نحوه اتصال ورودی ها برای حفاظت از اسپایک های احتمالی ایجاد شد که عملا نتیجه ای نداشت.
4- در مرحله بعد این احتمال بررسی شد که شاید به هر دلیلی پورت متصل به میکروسوییچ ها از کار می افتد. سوال مطرح شده این بود که چرا سایر پورت ها از کار نمی افتند. بنابراین ورودی ها به پورت دیگری منتقل شدند. اما روی پورت دیگر هم همین مشکل برقرار بود.
5- در مرحله بعد تغییری در برنامه اعمال شد، به این ترتیب که اطلاعات خوانده شده از ورودی ها را روی خروجی های دیگری ظاهر کند تا به این ترتیب بتوان اطلاع حاصل کرد که در زمان ایجاد این مشکل، آیا اطلاعات درست از پین های ورودی خوانده می شود یا خیر. با آزمایش های انجام شده مشخص شد که در زمان بوجود آمدن این مشکل، آنچه در خروجی منعکس می شود، نشان دهنده ورودی های واقعی نیست. به عبارت دیگر ورودی ها به صورت صحیح خوانده نمی شوند.
6- از مرحله قبل می توان اینگونه نتیجه گیری کرد که یا بافر ورودی پورت از کار می افتد که وضعیت نادرست روی خروجی منعکس می شود و یا محتوای پورت اصولا خوانده نمی شود. با توجه به مکان قرارگیری خواندن پورت در روتین وقفه تایمر و وجود وقفه دیگری با اولویت استاتیک بالاتر (آدرس کمتر در جدول بردار وقفه)، این احتمال قوی مطرح شد که به دلیل وقوع پی در پی وقفه دیگر با اولویت استاتیک بالاتر، برنامه هیچ گاه نمی تواند وارد وقفه تایمر شود و بنابراین روند خواندن پورت مختل می شود. برای بررسی این مسئله بجای استفاده از وقفه، از روش Polling برای چک کردن Flag وقفه تایمر و سپس خواندن پورت استفاده شد که در این حالت تقاضای پی در پی وقفه ها نمی تواند مانع اجرای برنامه در حلقه اصلی شود و بعد از هر وقفه حداقل یک دستور اجرا می شود. بعد از پیاده سازی این روش، خوشبختانه مشکل برطرف شد که نشان دهنده متوقف شدن روند اجرای وقفه تایمر به دلیل تقاضای وقفه های مکرر توسط یک وقفه با اولویت استاتیک بالاتر است.
7- نتیجه گیری از مراحل بالا: این مشکل به دلیل تقاضاهای مکرر وقفه و عدم توانایی CPU برای پاسخگویی به وقفه با اولویت پایین تر ایجاد شد و برای برطرف کردن آن، عملیات خواندن پورت در فواصل زمانی مشحص که از اولویت زمانی بسیار بالایی هم برخوردار نبود، از روتین وقفه به حلقه اصلی منتقل شد.
@KnowledgePlus
در یک سیستم مبتنی بر AVR و دارای ورودی های میکروسوئیچ و با حجم پردازش تا مرزهای توان CPU، گزارش شد که در مواقعی میکروسوییچ ها از کار می افتند و عمل نمی کنند. برای دست یافتن به منبع مشکل، مراحل زیر طی شد:
1- در ابتدا طبقه ورودی که میکرسوئیچ ها از طریق آن به میکروکنترلر متصل بودند، بررسی و مشخص شد که مدارات سالم هستند.
2- مسئله Hang کردن میکروکنترلر مورد بررسی قرار گرفت که معلوم شد در زمان بروز مشکل، میکروکنترلر سایر وظایف خود را به درستی انجام می دهد و بنابراین مسئله Hang کردن منتفی است.
3- با توجه به نویز القایی شدید ناشی از سروموتور ها و اینورتر و ... روی بدنه دستگاه، اصلاحاتی در نحوه اتصال ورودی ها برای حفاظت از اسپایک های احتمالی ایجاد شد که عملا نتیجه ای نداشت.
4- در مرحله بعد این احتمال بررسی شد که شاید به هر دلیلی پورت متصل به میکروسوییچ ها از کار می افتد. سوال مطرح شده این بود که چرا سایر پورت ها از کار نمی افتند. بنابراین ورودی ها به پورت دیگری منتقل شدند. اما روی پورت دیگر هم همین مشکل برقرار بود.
5- در مرحله بعد تغییری در برنامه اعمال شد، به این ترتیب که اطلاعات خوانده شده از ورودی ها را روی خروجی های دیگری ظاهر کند تا به این ترتیب بتوان اطلاع حاصل کرد که در زمان ایجاد این مشکل، آیا اطلاعات درست از پین های ورودی خوانده می شود یا خیر. با آزمایش های انجام شده مشخص شد که در زمان بوجود آمدن این مشکل، آنچه در خروجی منعکس می شود، نشان دهنده ورودی های واقعی نیست. به عبارت دیگر ورودی ها به صورت صحیح خوانده نمی شوند.
6- از مرحله قبل می توان اینگونه نتیجه گیری کرد که یا بافر ورودی پورت از کار می افتد که وضعیت نادرست روی خروجی منعکس می شود و یا محتوای پورت اصولا خوانده نمی شود. با توجه به مکان قرارگیری خواندن پورت در روتین وقفه تایمر و وجود وقفه دیگری با اولویت استاتیک بالاتر (آدرس کمتر در جدول بردار وقفه)، این احتمال قوی مطرح شد که به دلیل وقوع پی در پی وقفه دیگر با اولویت استاتیک بالاتر، برنامه هیچ گاه نمی تواند وارد وقفه تایمر شود و بنابراین روند خواندن پورت مختل می شود. برای بررسی این مسئله بجای استفاده از وقفه، از روش Polling برای چک کردن Flag وقفه تایمر و سپس خواندن پورت استفاده شد که در این حالت تقاضای پی در پی وقفه ها نمی تواند مانع اجرای برنامه در حلقه اصلی شود و بعد از هر وقفه حداقل یک دستور اجرا می شود. بعد از پیاده سازی این روش، خوشبختانه مشکل برطرف شد که نشان دهنده متوقف شدن روند اجرای وقفه تایمر به دلیل تقاضای وقفه های مکرر توسط یک وقفه با اولویت استاتیک بالاتر است.
7- نتیجه گیری از مراحل بالا: این مشکل به دلیل تقاضاهای مکرر وقفه و عدم توانایی CPU برای پاسخگویی به وقفه با اولویت پایین تر ایجاد شد و برای برطرف کردن آن، عملیات خواندن پورت در فواصل زمانی مشحص که از اولویت زمانی بسیار بالایی هم برخوردار نبود، از روتین وقفه به حلقه اصلی منتقل شد.
@KnowledgePlus
در الکترونیک و برنامه نویسی وقتی به یک موضوع بسیار پرکاربرد و دارای خواهان زیاد، ولی سخت و مبهم می رسیم که کمتر کسی توان و حوصله کار کردن روی آن را دارد، جا دارد که به این احتمال فکر کنیم که شاید این یکی از همان موضوعاتی است که صرف وقت زیاد روی آن و دست یافتن به زیر و بم آن می تواند یک جهش اقتصادی غیر معمول و فوق العاده را برای ما ایجاد کند.
@KnowledgePlus
@KnowledgePlus
مشاهدات نشان می دهد که در صنایع کشور و از جمله صنایع خصوصی، دریایی از کار و صورت مسئله های بر زمین مانده وجود دارد که بسیاری از آنها حتی با دانش و اطلاعات چند دهه قبل هم قابل حل هستند. حال اینکه چه مشکلی در این میان وجود دارد که یک گروه که در حال کار با آخرین تکنولوژی های روز هستند عملا بیکارند و نمی توانند لینک و ارتباط لازم را با این صنایع برای رفع نیازهای آنها برقرار کنند، مسئله ای است که جای تامل و بررسی دارد.
@KnowledgePlus
@KnowledgePlus
به علاقه مندان مبحث ارتباط Ethernet یادآوری می شود که موضوع مسابقه علمی سال 95 آموزش Ethernet بوده و نتایج کار برندگان مسابقه شامل فایل های آموزشی و سورس های مرتبط با این مبحث در سایت قابل دسترسی است.
@KnowledgePlus
@KnowledgePlus
یک تمرین کاربردی در برنامه نویسی میکروکنترلر:
یک تمرین کاربردی در برنامه نویسی میکروکنترلرها، کدنویسی برای پیاده سازی منوها است. برای طرح یک مثال در این مورد فرض می کنیم که از یکی از انواع LCD و صفحه کلید (یا تاچ) با شش کلید Enter و Esc و Up و Down و Left و Right به عنوان سخت افزار پایه استفاده شده باشد. با این پیش فرض، پیاده سازی عملکرد زیر مورد نظر است:
1- روی صفحه نمایش یک منوی اصلی با چند سطر نمایش داده می شود. با کلید های Up یا Down می توان بین سطرهای مختلف این منو حرکت کرد. برای فعال نشان دادن هر سطر می توان از روش هایی مانند معکوس کردن پیکسل های آن سطر در LCD های گرافیکی یا نمایش کارکترهایی نظیر * یا > در کنار سطر فعال برای LCD های کاراکتری استفاده کرد.
2- با فشار دادن Enter روی هر سطر فعال، صفحه تنظیمات متناظر با آن سطر به همراه پارامترهایش نمایش داده می شود. مقدار اولیه پارامترها از حافظه eeprom تامین می شوند.
3- برای حرکت بین پارامترهای یک صفحه از کلیدهای Left و Right و برای تنظیم مقدار آنها در محدوده مجاز از کلیدهای Up و Down استفاه می شود.
4- بعد از تنظیم پارامترها در مقدار دلخواه، از کلید Esc برای خروج از صفحه و بازگشت به منوی اصلی استفاده می شود. در هنگام خروج از صفحه چنانچه پارامتری تغییر کرده باشد، مقدار آن در محل متناظر در حافظه eeprom دخیره می شود تا بعد از خاموش شدن سیستم همچنان محفوظ باقی بماند.
5- در هر صفحه ممکن است صفحات داخلی تری هم وجود داشته باشند که برای وارد شدن به هر مرحله می توان از کلید Enter و برای خروج به مرحله قبلی از کلید Esc استفاده کرد.
مثال اخیر تنها یک شکل ساده از برنامه نویسی منوها است و در کاربردهای عملی منطق برنامه می تواند بسیار پیچیده تر از موارد شرح داده شده باشد.
@KnowledgePlus
یک تمرین کاربردی در برنامه نویسی میکروکنترلرها، کدنویسی برای پیاده سازی منوها است. برای طرح یک مثال در این مورد فرض می کنیم که از یکی از انواع LCD و صفحه کلید (یا تاچ) با شش کلید Enter و Esc و Up و Down و Left و Right به عنوان سخت افزار پایه استفاده شده باشد. با این پیش فرض، پیاده سازی عملکرد زیر مورد نظر است:
1- روی صفحه نمایش یک منوی اصلی با چند سطر نمایش داده می شود. با کلید های Up یا Down می توان بین سطرهای مختلف این منو حرکت کرد. برای فعال نشان دادن هر سطر می توان از روش هایی مانند معکوس کردن پیکسل های آن سطر در LCD های گرافیکی یا نمایش کارکترهایی نظیر * یا > در کنار سطر فعال برای LCD های کاراکتری استفاده کرد.
2- با فشار دادن Enter روی هر سطر فعال، صفحه تنظیمات متناظر با آن سطر به همراه پارامترهایش نمایش داده می شود. مقدار اولیه پارامترها از حافظه eeprom تامین می شوند.
3- برای حرکت بین پارامترهای یک صفحه از کلیدهای Left و Right و برای تنظیم مقدار آنها در محدوده مجاز از کلیدهای Up و Down استفاه می شود.
4- بعد از تنظیم پارامترها در مقدار دلخواه، از کلید Esc برای خروج از صفحه و بازگشت به منوی اصلی استفاده می شود. در هنگام خروج از صفحه چنانچه پارامتری تغییر کرده باشد، مقدار آن در محل متناظر در حافظه eeprom دخیره می شود تا بعد از خاموش شدن سیستم همچنان محفوظ باقی بماند.
5- در هر صفحه ممکن است صفحات داخلی تری هم وجود داشته باشند که برای وارد شدن به هر مرحله می توان از کلید Enter و برای خروج به مرحله قبلی از کلید Esc استفاده کرد.
مثال اخیر تنها یک شکل ساده از برنامه نویسی منوها است و در کاربردهای عملی منطق برنامه می تواند بسیار پیچیده تر از موارد شرح داده شده باشد.
@KnowledgePlus
استفاده از شماره شناسایی منحصر به فرد میکروکنترلر برای جلوگیری از کپی کردن غیر مجاز برنامه:
به جهت مقابله با سارقان اطلاعات و حتی در صورت باز کردن قفل(Lock) میکروکنترلر به روش های خاص، با استفاده از شماره شناسایی منحصر به فرد میکروکنترلر می توان محتوای حافظه flash را برای کپی کردن روی میکروکنترلرهای دیگر غیرقابل استفاده کرد. در مقاله زیر به روشی برای این کار اشاره شده است.
https://knowledgeplus.ir/userfiles/Unique_ID_1.pdf
@KnowledgePlus
به جهت مقابله با سارقان اطلاعات و حتی در صورت باز کردن قفل(Lock) میکروکنترلر به روش های خاص، با استفاده از شماره شناسایی منحصر به فرد میکروکنترلر می توان محتوای حافظه flash را برای کپی کردن روی میکروکنترلرهای دیگر غیرقابل استفاده کرد. در مقاله زیر به روشی برای این کار اشاره شده است.
https://knowledgeplus.ir/userfiles/Unique_ID_1.pdf
@KnowledgePlus
احترام به مالکیت معنوی از جمله مشخصه های فرهنگی کشورهای پیشرفته است.تاریخ انتشار اولیه این پست:
https://t.iss.one/KnowledgePlus/29
مربوط به 8 ژانویه 2016 است. اما می توان کانال های پرمخاطبی را مشاهده کرد که بدون ذکر مرجع اقدام به انتشار امثال این مطلب و مشابه آن می کنند. هرچند این نوع مطالب برای استفاده دیگران منتشر می شوند و هدف به اشتراک گذاری اطلاعات است. اما علت نشان دادن حساسیت برای ذکر مرجع، بالا بردن فرهنگ احترام به مالکیت معنوی است که متاسفانه عدم رعایت آن یکی از ضعف های فرهنگی جامعه ما است. به مالکیت معنوی احترام بگذاریم.
@KnowledgePlus
https://t.iss.one/KnowledgePlus/29
مربوط به 8 ژانویه 2016 است. اما می توان کانال های پرمخاطبی را مشاهده کرد که بدون ذکر مرجع اقدام به انتشار امثال این مطلب و مشابه آن می کنند. هرچند این نوع مطالب برای استفاده دیگران منتشر می شوند و هدف به اشتراک گذاری اطلاعات است. اما علت نشان دادن حساسیت برای ذکر مرجع، بالا بردن فرهنگ احترام به مالکیت معنوی است که متاسفانه عدم رعایت آن یکی از ضعف های فرهنگی جامعه ما است. به مالکیت معنوی احترام بگذاریم.
@KnowledgePlus
یکی از مخاطبین در مورد مقاله استفاده از شماره شناسایی میکروکنترلر، نظری را قریب به این مضمون مطرح کرده اند که با استفاده از تحلیل عملکرد برنامه و تغییر در کدهای اسمبلی می توان باز هم از محتوای کپی شده استفاده کرد. در پاسخ باید گفت که اولا در مقاله مذکور اصولا پیش فرضی به عنوان تحلیل کد و تغییر در محتوای آن مطرح نبوده و فرض بر این بوده که محتوای کپی شده عینا روی میکروکنترلر دیگری ریخته شود. برای کپی کردن محتوای میکروکنترلرها معمولا کسانی دست به این نوع سرقت اطلاعات می زنند که خود فاقد دانش لازم در این حد باشند. نکته دوم این است که با فرض در نظر گرفتن چنین پیش فرضی باز هم می توان مکانیزم استفاده از شماره شناسایی را بصورت چند مرحله ای و بسیار پیچیده تر از روش توضیح داده شده پیاده سازی کرد به نحوی که تحلیل سورس و تغییر در آن بسیار زمان بر تر و پر هزینه تر باشد و در عمل به صرفه نباشد. در حال حاضر نرم افزارهایی وجود دارند که به همین روش ها کرک شده اند. اما کاربران در عمل متوجه می شوند که علیرغم این که نرم افزار ظاهرا کار می کند اما در برخی مراحل وظیفه خود را به درستی انجام نمی دهد و مثلا محاسبات آن غلط است یا تبدیلی را درست انجام نمی دهد و مواردی از این قبیل. برای یک میکروکنترلر هم می توان کدها را بصورتی نوشت که این شماره شناسایی در صحت عملکرد خروجی کدها هم دخالت داده شود و در صورت عدم مطابقت شماره شناسایی، خروجی کد ظاهرا کار کند اما وظیفه خود را به درستی انجام ندهد و مثلا محاسبه ای را بصورت غلط انجام دهد یا رجیستری درست مقدار دهی نشود و سایر موارد مشابه. استفاده از چنین روش هایی می تواند زمان و هزینه برای تحلیل جزییات عملکرد یک کد در مراحل مختلف آن را چنان افرایش دهد که انجام آن توسط سارقان اطلاعات به هیچ وجه برای آنها به صرفه نباشد.
@KnowledgePlus
@KnowledgePlus