PDA

View Full Version : کنترل LED



Asad.Safari
سه شنبه 08 فروردین 1385, 20:33 عصر
با سلام

من یک led رو به port printer وصل میکنم
پایه آند(مثبت ) رو به پین شماره 2 و پایه کاتد(منفی) رو
به پین شماره 18 وصل میکنم
و خود به خود و بدون نیاز به هیچ ولتاژ دادنی از طرف من خودش
روشن میشه !

من میخام که اینو با برنامه پایین خاموش و روشن کنم نمیشه !



int main()
{
outport(0x378,0);
sleep(1);
outport(0x378,1);
sleep(1);
return 0;
}


باتشکر

seyedof
سه شنبه 08 فروردین 1385, 21:07 عصر
سلام
شرمنده ولی sleep(1) خیلی زمان کوتاهی است یعنی یک میلی ثانیه که اگر هم روشن خاموش بشه با چشم غیر مسلح قابل رویت نخواهد بود :)
ضمنا توی ویندوز 2000 با بالا این کد شما کار نخواهد کرد باید تحت داس یا ویندوزهای قبل 2000 اجراش کنید. در مورد کار با پورت پرینتر قبلا زیاد بحث شده اینجا. از جستجو کمک بگیرید.
ممنون علی

mzjahromi
چهارشنبه 09 فروردین 1385, 08:12 صبح
من یک led رو به port printer وصل میکنم
پایه آند(مثبت ) رو به پین شماره 2 و پایه کاتد(منفی) رو
به پین شماره 18 وصل میکنم
و خود به خود و بدون نیاز به هیچ ولتاژ دادنی از طرف من خودش
روشن میشه !

من میخام که اینو با برنامه پایین خاموش و روشن کنم نمیشه !

همونطور که جناب Seyedof گفتن زمان تاخیرتون خیلی کمه اونو بکنید 1000 بهتر میشه. یه چیز دیگه هم که خیلی کم اتفاق میافته اینه که ممکنه آدرس پورتتون 378 نباشه
اگه تحت داس کار میکنی کد زیر میتونه آدرس پورت LPT رو به شما بده


asm mov ax,40h //read base port address from 0000:408
asm mov es,ax
asm mov bx,08
asm mov ax,es:[bx]
BPN=_AX; //save base port address to bpn

Asad.Safari
چهارشنبه 09 فروردین 1385, 14:12 عصر
این sleep 1 مساوی یک ثانیه است!!
اونی که شما میگین delay هست که برحسب میلی ثانیه است!



سلام
شرمنده ولی sleep(1) خیلی زمان کوتاهی است یعنی یک میلی ثانیه که اگر هم روشن خاموش بشه با چشم غیر مسلح قابل رویت نخواهد بود :)
ضمنا توی ویندوز 2000 با بالا این کد شما کار نخواهد کرد باید تحت داس یا ویندوزهای قبل 2000 اجراش کنید. در مورد کار با پورت پرینتر قبلا زیاد بحث شده اینجا. از جستجو کمک بگیرید.
ممنون علی

من با xp کار میکنم , پس من این مشکل رو چه طوری حل کنم ؟؟

در ضمن من با یه برنامه تونستم آدرس پورت هامو پیدا کنم :


LPT1 = 0x3BC
LPT2 = 0x378
LPT3 = 0x278


با تشکر

Iran-PC
چهارشنبه 09 فروردین 1385, 15:16 عصر
سلام.
اگه از یک مقاومت حدود 300 اهم هم استفاده کنید بد نیست.
آخه ممکنه پورتتون آسیب ببینه.
این مدلیشم امتحان کن شاید درست شد.

mzjahromi
چهارشنبه 09 فروردین 1385, 17:00 عصر
من با xp کار میکنم , پس من این مشکل رو چه طوری حل کنم ؟؟

در این صورت اصلا کد فوق اجرا نیمشه
پورتتون رو با دستور OpenFile باز کنید و مانند یک فایل باهاش رفتار کنید.

Asad.Safari
چهارشنبه 09 فروردین 1385, 17:55 عصر
int main()
{
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
return 0;
}


با دستور بالا فقط آخرین دستور اجرا میشه !
یعنی جریان فقط در پین شماره 2 میره و بقیه پین (یعنی تا پین 9)
هیچکدوم جریان ندارند !
ایراد کار در این جا است که فقط در هر بار اجرا یا باید خاموش بشه
یا باید روشن بشه و دوتاش با هم نمیشه!


با تشکر

mzjahromi
چهارشنبه 09 فروردین 1385, 18:08 عصر
با دستور بالا فقط آخرین دستور اجرا میشه !
یعنی جریان فقط در پین شماره 2 میره و بقیه پین (یعنی تا پین 9)
هیچکدوم جریان ندارند !
ایراد کار در این جا است که فقط در هر بار اجرا یا باید خاموش بشه
یا باید روشن بشه و دوتاش با هم نمیشه!

من فکر میکنم شما یه جای کار را اشتباه میکنید
دستورها رو به این شکل بنویسید ببینید چه نتیجه ای می گیرید


int main()
{
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
return 0;
}

من فکر می کنم شما قادر به مشاهده دستور اول نیستید.

یعنی جریان فقط در پین شماره 2 میره و بقیه پین (یعنی تا پین 9)
ما بقی باید خاموش باشه. چون شما دارید این مقدار رو میفرستید 00000001

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


-O 378,1

باید LED روشن بشه
حالا این دستور رو اجرا کنید


-O 378,0

باید Led خاموش بشه.
به این ترتیب
اول مطمئین میشید هیچ کجای کار ایراد نداره

Asad.Safari
چهارشنبه 09 فروردین 1385, 22:10 عصر
من فکر میکنم شما یه جای کار را اشتباه میکنید
دستورها رو به این شکل بنویسید ببینید چه نتیجه ای می گیرید


int main()
{
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
return 0;
}


من خودم اینو اجرا کرده بودم و فقط
آخرین دستور یعنی اگر led خاموش باشه روشن میشه !


من فکر می کنم شما قادر به مشاهده دستور اول نیستید.
ما بقی باید خاموش باشه. چون شما دارید این مقدار رو میفرستید 00000001
اینطور نیست من فکر میکنم شما قادر به مشاهده نتیجه عمل نیستید.
یه کار انجام بدید
برید توی داس و Debug رو اجرا کنید
بعد دستور زیر رو اجرا کنید


-O 378,1

باید LED روشن بشه
حالا این دستور رو اجرا کنید


-O 378,0

باید Led خاموش بشه.
به این ترتیب
اول مطمئین میشید هیچ کجای کار ایراد نداره

من این دستور رو تو command prompt اجرا کردم اما هیچی نشد !


موفق باشید

seyedof
پنج شنبه 10 فروردین 1385, 00:54 صبح
سلام
آقا Sleep اوون پارامتری که میگیره بر حسب میلی ثانیه است ها ! نه ثانیه.
ممنون علی

Asad.Safari
پنج شنبه 10 فروردین 1385, 13:39 عصر
سلام
آقا Sleep اوون پارامتری که میگیره بر حسب میلی ثانیه است ها ! نه ثانیه.
ممنون علی

پس چرا وقتی مقدار sleep رو یک میدیم برنامه یک ثانیه صبر میکنه ؟؟؟


لطفا خودتان یه بار امتحان کنید!!

mzjahromi
دوشنبه 14 فروردین 1385, 08:37 صبح
من این دستور رو تو command prompt اجرا کردم اما هیچی نشد !

ظاهر آدرس پورت شما 3BC هست. بجای 378 مقدار 3BC رو گذاشتید؟؟؟

Asad.Safari
دوشنبه 14 فروردین 1385, 11:08 صبح
من هر سه آدرس 3BC و 378 و 278 رو امتحان کردم !


هیچکدوم تو این درستوری که شما گفتین جواب نداد !
حتی رو کامپیوتر دوستم هم امتحان کردم و رو اون هم جواب نداد !


با تشکر

mzjahromi
دوشنبه 14 فروردین 1385, 16:32 عصر
من هر سه آدرس 3BC و 378 و 278 رو امتحان کردم !
هیچکدوم تو این درستوری که شما گفتین جواب نداد !
حتی رو کامپیوتر دوستم هم امتحان کردم و رو اون هم جواب نداد !
با تشکر

امکانش هست یه کپی از دستوراتی که اجرا کردید و جوابهائی که گرفتید رو اینجا بذارید؟
مطمئین هستید پایه های LED رو درست وصل کردید؟
پایه ای که باید به قطب مثبت وصل بشه به 2 و اونیکی به 17 یا 18

seyedof
دوشنبه 14 فروردین 1385, 17:59 عصر
سلام
تحت ویندوز این روش جواب نمیده ها. باید توی داس باشید.
ممنون علی

Asad.Safari
چهارشنبه 16 فروردین 1385, 20:13 عصر
من این رو تو command prompt میزنم و هیچ خروجی رو مشاهده نمی کنم !


debug
_O 378,0
_ O 278,0
_O 3BC,0




موفق باشید

mzjahromi
چهارشنبه 16 فروردین 1385, 20:24 عصر
من این رو تو command prompt میزنم و هیچ خروجی رو مشاهده نمی کنم !


debug
_O 378,0
_ O 278,0
_O 3BC,0




موفق باشید
اول اینکه همونطور که جناب Seyedof گفتن سعی کنید توی داس تست کنید.
دوم اینکه دستورای زیر رو تست کنید اول


debug
_O 378,1
_ O 278,1
_O 3BC,1

چون دستوری رو که شما استفاده کردید LED رو خاموش میکنه نه روشن.

Asad.Safari
پنج شنبه 17 فروردین 1385, 12:34 عصر
آخه قریونت برم !
به طور پیش فرض وقتی led رو به پورت وصل میکنم !
خودش روشن میشه !و نیاز نداره من اونو روشن کنم !!!

من یه سوال دیگه هم داشتم !
اگه طرف مثبت led رو به دو تا data وصل کنم ! آیا می تونه باعث سوختن مدارات
بورد بشه !(یعنی اینکه جریان زیاد کشیده بشه )


با تشکر

mzjahromi
پنج شنبه 17 فروردین 1385, 13:42 عصر
من یه سوال دیگه هم داشتم !
اگه طرف مثبت led رو به دو تا data وصل کنم ! آیا می تونه باعث سوختن مدارات
بورد بشه !(یعنی اینکه جریان زیاد کشیده بشه )

اون دیگه تخصص بچه های الکترونیکه. ولی من فکر نمی کنم کار درستی باشه

آخه قریونت برم !
به طور پیش فرض وقتی led رو به پورت وصل میکنم !
خودش روشن میشه !و نیاز نداره من اونو روشن کنم !!!

چی بگم
ولی من با همین روش به راحتی جواب گرفتم

هانی هاشمی
چهارشنبه 17 مرداد 1386, 20:08 عصر
سلام منم همین مشکل رو دارم
هر وقت کد زیر رو اجرا می کنم فقط آخرین کد اجرا می شه یعنی با اجرای این دستور اگه لامپم خاموش باشه روشن می شه و اگه روشن باشه روشن می مونه:

int main()
{
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
return 0;
}
با اجرای این کد هم اگه لامپم روشن باشه خاموش می شه اگه هم خاموش باشه خاموش می مونه:
int main()

{
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
return 0;
}کامپایلرمم توربو سی ++ ورژن 3 هستش . لامپم رو هم اینجوری وصل کردم : عکس (http://www.mediafire.com/imageview.php?quickkey=1jzyn9i0mmg&thumb=4)

لطفا کمک کنین :ناراحت:

emad_67
شنبه 20 مرداد 1386, 13:04 عصر
لینک هایی که اینجا گذاشته شده رو دیدین
http://barnamenevis.org/forum/showthread.php?t=75350

mzjahromi
شنبه 20 مرداد 1386, 17:47 عصر
سلام منم همین مشکل رو دارم
هر وقت کد زیر رو اجرا می کنم فقط آخرین کد اجرا می شه یعنی با اجرای این دستور اگه لامپم خاموش باشه روشن می شه و اگه روشن باشه روشن می مونه:

int main()
{
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
return 0;
}
با اجرای این کد هم اگه لامپم روشن باشه خاموش می شه اگه هم خاموش باشه خاموش می مونه:
int main()

{
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
outport(0x3BC,1);
sleep(1);
outport(0x3BC,0);
sleep(1);
return 0;
}کامپایلرمم توربو سی ++ ورژن 3 هستش . لامپم رو هم اینجوری وصل کردم : عکس (http://www.mediafire.com/imageview.php?quickkey=1jzyn9i0mmg&thumb=4)

لطفا کمک کنین :ناراحت:


اینطور نیست
سرعت اینقدر زیاده که شما متوجه نمیشید
ُSleep(100) vرو تست کنید

amir_paia
یک شنبه 21 مرداد 1386, 07:45 صبح
سلام به همه. من با sleep(100) جواب نگرفتم. آقای هانی هاشمی شما جواب گرفتین؟ آخه sleep(100) یعنی 100 ثانیه و اگه بخواد با 100 ثانیه فاصله جواب هم بده به درد نمی خوره. اگه کسی راه حلی بلد لطفا کمک کنه

alireza643
یک شنبه 21 مرداد 1386, 08:46 صبح
Sleep(100) یعنی یک دهم ثانیه چون عدد ورودی به sleep بر حسب میلی ثانیه هست. بنده هم با فرمایش جناب mzjahromi موافق هستم. شما اگر از sleep درست استفاده کنید حتما جواب میده.
برای کار کردن تو محیط ویندوز از porttalk استفاده کنید.
سوالی بود که اگر پایه ی مثبت LED رو به دوتا از خروجی ها وصل کنیم چه اتفاقی میوفته. این کار باعث میشه که دوتا منبع ولتاژ 5 ولتی با هم موازی بشن و همونطور که میدونید منابع ولتاژ اگر با هم موازی بشن اتفاقی نمی افته و فقط هر کدوم که روشن بشن لامپ شما هم روشن میشه.
هانی هاشمی عزیز هم یه عکس از نحوه ی اتصال LED گذاشته بودن. باید خدمت شما عرض کنم که پورت پرینتر مقاومت داخلی حدود 370 اهم داره و ولتاژ 5 ولت حالا که شما لامپ رو به این شکل وصل کردید جریانی در حدود 13 میلی آمپر تو مدار برقرار میشه که این جریان خیلی زیادیه(البته برای پورت) بهتره یه مقاوت 470 اهم سر راه مدار قرار بدید که هم پورت صدمه نخوره و هم این LED ینده خدا این قدر نورانی نشه.
یه سوال از مدیران داشتم : من اگر یه برنامه کامل برای کار با پورت پرینتر تو محیط ویندوز بنویسم و شکل مدارات الکترونیکی اون رو هم قرار بدم که بچه ها بتونن از اون استفاده کنن کجای سایت میتونم اون رو قرار بدم.
من از Porttalk استفاده میکنم اگر اون رو تو سایت قرار بدم که بچه ها استفاده کنن این با قوانین سایت مخالف نیست؟
اگر مخالف نیست به من بگید من این کار رو انجام بدم.

mzjahromi
یک شنبه 21 مرداد 1386, 09:44 صبح
مشکلی نیست
فقط لینک یا سورس کامپوننتهای غیر رایگان رو نگذارید
یه تاپیک براش ایجاد کنید و آدرسش رو به من اطلاع بدید

alireza643
یک شنبه 21 مرداد 1386, 14:43 عصر
جناب آقای جهرمی پستی با عنوان آموزش ارتباط با سخت افزار در آدرس
http://barnamenevis.org/forum/showthread.php?p=378403#post378403
ایجاد شد.

mzjahromi
یک شنبه 21 مرداد 1386, 17:37 عصر
جناب آقای جهرمی پستی با عنوان آموزش ارتباط با سخت افزار در آدرس
http://barnamenevis.org/forum/showthread.php?p=378403#post378403
ایجاد شد.

تاپیک شما به حالت اعلان در اومد