روباتیک و کنترلِ دنیایِ خارج با استفاده از پورت ( قسمت 9 )

 

اسفند ماه 84 شماره 21

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


چرا استفاده از پورت ها برای علاقمندان به روباتیک مورد نیاز است؟
به منظور ایجاد ارتباط با دنیای دیجیتال کامپیوتری با دنیای الکترونیک خارج از کامپیوتر، پورت ها یکی از بهترین شیوه ها هستند. پورت ها مسئول ایجاد ارتباط و منتقل نمودن اطلاعات از کامپیوتر به دنیای خارج را بر عهده دارند. کامپیوتر پورت های متعددی دارد که هر کدام مسئولیت انجام کاری را بر عهده دارد. به شکل 1 که پورت های مختلف کامپیوتر را نشان می دهد، دقت نمایید:

شکل 1 : انواع پورت های کامپیوتر


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

جدول 1


برای آشنایی بیشتر، به شکل های 2 و 3 دقت نمایید:

شکل 2


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

شکل 3 : پورت پرینتر و پایه های آن


در این شکل 4 ، برای کنترل روبات، نیاز به ارسال پنج نوع داده داریم  تا هر کدام از رابط ها را به گونه ای تنظیم نماییم.

شکل 4


در اینجا قبل از وارد شدن به دنیای دوست داشتنی کدهای کاربردی،آدرس هر کدام از پورت ها را مشاهده می کنیم( جدول 2).

جدول 2


ما در اینجا تنها روی رجیستری داده LPT1 کار می کنیم که در آدرس 0x378 است.
قبل از اینکه بتوانیم از پورت ها در تمامی ویندوزها استفاده نماییم، می بایست فایل inpout32.dll را در مسیر  Windows\system32\ کپی نماییم. این فایل را می توانید به همراه کدها از سایت رایانه خبر تهیه نمایید.
حال بهتر است وارد کدها شده و لذت ارتباط با پورت ها را تکمیل کنیم.
در اینجا برنامه ای را باهم می نویسیم که مقادیری را به پورت پرینتر منتقل کند و سپس نحوه فراخوانی آن مقدار را خواهیم دید. انتقال و دریافت مقادیر، توسط تابعی که در فایل DLL اشاره شده قرار دارد، صورت می پذیرد( شکل 5) .

شکل 5 : تصویر برنامه در محیط اجرا

شکل 6 : تصویر برنامه بعد از کلیک نمودن بر روی دکمه Read From LPT1


در این مرحله ابتدا فایل DLL را به برنامه می شناسانیم ( کد 1) :

کد 1


حال کارهای انتقال داده ها را آغاز می کنیم.
برای ارسال داده یا سیگنال عددی به پورت پرینتر کارهای زیر را انجام می دهیم( کد 2) .

کد 2


برای دریافت و گرفتن اطلاعات موجود در پورت پرینتر، از کد3 استفاده می کنیم:

کد 3


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

شکل 7 : تصویر برنامه در محیط اجرا


دیگر وقت آن رسیده تا نگاهی سریع به کدهای مربوط بیندازیم و روند کار را دنبال نماییم:
ابتدا کدهای مربوط به تایمر را از نظر می گذرانیم، در اینجا زمانبندی تایمر، در محیط طراحی، بر روی 100 میلی ثانیه تنظیم شده است.
توجه داشته باشید که کدهای که مربوط به استفاده از DLL در برنامه قبل اشاره شده است، در این برنامه نیز بایستی در نظر گرفته شود.

کد 4


کدهای 4، مربوط به تغییر دادن مقادیر CheckBox ها می باشد. این کد تنها برای کلیک نمودن بر روی D0 تعریف شده است ولی در محیط طراحی، بعد از انتخاب شش CheckBox باقی مانده، بر روی برگه Event کلیک نموده و از کشوی رویداد OnClick، D0Click را انتخاب می نماییم. با این کار، هرگاه بر روی هر کدام از CheckBox ها کلیک نمودیم، کدهای نوشته شده پردازش می شوند. به شکل 8 دقت نمایید.

شکل 8

حال به کد5 توجه کنید:

کد 5


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


  
نویسنده : ali gooliof ; ساعت ۱٢:۳٦ ‎ب.ظ روز ۱۳۸٧/٢/٢٤
تگ ها :