PDA

View Full Version : سوال: روشن کردن LED با برنامه ی C#



nokhod
چهارشنبه 10 مهر 1387, 12:45 عصر
سلام.

من می خوام با پورت USB یه مدار که از چند LED تشکیل شده رو به کامپیوتر وصل کنم. بعد از اون یه فرم توی C# که تو اون چند تا CheckBox داشته باشم، تا با تیک زدن هر کدوم از این CheckBoxها LED متناظر اون CheckBox روشن بشه. چطوری این کار رو انجام بدم؟

پیشاپیش ممنون.

razavi_university
چهارشنبه 10 مهر 1387, 14:50 عصر
بستگی به مدارتون داره
از آیسی واسط USP مثل FT232 و ... استفاده کردید یا مستقیم؟
مستقیمش رو بلد نیستم ولی اگه با FT232 کار کردین یکسری Driver داره روی ویندوز نصب میشه و اون Device رو به صورت یک پورت سریال به کامپیوتر میشناسونه
و کار کردن با پورت سریال هم که دیگه کاری نداره . . .

razavi_university
چهارشنبه 10 مهر 1387, 15:01 عصر
نمونه با پورت موازی
http://www.codeproject.com/KB/cs/csppleds/article1_001.jpg (http://www.codeproject.com/KB/cs/csppleds.aspx)

nokhod
پنج شنبه 11 مهر 1387, 13:55 عصر
یعنی بعد از استفاده از FT232، با کلاس SerialPort کار کنم؟

razavi_university
دوشنبه 15 مهر 1387, 23:37 عصر
بله مشابه یک دستگاه سریال با سرعت بالا

aminrivaldo
چهارشنبه 15 آبان 1387, 08:57 صبح
اگه میشه نمونه برنامه کار با LED رو به این آدرس یمل کنید متشکرم!!!
aminrahdar_2005@yahoo.com (aminrahdar_200@yahoo.com)

mirage041
یک شنبه 19 آبان 1387, 19:04 عصر
سلام میشه بیشتر توضیح بدین
من علاقه به این مطلب دارم

mahsal
دوشنبه 07 اردیبهشت 1388, 14:22 عصر
سلام

میشه اگر کسی کد روشن کردن LED با #C را داره (در محیط visual) در اینجا قرار بده

خیلی فوریه

ممنونم

dehghanimeh
سه شنبه 08 اردیبهشت 1388, 12:38 عصر
دوست عزیز آی سی ft232 برای ارسال سریال اطلاعات هست به این معنی که شما نمی توانید چند خط ارسال اطلاعات داشته باشد. نهایتا شما نمیتونید چند led رو به راحتی و با هم با کنترل خاص روشن کنید .

شما باید از آی سی FT245 استفاده کنید تا یه پورت موازی مجازی برای شما بسازد

اگر هم که بتونید usb رو بی خیال بشید با پورت پرینتر میتونید این کار رو به راحتی انجام بدید

موفق باشید

mahsal
جمعه 11 اردیبهشت 1388, 11:52 صبح
سلام دوستان من باید از طریق دو کامپیوتر که کامپیوتر اول نقش ارسال فرمان را دارد و کامپیوتر دوم از طریق USB به FT245 روی برد وصل است دو تا LED را روی همان برد روشن کنم .

فعلا در فرمی که در #C ساخته ام از طریق قرار دادن دو checkbox و کلیک بر روی آن ها می خواهم فرمان روشن شدن از کامپیوتر اول به کامپیوتر دوم و در نهایت به برد منتقل شود

من دو متغیر Int را در برنامه کامپیوتر اول تعریف کردم که با نسبت دادن یک به آنها هنگام زدن checkbox می خواهم LED ها روشن شوند .
سوالی که دارم این است که صرفا با تعریف این دو متغیر Int و 1 شدن آنها و انتقال از Usb
LED ها روشن می شوند؟

ممنون می شوم نظرتان را بگویید که این کار عملی است یا نه

dehghanimeh
جمعه 11 اردیبهشت 1388, 21:06 عصر
سوال؟
دو کامپیوتر با چه نوع ارتباطی به هم متصل هستند؟ شبکه ، درگاه سریال یا موازی ...
دو نرم افزار چگونه با هم در ارتباط بوده و تبادل اطلاعات می کنند؟

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

موفق باشید

mahsal
جمعه 11 اردیبهشت 1388, 22:59 عصر
سلام

ارتباط دو کامپیوتر توسط شبکه است و دو LED هم به دو پورت خروجیatmega32 وصل هستند
FT245 هم به atmega32 وصل است .

همان طور که گفتم کامپیوتر اول ارسال فرمان (روشن شدن LED) را دارد و این فرمان به کامپیوتر 2 و سپس به برد می رود

در ضمن از codevision نیز برای ارتباط ft245و atmega32 استفاده می شود

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

mahsal
جمعه 11 اردیبهشت 1388, 23:01 عصر
یک چیز دیگر

برنامه ای که روی دو کامپیوتر می خواهم استفاده کنم #C است

dehghanimeh
شنبه 12 اردیبهشت 1388, 10:33 صبح
سلام
حالا پای یه میکرو کنترلر هم اومده وسط :اشتباه:
میکرو نمی تونه با ارتباطات استاندارد با ft245 تبادل اطلاعات کنه
شما به همون ft232 نیاز دارید تا میکرو بتونه با سیستم تبادل اطلاعات کنه

دوست عزیز به نظر من این کارها رو انجام بده

1- دو کامپیوتر رو به طور صحیح شبکه کن
2- دو برنامه سوکت(tcp or udp) روی هرکدام جداگانه بنویس که بتونن از طریق شبکه به هم داده ارسال کنن
3- طریقه صحیح اتصال ft232 را به پورت usb امتحان کن
4- طریقه صحیح اتصال ft232 را به atmega32 (فکر کنم ارتباط UART) امتحان کن
5- برنامه ای برای میکرو بنویس که به محض دیافت داده ای خاص پایه ای که دیود به اون وصله رو یک کنه
6- برنامه سیستم دوم راتغییر بدید تا موقعی که چیزی دریافت کرد مقداری رو به پورت سریال بفرسته

حالا اگر بخواهید میکرو تو کار نباشه می تونید از همون ft245 استفاده کنید

جواب سوال قبلی
چرا تبدیل مبنا؟
اگر از پورت موازی ft245 استفاده کنید هرپایه خروجی معادل یک بیت از داده دریافتی هست
مثالا اگر عدد 10 رو بفرستید که معادل 00001010 هست پایه های D1 , D3 (اگر اشتباه نکنم) یک میشه که اگر دیود نوری به اون وصل باشه روشن میشه.

نمونه برنامه از شرکت سازنده ft232
http://www.ftdichip.com/Projects/CodeExamples.htm

موفق باشی

mahsal
جمعه 18 اردیبهشت 1388, 22:58 عصر
سلام
ابتدا تشکر می کنم از لینکی که معرفی کردید

متاسفانه هنگامی که فایل های AID.DLL و FT2XX.DLL را در reference برنامه #C اضافه می کنم آن ها ر ا قبول نمی کند و برنامه USBTransfer و D2XXAccess بدون این دو اجرا نمی شود می خواستم ببینم کسی این 2 فایل DLL را به طور درست دارد که برای من
send کند و یا لینکی که حاوی فایل درست dll باشد؟

ممنون

ictfac
شنبه 19 اردیبهشت 1388, 01:59 صبح
ابتدا باید برنامه نویسی تحت شبکه را یاد بگیرید و سپس ارتباط دو کامپیوتر در شبکه را برقرار کنید. بعد ارتباط با پورت ها را یاد بگیرید تا برنامه مقصد بتواند این کار را برایتان انجام دهد. امکان داره ولی کار زیادی داره. برای هر کدام از موضوعات فوق می توانید با یک جستجو مطالبی را در همین سایت پیدا کنید.
شما اگه می خواهید با AVR و USB کار کنید استفاده از Virtual Com Port براتون راحتتره یا با یک ارتباط RS232 که با کامپیوتر دوم برقرار می کنید و استفاده از امکانات #C برای پورت سریال می توانید ارتباط را برقرار کنید. اما قسمت شبکه نیاز به کار بیشتری داره و اگر شما فاصله زیادی در نظر نداشته باشید می توانید از ارتباط RS485 استفاده کنید که در فاصله حدود چند صد متر جواب میده و نیازی به کامپیوتر دوم نیست. نویز کمتر تاثیر میذاره و راحته.

mahsal
سه شنبه 22 اردیبهشت 1388, 13:07 عصر
سلام
من ارتباط دو کامپیوتر از طریق شبکه را فراهم کردم و الان می خواهم ارتبط کامپیوتر دوم با ft245 را برقرار کنم که از برنامه های سایت FTDIدارم ارتبا ط #C و ft245 را برقرار می کنم که این برنامه ها از فایل AID.dll کمک می گیرند اما وقتی من برنامه را اجرا می کنم error مبنی بر نیافتن این فایل می کند

وقتی هم که می خ.اهم در قسمت reference این فایل را add کنم پیغامی می دهد که فایل مربوطه فایل comو یا dll درستی نیست

از web هم چند تا فایل AID در آ وردم ولی باز هم این پیغام را می دهد

از دوستان کسی بتونه کمکی کنه واقعا ممنون می شم

dehghanimeh
چهارشنبه 23 اردیبهشت 1388, 09:02 صبح
دوست عزیز

ft245 نمیتونه با میکرو ارتباط برقرار کنه(به صورت استاندارد)

اگر میخواهید حتما میکرو کنترلر تو کار باشه باید از ft232 استفاده کنید

مراحل زیر رو انجام بدید

1- موقعی که FT232 به طور صحیح به پورت یو اس بی نصب بشه پنجره Found New Hardware باید آشکار بشه که درایوری که از سایت سازنده این آی سی گرفته اید به اون معرفی می کنید .

2-حالا اگر به Device Manager برید یه پورت com دیگه روی سیستم نصب شده شماره اون رو یادداشت کنید.

3-مرحله آخر دانلود فایل های DLL مورد نیاز برنامه است که باید درون پوشه system32 و یا پوشه جاری برنامه کپی بشه تا برنامه اجرایی بتونه کامپایل بشه.

4-حالا هر داده ای که به اون پورت ارسال بشه FT232 اون رو دریافت کرده و به میکرو میفرسته و درنهایت میکرو نسبت به داده دریافتی تصمیم می گیره.


کار با ft245 هم مانند مراحل بالا است ولی در نهایت یک پورت lpt مجازی برای شما می سازه.


موفق باشید

In_Chan_Nafar
چهارشنبه 23 اردیبهشت 1388, 10:27 صبح
نمونه برنامه صفحه قبل در سایت www.codeproject.com وجود دارد

mahsal
جمعه 25 اردیبهشت 1388, 12:48 عصر
سلام
در مورد اینکه ارتباط ft245 با atmega32 به صورت مستقیم نیست من قبلا اشاره نکرده بودم ارتباط این دو از طریق codevision است

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

هدف برنامه #C من ارتباط کامپیوتر دوم با ft245 می باشد و می خواهم بدانم اگر مثلا عدد10

را به ft245 می فرستم (همان طور که اشاره شده این عدد به طور باینری در می اید) ، این عدد باینری توسط codevision ،میتونه LED ها را روشن کند؟

(من صرفا باید از ft245 استفاده کنم نه ft232)

از دوستانی که بتونن کمکی کنند واقعا ممنون می شم.

dehghanimeh
دوشنبه 28 اردیبهشت 1388, 11:17 صبح
دوست عزیز

ft245 یک پورت مجازی موازی LPT برای شما میسازه

ft232 یک پورت مجازی سریال COM برای شما میسازه

ft245 چون خروجی موازی داره (اطلاعات به صورت هشت رشته و چند خط کنترلی ارسال میشه)
باید به چند پورت ورودی میکرو وصل بشه که کار سختی هست.

ft232 خروجی سریال داره (با استفاده از سه رشته سیم) و تعداد زیادی هم از میکروهای avr این ارتباط راحت را پشتیبانی می کنن.

دیگه تصمیم با خودتونه

موفق باشد

abasfar
سه شنبه 19 خرداد 1388, 11:32 صبح
سلام واقعا خسته نباشید لطفا من را کمک کنید
من وقتی که led ها را به کامپیوتر وصل می کنم روشن میشن وهر کاری میکنم(برنامه ها را فراخوانی واجرا می کنم هیچ رویدادی نشان نمی دهد) ایا من باید در ویندوز برای lpt کاری انجام دهم
ممنون میشم کمک کنید

dehghanimeh
سه شنبه 19 خرداد 1388, 14:20 عصر
دوست عزیز بیشتر توضیح بدید

mahsal
سه شنبه 02 تیر 1388, 15:50 عصر
سلام

من می خواستم data ای را که به صورتbyte در #c دارم به codevision و از آنجا به بردم منتقل کنم .اگر کسی بتونه کمکم کنه که چه طور این کار را انجام بدم ممنون می مشم.

dehghanimeh
سه شنبه 02 تیر 1388, 21:14 عصر
من که از ابتدا با شما بودم هنوز متوجه نشدم که چه کار می خواهید بکنید

به نظرم اگر تاپیکهای قبلی رو یک بار دیگه مطالعه کنید بد نباشه
چون به اطلاعات کاملی اشاره شده

در مورد codevision
codevision یک محیط برنامه نویسی به زبان c برای میکرو avr هست
بعد از اینکه برنامه میکرو رو در این محیط نوشتید و اون رو کامپایل کردید
خروجی اون یک فایل باینری با پسوند hex هست که باید این فایل رو
به وسیله یک پروگرامر به میکرو بدید.وقتی میکرو روشن میشه این
برنامه میشه یه چیزی شبیه سیستم عامل میکرو.

zootos
چهارشنبه 03 تیر 1388, 13:26 عصر
سلام به دوستان گرام
اگه مي شه يه برنامه ساده كه با USB كار كنه و از اون ديتا رو خوند و نوشت بزاريد ممنون مي شم.
اجرتون با آقا.

dehghanimeh
چهارشنبه 03 تیر 1388, 21:30 عصر
دوستان سلام
کار کردن با پورت usb و جا به جا کردن یک بایت با دستگاه مثل سر و ته کردن یک تریلی 18 چرخه
با com , lpt خیلی تفاوت داره

برای کار کردن با دستگاهی که به پورت usb وصل شده باید به نکات زیر توجه داشته باشید

1-دستگاه شما از چه کلاسی پشتیبانی می کنه و یا به این معنی که خودش را به عنوان چه
دستگاهی معرفی می کنه(DEVICE_CLASS)



Base Class 01h (Audio)
Base Class 02h (Communications and CDC Control)
Base Class 03h (HID – Human Interface Device)
Base Class 07h (Printer)
.....


2- بعد از مشخص شدن کلاس دستگاه باید بدانید دستگاه از چه درایوری استفاده می کنه

3-هر دستگاه usb دوشماره مخصوص به خود داره که به وسیله اون می تونید با دستگاه ارتباط
برقرار کنید

VID = کد محصول مثلا 0X12FB اسکنر
PID = کد کارخانه سازنده مثلا 0XF451 کارخانه HP
که این کدها توسط شرکت های سازنده خریداری می شه

4-حجم داده ارسالی و دریافتی چه اندازه است یا اینکه چه پرتکلی برای انتقال داده ها استفاده
می شه

ارتباط با دستگاهی که اطلاعات کامل بالا رو دارید می تونه انجام بشه
فکر کنم یک سری کمپوننت برای این کار هم وجود داشته باشه مثل nrcommlib
که من خودم تا حالا کار نکردم
به نظر من اگر خواستید داده ای رو از طریق پورت usb جابه جا کنید راحت ترین راه استفاده از آی سی های
FT232 , FT245 هست که پورت مجازی com , lpt روی سیستم میسازند و تمام مشکلات
بالا رو حل می کنند و شما کافیه داخل برنامه فقط با پورت com , lpt کار بکنید. این دو آی سی
در تاپیکهای قبلی تشریح شدن
و یا اینکه با میکرو کنترلر یکی از دستگاه ها رو شبه سازی کنید که کمی پیچیده است و از usb1
پشتیبانی میکنه

موفق باشید

mahsal
چهارشنبه 03 تیر 1388, 22:07 عصر
سلام

من یک کامپیوتر به عنوان clientو یکی به عنوان serverدارم که از طریق serverوبا #cباید 2 ledرا روی یک برد که به client وصل است از طریق ارسال فرمان از سرور به کلاینت،روشن کنم
برای این کار از network stream در #c استفاده کردم و نیز تابع writebyte که از توابع تعریف شده برای networkstream است،برای ارسال داده به صورت بایت از سرور به کلاینت استفاده می کنم . دو سوال برایم مطرح است .

ابتدا اینکه objectای را که از Networkstream ساختم و بوسیله آن writebyte را فراخوانی کردم داده را صرفا به client می فرستد اما در client داده به صورت "اجق وجق"ظاهر می شود.در کد زیر بعد از خط اول ()قرار داردونیز در خط سوم و آخر.



Byte led=new byte










LED = 00000011
NetworkStream ns = server.GetStream




ns.writebyte(led
سوال دوم که دارم این است که چه طور این بایت را از کلاینت به codevision (که برای ارتباط برد با #cاست)منتقل کنم؟

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

dehghanimeh
پنج شنبه 04 تیر 1388, 00:23 صبح
دوست عزیز
این دستورات فقط عدد 11 را به متغیر شما نسبت می ده که باینری اون میشه 00001011

نهایتا هنگامی که در سمت client می گویید این بایت را نشان بده یازدهمین کاراکتر از جدول اسکی که احتمالا
از حروف نیست را نمایش می ده , نشان دادن این بایت در سمت client الزامی نیست
فقط اطمینان پیدا کنید که همان بایت ارسالی است.

dehghanimeh
پنج شنبه 04 تیر 1388, 08:06 صبح
برنامه میکرو برای گرفتن اطلاعات از پورت com و نمایش روی lcd


#include <mega16.h>
#include <stdio.h>
#include <lcd.h>
#define xtal 8000000

#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

char a[10];

void main(void)
{

UCSRA=0x00;
UCSRB=0x10; // USART Receiver: On
UCSRC=0x86; //8 Data, 1 Stop, No Parity
UBRRH=0x00;
UBRRL=0x33; // USART Baud rate: 9600

lcd_init(16);
lcd_clear();
gets(a,10);
lcd_puts(a);
while(1);

}
این هم نقشه اون

mahsal
پنج شنبه 04 تیر 1388, 11:39 صبح
سلام
ابتدا بسیار ممنونم از کمک هاتون
من منظورم عدد3 باینری بوده که به صورت 00000011 نوشتم در برنامه ام.در ضمن من در بردم LCD ندارم .چه طور می تونم مطمئن شم که بایت دریافتی در کلاینت همان بایت ارسالی از سرور است؟

با تشکر فراوان از کمک هاتون

dehghanimeh
پنج شنبه 04 تیر 1388, 12:14 عصر
لازم نیست همان بایتی که سرور ارسال میکنه به مدار ارسال بشه
مثلا میتونید سرور رشته on یا off رو به کلاینت بفرسته و کلاینت تصمیم بگیره
اگر رشته دریافتی on هست مثلا باینری 00001010 رو به مدار بفرسته
که مدار هم قراره اگر این بایت 00001010 رو دریافت کرد led دوم و چارم پورت خروجی
خود را یک کنه تا اونا روشن بشن
به نظر من اول یک برنامه سوکت کامل و بدون عیب بنویسید
بعد اگر سوالی داشتید بپرسید

mahsal
پنج شنبه 04 تیر 1388, 12:37 عصر
سلام

مشکل من حل شد و مشکل در کد اسکی بود که اشاره کرده بودید.
اما من هنوز ارتباط #C و code vision را نفهمیدم.اینکه چه طور بایتی را از کلاینتم به codevisionکه روی همان client نصب است،بفرستم .

بسیار ممنون از راهنمایی هایتان.

mahsal
پنج شنبه 04 تیر 1388, 12:43 عصر
در ضمیمه پست قبل باید اضافه کنم که برد من مستقیما با #cارتباط ندارد بلکه از طریق codevision ارتباط دارد.

dehghanimeh
پنج شنبه 04 تیر 1388, 17:11 عصر
دوست عزیز
برنامه های نوشته شده با codevivion که قابل اجرا روی سیستم نیستند
همانطور که قبلا گفتم فایل باینری خروجی باید روی یک میکرو avr پروگرام بشه
تا خروجی اون رو ببینید
البته اگر محیط شبیه ساز Proteus 7 Professional را داشته باشید(مانند عکس قبلی)
که یک میکرو و همه قطعات الکترونیک را به صورت مجازی به شما می ده و می تونید
فایل باینری خود رو به اون بدید تا اون رو مثل محیط واقعی اجرا کنه ولی دیگه خبری از
محیط قدرتمند usb وجود نداره. به این معنی که آنطوری که بخواید نمی تونید با پورت usb
کار کنید.

mahsal
سه شنبه 09 تیر 1388, 21:41 عصر
سلام
می خواستم سوالی در مورد ارتباط ft245وatmega32با codevision بپرسم.
من در بردم می خواهم داده ای که از طریق #c در ft245 نوشته شده را از طریق codevision
روی دو Pinاز پورت A بنویسم (PA0,PA1),و از طرف دیگر از پین 2و3 همان پورت A بخوانم و داده آن را روی پین 0و1 پورت c بنویسم.

PA0,PA1=محل دو LED که قرار است با ارسال داده از Ft245 به atmega روشن شوند

PA2,PA3=خواندن وضعیت دو کلید و نوشتن آن روی دو پین از پورت C و در نهایت ارسال به ft245

مشکلی که دارم این است که نمی دانم از طریق codevision چه طور با سیگنال های RD,WR,RXF,TXF مربوط به ft245 کار کنم؟
مثلا اینکه هنگامی که روی RD لبه پایین رونده بیاید را چه طور در codevision پیاده سازی کنم ؟تا داده از بافر receive روی پین های 0و1 پورت A نوشته شود.

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

dehghanimeh
چهارشنبه 10 تیر 1388, 07:17 صبح
دوست عزیز

ft245 یک پورت مجازی موازی LPT برای شما میسازه

ft232 یک پورت مجازی سریال COM برای شما میسازه

ft245 چون خروجی موازی داره (اطلاعات به صورت هشت رشته و چند خط کنترلی ارسال میشه)
باید به چند پورت ورودی میکرو وصل بشه که کار سختی هست.(کاری که شما انجام می دید)

ft232 خروجی سریال داره (با استفاده از سه رشته سیم) و تعداد زیادی هم از میکروهای avr این ارتباط راحت را پشتیبانی می کنن.

تصمیم با خودتونه

موفق باشد