PDA

View Full Version : روشن کردن led از طریق پورت سریال



alasht
چهارشنبه 03 اسفند 1390, 17:16 عصر
با سلام خدمت دوستان
متاسفانه مدیر گرامی پست قبلیمو به دلیل عنوان نامناسب پاک کرد امیدورام این یکی رو پاک نکنند
سوالم این بود که من میخوام از طریق پورت سریال یک led رو خاموش و روشن کنم

http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/RBG-LED.jpg/225px-RBG-LED.jpg


اول اینکه چه کدی باید با سی شارپ بنویسم ؟
دوم اینکه چطوری led رو به پورت سریال وصل کنم ؟
با تشکر

mmd2009
چهارشنبه 03 اسفند 1390, 17:26 عصر
off topic


با سلام خدمت دوستان
متاسفانه مدیر گرامی پست قبلیمو به دلیل عنوان نامناسب پاک کرد امیدورام این یکی رو پاک نکنند



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

موفق باشید


پ ن : لطفا این پاسخ نقل قول نکنید چون تاپیک منحرف میشه از بحث اصلی خودش و فقط برای فهم بیشتر کاربر زده شده است. با تشکر

vof.ir
پنج شنبه 04 اسفند 1390, 00:22 صبح
اول از همه یک کامپوننت پورت سریال بندازید روی فرم،
بعد سعی کنید که دیتا روی اون سند کنید،
اینجوری شاید شانسی بعضی هاش روشن بشه
منتهی، مهم اینه که منطق پورت سریال را بدونید به نظرم،
بعد مثلا شاید به این نتیجه برسید که اگر، 8 بیت یک در میان صفر و یک بفرستید،
هر 3 تا چراغ روشن بشه، یک بحث دیگه مدت زمان روشن موندن چراغ ها هست
میبخشید، من خودم کار نکردم، اما بر اساس چیزهایی که دیدم و خوندم ، عرض کردم

mrbm_2007
پنج شنبه 04 اسفند 1390, 00:33 صبح
اول از همه یک کامپوننت پورت سریال بندازید روی فرم،
بعد سعی کنید که دیتا روی اون سند کنید،
اینجوری شاید شانسی بعضی هاش روشن بشه
منتهی، مهم اینه که منطق پورت سریال را بدونید به نظرم،
بعد مثلا شاید به این نتیجه برسید که اگر، 8 بیت یک در میان صفر و یک بفرستید،
هر 3 تا چراغ روشن بشه، یک بحث دیگه مدت زمان روشن موندن چراغ ها هست
میبخشید، من خودم کار نکردم، اما بر اساس چیزهایی که دیدم و خوندم ، عرض کردم

نمونه کد یا پروژه ندارید؟

alasht
پنج شنبه 04 اسفند 1390, 00:53 صبح
با تشکر از پاسخ شما
الان من به چه دستوری میتونم داده بفرستم و یا داده دریافت کنم ؟
چطور وصل کردنشو تو یه سایت خارجی پیدا کردم اما نفمیدم چطوری میتونم داده ارسال و دریافت کنم

Esmail Solhkhah
پنج شنبه 04 اسفند 1390, 10:21 صبح
بصورت زیر عمل کنید

پین 4 از پورت سریال رو با استفاده از یک مقاومت حدود 1K به آند LED وصل کنید و پین 5 پورت سریال را به کاتد LED وصل کنید (پین 5 GND هست)

گفتم مقاومت بذارید بخاطر اینکه از پین مربوطه جریان زیادی کشیده نشه ، هر چند پورت ها بصورت داخلی بافر شده هستن ولی بخاطر امنیت همین بافر هم که شده شما از مقاومت

سر مسیر استفاده کنید . اگه دیدید نور LED کمه مقاومت رو کمتر کنید ولی سعی کنید از 220K پایین تر نشه. پین 4 یا همون DTR رو میتونید بصورت بیتی برنامه نویسی کنید ، یعنی

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

استفاده از پورت داده برای این کار مناسب نیست چون داره دیتای بایتی رو بصورت سریال ارسال میکنه و بسته به سرعت پورت احتمال داره شما LED رو بصورت نیمه روشن ببینید.

برای کار راحت تر با پین DTR و در کل پورت سریال میتونید از Sax_CommStudio استفاده کنید.


الان من به چه دستوری میتونم داده بفرستم و یا داده دریافت کنم ؟

تاپیک شما در مورد روشن کردن LED بود در اینصورت بحث دریافت داده اینجا موضوعیت نداره چون به LED میشه دیتا فرستاد نمیشه دیتا گرفت.

موفق باشید.

alasht
پنج شنبه 04 اسفند 1390, 23:29 عصر
ممنون از پاسخ شما
الان این کاری که شما گفتید انجام دادم و led روشن شد
حالا چه کدی بنویسم که بتونم از طریق برنامه led رو خاموش و روشن کنم ؟
بحث اصلی من سر همین بود
با تشکر

Esmail Solhkhah
پنج شنبه 04 اسفند 1390, 23:30 عصر
ممنون از پاسخ شما
الان این کاری که شما گفتید انجام دادم و led روشن شد
حالا چه کدی بنویسم که بتونم از طریق برنامه led رو خاموش و روشن کنم ؟
بحث اصلی من سر همین بود
با تشکر

شما مدار رو وصل کردید و حالا سر پروگرمینگش مورد دارید ؟

alasht
پنج شنبه 04 اسفند 1390, 23:39 عصر
بله
من طبق گفته شما یه سیم به پین 4 و یه سیم به پین 5 وصل کردم و سیمها رو به بردبورد وصل کردم
بعد یک مقاومت و led به همون صورت که گفتین رو برد بورد گذاشتم و ال ای دی روشن شد
حالا میخوام با سی شارپ کدی بنویسم که بتونه led رو خاموش و روشن کنه
میشه راهنمایی بفرمایید
با تشکر

Esmail Solhkhah
پنج شنبه 04 اسفند 1390, 23:42 عصر
تو پست 6 گفتم از کامپوننت Sax_CommStudio استفاده کنید

بعد از نصب این کامپوننت میتونید کنترل serialConnection رو درگ کنید روی فرم و بعد از تنظیم پورت کام مورد نظر

serialConnection1.Dtr = true;
LED رو روشن و
serialConnection1.Dtr = false;
LED رو خاموش میکنه

موفق باشید.

alasht
پنج شنبه 04 اسفند 1390, 23:56 عصر
میشه لینک دانلودش رو بدید
من سرچ کردم پیداش نکردم
با تشکر

Esmail Solhkhah
پنج شنبه 04 اسفند 1390, 23:58 عصر
میشه لینک دانلودش رو بدید
من سرچ کردم پیداش نکردم
با تشکر

خلاف قوانین سایته براتون PM میکنم.

موفق باشید.

vof.ir
شنبه 06 اسفند 1390, 21:33 عصر
جناب اسماعیل خانی یک کنترل در خود تولباکس ویژوال هم هست
به اسم سریال پورت
از طریق اون نمیتوان این کار را انجام داد/
؟
ممنونم

Esmail Solhkhah
یک شنبه 07 اسفند 1390, 00:27 صبح
جناب اسماعیل خانیاسماعیل خانی ؟


یک کنترل در خود تولباکس ویژوال هم هست
به اسم سریال پورت
از طریق اون نمیتوان این کار را انجام داد/
؟کنترل serialPort مذکور یه پراپرتی داره بنام DtrEnable از همون استفاده کنید ولی وقتی مجموعه Sax رو پیشنهاد دادم مطمئن باشید یه تجربیاتی تو کار هست که اینو میگم.

دوران دانشجویی یادم میاد برای یه پروگرم میکروکنترلر چه مکافاتی داشتیم با هزار مکافات یه نفر رو پیدا کردیم که اونم پروگرمر رو خوش ساخته بود و به ازای هر بار پروگرم کردن 1000 تومن باید پیاده میشدم (سال 78) در حالی که الان میتونید با 10 تومن یه پروگرمر بخرید ،اون موقع مثل الان نبود که ماشاللا انواع اقسام کتاب فارسی - نرم افزار آموزشی و یا هر کوفت و زهر مار دیگه ای تو زمینه اینترفیس کردن سخت افزار با PC موجود باشه با همون مکافاتها ما داشتیم طراحی الکترونیک انجام میدایم ، میکروهای FLASH از شرکت ATMEL تازه وارد بازار شده بود AT89C51 و هنوز از 89C51 اینتل استفاده میشد و صحبت از AVR و ARM و حافظه بالای 256K و EEPROM داخلی و ... یه جورایی برای ما غیبگویی بود.
با همون داستانا اولین طراحی بنده یه سیستم کنترل دمای هوشمند مرغداری بود با میکرو 89C51 حافظه EEPROM خارجی 256K - سنسور دما - آنالوگ به دیجیتال ADC804 و چند تا بافر و رله و ... برنامه نویسی اسمبلی میکرو ، فک کنم هنوزم سورس کد و مدارشو تو آرشیوم به عنوان یادگاری داشته باشم.

یادش بخیر ، سرتون رو درد نیارم اینا رو گفتم که بگم بنده همینجوری مطلب اینجا نمیذارم

موفق باشید.

vof.ir
یک شنبه 07 اسفند 1390, 00:45 صبح
ابتدا عذرخواهی از شما جناب solhkhani
میبخشید، نمی دونم چه طوری این اشتباه اتفاق افتاد!!
عرض نکردم که شما همین جوری مطلبی فرمودید
فقط خواستم بگم که اگر با این هم میشه، خب بهتر، بحث کرک و ... به میان نیاد،
اما مسلما اگر که شما باهاش کار کردید و پیشنهاد میدهید ، من قبول می کنم،چون خودم بااون کامپوننت در حد 2 یا 3 بار برای ارتباط با مودم ازش استفاده کردم!!!
ممنونم از شما بابت پاسخ های بی دریغتان!!!

Esmail Solhkhah
دوشنبه 08 اسفند 1390, 01:14 صبح
ابتدا عذرخواهی از شما جناب solhkhani
موردی نیس پیش میاد، ولی بازم که ...


ممنونم از شما بابت پاسخ های بی دریغتان!!!
خواهش میکنم شما لطف دارید ، همیشه گفتم همه ما داریم اینجا یاد میدیم و یاد میگیرم.

یه ترمینال (http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx) خوب تو این زمینه هم هست که با همین کنترل سریال VS طراحی شده ، برا ارسال و دریافت و کار با بیتهای کنترلی (یه چیزی تو مایه های Hyper Terminal)

موفق باشید.

alasht
پنج شنبه 11 اسفند 1390, 12:54 عصر
سلام دوستان
متاسفانه تایپک قبلی قفل شد
لطفا ادامه بحث رو تو همین تاپیک ادامه بدین
بحثهای قبلی : لینک تاپیک (http://barnamenevis.org/showthread.php?330198-%D8%B1%D9%88%D8%B4%D9%86-%D9%88-%D8%AE%D8%A7%D9%85%D9%88%D8%B4-%DA%A9%D8%B1%D8%AF%D9%86-led-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D9%BE%D9%88%D8%B1%D8%AA-%D8%B3%D8%B1%DB%8C%D8%A7%D9%84/page2)
متاسفانه تو اینترنت راجع به این موضوع خیلی کم بحث شده و مواردی هم هست که خیلی کوتاه و خلاصه هست
لطفا دوستان همکاری کنند و این تاپیک رو به نتیجه برسونن که افرادی مثل من که در زمینه کار با پورت سریال صفر هستند بتونن از این تاپیک استفاده کنن
-------------
من الان نتیجه گرفتم که بهترین کار اینه که یه میکروکنترلر avr بگیرم (atmega32) و ولتاژ ورودی به میکروکنترلر رو دریافت کنم و به دیجیتال تبدیل کنم (adc) و بعد به پورت سریال بفرستم
میشه دوستان در این مورد صحبت کنیم و بفرمایید چیکار کنم
یخورده تایپک داره به سمت الکترونیک میره لطفا دوستانی که تجربه دارن در یک پاسخ کامل این تاپیک رو به اتمام برسونند
یه تشکر ویژه از جناب آقای Esmail Solhkhah (http://barnamenevis.org/member.php?27551-Esmail-Solhkhah) دارم که با تجربیات خودشون دارن ما رو راهنمایی میکنند
با تشکر فراوان

Esmail Solhkhah
پنج شنبه 11 اسفند 1390, 17:14 عصر
متاسفانه تایپک قبلی قفل شدهمون تاپیک گفتم که بهتر بود مطالب تو یه تاپیک بودن باز کردن تاپیک جدید برای مطالب مشابه این عوقب رو هم داره و طبیعیه ، (رعایت قوانین سایت)



من الان نتیجه گرفتم که بهترین کار اینه که یه میکروکنترلر avr بگیرم (atmega32) و ولتاژ ورودی به میکروکنترلر رو دریافت کنم و به دیجیتال تبدیل کنم (adc) و بعد به پورت سریال بفرستم
میشه دوستان در این مورد صحبت کنیم و بفرمایید چیکار کنم

شما میخاید یه LED رو با استفاده از پورت سریال روشن یا خاموش کنید تا این قسمت نه نیاز به میکرو دارید نه ADC ولی اگه خاستید که مثلا 8 تا LED رو روشن و خاموش کنید (با

پورت سریال) اینجا میتونید از یه میکرو کمک بگیرید فقط این دفعه چون سطح ولتاژ میکرو ها با RS232 نمیخونه از یه MAX232 یا همخانوادش باید استفاده کنید.

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

بدید (حالا یا با LCD یا با 7Segment یا بصورت باینری و با استفاده از LED)

به عنوان مثال یه سنسور دما دارید LM35 که به ازای هر درجه دما 10 میلی ولت ولتاژ بصورت آنالوگ بهتون میده اینجا اگه خاستید این دما رو پردازش کنید ، نشون بدید یا هر بلایی

خاستید سرش دربیارید میتونید از یه آنالوگ به دیجیتال استفاده کنید ، عمدتا خروجی آنالوگ به دیجیتال ها بصورت بایتی هست پس نیاز به پورت سریال و MAX232 نخاهید داشت و

کافیه خروجی ADC رو به یکی از پورتهای میکرو وصل کنید و از همون پورت دیتا رو بخونید.

موفق باشید.

alasht
پنج شنبه 11 اسفند 1390, 18:05 عصر
با تشکر از شما که لطف میکنید و پاسخ ما رو میدید
میخوام یه سوال دیگه در رابطه با همین موضوع بپرسم اگه باز خلاف قوانین نیست !
شما فرمودید که زمانی از میکرو استفاده میکنیم که بخوایم پارامتری رو از ورودی دریافت کنیم و روش محاسبه انجام بدیم
حالا شما فرض کنید من میخوام همین کار رو بکنم
همین مثال سنسور دما که فرمودید
فرض کنید من یه LM35 دارم با یک atmega32 و سه تا led سبز و زرد و قرمز و یک کابل سریال که به پورت سریال کامپیوتر وصله
حالا میخوام این کار رو باهاش انجام بدم :
با استفاده از atmega32 ولتاژ LM35 رو به دیجیتال تبدیل کنم و حاصل رو از طریق پورت سریال به سیستم بفرستم
بعد مقداری که از طریق پورت سریال دریافت شده رو از طریق سی شارپ دریافت کنم و روش محاسباتم رو انجام بدم با سی شارپ و اون عدد رو به درجه سانتی گراد تبدیل کنم و تو یه متغیر ذخیره کنم
بعد با یه if , else یه شرط بنویسم که به عنوان مثال اگر دما کمتر از 25 درجه بود led سبز روشن بشه و اگر دما بین 25 الی 40 درجه بود led زرد روشن بشه و درنهایت اگه دما بیشتر از 40 درجه بود led قرمز روشن بشه
این فرمانها که کدوم چراغ روشن بشه رو میخوام با سی شارپ بنویسم و به میکرو کنترلم ارسال کنم و میکرووظیفه روشن کردن led مورد نظر رو بر عهده بگیره
به عنوان مثال من با سی شارپ دستور led1 رو فرستادم همه led ها خاموش بشه و led سبز روشن بشه
و همینطور دستور led2 , led3 برای led زرد و قرمز
این مثال رو اگه برای ما شرح کامل بدید همراه با تصویر و کدهای مورد نیاز دیگه فکر نکنم سوالی باقی بمونه
شما که تجربه این کارا رو دارید فکر نکنم زیاد وقتتون رو بگیره پس ممنون میشم راهنمایی کنید
با تشکر فراوان

Esmail Solhkhah
پنج شنبه 11 اسفند 1390, 22:44 عصر
LM35 از پکیج 3 پایه استفاده کنید خروجی این سنسور پین وسط هست و به ازای هر درجه افزایش دما 10 میلی ولت خروجی میده مثلا اگه دما 20 درجه بود خرجی این سنسور 0.2 ولت خواهد بود

برای تبدیل ADC از مبدل خود ATMEGA32 کانال صفر استفاده کنید AVCC = AREF = VCC

خروجی سنسور رو به ADC0 وصل کنید

Config Adc = Single,Prescaler = Auto,Reference =INTERNAL

در این حالت از ولتاژ رفرنس داخلی 2.56 ولت استفاده میکنید

برای ارسال داده از میکرو به PC و برعکس از MAX232 استفاده کنید

برای MAX232
TXD میکرو به T1IN (پین 11)
RXD میکرو به R1OUT (پین 12)

RXD پورت سریال کامپیوتر به T1OUT (پین 14)
TXD پورت سریال کامپیوتر به R1IN (پین 13)

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

برنامه نویسی هم با خودتون

تنظیمات پورت سریال میکرو و PC هم که میدونید باید با هم برابر باشن

موفق باشید.

alasht
پنج شنبه 11 اسفند 1390, 23:05 عصر
با تشکر از پاسخ کامل شما
میشه لطف کنید نقشه شماتیک این مدار رو هم قرار بدید چون اونطوری یخورده راحت تر میشه کار کرد :قلب:
اگه قرار بدید دیگه سوالی باقی نمی مونه تا وقتی که مدار رو درست کنم و اگر در یکی از مراحل گیر کردم از شما بپرسم
به محض اینکه به نتیجه برسم تمام کارها + عکسها + کدهایی که نیازه رو تو همین تاپیک میزارم که دوستانی که مشکل من رو دارن با دیدن این تاپیک دیگه سوالی براشون باقی نمونه

Esmail Solhkhah
پنج شنبه 11 اسفند 1390, 23:08 عصر
میشه لطف کنید نقشه شماتیک این مدار رو هم قرار بدید چون اونطوری یخورده راحت تر میشه کار کرد

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

موفق باشید.

alasht
پنج شنبه 11 اسفند 1390, 23:14 عصر
چشم با اینکه اطلاعاتم در این زمینه کمه ولی با این حال دستی یه چیزی میکشم اینجا میزارم
امیدوارم که بتونم درست بکشم :لبخند:

Esmail Solhkhah
پنج شنبه 11 اسفند 1390, 23:34 عصر
بجای کار واقعی فعلا میتونید از محیط های شبیه سازی استفاده کنید

یه نمونه خوب که میشه گفت یه آزمایشگاه کامل هست Proteus (http://www.labcenter.com/index.cfm)

موفق باشید.

Esmail Solhkhah
جمعه 12 اسفند 1390, 23:43 عصر
دوست عزیز با اجازتون نقشه و کد رو اصلاح کردم و میذارم اینجا تا بقیه دوستان هم بتونن استفاده کنن


$regfile = "m32def.dat"

$crystal = 8000000
$baud = 4800

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = _
Portb.7 , Rs = Portb.2 , E = Portb.3
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto

Cls

Start Adc

Dim T As Word

Dim B As Word

Do

B = Getadc(0)

T = B / 2

Cursor Off

Home

Lcd "Temp Monitor"

Waitms 200

Lowerline

Lcd "Temp = " ; T ; "'c"

Print "Readed Temperature in Hex : " ; Hex(t) ; " in Decimal : " ; T

Waitms 200

Loop

End

موفق باشید.

mr13668248
شنبه 23 آبان 1394, 11:36 صبح
ای بابا، سوال یه چیزی بود و جواب یه چیز دیگه در اومد :ناراحت: