یک قفل سخت افزاری بسازیم . :
پورت موازی Parallel یکی از مفیدترین و پرکاربردترین پورتهای کامپیوتر است که کاربران و طراحان برای متصل کردن مداراتی که طراحی کرده اند از آن استفاده میکنند . در این مقاله سعی بر ان میکنم که نحوه استفاده از این پورت را فرا بگیرید . جالب است بدانید که حتی میتوانید با این پورت یک ربات را نیز کنترل کنید . اما در اینجا مبنای کار را در طراحی یک قفل سخت افزاری میگذاریم .
حتما شده است که قفلهای سخت افزاری نرم افزارهای مختلف را در هنگام خرید نرم افزار نیز خریده باشید . شاید برایتان جالب باشد بدانید این قفل چگونه طراحی شده است و اساس کار ان چیست ؟
اگر این مقاله را بخوانید بزودی متوجه خواهید شد که درون تراشه ای که به شما بعنوان قفل سخت افزاری داده شده است چیزی چندان پیچیده نخواهد بود ...
در ابتدا چند تذکر میدهم اینکه :
پورت موازی PC ها بسیار حساس هستند کافیست با کمی اشتباه در کار کردن با این پورت کل این پورت را از بین ببرید . اکثرا هم تعمیر این پورت پرهزینه است و شاید بصرفه تر باشد تا یک مادربرد جدید بخرید . بنابراین پیشنهاد میکنم اگر از صحت عملکرد خود و یا مداری که قرار است به این پورت متصل شود اطمینان ندارید یک کارت I/O بخرید و با ان پورت کار کنید . که اگر هم قرار شد ان را خراب کنید . فقط همان کارت را تعویض کنید . این کارت شما میتواند روی اسلات PCI/ISA باشد .
تشریح پورت موازی Parallel
یک پورت موازی 25 پین ماده دارد که عموما برای اتصال پرینتر به کامپیوتر مورد استفاده قرار میگیرد . اما خیلی از سخت افزار ها میتوانند از این پورت اتصال برقرار کنند .
تمام این 25 پین همیشه مورد استفاده نیستند . شاید گاهی تنها یک پین را بخواهید استفاده کنید . parsx
ابتدا به معرفی پین های این پورت میپردازیم :
در شکل فوق شمایی از یک پورت موازی را میبینید که اصولا این پینها از راست به چپ و از بالا به پایین شماره گذاری میشوند . یعنی بالایی ترین و سمت راست ترین پین ، پین شماره 1 و سمت چپ ترین و بالاترین پین شماره 13 و پایین ترین و سمت چپ ترین پین شماره 25 است .
این 25 پین به چهار گروه تقسیم بندی میشوند :
دوازده پین از 25 پین فوق نقش خروجی را دارند و اطلاعات را از کامپیوتر به خارج میفرستند . که هشت پین از این دوازده پین از پین شماره 2 تا 9 هستند که روی هم یک بایت را تشکیل میدهند و به این هشت پین پینهای Data گویند.
پین های 18 تا 25 که در شکل سبز رنگ هستند پینهای GND زمین هستند . از لحاظ منطقی مقدار ارزشی صفر و از لحاظ مفهومی انگار که به زمین متصل هستند .که در این مبحث کاری به آنها نداریم .
پینهای 10 و 11 و 12 و 13 و 15 که به رنگ قرمز رنگ هستند به عنوان ورودی کاربرد دارند . که مقادیر پیشفرض آنها یک است و پین شماره 11 مقدار پیشفرض صفر دارد. بنابراین بایت ورودی که متشکل از پینهای 10 تا 15 هست ( در شکل با S7 تا S3 نمایش داده شده اند) مقدار پیشفرض 127 دارد که معادل دودویی آن 01111111 می باشد .
پینهای شماره 1 و 14 و 16 و 17 نیز بیتهای خروجی هستند که به این چهار پین پینهای STATUS گویند ، که در این مبحث کاری با این پین ها نداریم .parsx
بنابراین نتیجه می گیریم اگر قرار باشد این پورت به پرینتر متصل باشد از طریق پین های شماره 2 تا 9 اطلاعات را به پرینتر می فرستد . و اگر قرار باشد اطلاعاتی را به کامپیوتر از طریق این پورت وارد کنیم م تنها از طریق پینهای شماره 10 تا 13 و 15 می توانیم این کار را انجام دهیم .
حال که با پورت Parallel آشنا شدید نوبت به مقدار دهی پین های این پورت میرسد . همانطور که گفتیم برای قفلمان تنها از دو قسمت ورودی و خروجی این پورت استفاده می کنیم .
عملکرد یک قفل سخت افزاری به این صورت میتواند باشد که هرلحظه یا در زمان معینی برنامه شما ورودی پورت Parallel را چک کند اگر برابر مقداریست که شما در برنامه خود تعیین کرده اید انگاه قفل به پورت متصل است . اما اگر قفل شما به پورت متصل نیست یعنی قفل از پورت جدا شده است یا اتفاقی افتاده است که قفل درست کار نمیکند .
پس باید بتوانیم مقدار را از پورت بخوانیم . (پینهای ورودی) اما چطور می توان اطلاعات را به این پورت وارد کرد . برای انجام این کار میتوانید از قسمت خروجی پورت استفاده کنید . در ساده ترین حالت یعنی مقداری را به خروجی بفرستید و آنگاه همان مقدار را در ورودی بخوانید . اگر این اتفاق ساده در طول اجرای برنامه بیفتد قفل درست کار می کند .
بنابراین باید پینهای خروجی را به پین های ورودی متصل کنید . یک رشته سیم تلفن را بردارید و پین شماره 2 را به پین شماره 15 متصل کنید . بنابراین از این پس هروقت ما پین شماره 2 را صفر کنیم پین شماره 15 هم بصورت خودکار 0 می شود و اگر این سیم را قطع کنیم این پین همان مقدار پیشفرض خود یعنی یک باقی می ماند . که در این مثال این مقدار را صفر می کنیم در نتیجه خروجی ما به صورت 01110111 در می آید که معادل 119 می باشد .
در این مثال ساده ترین حالت ممکن را بیان کردیم می توانید از 5 رشته سیم هم برای ارتباط پین های خروجی به ورودی هم استفاده کنید . مثلا پینهای شماره 2و4و5و6و7 را به پینهای شماره 11و12و13و15و10 متصل کنید یا میتوانید پینهای شماره 9و8و2و3و4 را به پین های شماره 12و13و11و10و15 متصل کنید . و صدها حالت مختلف دیگر . این بستگی به سلیقه خود شما دارد . چرا که مهم این است که در ورودی چه مقداری می خوانید . همانطور که می بینید می توانید از یک رشته سیم یا حداکثر از 5 رشته سیم ( چون حداکثر 5 پین ورودی داریم ) برای ارتباط پین ها استفاده کنید .
پس از ارتباط پین ها می توانید باز هم به دلخواه خودتان هرکدام را که می خواهید روشن یا خاموش کنید ( یعنی مقدار 1 یا 0 بدهید ) . برای خاموش یا روشن کردن این پین ها باید فرآیندی را طی کنید به این صورت که هر مقدار دلخواه بین 0 تا 255 ( چون تنها هشت بیت خروجی داریم پس می توانیم تنها یک بایت اطلاعات بفرستیم ) را به خروجی بفرستید و آنگاه ببینید در ورودی چه مقداری حاصل می شود که این مقدار ورودی دقیقا بستگی به این دارد که چه تعداد از پینهای خروجی را به پین های ورودی متصل کرده اید ؟ آیا مثل ما از یک رشته سیم استفاده کرده اید یا 3 رشته یا از هر 5 رشته استفاده کرده اید ؟ آیا پین شماره 2 را به پین شماره 10 متصل کرده اید یا به پین شماره 11 ؟
همانطور که می بینید مقدار ورودی شما بستگی به این دارد که پین ها را چگونه به هم متصل کرده اید و هم اینکه چه مقداری را در خروجی فرستاده اید .
برای اینکه متوجه شویم چه مقداری در ورودی خوانده شده است باید برنامه ای بنویسید که این مقدار ورودی را به شما نمایش دهد . یااگر کمی مهارت در trace کردن برنامه داشته باشید می توانید بدون نوشتن این برنامه اضافی برای خواندن پورت مقدار خوانده شده از پورت ورودی را بخوانید .
ارتباط Visual Basic با پورت موازی :
Microsoft Visual Basic6 را از آن جهت انتخاب کردیم که یادگیری آن نسبت به باقی نرم افزارهای برنامه نویسی ساده ترو همچنین در بین کاربران عمومی تر می باشد . ضمنا بحث های پیچیده سخت افزاری را نیز ندارد .
اما Visual Basic از انجایی که سطح بالاست . قدرت ارتباط با سخت افزار کامپیوتر را مانند زبانهای برنامه نویسی C و مخصوصا اسمبلی را ندارد . هرچند QBasic این قابلیت را دارد !!!
اما این نقطه ضعف این نرم افزار نیست بلکه این برنامه با استفاده از Dynamic Linked Library یا DLL ها میتواند این نقصان را برطرف کند .
بنابراین برای ارتباط با پورت موازی یا هر قطعه سخت افزاری شما میتوانید با زبان برنامه نویسی دیگری برنامه ای بصورت DLL بنویسید و انرا وارد VB کنید .
بنابراین برای نوشتن این قفل به یک فایل Dll نیاز داریم تا بتوانیم با قفل ارتباط برقرار کنیم . این فایل را می توانید به راحتی با جستجوی iodll در اینترنت به صورت رایگان دانلود کنید .
پس از دانلود فایل io.dll آن را در شاخه سیستم خود کپی کنید :
%systemroot%\system32 |
Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal value As Byte) Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte |
Call PortOut(888,0) lckTemp = PortIn(889) label1.text = lckTemp |
Private Sub lcktmr_Timer() Dim lckTemp As Integer Call PortOut(888, 0) lckTemp = PortIn(889) If lckTemp <> 119 Then Call MsgBox("Insert Hardware-Lock in Parallel Port" _ , vbOKCancel, "Warning...") End End If تشریح کد : Call PortOut(888, 0) lckTemp = PortIn(889) |
If lckTemp <> 119 Then |
Call MsgBox("Insert Hardware-Lock in Parallel Port" _ , vbOKCancel, "Warning...") End |