منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


نویسنده

محمود مهری

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_N


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش زبان SQL
الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی

 
اطلاعات وبلاگ
  آمار بازدیدكنندگان
امروز :
دیروز :
كل :
آخرین بازدید :


 
مطالب
كل مطالب :
آخرین بروز رسانی :

لینك دوستان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: برنامه نویسی و طراحی وب
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین
نظرسنجی
بدون شرح !




 : " آشنایی با عملگرهای بیتی ( Bitwise Operators ) " :
 
سلام ...

در برنامه نویسی و الکترونیک ( مخصوصا در هنگام کار با میکرو کنترلر ها ) همواره با اعداد مبنای 2 ( Binary ) و مبنای 16 ( Hexadecimal ) سر و کار داریم ، تسلط روی این اعداد و شناخت عملگرهایی که روی این اعداد تاثیرگذار هستن یکی از ملزمات محسوب میشه !

توی این پست در مورد عملگرهای بیتی ( Bitwise Operators ) بحث می کنیم و چند مثال در زبانهای C و Delphi رو با هم مرور خواهیم کرد ...

عملگرهای بیتی پر کاربرد 6 تا هستن :
  • AND
  • NOT
  • OR
  • XOR
  • SHL
  • SHR
قبل از ادامه ی کار این نکته رو بگم که هر عدد مبنای دو رو معمولا با 8 رقم به عنوان یک بایت نشون می دیم و هر رقم اون رو یک بیت در نظر می گیریم .

عملگر AND
:

عملگر AND به این صورت عمل میکنه که اگر بیتهای متناظر در دو عدد باینری هر دو مقدار 1 داشتند ، بیت متناظر در عدد باینری حاصل هم مقدار 1 می گیره ، به عنوان مثال ، فرض کنیم ، قصد داریم دو عدد باینری " 10011010 " و " 00110110 " رو با هم AND کنیم ! ، حاصل به صورت زیر خواهد بود :

10011010
00110110
=
00010010

به نحوه ی محاسبه دقت کنید ، بیتهای شماره ی 2 و 5 عدد نهایی مقدار 1 گرفتن ، چون بیتهای متناظر اونها در اعدادی که با هم AND شدن ، هر دو مقدار 1 داشتن ولی سایر بیتها این ویژگی رو نداشتن و بیت نظیرشون در عدد نهایی مقدار صفر گرفت .


عملگر OR :

عملگر OR به این صورت عمل میکنه که اگر یکی از بیتهای متناظر در دو عددی که با هم OR می شن ، مقدار 1 بگیره ، بیت نظیر اونها توی عدد حاصل هم مقدار یک می گیره ، مثال :

10011010
00110110
=
10111110

توجه کنید که اگر 2 بیت نظیر ، هر دو مقدار یک داشتن باز هم شرط برقراره ...


عملگر XOR :

این عملگر درواقع X + OR هست و X به جای عبارت Exclusive به معنای " یکتا " یا " انفرادی " قرار گرفته ، نحوه ی عملش هم دقیقا مثل OR هست با این تفاوت که اگر هر دو بیت متناظر مقدارشون 1 بود در شرط صدق نمی کنه و عدد نهایی در بیت نظیر اونها مقدار صفر می گیره ، مثال :

10011010
00110110
=
10101100

پس : " یا فقط بیت عدد اول یک باشد یا فقط بیت نظیر در عدد دوم یک باشد "


عملگر NOT :

این عملگر صفرهای یک عدد رو به یک و یک های اون رو به صفر تبدیل میکنه ، به عنوان مثال :

NOT 10011010 => 01100101

عملگر SHL :

حروف SHL مخفف عبارت Shift Left هستن ، به معنی انتقال به چپ ، این عملگر ، بیتهای با مقدار یک رو یک رقم به سمت چپ شیفت میده ، به عنوان مثال :

SHL 10011010 => 00110100

توجه کنید که عدد یک آخری حذف و یک صفر از ابتدا به رقمها اضافه شد ، برای درک بهتر تصویر زیر کمکتون می کنه :
-------------------------------------------------

-------------------------------------------------

عملگر SHR :

حروف SHR مخفف عبارت Shift Right هستن و به معنی انتقال به راست ، این عملگر هم مثل SHL عمل میکنه ، با این تفاوت که بیتهای یک رو به سمت راست شبفت میده ، مثال :

SHR 10011010 => 01001101

مانند SHL اگر در سمت راست رقمها عدد یک وجود داشته باشه حذف میشه و از سمت چپ یک صفر اضافه میشه ، برای درک بهتر تصویر زیر کمکتون می کنه ! :
-------------------------------------------------

-------------------------------------------------

خوب ، تا اینجا با عملگرها آشنا شدیم ، به چند نکته دقت کنید :

در زبان C ، که اغلب در الکترونیک و کار با میکروکنترلرها استفاده میشه ، این عملگرها هر کدوم نماد مشخصی دارن که در جدول زیر مشاهده میکنید ، :

عملگر
نماد
 AND&
OR
|
 XOR^
 NOT~
 SHL<<
 SHR>>

پس ، برای استفاده از این عملگرها در زبان C ، باید از نماد معادل اونها استفاده کنید ، این نکته رو هم در نظر بگیرید که اعداد مبنای دو در زبان C با عبارت " 0b " در ابتداشون مشخص می شن ، اعداد مبنای 16 هم با عبارت " 0x " ، عملگرهایی که معرفی شدن ، هم برای مبنای 2 و هم برای مبنای 16 کاربرد دارن ، اگر از این عملگرها برای اعداد مبنای 16 استفاده کنید ، برنامه ابتدا اونها رو به مبنای دو تغییر میده و بعد از تاثیر دادن عملگر بر روی بیتهای عدد مبنای دو اون رو به صورت یک عدد مبنای 16 در میاره .

چند مثال :

A = 0b10011010;
B = 0b00110110;

A & B = 0b00010010

A = ~ B ;
A = 0b11001001;

A = B >> 2;  : یعنی 2 بیت به سمت راست شیفت شود
A = 0b00001101;
...

در زبان دلفی ( یا پاسکال ) از خود عبارت ها به جای نماد اونها استفاده کنید ، نحوه ی استفاده تفاوتی نداره ، توجه کنید که در زبان دلفی نمی تونید مستقیما عدد باینری بنویسید ! ، بلکه باید اعداد رو به صورت مبنای 16 ( Hexadecimal ) بنویسید ، اعداد هگزادسیمال در دلفی با کارکتر " $ " در ابتداشون مشخص می شن.

انشاالله در یک پست جدا در مورد مبناهای عددی و نحوه ی محاسبه ی اونها بحث خواهیم کرد ...
امیدوارم مفید بوده باشه ، موفق باشید ...

 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " تست دیود و ترانزیستور با مولتی متر " :
 سلامی دوباره ... !
در این پست می خوایم در مورد نحوه ی تست سالم بودن دیود و تست پایه های ترانزیستور بحث کنیم ...

تست دیود

همون طور که می دونید دیودها یک ویژگی خاص دارند ، و اون هم این هست که از یک جهت جریان رو عبور میدن ( مقاومت صفر ) و از جهت عکسش جریان رو عبور نمیدن ( مقاومت بی نهایت ) ، برای تست سالم بودن یک دیود با استفاده از مولتی متر ، ابتدا مولتی متر رو در حالت تست دیود قرا می دیم ، مانند شکل زیر :
---------------------------------------------
---------------------------------------------
بعد از تنظیم مولتی متر ، پرابهای مولتی متر رو به دو سر دیود متصل می کنیم ، بعد از یک بار اتصال پرابها ، جای اونها رو عوض میکنیم ، در هر دو بار اتصال به صفحه ی مولتی متر دقت کنید ، اگر فقط یک بار از دو بار اتصالی که انجام دادید ، روی صفحه ی مولتی متر عددی نمایش داده شد ، پس دیود سالم هست ولی اگر هر دو بار عدد نمایش داده شد و یا هر دو بار عددی نمایش داده نشد ، دیود سالم نیست و ممکنه از هر دو جهت جریان رو عبور بده و یا از هیچ جهتی عبور نده !

مقدار عددی که روی صفحه نمایش داده میشه اهمیت زیادی نداره ، این عدد مقدار ولتاژ بایاس مستقیم دیود رو مشخص میکنه ...

توجه کنید که تست دیودهای مختلف کمی با هم متفاوته ! ، اینجا فقط در مورد دیودهای معمولی که زیاد استفاده می شن توضیح داده شد ، برای اطلاعات بیشتر می تونید به این صفحه مراجعه کنید ...


شناسایی پایه های ترانزیستور

برای شناسایی پایه های ترانزیستور ، مانند تست دیود ، مولتی متر رو در همون حالت تست دیود قرار می دیم ، بعد از این کار ، پایه های ترانزیستور رو دو به دو با پرابها تست می کنیم ، در هنگام اتصال پرابها اگر پایه ها به هم ارتباط داشته باشن ، به عنوان دیود شناخته می شن و عددی روی صفحه نمایش مولتی متر نمایش داده میشه ، پایه ای که به هر دو پایه ی دیگه ارتباط داره ، پایه ی Base هست .
اگر پایه ی Base با پراب قرمز ( مثبت ) مولتی متر مشخص شد ( یعنی اگه پراب قرمز به Base متصل بود و با پراب مشکی به پایه های دیگه وصل کردید و عدد نمایش داده شد ) در این صورت ترنزیستور شما از نوع مثبت یا PNP هستش ولی اگه پایه ی Base با پراب مشکی مشخص شد ، ترانزیستور شما از نوع منفی یا NPN هست .
برای تشخیص پایه های Collector و Emitter ، بعد از تشخیص پایه ی Base ، اون رو با پرابهای مولتی متر به پا یه های دیگه متصل کنید و در هنگام اتصال عدد روی صفحه نمایش رو ببینید ، هر پایه ای که در اتصال با Base عدد کمتری رو نشون میده ، پایه ی Collector هست و پایه دیگه هم Emitter خواهد بود !

امیدوارم مفید بوده باشه ، موفق باشید ...

 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " دلفی :: ارسال آرایه به حافظه ی Clipboard " :
 

سلام ، بعد از مدتی که در فاز برق بودیم ! ، کمی برمی گردیم به فاز دلفی !

در این پست قصد داریم یک آرایه ی Static را به حافظه ی Clipboard ارسال نماییم ! و سپس مقدار آن را از حافظه ی Clipboard خوانده و نمایش دهیم . ( چرا آخه ؟!    )

قبل از هرچیز برای استفاده از توابع و دستورات کار با حافظه ی Clipboard باید یونیت Clipbrd را به قسمت Uses اضافه نمایید ، برای شروع کار ابتدا یک آرایه به عنوان یک Type تعریف کنید :

type
 TMyArray = array[0..9] of Integer;

دستور بالا را در قسمت Interface و بعد از قسمت Uses بنویسید.

در این برنامه ما قصد داریم که مقدار آرایه را از Clipboard بخوانیم ، پس باید یک نوع Format خاص برای آرایه ی خود به عنوان Format ای از حافظه ی Clipboard ثبت کنیم تا بتوانیم بررسی کنیم که آیا مقدار موجود در حافظه ی Clipboard از نوع آرایه ی مورد نظر ما هست یا خیر ، بدین منظور باید از تابع RegisterClipboardFormat استفاده نماییم ، این تابع یک نام به عنوان نام Format دریافت کرده و بعد از قبت Format جدید یک مقدار عددی به عنوان شناسه ی Format ثبت شده بر می گرداند ، قبل از ثبت آرایه ما به یک متغیر نیاز داریم که مقدار عددی مربوط به شناسه ی Format ثبت شده را در آن قرار دهیم ، پس یک متغیر به نام MyArrayFormat از نوع Cardinal به صورت Global ( در قسمت Var  مربوط به Unit ) تعریف میکنیم ، علاوه بر این متغیر، ما به یک متغیر Cardinal دیگر به عنوان Handle اطلاعات مورد نظر ( که همان آرایه هست ) و همچنین یک متغیر Pointer که اشاره گری به نوع داده ای آرایه ی ما باشد ( یعنی TMyArray ) نیز ، نیاز مندیم ، پس متغیر های زیر را در به صورت Global تعریف می کنیم :

var
 MainFrm: TMainFrm;
 MyArray : TMyArray;
 AHandle, MyArrayFormat : Cardinal;
 APointer : ^TMyArray;

implementation

...

  • MyArray : یک نمونه از آرایه ی مورد نظر ما
  • AHandle : به عنوان Handle اطلاعات که باید به Clipboard ارسال شود
  • MyArrayFormat : نگهدارنده ی شناسه ی Format آرایه
  • APointer : اشاره گری به نوع داده ای TMyArray که همان آرایه ی مورد نظر ما است

روش کار به این صورت است که ابتدا یک نمونه از آرایه خود را مقدار دهی میکنیم ، سپس یک Format برای آرایه خود ثبت می کنیم ، در ادامه باید فضایی از حافظه به اندازه ی آرایه ی خود را رزرو نموده و سپس مقدار آرایه را دروئ فضای رزرو شده قرار دهیم و در نهایت فضای در نظر گرفته شده را به همراه Format مشخص شده برای حافظه ی Clipboard به آن بفرستیم.

یک دکمه برای ارسال آرایه به Clipboard ، یک دکمه برای دریافت مقدار آرایه از Clipboard و یک Edit بر روی فرم قرار دهید و در رویداد OnClick دکمه ی مربوط به ارسال آرایه دستورات زیر را بنویسید :

procedure TMainFrm.SendBtnClick(Sender: TObject);
var
 I: Integer;
begin
 for I := 0 to 9 do
  MyArray[I] := I;

 MyArrayFormat := RegisterClipboardFormat('CF_MYARRAY');

 if not OpenClipboard(Handle) then
  begin
   ShowMessage('Unable to open the Clipboard !');
   Exit;
  end;

 EmptyClipboard;

 AHandle := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, SizeOf(TMyArray));
 APointer := GlobalLock(AHandle);
 APointer^ := MyArray;
 GlobalUnlock(AHandle);

 SetClipboardData(MyArrayFormat, AHandle);

 CloseClipboard;

 for I := 0 to 9 do
  MyArray[I] := 0;

 ValueEdit.Text := IntToStr(MyArray[2]);
end;

همانطور که توضیح داده شد ، ابتدا آرایه را مقدار دهی می کنیم ، سپس یک Format ثبت کرده و شناسه ی آن را درون MyArrayFormat قرار میدهیم ، سپس باید Clipboard با اصطلاحا باز کنیم ، در هنگام باز کردن Clipboard بررسی میکنیم که اگر موفقیت آمیز نبود از دستورات خارج می شویم ، برای ثبت مقدار جدید در Clipboard باید ابتدا آن را خالی کنیم که با دستور EmptyClipboard این کار انجام می شود ، در مرحله ی بعد AHandle را برابر فضایی از حافظه قرار می دهیم که توسط تابع GlobalAlloc رزرو می شود و اندازه ای برابر با اندازه نوع داده ای TMyArray دارد ، در ادامه حافظه ی رزرو شده را به نوعی قفل میکنیم تا شیء یا برنامه ی دیگری از آن استفاده نکند و تداخل ایجاد نشود ، سپس مقدار آرایه را درون اشاره گری که به فضای رزرو شده اشاره میکند قرار می دهیم و در نهایت به وسیله ی تابع SetClipboardData مقدار آرایه که در فضای AHandle قرار دارد را به همراه شناسه ی Format آرایه در Clipboard قرار می دهیم ، در پایان کار با Clipboard هم باید آن را ببندیم که به وسیله ی دستور CloseClipboard این کار انجام خواهد شد.

چون می خواهیم یک دور مقدار آرایه را از clipboard بخوانیم ، در پایان کار مقدار عناصر آرایه را برابر صفر قرار می دهیم تا بعد از خواندن مقدار و قرار دادن آن در آرایه تفاوت مشخص شود ! ، در پایان دستورات هم مقدار Text مربوط به Edit روی فرم را برابر با مقدار عنصر شماره ی 2 آرایه قرار می دهیم.

حال نوبت به خواندن اطلاعات می رسد ، در رویداد OnClick مربوط به دکمه ی دریافت کننده ! ، به صورت زیر دستورات را بنویسید :

procedure TMainFrm.ReceiveBtnClick(Sender: TObject);
begin
 if not Clipboard.HasFormat(MyArrayFormat) then
  begin
   ShowMessage('Data in ClipBoard have no "MyArrayFormat" Format');
   Exit;
  end;
 if not OpenClipboard(Handle) then
  begin
   ShowMessage('Unable to open the Clipboard !');
   Exit;
  end;

 AHandle := GetClipboardData(MyArrayFormat);
 APointer := GlobalLock(AHandle);
 MyArray := APointer^;
 GlobalUnlock(AHandle);

 CloseClipboard;

 ValueEdit.Text := IntToStr(MyArray[2]);
end;

در ابتدای دستورات ، نوع Format اطلاعات درون Clipboard را بررسی میکنیم ، اگر نوع مورد نظر ما نبود از دستورات خارج می شویم ، در ادامه Clipboard را Open میکنیم ، بعد از باز کردن Clipboard ، به وسیله ی تابع GetClipboardData مقدار درون Clipboard که Format آن مطابق با MyArrayFormat است را درون AHandle قرار می دهیم ، سپس فضای اختصاص داده شده به AHandle را قفل کرده و اشاره گری که تعریف کرده بودیم را برابر با آدرس فضای آن قرار می رهیم ، در ادامه مقدار آرایه را برابر با اطلاعات درون فضای اشاره گر قرار داده و در نهایت فضای قفل شده AHandle را آزاد میکنیم ، در پایان کار با Clipboard هم آن را Close میکنیم ، در پایان کار مقدار عنصر شماره ی 2 آرایه را درون Edit روی فرم نمایش میدهیم ، همانطور که مشاهده میکنید آرایه دوباره مقدار دهی شده است .

برنامه نمونه ی این پست رو هم از لینک زیر می تونید دریافت کنید :

موفق باشید ...

 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " یک سایت فوق العاده برای علاقه مندان به علم فیزیک " :
 سلام

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

موفق باشید ...
 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " مداری برای نمایش عبور جریان برق از بدن !! " :
  سلام ...
سال جدید رو با یک پست جالب شروع میکنیم ...

در این پست قصد داریم یک مدار جالب رو با هم ببندیم ، قطعات مورد نیاز برای بستن مدار :
  • یک عدد LED
  • یک عدد مقاومت 220 اهم
  • یک عدد ترانزیستور NPN BC 547
  • منبع تغذیه 6 ولت
شماتیک مدار رو در تصویر زیر مشاهده می کنید :
----------------------------------------------------

----------------------------------------------------
دقت کنید که مقاومت به پایه ی Collector ترانزیستور متصل شده و پایه ی خروجی هم Emitter هست که با فلش مشخصه .
به دو قسمتی که با عبارت " Touch here " مشخص شده دقت کنید ، اگر این دو قسمت رو با انگشتانتون لمس کنید ، روشنایی LED افزایش پیدا میکنه ، اگر فشار انگشتانتون رو بیشتر کنید ، نور LED هم افزایش پیدا میکنه !!
بدن انسان دارای مقاومت الکتریکیه ! ، وقتی اختلاف پتانسیلی بین دو قسمت از بدن وصل بشه ، جریانی از راه بدن بین دو قطب برقرار میشه ، عبود جریان از بدن ، جریان رو به پایه Base ترانزیستور میرسونه و باعث افزایش جریان توسط ترانزیستور میشه و این افزایش جریان باعث افزایش نور LED خواهد شد ...

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

البته این موضوع جدیدی نیست ! ، دلیل برقگرفتگی هم همینه ، وقتی ولتاژ زیادی بین دو قسمت از بدن برقرار میشه ، بسته به میزان مقاومت ، جریانی از بدن عبور میکنه که اگر زیاد باشه در مواقعی منجر به مرگ هم میشه ، توجه کنید که این آزمایش رو با ولتاژ پایین انجام بدید تا به بدنتون آسیبی نرسه !!

یک تصویر از مدار نهایی :
----------------------------------------------------

----------------------------------------------------

امیدوارم مفید بوده باشه ، موفق باشید ...
 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " سال نو مبارک ... " :
 
سال نو رو به همه ی دوستان عزیز تبریک میگم




امیدوارم سال خوبی داشته باشید و به آرزوهاتون نزدیک تر بشید ... !

موفق باشید ...

 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " آدرس وبلاگ ! " :
 سلام ...
آدرس www.DelphiPlus.com دوباره فعال شد ، دوستانی که وبلاگ رو بوکمارک کردن از این آدرس استفاده کنن .
اگر مشکلی با آدرس فوق داشتید لطفا در بخش نظرات اعلام کنید ( ممنون ! )

موفق باشید ...
 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

 : " ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A " :
  با سلام ...
در این پست قصد داریم یک پروژه ی تقریبا ساده و پایه ای رو با میکروکنترلر AVR انجام بدیم ، در این پروژه  از میکروی ATMega16 و همچنین زبان برنامه نویسی C و کامپایلر CodeVision AVR استفاده می کنیم ...
قبل از شروع کار بهتره کمی در مورد میکروی ATMega16 و پایه هاش بحث کنیم ! ، در تصویر زیر پایه های یک میکروی ATMega16 رو مشاهده می کنید :
---------------------------------------------------

---------------------------------------------------
میکروهای AVR چهار پورت ( درگاه ورودی و خروجی ) دارن که در تصویر بالا مشاهده میکنید ، Port های A و B و C و D ، همونطور که مشاهده میکنید ، هر پورت 8 پایه داره ( از 0 تا 7 )
اما نحوه ی تنظیم پورت ها در هنگام نوشتن برنامه ...
در میکروهای AVR برای هر پورت 3 رجیستر وجود داره :
  • DDRX : برای مشخص کردن اینکه پورت X ورودی هست یا خروجی
  • PINX : اگر پورت به عنوان ورودی معرفی شده باشه ، از این رجیستر برای دادن ورودی استفاده مکنیم
  • PORTX : اگر پورت به عنوان خروجی معرفی شده باشه ، برای ارسال خروجی از این رجیستر استفاده میکنیم
به جای X نام پورت قرار میگیره ...
رجیستر ها درواقع واسطه هایی هستن برای رسوندن دستور شما به هسته ی میکروکنترلر ، شما دستوراتتون رو در رجیسترها می نویسید و اونها دستورات رو به هسته ی میکرو منتقل میکنن ، در ادامه با اجرای عملی پروژه مفهوم رجیسترها رو بهتر درک می کنید ...

دو پایه ی مهم دیگه برای شروع کار ، VCC و GND هستند ، VCC به قطب مثبت منبع تغذیه وصل میشه و GND هم به قطب منفی ...

سایر پایه ها فعلا به کار ما نمیان !! ، و بحث در مورد اونها فقط سئوالات بیشتری رو در ذهنتون ایجاد میکنه و فایده ای نمی تونه داشته باشه ...

لوازم مورد نیاز برای آزمایش :
  • Breadboard
  • مقداری سیم ( ترجیحا سیم Breadboard )
  • میکروکنترلر AVR مدل ATMega16
  • یک Zif Socket چهل پین
  • 8 عدد LED
  • 8 عدد مقاومت ( مثلا 220 یا 270 اهم )
  • منبع تغذیه ( 4 تا 6 ولت )
  • دو عدد کلید فشاری
در این مدار ، از پورت B ب عنوان خروجی و از پایه ی شماره ی 0 ( صفر ) پورت C برای ورودی استفاده میکنیم ، نحوه ی عمل مدار هم به اینصورته که با شروع به کار میکرو ، LED ها یکی یکی شروع به روشن شدن می کنند ، از پایین به بالا ، یا از راست به چپ !! ، یعنی از پایه ی شماره ی 7 ( هشتمین پایه ) پورت B تا پایه ی صفر ( اولین پایه ) ، با فشردن کلید دوم ، مقدار ورودی توسط کلید در پایه ی شماره ی 0 ( صفر ) پورت C وارد میشه و در این لحظه جهت روشن شدن LED ها تغییر میکنه ، با ادامه ی پروژه همراه بشید تا موضوع رو بهتر درک کنید ...

...

به خاطر زیاد نشدن حجم صفحه اصلی وبلاگ ، برای مشاهده ی ادامه ی پست ، به " ادمه ی مطلب " مراجعه کنید !!


 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment ادامه ی مطلب

 : " آشنایی با کاربرد " رله " ( Relay ) در مدار " :
  با سلام ...
در این پست قصد داریم در مورد " رله " و کاربرد این قطعه در مدار بحث کنیم ...
سعی میکنیم مانند سایر مطالب وبلاگ ، بیشتر روی بحثهای کاربردی تاکید کنیم و سراغ مطالب تکراری و غیر ضروری نریم !! ، برای آشنایی با نحوه ی عملکرد رله میتونید از این منبع استفاده کنید ...

به زبان ساده رله یک کلید دوطرفه است ، رله 5 پایه ی اصلی داره ، به نامهای زیر :
  • دو پایه به نام Sol یا Solenoid یا سولنوئید ! که درواقع پایه های محرک رله هستند
  • یک پایه به نام COM
  • یک پایه به نام NC ( مخفف Normally Close )
  • یک پایه به نام NO ( مخفف Normally Open )
مکانیزم کار رله به اینصورته که با تحریک پایه های Sol ، پایه ی COM به پایه ی NO متصل میشه ، در حالت تحریک نشده هم پایه ی COM به پایه ی NC متصل میشه . تحریک رله یعنی اتصال قطبهای مثبت و منفی یک منبع ولتاژ به پایه های Sol .
رله ها معمولا به دو نوع تک کنتاکت یا تک پل و دو کنتاکت یا دو پل در دسترس هستن ، مفهوم پل یا کنتاکت ، تعداد ردیف پایه های رله هست ، به عنوان مثال ، یک رله ی تک پل یا تک کنتاکت یک ردیف پایه های COM و NC و NO داره و یک رله ی دو پل یا دو کنتاکت هم دو ردیف پایه های COM و NC  و NO داره ، توجه کنید که هم رله ی تک کنتاکت و هم دو کنتاکت ، دو پایه ی Sol دارند.
در رله های دو کنتاکت ، با تحریک پایه های Sol ، هر دو ردیف پایه ها همزمان عمل خواهند کرد .

در تصویر زیر یک رله ی دو پل یا دو کنتاکت رو همراه با نام پایه ها مشاهده میکنید ( البته ببخشید که یه خورده بی کیفیته !!  ) :
-----------------------------------------

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

به خاطر کم شدن حجم صفحه ، برای مشاهده ی ادامه ی پست به " ادامه ی مطلب " مراجعه کنید !


 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment ادامه ی مطلب

 : " کار با ماتریسها در Matlab " :
  با سلام ...
در این پست در مورد روش تعریف و انجام برخی محاسبات بر روی ماترسها بحث می کنیم ...

نحوه ی تعریف یک ماتریس :

برای نمایش یک ماتریس به صورت زیر عمل میکنیم :

M = [ Row 1; Row 2; Row 3; ... ]

به ترتیب سطرهای ماتریس رو در داخل کروشه می نویسیم و هر سطر رو با علامت ; ( نقطه - ویرگول ) می بندیم ، به عنوان مثال قصد داریم ماتریس زیر رو در برنامه ی Matlab تعریف کنیم :

به صورت زیر عمل میکنیم :

M = [5 2 17; 7 1 -1; 1 8 0]

اعداد هر سطر رو با فاصله از هم جدا میکنیم . با فشردن کلید Enter نتیجه بصورت یک ماتریس 3 در 3 به نمایش در خواهد آمد .

انجام عملیات بر روی ماتریسها :
  • برای محاسبه ی دترمینان یک ماتریس از تابع ()det استفاده می کنیم
  • برای محاسبه ی معکوس یک ماتریس از تابع ()inv استفاده می کنیم
  • برای محاسبه ترانهاده ی یک ماتریس نام ماتریس را به همراه علامت ( ' ) می نویسیم ، مثال : 'T = M
  • برای جمع و تفریق ماتریس ها به ترتیب از + و - استفاده میکنیم ، مثال : A = M + N
  • برای ضرب ماتریس ها از عملگر ضرب ( * ) استفاده میکنیم
  • برای ضرب درایه ای ماتریسها ( هر درایه در درایه ی نظیر ) از عملگر *. ( نقطه و علامت ضرب ) استفاده میکنیم
مثال :

قصد داریم مقدار دترمینان ، ماتریس معکوس و ترانهاده ی مربوط به ماتریس M که در در بالا تعریف کردیم رو بدست بیاریم ، به ترتیب زیر عمل میکنیم :

M = [5 2 17; 7 1 -1; 1 8 0]
...
det(M)
...
inv(M)
...
M'
...

نتایج محاسبات بالا در به صورت زیر خواهند بود :


* به بزرگی و کوچکی حروف دقت کنید

به عنوان یک مثال دیگر ، قصد داریم 2 ماتریس تعریف و اونها رو در هم ضرب کنیم ، هم ضرب ماتریسی و هم ضرب درایه ای ! ، به صورت زیر دو ماتریس M و N رو تعریف میکنیم :

M = [0 4; 5 7];
N = [4 6; 0 1];
M * N
...
M .* N
...

نتیجه ی محاسبات بالا به صورت زیر خواهد بود :



نرم افزار Matlab با توجه به اسمش ( Matrix Laboratory یا آزمایشگاه ماتریس ) امکانات و توابع بسیار زیادی برای کار با ماتریسها داره ، این پست بیشتر برای آشنایی و شروع کار با ماتریسها بود ...
امیدوارم مفید بوده باشه ، موفق باشید ...

 

 :: لینك ثابت نویسنده : Mahmood_N نظرات Comment

مطالب اخیر

آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE
معرفی برخی از توابع ریاضی نرم افزار Matlab
SQL :: آشنایی با دستور SELECT
آشنایی با سوئیچ های 4 پین و 6 پین
آدرس وبلاگ !


صفحات وبلاگ :  1  2  3  4  5  6  7  ...