نکته آموزشی:
علیرغم 8 بیتی بودن CPU در AVR و XMEGA، دستورات اسمبلی MOVW و ADIW و SBIW بصورت توام روی 16 بیت عمل می کنند.
@KnowledgePlus
علیرغم 8 بیتی بودن CPU در AVR و XMEGA، دستورات اسمبلی MOVW و ADIW و SBIW بصورت توام روی 16 بیت عمل می کنند.
@KnowledgePlus
نکته ای در تعمیرات بردهای الکترونیک:
در مدار چاپی های دو لایه و بیشتر که در آوردن IC های خراب dip با تعداد پایه های زیاد بوسیله قلع کش یا هوای گرم می تواند باعث آسیب رساندن به مدار چاپی شود، یک روش این است که ابتدا با تیغ موکت بری یا کف چین کلیه پین های IC را از بدنه آن قطع کنیم و سپس پین های جدا شده را بصورت تک تک با گرم کردن بدنه آن در بیاوریم و در نهایت با قلع کش، قلع داخل پدها را خارج کنیم.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
در مدار چاپی های دو لایه و بیشتر که در آوردن IC های خراب dip با تعداد پایه های زیاد بوسیله قلع کش یا هوای گرم می تواند باعث آسیب رساندن به مدار چاپی شود، یک روش این است که ابتدا با تیغ موکت بری یا کف چین کلیه پین های IC را از بدنه آن قطع کنیم و سپس پین های جدا شده را بصورت تک تک با گرم کردن بدنه آن در بیاوریم و در نهایت با قلع کش، قلع داخل پدها را خارج کنیم.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
بارها این سوال از طرف دوستان مختلف مطرح می شود که چگونه از طریق رشته الکترونیک کسب درآمد کنیم و چرا کاری برای ما وجود ندارد و مواردی از این قبیل. بصورت خلاصه بازار رشته الکترونیک امروزه از فارغ التحصیلان بی تجربه و با اطلاعات ضعیف و سطحی اشباع شده و یک مدرک لیسانس یا حتی فوق لیسانس، ویژگی و مزیت خاصی را به تنهایی برای یک فرد جویای کار ایجاد نمی کند و افرادی در این میان متمایز می شوند که با سنجش شرایط و جوانب، یک حوزه تخصصی را انتخاب کنند و تا جایی که ممکن است در آن بخش مطالعه و تحقیق و تمرین کنند چنانکه بتوانند در آن موضوع به عنوان یک فرد صاحب نظر و مسلط مطرح شوند. مشاهدات نشان می دهد در همین بازار راکد هم برای اینگونه افراد معمولا فرصت های شغلی و درآمد های خوبی به ویژه در بخش خصوصی فراهم است.
@KnowledgePlus
@KnowledgePlus
نکته ای در کدنویسی:
برای آن که بتوانیم از یک کد با کمترین تغییرات برای آرایش های سخت افزاری مختلف استفاده کنیم، ابتدا می توانیم تعاریفی را برای آرایش سخت افزاری انجام دهیم به گونه ای که در صورت تغییر پورت ها یا پین ها ، نیازی به تغییر در جزییات کد اصلی نباشد. بهتر است تعاریف مربوط به آزایش سخت افزاری را در فایل جداگانه ای در پروژه قرار دهیم.
مثلا فرض کنیم یک LED در AVR با واسطه یک مقاومت به PA3 متصل باشد و بخواهیم کد نویسی برای روشن و خاموش کردن این LED را به یک شکل عمومی بنویسیم. اگر ابتدا تعریف کنیم :
#define LED_PORT PORTA
#define LED_DDR DDRA
#define LED_bp 3
#define LED_bm (1«LED_bp)
در اینصورت برای خروجی کردن پین متصل به LED می توان نوشت:
LED_DDR|=LED_bm;
یک کردن پین متصل به LED:
LED_PORT|=LED_bm;
صفر کردن پین متصل به LED:
LED_PORT&=~LED_bm;
مزیت این روش این است که اگر آرایش سخت افزاری تغییر کند و هر پورت و پین دیگری هم مورد استفاده قرار بگیرد، با تغییر آن تعاریف اولیه می توانیم از یک کد مشترک استفاده کنیم. البته همانطور که قبلا در یکی از پست های آموزشی اشاره شد( https://telegram.me/KnowledgePlus/139 )، استفاده از این روش در مواردی می تواند منجر به کند شدن روند اجرای برنامه شود.
@KnowledgePlus
برای آن که بتوانیم از یک کد با کمترین تغییرات برای آرایش های سخت افزاری مختلف استفاده کنیم، ابتدا می توانیم تعاریفی را برای آرایش سخت افزاری انجام دهیم به گونه ای که در صورت تغییر پورت ها یا پین ها ، نیازی به تغییر در جزییات کد اصلی نباشد. بهتر است تعاریف مربوط به آزایش سخت افزاری را در فایل جداگانه ای در پروژه قرار دهیم.
مثلا فرض کنیم یک LED در AVR با واسطه یک مقاومت به PA3 متصل باشد و بخواهیم کد نویسی برای روشن و خاموش کردن این LED را به یک شکل عمومی بنویسیم. اگر ابتدا تعریف کنیم :
#define LED_PORT PORTA
#define LED_DDR DDRA
#define LED_bp 3
#define LED_bm (1«LED_bp)
در اینصورت برای خروجی کردن پین متصل به LED می توان نوشت:
LED_DDR|=LED_bm;
یک کردن پین متصل به LED:
LED_PORT|=LED_bm;
صفر کردن پین متصل به LED:
LED_PORT&=~LED_bm;
مزیت این روش این است که اگر آرایش سخت افزاری تغییر کند و هر پورت و پین دیگری هم مورد استفاده قرار بگیرد، با تغییر آن تعاریف اولیه می توانیم از یک کد مشترک استفاده کنیم. البته همانطور که قبلا در یکی از پست های آموزشی اشاره شد( https://telegram.me/KnowledgePlus/139 )، استفاده از این روش در مواردی می تواند منجر به کند شدن روند اجرای برنامه شود.
@KnowledgePlus
در میکروکنترلر XMEGA روی برخی پین های خاص می توان فرکانسی حداکثر تا 128MHz معادل با 4 برابر فرکانس کلاک CPU ایجاد کرد.
@KnowledgePlus
@KnowledgePlus
یک روش تجربی و ارزان برای تست میزان نویز پذیری بخش تغذیه مدارات میکروکنترلری که از برق شهر تغذیه می شوند، استفاده از چوک های مهتابی های قدیمی است. در این روش می توانیم به دو سر چوک مهتابی سیم متصل کنیم و چندین بار سیم یا دو شاخه متصل به چوک را بصورت متوالی و پشت سر هم به خط برق تغذیه کننده مدار میکروکنترلری وصل و از آن قطع کنیم که در صورت عدم وجود حفاظت کافی در مدار تغذیه میکروکنترلر، این کار می تواند منجر به ریست شدن یا هنگ کردن میکروکنترلر یا LCD یا سایر اجزای نویز پذیر شود. در انجام این آزمایش، مراقب برق گرفتگی باشید.
@KnowledgePlus
@KnowledgePlus
مقایسه عملکرد IAR و AVR-GCC
https://www.iar.com/iar-embedded-workbench/tools-for-avr/benchmark-results-for-avr/
@KnowledgePlus
https://www.iar.com/iar-embedded-workbench/tools-for-avr/benchmark-results-for-avr/
@KnowledgePlus
نقل یک تجربه عملی:
با رعایت شرایطی که در آموزش های مختلف به آنها اشاره شده (رجوع شود به مقاله مقابله با نویز در AVR که در سایت موجود است)، تاکنون حدود 5000 میکروکنترلر AVR در مدارها و کنترلرهای مختلف و در انواع محیطهای صنعتی پر نویز بکار گرفته شده که هیچ مشکلی به لحاظ نویزپذیری و هنگ کردن و موارد مشابه آن مشاهده نشده و برخی از این مدارها بیش از 12 سال است که بصورت مداوم مشغول به کار هستند.
@KnowledgePlus
با رعایت شرایطی که در آموزش های مختلف به آنها اشاره شده (رجوع شود به مقاله مقابله با نویز در AVR که در سایت موجود است)، تاکنون حدود 5000 میکروکنترلر AVR در مدارها و کنترلرهای مختلف و در انواع محیطهای صنعتی پر نویز بکار گرفته شده که هیچ مشکلی به لحاظ نویزپذیری و هنگ کردن و موارد مشابه آن مشاهده نشده و برخی از این مدارها بیش از 12 سال است که بصورت مداوم مشغول به کار هستند.
@KnowledgePlus
نمونه ای از قابلیت های برنامه نویسی اسمبلی:
در AVR یا XMEGA در کاربرد های بسیار سریع و Time critical اگر لازم باشد قضاوت روی مقادیر مختلف یک متغیر، در یک زمان برابر انجام شود می توانیم از قابلیت دستور IJMP استفاده کنیم. لازم به توضیح است که دستورات switch-case در زبان C یا select-case در زبان BASIC یا if های متوالی، به دلیل پیاده سازی مقایسه بصورت مرحله به مرحله، زمان برابری را برای قضاوت روی مقادیر مختلف فراهم نمی کنند. به عنوان مثالی برای استفاده از قابلیت IJMP برای دسترسی با زمان برابر به نتیجه مقایسه، اگر فرض کنیم مقدار مورد قضاوت در رجیستر R16 باشد و مقایسه با 0 و 1 و 2 و 4 مورد نظر باشد می توانیم به ترتیب زیر عمل کنیم:
LDI ZL,LOW(JUMP_TABLE)
LDI ZH,HIGH(JUMP_TABLE)
ADD ZL,R16
CLR R16
ADC ZH,R16
IJMP
JUMP_TABLE:
RJMP CASE_0
RJMP CASE_1
RJMP CASE_2
NOP
RJMP CASE_4
.
.
.
CASE_0:
....
CASE_1:
....
CASE_2:
....
CASE_4:
....
@KnowledgePlus
در AVR یا XMEGA در کاربرد های بسیار سریع و Time critical اگر لازم باشد قضاوت روی مقادیر مختلف یک متغیر، در یک زمان برابر انجام شود می توانیم از قابلیت دستور IJMP استفاده کنیم. لازم به توضیح است که دستورات switch-case در زبان C یا select-case در زبان BASIC یا if های متوالی، به دلیل پیاده سازی مقایسه بصورت مرحله به مرحله، زمان برابری را برای قضاوت روی مقادیر مختلف فراهم نمی کنند. به عنوان مثالی برای استفاده از قابلیت IJMP برای دسترسی با زمان برابر به نتیجه مقایسه، اگر فرض کنیم مقدار مورد قضاوت در رجیستر R16 باشد و مقایسه با 0 و 1 و 2 و 4 مورد نظر باشد می توانیم به ترتیب زیر عمل کنیم:
LDI ZL,LOW(JUMP_TABLE)
LDI ZH,HIGH(JUMP_TABLE)
ADD ZL,R16
CLR R16
ADC ZH,R16
IJMP
JUMP_TABLE:
RJMP CASE_0
RJMP CASE_1
RJMP CASE_2
NOP
RJMP CASE_4
.
.
.
CASE_0:
....
CASE_1:
....
CASE_2:
....
CASE_4:
....
@KnowledgePlus
نکته آموزشی:
در کاربردهایی که میزان جریان کشی میکروکنترلر از تغذیه باید در حداقل مقدار ممکن باشد، قرار گرفتن پین های ورودی AVR در وضعیت float می تواند باعث جریان کشی اضافه توسط بافر ورودی پین در زمان فعال بودن بافر شود. مطابق توصیه Datasheet یک روش برای جلوگیری از این جریان کشی اضافه، فعال کردن مقاومت Pull up داخلی برای این گونه پینها است. با توجه به اینکه در زمان ریست شدن میکروکنترلر مقاومت های Pull up داخلی غیر فعال هستند، برای کنترل بیشتر جریان می توان مقاومت های Pull up یا Pull down را بصورت خارجی قرار داد تا حتی در محدوده زمانی ریست شدن میکروکنترلر هم مصرف جریان ناشی از پین های ورودی از تغذیه محدود شود.
@KnowledgePlus
در کاربردهایی که میزان جریان کشی میکروکنترلر از تغذیه باید در حداقل مقدار ممکن باشد، قرار گرفتن پین های ورودی AVR در وضعیت float می تواند باعث جریان کشی اضافه توسط بافر ورودی پین در زمان فعال بودن بافر شود. مطابق توصیه Datasheet یک روش برای جلوگیری از این جریان کشی اضافه، فعال کردن مقاومت Pull up داخلی برای این گونه پینها است. با توجه به اینکه در زمان ریست شدن میکروکنترلر مقاومت های Pull up داخلی غیر فعال هستند، برای کنترل بیشتر جریان می توان مقاومت های Pull up یا Pull down را بصورت خارجی قرار داد تا حتی در محدوده زمانی ریست شدن میکروکنترلر هم مصرف جریان ناشی از پین های ورودی از تغذیه محدود شود.
@KnowledgePlus
معرفی سنسور UGN3113:
این IC سه پایه یک سنسور Hall effect حساس به تغییرات میدان مغناطیسی و دارای خروجی Open collector است که خروجی آن را می توان بصورت مستقیم به میکروکنترلر متصل کرد و در صورت نزدیک شدن به آهن ربا، وضعیت خروجی بصورت دیجیتال تغییر می کند. این سنسور معمولا در بازار موجود است.
@KnowledgePlus
این IC سه پایه یک سنسور Hall effect حساس به تغییرات میدان مغناطیسی و دارای خروجی Open collector است که خروجی آن را می توان بصورت مستقیم به میکروکنترلر متصل کرد و در صورت نزدیک شدن به آهن ربا، وضعیت خروجی بصورت دیجیتال تغییر می کند. این سنسور معمولا در بازار موجود است.
@KnowledgePlus
نقل یک تجربه در بازاریابی برای محصولات و پروژه های صنعتی:
برای معرفی و به اصطلاح جا انداختن یک پروژه و محصول جدید که دارای کاربرد صنعتی باشد و تولید آن در صورت پذیرش از طرف بازار سودآور باشد، یک روش بسیار موثر این است که محصول خود را بدون دریافت هیچ وجهی در اختیار تعدادی از افراد شناخته شده و شاخص در آن صنعت قرار دهیم و از آنها بخواهیم که از آن استفاده کنند و اگر مورد رضایتشان بود، وجه آن را بعدا پرداخت کنند. با این روش می توانیم علاوه بر جلب رضایت مشتریان اولیه و مجاب کردن آنها برای استفاده از محصول جدید، برای بقیه مشتریان هم به استفاده از آن محصول توسط افراد شناخته شده در آن صنعت استناد کنیم و به این ترتیب اعتماد بازار را به مرور جلب کنیم.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
برای معرفی و به اصطلاح جا انداختن یک پروژه و محصول جدید که دارای کاربرد صنعتی باشد و تولید آن در صورت پذیرش از طرف بازار سودآور باشد، یک روش بسیار موثر این است که محصول خود را بدون دریافت هیچ وجهی در اختیار تعدادی از افراد شناخته شده و شاخص در آن صنعت قرار دهیم و از آنها بخواهیم که از آن استفاده کنند و اگر مورد رضایتشان بود، وجه آن را بعدا پرداخت کنند. با این روش می توانیم علاوه بر جلب رضایت مشتریان اولیه و مجاب کردن آنها برای استفاده از محصول جدید، برای بقیه مشتریان هم به استفاده از آن محصول توسط افراد شناخته شده در آن صنعت استناد کنیم و به این ترتیب اعتماد بازار را به مرور جلب کنیم.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
نکته ای در کد نویسی:
اگر یک میکروکنترلر به عنوان Master از طریق روش های مختلف ازتباطی مانند USART و I2C و غیره به یک یا چند میکروکنترلر به عنوان Slave متصل باشد و تغذیه همه میکروکنترلرها بصورت همزمان متصل شوند، در کد نویسی بخش Master باید یک تاخیر اولیه قبل از شروع ارسال هرگونه اطلاعات برای Slave ها پیش بینی شود تا Slave ها فرصت کافی داشته باشند که initialization اولیه را بصورت داخلی انجام دهند و قبل از آماده شدن slave ها، Master اطلاعاتی را ارسال نکند.
@KnowledgePlus
اگر یک میکروکنترلر به عنوان Master از طریق روش های مختلف ازتباطی مانند USART و I2C و غیره به یک یا چند میکروکنترلر به عنوان Slave متصل باشد و تغذیه همه میکروکنترلرها بصورت همزمان متصل شوند، در کد نویسی بخش Master باید یک تاخیر اولیه قبل از شروع ارسال هرگونه اطلاعات برای Slave ها پیش بینی شود تا Slave ها فرصت کافی داشته باشند که initialization اولیه را بصورت داخلی انجام دهند و قبل از آماده شدن slave ها، Master اطلاعاتی را ارسال نکند.
@KnowledgePlus
هشدار:
بسیاری از IC های موجود در بازار از نوع Renew هستند و علیرغم ظاهر نو آنها، در واقع قطعات دست دومی هستند که توسط دستگاه های مخصوص، پایه های آنها مرتب شده و روی آنها مجددا چاپ خورده است.
@KnowledgePlus
بسیاری از IC های موجود در بازار از نوع Renew هستند و علیرغم ظاهر نو آنها، در واقع قطعات دست دومی هستند که توسط دستگاه های مخصوص، پایه های آنها مرتب شده و روی آنها مجددا چاپ خورده است.
@KnowledgePlus
در درایورهای قدرت و اینورترهایی که برق شهر با دیود و خازن به DC تبدیل می شود و این ولتاژ از طریق سوییچ های قدرت به بار اعمال می گردد، وجود خازن های بزرگ روی باس DC در هنگام روشن شدن مدار که خازن ها در وضعیت تخلیه هستند می تواند باعث جریان کشی اولیه زیاد و بروز اشکالات مختلف از جمله قطع فیوز شود. به همین دلیل برای مهار کردن جریان اولیه شارژ خازن باید تمهیداتی بکار گرفته شود که در اینجا به دو مورد اشاره می شود. در روش اول ابتدا یک مقاومت در مسیر شارژ خازن قرار می گیرد و بعد از رسیدن خازن به سطح مشخصی از شارژ، مقاومت توسط رله ای Bypass می شود. در روش دوم در مسیر شارژ خازن NTC مناسب قرار داده می شود که در ابتدای روشن شدن مدار به دلیل سرد بودن این قطعه و وجود مقاومت بالای آن جریان محدود می شود و بعد از عبور جریان و گرم شدن NTC، مقاومت آن کاهش پیدا می کند.
@KnowledgePlus
@KnowledgePlus
به دوستانی که برای اتصال میکروفن خازنی به ADC دچار مشکل هستند یادآوری می شود که در بخش یازدهم فیلم های آموزشی طراحی مدارات آنالوگ، روشی برای اتصال میکروفن خازنی به ورودی ADC میکروکنترلر AVR معرفی شده است.
https://www.aparat.com/v/Irj2G
@KnowledgePlus
https://www.aparat.com/v/Irj2G
@KnowledgePlus
نکاتی از زبان برنامه نویسی C:
در برنامه نویسی C از طریق اپراتور پیش پردازنده ## در ماکروها می توان عبارت ها را به یکدیگر چسباند یا به اصطلاح Concatenate کرد. مثلا مطابق تعریف ماکرو زیر:
#define P(a,b) a##b
عبارت
P(1,2)
معادل با 12 خواهد بود. یا عبارت
P(abc,d)
معادل با abcd خواهد بود. به عنوان یک مثال پیشرفته تر، مطابق تعریف ماکرو زیر:
#define a(b) void f##b(unsigned char b)
عبارت
a(x)
معادل با عبارت زیر است:
void fx(unsigned char x)
@KnowledgePlus
در برنامه نویسی C از طریق اپراتور پیش پردازنده ## در ماکروها می توان عبارت ها را به یکدیگر چسباند یا به اصطلاح Concatenate کرد. مثلا مطابق تعریف ماکرو زیر:
#define P(a,b) a##b
عبارت
P(1,2)
معادل با 12 خواهد بود. یا عبارت
P(abc,d)
معادل با abcd خواهد بود. به عنوان یک مثال پیشرفته تر، مطابق تعریف ماکرو زیر:
#define a(b) void f##b(unsigned char b)
عبارت
a(x)
معادل با عبارت زیر است:
void fx(unsigned char x)
@KnowledgePlus
نکته مهم در کدنویسی برای پاک کردن فلگ های AVR:
استفاده از عملیات Read-Modify-Write برای پاک کردن فلگ های مختلف در رجیسترهایی که بیش از یک فلگ در آنها وجود دارد، می تواند منجر به پاک کردن ناخواسته سایر فلگ ها شود. برای درک بهنر، فرض کنیم که در یکی از شماره های AVR مانند mega32 از تایمر 0 به این صورت استفاده شده باشد که فلگ سرریز تایمر 0 در رجیستر TIFR بررسی شود و بعد از یک شدن، با نوشتن یک در محل آن پاک شود. اگر برای پاک کردن فلگ سرریز تایمر 0 مانند کد C زیر عمل شود:
TIFR|=(1«TOV0);
این روش یعنی خواندن رجیستر و OR کردن آن با یک عدد و نوشتن مجدد حاصل OR در محل رجیستر، می تواند باعث پاک کردن ناخواسته سایر فلگ های موجود در رجیستر TIFR شود. زیرا اگر بصورت همزمان مثلا TOV1 هم برابر یک باشد، نوشتن مقدار حاصل از OR به دلیل وجود قبلی یک در محل این بیت باعث پاک شدن TOV1 خواهد شد. بنابراین استفاده از اپراتور =| در صورت استفاده همزمان از سایر فلگ های موجود در آن رجیستر یک عمل اشتباه است که می تواند منجر به نتایج ناخواسته شود.
روش صحیح برای پاک کردن هر فلگ بدون اینکه تغییری در بقیه فلگ ها ایجاد شود، استفاده از اپراتور = است که در این حالت هر فلگی که در محل آن یک نوشته شود، پاک می شود و بقیه فلگ ها در صورتی که یک باشند، با نوشته شدن صفر در محل آنها تغییری نمی کنند و همچنان یک باقی می مانند. روش درست مقداردهی برای این مثال به این صورت است:
TIFR=(1«TOV0);
در سایر زبان های برنامه نویسی هم برای چنین شرایطی باید از عملیات Read-modify-write خودداری شود و رجیستر بصورت مستقیم با عدد مناسب مقداردهی شود. این مطلب برای سایر میکروکنترلرهایی مانند XMEGA که برخی فلگ های آن با نوشتن یک پاک می شوند، برقرار است.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
استفاده از عملیات Read-Modify-Write برای پاک کردن فلگ های مختلف در رجیسترهایی که بیش از یک فلگ در آنها وجود دارد، می تواند منجر به پاک کردن ناخواسته سایر فلگ ها شود. برای درک بهنر، فرض کنیم که در یکی از شماره های AVR مانند mega32 از تایمر 0 به این صورت استفاده شده باشد که فلگ سرریز تایمر 0 در رجیستر TIFR بررسی شود و بعد از یک شدن، با نوشتن یک در محل آن پاک شود. اگر برای پاک کردن فلگ سرریز تایمر 0 مانند کد C زیر عمل شود:
TIFR|=(1«TOV0);
این روش یعنی خواندن رجیستر و OR کردن آن با یک عدد و نوشتن مجدد حاصل OR در محل رجیستر، می تواند باعث پاک کردن ناخواسته سایر فلگ های موجود در رجیستر TIFR شود. زیرا اگر بصورت همزمان مثلا TOV1 هم برابر یک باشد، نوشتن مقدار حاصل از OR به دلیل وجود قبلی یک در محل این بیت باعث پاک شدن TOV1 خواهد شد. بنابراین استفاده از اپراتور =| در صورت استفاده همزمان از سایر فلگ های موجود در آن رجیستر یک عمل اشتباه است که می تواند منجر به نتایج ناخواسته شود.
روش صحیح برای پاک کردن هر فلگ بدون اینکه تغییری در بقیه فلگ ها ایجاد شود، استفاده از اپراتور = است که در این حالت هر فلگی که در محل آن یک نوشته شود، پاک می شود و بقیه فلگ ها در صورتی که یک باشند، با نوشته شدن صفر در محل آنها تغییری نمی کنند و همچنان یک باقی می مانند. روش درست مقداردهی برای این مثال به این صورت است:
TIFR=(1«TOV0);
در سایر زبان های برنامه نویسی هم برای چنین شرایطی باید از عملیات Read-modify-write خودداری شود و رجیستر بصورت مستقیم با عدد مناسب مقداردهی شود. این مطلب برای سایر میکروکنترلرهایی مانند XMEGA که برخی فلگ های آن با نوشتن یک پاک می شوند، برقرار است.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
چرا در یک سری از درایورهای قدرت بجای موج آنالوگ، به بار پالس اعمال می شود:
یکی از سوالاتی که گاهی توسط افراد مبتدی مطرح می شود این است که چرا در درایورهای قدرت به بارهایی مانند موتورها بجای اعمال شکل موج آنالوگ، پالس اعمال می شود و آیا نمی توان سیگنال های آنالوگ را تقویت کرد و به بار متصل کرد؟ مثلا در یک درایور موتور ac سه فاز آیا نمی توان دامنه و قابلیت جریان دهی برای سه سیگنال آنالوگ سینوسی با اختلاف فاز 120 درجه را تقویت کرد و آن را به موتور متصل کرد و چرا بجای این کار از روش هایی مثل spwm استفاده می شود که در آن به موتور پالس های pwm سینوسی اعمال می شود؟ یا مثلا آیا نمی توان یک ولتاژ dc را با تقویت قابلیت جریان دهی آن بصورت مستقیم به یک موتور dc اعمال کرد و چرا بجای این روش از تکنیک هایی مانند pwm استفاده می شود که در آن به موتور پالس اعمال می شود؟
پاسخ این سوال این است که در توان های بالا در صورت تقویت سیگنال های آنالوگ و اعمال آن به بار، تلفات بسیار بالایی در عناصر نیمه هادی تقویت کننده ایجاد می شود که این تلفات زیاد عملا باعث مردود و غیرعملی بودن استفاده از این روش در توان های بالا است. برای رفع این مشکل بجای استفاده از نیمه هادی ها در شرایط خطی، از آنها به عنوان یک سوییچ استفاده می کنیم که در این شرایط تلفات ایجاد شده برای نیمه هادی بسیار کمتر خواهد بود. اما چطور با اعمال یکسری پالس می توان به سیگنال مطلوب آنالوگ (مثلا سینوسی یا dc و ...) رسید؟ پاسخ بصورت خلاصه به این ترتیب است که پالس های ایجاد شده از مجموع مولفه های فرکانس پایین و فرکانس بالا تشکیل شده اند که مولفه های فرکانس بالا به دلیل خاصیت پایین گذر بارهایی مثل موتورها، عملا تاثیر چندانی روی آنها ندارند و تنها مولفه های فرکانس پایین که شامل بخش های سینوسی یا dc و غیره هستند، توسط بار دیده می شوند.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
یکی از سوالاتی که گاهی توسط افراد مبتدی مطرح می شود این است که چرا در درایورهای قدرت به بارهایی مانند موتورها بجای اعمال شکل موج آنالوگ، پالس اعمال می شود و آیا نمی توان سیگنال های آنالوگ را تقویت کرد و به بار متصل کرد؟ مثلا در یک درایور موتور ac سه فاز آیا نمی توان دامنه و قابلیت جریان دهی برای سه سیگنال آنالوگ سینوسی با اختلاف فاز 120 درجه را تقویت کرد و آن را به موتور متصل کرد و چرا بجای این کار از روش هایی مثل spwm استفاده می شود که در آن به موتور پالس های pwm سینوسی اعمال می شود؟ یا مثلا آیا نمی توان یک ولتاژ dc را با تقویت قابلیت جریان دهی آن بصورت مستقیم به یک موتور dc اعمال کرد و چرا بجای این روش از تکنیک هایی مانند pwm استفاده می شود که در آن به موتور پالس اعمال می شود؟
پاسخ این سوال این است که در توان های بالا در صورت تقویت سیگنال های آنالوگ و اعمال آن به بار، تلفات بسیار بالایی در عناصر نیمه هادی تقویت کننده ایجاد می شود که این تلفات زیاد عملا باعث مردود و غیرعملی بودن استفاده از این روش در توان های بالا است. برای رفع این مشکل بجای استفاده از نیمه هادی ها در شرایط خطی، از آنها به عنوان یک سوییچ استفاده می کنیم که در این شرایط تلفات ایجاد شده برای نیمه هادی بسیار کمتر خواهد بود. اما چطور با اعمال یکسری پالس می توان به سیگنال مطلوب آنالوگ (مثلا سینوسی یا dc و ...) رسید؟ پاسخ بصورت خلاصه به این ترتیب است که پالس های ایجاد شده از مجموع مولفه های فرکانس پایین و فرکانس بالا تشکیل شده اند که مولفه های فرکانس بالا به دلیل خاصیت پایین گذر بارهایی مثل موتورها، عملا تاثیر چندانی روی آنها ندارند و تنها مولفه های فرکانس پایین که شامل بخش های سینوسی یا dc و غیره هستند، توسط بار دیده می شوند.
(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)
@KnowledgePlus
نقل یک تجربه عملی:
مشاهده شد که نزدیک کردن تشعشعات فرستنده گوشی موبایل به اپتوکوپلر 6n137 در هنگام تماس یا روشن بودن دیتای گوشی باعث ایجاد پالس های ناخواسته در خروجی اپتوکوپلر می شود.
@KnowledgePlus
مشاهده شد که نزدیک کردن تشعشعات فرستنده گوشی موبایل به اپتوکوپلر 6n137 در هنگام تماس یا روشن بودن دیتای گوشی باعث ایجاد پالس های ناخواسته در خروجی اپتوکوپلر می شود.
@KnowledgePlus