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
یکی از نکاتی که در کار با ابزارهایی مانند میکروکنترلرها باید مورد توجه قرار بگیرد این است که رسیدن به مرحله راه اندازی اجزای سخت افزار ممکن است درصد بسیار کمی از طی مسیر برای انجام یک پروژه ارزشمند را به خود اختصاص دهد و تصور اینکه راه اندازی یک مجموعه از سخت افزارها لزوما به معنای قابلیت انجام پروژه های سنگین و پیچیده با آن امکانات است، در بسیاری موارد تصور درستی نیست. به عنوان مثال فرض کنیم که در یک مجموعه سخت افزاری شامل 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
مثالی از vb6 برای نحوه تنظیم Parity در ارتباط 9 بیتی:

پیرو مطلب قبلی (https://telegram.me/KnowledgePlus/273) در مورد ارتباط 9 بیتی، با فرض Baud Rate=9600 bps و Data=8 و Stop bit=1 برای ارسال بیت نهم برابر با 1 می توان این تنظیم را قبل از ارسال از طرف PC انجام داد:

MSComm1.Settings = "9600,m,8,1"

و برای ارسال بیت نهم برابر با 0 می توان این تنظیم را قبل از ارسال از طرف PC انجام داد:

MSComm1.Settings = "9600,s,8,1"

و در طول برنامه بر حسب نیاز با تغییر بین این دو وضعیت بیت نهم را 0 یا 1 ارسال کرد.

@KnowledgePlus
استفاده از ترکیب مقایسه کننده آنالوگ و DAC بجای ADC های سریع:

در برخی از کاربردها که سنجش سریع وضعیت یک سیگنال آنالوگ نسبت به یک سطح ولتاژ متغیر مورد نظر باشد، بجای استفاده از ADC های سریع می توان از ترکیب مقایسه کننده آنالوگ با DAC استفاده کرد. در این حالت DAC سطح ولتاژ مورد نیاز به عنوان مبنای مقایسه را تعیین می کند که خروجی آن هم می تواند بسته به نیاز تغییر کند. مقایسه کننده آنالوگ هم که نسبت به ADC های سریع دارای قیمت بسیار کمتری است، ولتاژ ورودی را با خروجی DAC مقایسه می کند که با این روش می توان با هزینه کم و سرعت بالا وضعیت یک سیگنال نسبت به یک ولتاژ مبنا را از نظر کوچکتر یا بزرگتر بودن تعیین کرد. از این تکنیک در بسیاری از IC های درایور موتور (مثلا A4988) برای فیدبک گرفتن از جریان و کنترل آن استفاده می شود.

@KnowledgePlus
حداکثر سرعت تغییرات پورت در AVR چقدر است؟

در خانواده AVR با استفاده از دستور اسمبلی OUT می توان تنها در یک سیکل کلاک cpu، وضعیت یک پورت را تغییر داد. مثلا در کد زیر در یک مرحله از برنامه در فاصله 6 سیکل کلاک، 6 بار وضعیت کلیه بیت های PORTA تغییر می کنند و 0 و 1 می شوند :
CLR R16
SER R17
...
OUT PORTA,R16
OUT PORTA,R17
OUT PORTA,R16
OUT PORTA,R17
OUT PORTA,R16
OUT PORTA,R17
....

با استفاده از دستورات SBI و CBI هم در برخی از شماره ها در دو سیکل و در برخی شماره های دیگر تنها در یک سیکل کلاک cpu می توان وضعیت یک پین را set یا clear کرد. برای اطلاع از زمان اجرای این دستورالعمل ها باید به بخش Instruction Set Summary در datasheet شماره مورد نظر مراجعه شود. مثال:

SBI PORTA,0
CBI PORTC,7

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

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

@KnowledgePlus
معرفی یک نرم افزار مفید برای تبدیل فایل های محتوی data به آرایه معادل در C:

نرم افزار xxd.exe می تواند برای تبدیل اطلاعات موجود در فایل های حاوی data به آرایه معادل در زبان C مورد استفاده قرار بگیرد که این امکان برای پیاده سازی برخی از کاربردها مانند پخش صدا از روی flash میکروکنترلر و مواردی نظیر آن بسیار مفید است. اگر فرض کنیم فایل مبدا که اطلاعات آن قرار است به آرایه تبدیل شود دارای نام data.bin و فایل مقصد که آرایه معادل بصورت متنی در آن ذخیره می شود دارای نام data.c باشد، برای تبدیل باید در خط فرمان دستور زیر را اجرا کنیم:

xxd -i data.bin data.c

بعد از ایجاد فایل data.c می توان آرایه موجود در آن را کپی کرد و به شکل مناسب در سورس برنامه اصلی قرار داد.

لینک دانلود فایل بصورت zip شده:

https://knowledgeplus.ir/userfiles/xxd.zip

توضیح بیشتر:

https://www.avrfreaks.net/comment/642033#comment-642033

@KnowledgePlus
ایجاد dead time بصورت نرم افزاری در میکروکنترلرهایی که فاقد امکان اضافه کردن آن به شکل موج هستند:

برای اعمال فرمان به سوییچ های نیمه هادی در مداراتی مانند پل های قدرت باید به سیگنال های متقارن، dead time اعمال شود تا به سوییچ های موجود در هر بازو آسیبی وارد نشود. اما در برخی از میکروکنترلرها مانند AVR، تایمرها دارای قابلیت اضافه کردن dead time در تولید شکل موج نیستند. با استفاده از روش نرم افزاری که در ادامه توضیح داده می شود در این نوع میکروکنترلرها هم می توان این اثر را در شکل موج ها ایجاد کرد. برای این کار باید ابتدا دو واحد تولید شکل موج در یک تایمر را به گونه ای تنظیم کنیم که منطق سیگنال های خروجی آنها مخالف یکدیگر باشند و مثلا اگر یک خروجی در هنگام افزایش مقدار تایمر در شرایط compare match از high به low تغییر وضعیت می دهد، خروجی دوم در شرایط compare match از low به high تغییر وضعیت بدهد. روش نرم افزاری برای ایجاد dead time در این وضعیت به این ترتیب است که مقادیر قرار گرفته در رجیسترهای compare نباید با یکدیگر برابر باشند. بلکه بسته به کلاک تایمر و میزان dead time مورد نیاز باید با هم اختلاف داشته باشند. مثلا اگر کلاک تایمر برابر 2MHz باشد، برای رسیدن به dead time=1us باید 2 واحد اختلاف در مقدار دو compare register وجود داشته باشد. به عنوان مثال عددی اگر compare register در یک کانال با 100 مقداردهی شده باشد و خروجی این کانال در هنگام افزایش تایمر در عبور از مقدار 100 از high به low تغییر وضعیت بدهد، برای کانال دوم باید مقدار 102 در compare register قرار بگیرد تا به میزان دو کلاک معادل با 1us هر دو خروجی low باشند و بعد با گذر مقدار تایمر از 102، خروجی دوم high شود. در این مثال در هنگام کاهش تایمر و گدر از 102 به 101 ابتدا خروجی دوم low می شود و باز به میزان 1us هر دو خروجی low می مانند و در ادامه خروجی اول در گذر از 100 به 99 مجددا high می شود. برای سایر مقادیر dead time هم می توان از همین روش با ایجاد اختلاف مناسب در مقادیر compare register استفاده کرد.

@KnowledgePlus
معرفی چند میکروکنترلر 6 پین:

ATtiny4-ATtiny5-ATtiny9-ATtiny10-PIC10F200-PIC10F202-PIC10F204-PIC10F206-PIC10F220-PIC10F222-PIC10F320-PIC10F322

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

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

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

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

@KnowledgePlus