PDA

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



آبجی
14th April 2010, 01:18 AM
ارتباط بین نرم افزار و سخت افزار یکی از کارهای بسیار دوست داشتی و پر کاربرد در صنعت امروز دنیاست. ولی این کار از یک مهندس نرم افزار یا یک مهندس سخت افزار و الکترونیک به تنهایی ساخته نیست بلکه مجموعه ای از هر دو تخصص رو طلب میکنه. ولی این مطلب فقط در مورد کار های صنعتی و بزرگ صدق میکنه نه درباره کارهای کوچیک و تجربه های شخصی (البته همین کارهای کوچیک هستن که پایه گذار یک تخصص میشن). پس تکلیف کسانی که دوست دارن تو خونه برای تجربه خودشون یه برنامه جمع و جور بنویسن چی میشه. باید چی کار کنن؟
سوالات زیر تیتر خیلی از تاپیک هایی هست که تو این چند سالی که سایت داره فعالیت میکنه زده شدن.
چطوری میشه با کامپیوتر یک LED رو روشن کرد؟
کنترل سخت افزار به کمک کامپیوتر
چگونگی برقراری ارتباط بین کامپیوتر و دستگاه های جانبی
بعضی ها به نتیجه رسیده و بعضی ها هم نه بعضی هم از نظر نرم افزار به نیجه رسیده ولی به خاطر عدم آشنایی کامل با پورت و سخت افزار باعث صدمه دیدن پورت یا دستگاه جانبی شده.
مطالب بالا دلیل این بود که من به این نتیجه برسم که شاید بد نباشه یه بخش آموزش ارتباط با سخت افزار هر چند مختصر تو سایت داشته باشیم.
میدونم مطالب کامل نیست و خیلی جاها شاید مشکل داره ولی این بخش حاصل تجربیات شخصی خود من هست و سعی میکنم در حد امکان و توانایی خودم مطالب مهم تو برنامه نویسی، ساخت بخش سخت افزاری و نکات مهم پورتی که برای اون برنامه مینویسیم رو در اختیار دوستان قرار بدم امیدوارم دوستان و اساتید مشکلات و کمبود های کار بنده رو به من تذکر بدن.
یه خواهشی هم دارم اینه که اگر درباره هرکدوم از برنامه ها یا مدارات سوالی داشتید به من پیغام خصوصی بدید تا جواب اون رو در بخش پرسش و پاسخ مربوط به همون برنامه قرار بدم و این طوری از به هم ریختگی تاپیک جلوگیری بشه و دوستان هم راحت تر از مطالب استفاده کنن.
برای شروع و انجام این برنامه ها به امکانات زیر نیاز داریم
1- کامپیوتر شخصی
2- کامپایلر C++‎ (خودم از borland استفاده میکنم ولی برنامه ها محدودیتی تو کامپایلر ندارن)
3-PortTalk
4- تعدادی مقاومت
5- منبع تغذیه 5 ولتی یا باطری
موارد ذکر شده قسمت های اصلی و مورد نیاز بود ولی برای ادامه پروژه ها یک سری امکانات دیگه هم هست که برای راحتی کار و بعضی جاها محافظت از خودتون و کامپیوتر نیاز دارید ولی بدون اون ها هم میشه کار رو انجام داد. یک سری امکانات هم هست که برای دیدن نتایج کار لازم و ضروری هست ولی نه برای کل پروژه ها بلکه برای یک یا چند پروژه خاص که اون ها رو هم در زیر نوشتم:
1- کابل پرینتر
2- بردبورد
3- مقداری سیم نازک
4- ترانزیستور
5- گیره سوسماری
مواردی که برای تست برنامه نیاز داریم:
1- LED
2- LCD
3- StepMotor

آبجی
14th April 2010, 01:19 AM
PortTalk چیست؟ در سیستم عامل های قدیمی شما به راحتی میتوانستید اطلاعات خود را به پورت ارسال کنید یا از آن اطلاعات را بخوانید اما در سیستم عامل های جدید این امکان از کاربر و برنامه نویس گرفته شده و دیگر به راحتی نمیتوان اطلاعات را بین برنامه و پورت ها انتقال داد.
برای این کار راه حل هایی وجود دارد مثل استفاده از برنامه ها و یا DLL هایی که شرکت های فعال در این زمینه در اختیار برنامه نویسان قرار میدهند از بین برنامه های مختلفی که برای این کار وجود دارد میتوان به PortTalk و از بین DLL ها به WinIO.dll اشاره کرد.
ما در این تاپیک ابتدا روش کار با PortTalk را توضیح میدهیم و در ادامه به توضیح WinIO میپردازیم.
برنامه PortTalk شامل 4 فایل اصلی میباشد. 1- PortTalk.reg ، 2- PortTalk.sys، 3- PortTalk_IOCTL.h و 4- pt_ioctl.c
برای استفاده از امکانات این برنامه به روش زیر باید عمل کرد
ابتدا فایل PortTalk.sys در /system32/drivers کپی کرده و سپس PortTalk.reg را اجرا کنید. بعد از این کار سیستم را restart کنید. بعد از بوت شدن کامپیوتر شما برای کار با این برنامه آماده است. برای کار فایل های PortTalk_IOCTL.h و pt_ioctl.c را کنار برنامه خود کپی کنید و از آنها استفاده نمایید. این برنامه 4 تابع در اختیار شما قرار میدهد که به کمک آنها میتوانید با پورت ارتباط برقرار کنید.
OpenPortTalk(): برای برقراری ارتباط با پورت
ClosePortTalk(): برای اتمام ارتباط با پورت
InP(): برای خواند از پورت
OutP(): برای نوشتن در پورت

آبجی
14th April 2010, 01:20 AM
پورت موازی یکی از ساده ترین و پرکاربرد ترین پورت های کامپیوتر پورت موازی هست.این پورت دارای 25 پایه هست و پشت همه کامپیوتر ها میشه اون رو دید.
مزایای این پورت به اندازه ای هست که اون رو یکی از پورت های پر کاربرد کرده. در زیر لیست یکسری از مزایای این پورت آورده شده.
1-نیاز به رمز گشایی و پروتکل خاصی برای انتقال اطلاعات نداره.
2-برای همه کامپیوترها در دسترسه
3-برای تمام پایه های این پورت امکان برنامه ریزی وجود داره
4-سرعت این پورت از پورت سری بیشتره
اما در مقابل این خوبی ها ضعف هایی هم داره که عبارتند از:
1-برد کم
2-هزینه ی بالا برای انتقال اطلاعات
3-دشواری در پیدا کردن خطا هایی که موقع انتقال اطلاعات به وجود میاد
حالا که مزایا و معایب این پورت رو فهمیدیم باید برای اون برنامه نویسی کنیم. برای تبادل اطلاعات بین هر قسمتی از کامپیوتر نیاز به آدرس اون قسمت داریم. برای دسترسی به آدرس پورت موازی تو سیستم عامل ویندوز به روش زیر عمل میکنیم
روی MyComputer راست کلیک میکنیم و از او Property میگیریم به تب Hardware میریم و از اونجا گزینه ی Device Manager را انتخاب میکنیم. از زیر مجموعه ی Ports روی LPT کلیک میکنیم به تب Resources میریم و اونجا میشه آدرس پورت رو پیدا کرد این آدرس معمولا در همه کامپیوترها یکسان و 378 میباشد.
پورت موازی از نظر نرم افزاری به سه بایت تقسیم بندی میشه که به هر کدوم از این بایت ها رجیستر هم گفته میشه که آدرسی که در قسمت بالا پیدا کردیم آدرس اولین بایت بود. برای 2 بایت دیگه هم عدد یک رو به آدرس به دست اومده اضافه میکنیم.
اولین بایت از این سه بایت به رجیستر دیتا معروفه و از اون برای ارسال و دریافت اطلاعات استفاده میشه.به این بایت میشه از طریق پایه های 2 تا 9 درسترسی داشت.
بایت بعدی با نام وضعیت شناخته میشه یک بایت ورودی هست که از اون برای دریافت وضعیت دستگاه جانبی استفاده میشه. برای دسترسی به بیت های این قسمت از پایه های 15،13،12،11و 10 استفاده میشه.
و آخریت قسمت با نام کنترل شناخته میشه و از اون برای کنترل پورت استفاده میشه و به صورت خروجی میشه از این قسمت استفاده کرد. برای دسترسی به این پورت از پایه های 1،14،16و 17 استفاده میشه.
همونطور که مشاهده کردید اولا تو دو قسمت آخری به همه بایت ها از نظر سخت افزاری دسترسی وجود نداره و فقط با برنامه میشه اون رو کنترل کرد. و ثانیا پایه هایی که وجود داره کل پایه های پورت موازی رو پوشش نمیده. بقیه ی پایه های باقی مونده برای گراند استفاده میشن که دو طول پروژه بیشتر با این قسمت آشنا میشیم.
نکته ی دیگری که میشه به اون اشاره کرد ورودی یا خروجی بودن بایت دیتا هست. این بایت به صورت پیش فرض خروجی در نظر گرفته شده ولی با ارسال عدد 1 با بیت 5 از بایت کنترل میتونیم این بایت رو به صورت ورودی استفاده کنیم.
با توجه به نکات بالا میشه فهمید که ما در آن واحد میتونیم 12 پایه خروجی و 5 وروری یا 13 ورودی و 4 خروجی داشته باشیم.
برای کار کردن با این پورت به نکات زیر باید توجه کرد:
برد این پورت حداکثر 3 متر میباشد و به ازای هر بیتی که انتقال میدهیم 1 سیم داریم و 1 سیم گراند هم برای کل مدار نیاز داریم.پایه های این پورت مقاومت داخلی 470 اهمی دارند که در طراحی مدار باید در نظر گرفته شوند.

آبجی
14th April 2010, 01:21 AM
روشن کردن LED
بعد از اینکه PortTalk رو نصب کردیم نوبت میرسه به نوشتن برنامه. برنامه زیر خیلی ساده هست ولی برای شروع کار شاید خوب باشه.
کد:

#include <windows.h>
#include <pt_ioctl.c>
int main()
{
OpenPortTalk();
for(int i = 0; i < 10; i++)
{
outportb(0x378, 0x01);
Sleep(1000);
outportb(0x378, 0x00);
Sleep(1000);
}
ClosePortTalk();
return 0;
}
این برنامه از یه حلقه ی 10 تایی تشکیل شده که باعث میشه تو هر بار اجرای برنامه LED متصل به پایه ی 2 از پورت پرینتر برای مدت 1 ثانیه روشن و بعد خاموش بشه.
برای اینکه نتیجه ی کار رو مشاهده کنید از پایه ی دوم پرینتر یک خروجی بگیرید و به یک مقاومت 470 اهم بدید. از پایه ی دیگه ی مقاومت به پایه ی مثبت LED وصل کرده و در نهایت پایه ی منفی LED رو به یکی از پایه های منفی پورت وصل کنید. حالا برنامه رو اجرا کنید.

آبجی
14th April 2010, 01:21 AM
به وسیله ی اون میشه جهت چرخش StepMotor رو کنترل کرد.
کد:

#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#include <windows.h>
#include <pt_ioctl.c>
//---------------------------------------------------------------------------
int main()
{
char ch;
const double DlayVal=1;
OpenPortTalk();
outportb(0x378,0x00);
cout<<"L = Left , R = Right , The Others = Close"<<endl;
ch = getch();


for (;;)
{
if (kbhit())
ch = getch();

if (ch == 'r' || ch == 'R')
{
outportb(0x378,0x01);
Sleep(DlayVal);
outportb(0x378,0x02);
Sleep(DlayVal);
outportb(0x378,0x04);
Sleep(DlayVal);
outportb(0x378,0x08);
Sleep(DlayVal);
}
else if (ch == 'l' || ch == 'L')
{
outportb(0x378,0x08);
Sleep(DlayVal);
outportb(0x378,0x04);
Sleep(DlayVal);
outportb(0x378,0x02);
Sleep(DlayVal);
outportb(0x378,0x01);
Sleep(DlayVal);
}
else
break;
}
ClosePortTalk();
return 0;
}
//---------------------------------------------------------------------------
برنامه به این شکل کار میکنه که تو یه حلقه بی نهایت قرار میگره حالا اگر کلید r زده بشه موتور به سمت راست و اگر L زده بشه به سمت چپ میچرخه. سرعت چرخش موتور رو هم به وسیله ی DlayVal میشه کنترل کرد.
استپ موتور به پایه های 2و3و4و5 وصل میشه. البته موتور رو نباید به صورت مستقیم وصل کرد. برای آزمایش مدار به پایه های ذکر شده 4 تا LED وصل کنید که LED ها به ترتیب روشن میشه.
مدار اتصال موتور به کامپیوتر رو هم دارم عکس هاش رو آماده میکنم به محض آماده شدن رو سایت قرار میدم تا به جای LED موتور رو به کامپیوتر وصل کنید.

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد