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
مطلب زیر در سال 1391 در یکی از انجمن ها نوشته شد و به لحاظ اینکه ممکن است برای برخی مخاطبین مفید باشد در اینجا قرار داده می شود:

در یک سیستم مبتنی بر AVR و دارای ورودی های میکروسوئیچ و با حجم پردازش تا مرزهای توان CPU، گزارش شد که در مواقعی میکروسوییچ ها از کار می افتند و عمل نمی کنند. برای دست یافتن به منبع مشکل، مراحل زیر طی شد:

1- در ابتدا طبقه ورودی که میکرسوئیچ ها از طریق آن به میکروکنترلر متصل بودند، بررسی و مشخص شد که مدارات سالم هستند.

2- مسئله Hang کردن میکروکنترلر مورد بررسی قرار گرفت که معلوم شد در زمان بروز مشکل، میکروکنترلر سایر وظایف خود را به درستی انجام می دهد و بنابراین مسئله Hang کردن منتفی است.

3- با توجه به نویز القایی شدید ناشی از سروموتور ها و اینورتر و ... روی بدنه دستگاه، اصلاحاتی در نحوه اتصال ورودی ها برای حفاظت از اسپایک های احتمالی ایجاد شد که عملا نتیجه ای نداشت.

4- در مرحله بعد این احتمال بررسی شد که شاید به هر دلیلی پورت متصل به میکروسوییچ ها از کار می افتد. سوال مطرح شده این بود که چرا سایر پورت ها از کار نمی افتند. بنابراین ورودی ها به پورت دیگری منتقل شدند. اما روی پورت دیگر هم همین مشکل برقرار بود.

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

6- از مرحله قبل می توان اینگونه نتیجه گیری کرد که یا بافر ورودی پورت از کار می افتد که وضعیت نادرست روی خروجی منعکس می شود و یا محتوای پورت اصولا خوانده نمی شود. با توجه به مکان قرارگیری خواندن پورت در روتین وقفه تایمر و وجود وقفه دیگری با اولویت استاتیک بالاتر (آدرس کمتر در جدول بردار وقفه)، این احتمال قوی مطرح شد که به دلیل وقوع پی در پی وقفه دیگر با اولویت استاتیک بالاتر، برنامه هیچ گاه نمی تواند وارد وقفه تایمر شود و بنابراین روند خواندن پورت مختل می شود. برای بررسی این مسئله بجای استفاده از وقفه، از روش Polling برای چک کردن Flag وقفه تایمر و سپس خواندن پورت استفاده شد که در این حالت تقاضای پی در پی وقفه ها نمی تواند مانع اجرای برنامه در حلقه اصلی شود و بعد از هر وقفه حداقل یک دستور اجرا می شود. بعد از پیاده سازی این روش، خوشبختانه مشکل برطرف شد که نشان دهنده متوقف شدن روند اجرای وقفه تایمر به دلیل تقاضای وقفه های مکرر توسط یک وقفه با اولویت استاتیک بالاتر است.

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

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

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

@KnowledgePlus
به علاقه مندان مبحث ارتباط Ethernet یادآوری می شود که موضوع مسابقه علمی سال 95 آموزش Ethernet بوده و نتایج کار برندگان مسابقه شامل فایل های آموزشی و سورس های مرتبط با این مبحث در سایت قابل دسترسی است.

@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
فرمولی برای موفقیت در الکترونیک در چند کلمه:

تمرکز روی کاربرد بجای تمرکز روی ابزار.

@KnowledgePlus
استفاده از شماره شناسایی منحصر به فرد میکروکنترلر برای جلوگیری از کپی کردن غیر مجاز برنامه:

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

https://knowledgeplus.ir/userfiles/Unique_ID_1.pdf

@KnowledgePlus
احترام به مالکیت معنوی از جمله مشخصه های فرهنگی کشورهای پیشرفته است.تاریخ انتشار اولیه این پست:

https://t.iss.one/KnowledgePlus/29

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

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

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

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

FRESULT f_read ( ... )

جزییات FRESULT به این صورت تعریف شده است که هر مقدار بازگشتی مترادف با یکی از وضعیت های ممکن بعد از اجرای تابع است. برای توضیح بیشتر به فایل های ff.c و ff.h در کتابخانه مراجعه کنید:

typedef enum {
FR_OK = 0,
FR_DISK_ERR,
FR_INT_ERR,
FR_NOT_READY,
FR_NO_FILE,
FR_NO_PATH,
FR_INVALID_NAME,
FR_DENIED,
FR_EXIST,
FR_INVALID_OBJECT,
FR_WRITE_PROTECTED,
FR_INVALID_DRIVE,
FR_NOT_ENABLED,
FR_NO_FILESYSTEM,
FR_MKFS_ABORTED,
FR_TIMEOUT,
FR_LOCKED,
FR_NOT_ENOUGH_CORE,
FR_TOO_MANY_OPEN_FILES,
FR_INVALID_PARAMETER
} FRESULT;

@KnowledgePlus
نوشتن یک برنامه پیچیده و مفصل و چندین هزار خطی بدون تدوین چارچوب کلی عملکرد نرم افزار با استفاده از روش هایی مانند فلوچارت یا شبه کد (Pseudocode) معمولا به نتایج خوبی منجر نمی شود و بسیار مشاهده می شود که افراد کم تجربه ای که برای نوشتن چنین برنامه هایی بدون در نظر گرفتن یک نقشه راه کلی، از خط اول برنامه شروع به کدنویسی می کنند، در بین راه دچار مشکل می شوند و برنامه آنها یا به نتیجه نمی رسد و یا توام با باگ های مختلف است.

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

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

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

typedef enum
{
TRUE,
FALSE,
NONE
}VOTE_TYPE;

VOTE_TYPE vote;

...

if((vote==FALSE)||(vote==NONE)) while(1);
...

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

چقدر و چند ساعت برای تمرین و کسب مهارت و تجربه آموزی بصورت عملی تاکنون وقت گذاشته ای؟

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

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

@KnowledgePlus
با توجه به اتمام موجودی برد آموزشی XMEGA و عدم تصمیم برای تولید مجدد این برد به دلیل اشتغالات کاری، دوستانی که قصد تهیه این برد را دارند می توانند با استفاده از فایل pcb که در سایت قرار داده شده نسبت به ساخت آن اقدام کنند. فایل pcb در لینک زیر قرار دارد:

https://knowledgeplus.ir/download.aspx

@KnowledgePlus
یک صحنه با شکوه در رشته الکترونیک :

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

@KnowledgePlus
برخی از دوستان تقاضاهایی مبنی بر تشکیل گروه تلگرام یا ایجاد شرایطی برای گفتگو و طرح سوال از طریق تلگرام را مطرح می کنند که متاسفانه به دلیل کمبود وقت و کثرت افراد فعلا چنین امکانی وجود ندارد.

@KnowledgePlus
نکته ای در مورد جذب سرمایه گذار برای کسانی که طرح هایی را برای تولید دارند:

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

@KnowledgePlus