PDA

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



behnam6500
09-02-2010, 01:04
سلام

دوستان دات نت کار، یه کلاس نوشتم برای usb که کلا کار با usb رو خیلی ساده کرده. برای انتقالهای کنترلی، وقفه ای و توده ای. که در این از libusb استفاده شده. در اصل کار با libusb رو ساده ترش کردم!!!

یه فایل dll هست با نام UsbController.dll که این کار رو انجام میده.

به وسیله این خیلی راحت میتونین با usb ارتباط برقرار کنین و داده ارسال و دریافت کنین! (سادگیش مثل پورت سریاله!)

دو تا برنامه براش گذاشتم. یکی با vb.net و یکی هم با #c

نظر یادتون نره....

دانلود:
ویرایش توسط مدیریت سایت

morteza_rk
09-02-2010, 15:50
من هنوز این فایلها و برنامه هارو ندیدم ، ولی همین که تا این حد پیگیر موضوع بودید و قطعا هستید و خواهید بود جای تشکر بسیار زیادی داره ، من شخصا تبریک میگم و صمیمانه آرزوی موفقیت و سربلندی براتون دارم.

morteza_rk
09-02-2010, 18:26
نمیدونم این صفحه ای که گذاشتید چرا باز نمیشه؟

شایدم مشکل از اینترنت منه! آخه جی میل هم باز نمیشه و کلا سرعتم اومده پائین ، اگه میشه یه جور دیگه یا یه جای دیگه آپش کنید تا منم بتونم ببینم ، ضمنا اگه میشه در همین تاپیک یه توضیح کامل و جامع درباره ی این فایل dll بذارید تا همه با نحوه ی استفاده از اون آشنا بشن ، پیشنهاد می کنم یه نظر سنجی هم در رابطه با این موضوع ترتیب بدین.

kavir
09-02-2010, 19:46
سلام
دستت درد نکنه چیز خیلی عالی هست:wink:
لطفا پیام خصوصی هم چک کنید

behnam6500
09-02-2010, 20:57
سلام

و اما یه توضیحاتی راجع به خطوط برنامه بدم...

فایل UsbController.dll همونطور که عرض کردم برای انتقالهای کنترلی و وقفه ای هست.

قبل از هر چیز به خاطر داشته باشین که در فولدر bin/debug پروژه سه فایل libusb0.dll - libusb0.sys و libusbdotnet.dll باشند.

UsbController.dll رو از قسمت add reference به پروژه اضافه میکنیم.

کلاس USBController در فضای نام UsbController.Programmer07.Net.USBController قرار داره. اول یه شی با نام USB از کلاس مربوطه میسازیم:

وی بی دات نت

Dim USB As New UsbController.Programmer07.Net.USBController.USBCo ntroller

سی شارپ

private UsbController.Programmer07.Net.USBController.USBCo ntroller USB = new UsbController.Programmer07.Net.USBController.USBCo ntroller();


بعد یه delegate به نام OnDataReceivedDelegate میسازیم:
وی بی دات نت

Private Delegate Sub OnDataReceivedDelegate(ByVal data() As Byte, ByVal Length As Integer)

سی شارپ


private delegate void OnDataReceivedDelegate(byte[] data, int Length);



Delegate ها، یكی دیگر از انواع مرجعی زبان C# و vb.net هستند كه با استفاده از آنها می‌توانید مرجعی به یك متد داشته باشید، بدین معنا كه delegate ها، آدرس متدی خاص را در خود نگه میدارند. در صورتیكه قبلاً با زبان C برنامه‌نویسی كرده‌اید، حتماً با این مفهوم آشنایی دارید. در زبان C این مفهوم با اشاره‌گرها (pointer) بیان می‌شود. اما برای افرادی كه با زبانهای دیگری برنامه‌نویسی می‌كرده‌اند و با این مفهوم مانوس نیستند، شاید این سوال مطرح شود كه چه نیازی به داشتن آدرس یك متد وجود دارد. برای پاسخ به این سوال اندكی باید تامل کنیم.

بطور كلی می‌توان گفت كه delegate نوعی است شبیه به متد و همانند آن نیز رفتار می‌كند. در حقیقت delegate انتزاعی (Abstraction) از یك متد است. در برنامه‌نویسی ممكن است به شرایطی برخورد كرده باشید كه در آنها می‌خواهید عمل خاصی را انجام دهید اما دقیقاً نمی‌دانید كه باید چه متد یا شی‌ءای را برای انجام آن عمل خاص مورد استفاده قرار دهید. در برنامه‌های تحت ویندوز این گونه مسائل مشهودتر هستند. برای مثال تصور كنید در برنامه‌ شما، دكمه‌ای قرار دارد كه پس از فشار دادن این دكمه توسط كاربر شی ای یا متدی باید فراخوانی شود تا عمل مورد نظر شما بر روی آن انجام گیرد. می‌توان بجای اتصال این دكمه به شیء یا متد خاص، آنرا به یك delegate مرتبط نمود و سپس آن delegate را به متد یا شیء خاصی در هنگام اجرای برنامه متصل نمود.

این کلاس دارای دو رخداد EndPointDataReceive و EndPointMessage هست. اولی زمانیکه داده ای در اندپوینت قرار میگیره اتفاق میفته و دومی زمانی که پیامهایی که در رابطه با اندپوینت به وجود میاد، اتفاق میفته. در رخداد form_load این دو رخداد را handle میکنیم به دو ساب روتین:

وی بی:


AddHandler USB.EndPointDataReceive, AddressOf UsbCtrl_DataReceived
AddHandler USB.EndPointMessage, AddressOf UsbCtrl_Message



سی شارپ:


USB.EndPointDataReceive += UsbCtrl_DataReceived;
USB.EndPointMessage += UsbCtrl_Message;



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

در فرم یک button داریم برای باز نمودن پورت usb (همون برقراری ارتباط با پورت)
اول کد مربوطه رو میزارم بعدش توضیح میدم:

وی بی:


USB.UsingEndPoint = True
USB.AutoReceiveDataOnEndPoints = True

USB.VendorID = &H16C0
USB.ProductID = &H5DC

USB.OpenDevice()
lblStatus.Text = USB.GetStatus.ToString



سی شارپ:


USB.UsingEndPoint = true;
USB.AutoReceiveDataOnEndPoints = true;

USB.VendorID = 0x16c0;
USB.ProductID = 0x5dc;

USB.OpenDevice();
lblStatus.Text = USB.GetStatus().ToString();



کلاس دارای 4 property هست. UsingEndPoint بطور پیش فرض برابر false هست اما زمانیکه بخواهیم از نوع وقفه ای و با اندپوینت ها کار کنیم برابر true قرار میدهیم. و AutoReceiveDataOnEndPoints هم بطور پیش فرض برابر false هست و زمانیکه بخواهیم داده ای که در endpoint هست را اتوماتیک بخوانیم، این رو true میکنیم.

دو property دیگر vendor id و product id هست که تابلو هستن.....

کلاس دارای متدی به نام OpenDevice هست که overload شده هست. یعنی هم میتونین بصورتی که تو برنامه اومده فراخوانی بشه و هم بصورت زیر:

USB.OpenDevice(0x16c0,0x05dc); x



کلاس دارای متدی به نام GetStatus هست که وضعیت دستگاه را برمیگردونه. مبنی بر اینکه آیا دستگاه وصله یا نه یا اینکه پورت close هست!

با استفاده از متد CloseDevice ارتباط با پورت قطع میشه.

اگر AutoReceiveDataOnEndPoints برابر True باشد، ساب روتین UsbCtrl_DataReceived اتوماتیک فراخوانی میشود. که داده رسیده بصورت آرایه ای از بایتها در پارامتر data قرار گرفته و طول آن در Length هس. ولی اگر AutoReceiveDataOnEndPoints برابر False باشد، این ساب روتین فراخوانی نمی شود. و ما برای خواندن مقدار داده اندپوینت باید تابع EndPointRead رو فراخوانی کنیم. مقدار بازگشتیش همون مقدار رسیده اندپوینت هست:


txtReceive.Text += System.Text.Encoding.UTF8.GetString(USB.EndPointRe ad)


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

USB.EndPointWrite(txtSend.Text.Trim)


برای انتقالهای کنترلی:

وی بی:

Dim buf(8) As Byte
USB.Transmit(UsbController.Programmer07.Net.USBCon troller.USBController.USBRequestType.Device_To_Hos t, _
&H2, 0, 0, buf, 1000)
txtCtrlMsg.Text += System.Text.Encoding.UTF8.GetString(buf)

سی شارپ:

byte[] buf = new byte[8]; x
USB.Transmit(UsbController.Programmer07.Net.USBCon troller.USBController.USBRequestType.Device_To_Hos t, 0x2, 0, 0, buf, 1000);
txtCtrlMsg.Text += System.Text.Encoding.UTF8.GetString(buf);


اول یه آرایه تعریف میکنیم مثل buf
بعد با استفاده از Transmit که oveload شده هست، اطلاعات رو ارسال میکنیم به این صورت:
آرگومان اول Transmit تعیین میکنه که آیا میخواهیم اطلاعات از کامپیوتر به دستگاه باشه یا بر عکس.
آرگومان دوم، بایتی هست که برای کنترل دستگاه فرستاده میشه.
آرگومانهای سوم و چهارم، اگر نخواهیم که اطلاعاتی رو به دستگاه بفرستیم صفر قرار میدهیم.
پنجمین آرگومان، اشاره به متغیر buf داره. داده ای که از دستگاه برمیگرده در این قرار میگیره.
و آخرین آرگومان هم timeout هست. 1000 میلی ثانیه.

ولی گفتم که transmit بصورت overload ساخته شده. به این صورت به دو طریق میتونم با transmit کار کنم. روش اول رو که گفتم و روش دوم هم به بدین صورت هست که میخواهیم داده ای به دستگاه بفرستیم:

USB.Transmit(UsbController.Programmer07.Net.USBCon troller.USBController.USBRequestType.Host_To_Devic e, _
&h1, CMD, buf, 300)


یه آرایه چهار عنصری به نام CMD ایجاد میکنیم از نوع Integer
همونطور که میبینین، به جای آرگومانهای سوم و چهارم، متغیر cmd قرار گرفته. حالا برای اینکه داده رو بفرستیم به دستگاه خانه های این آرایه را مقدار دهی می کنیم.

ببخشین اگر اشکال تایپی وجود داشت...

دوستان اگه بازم توضیح بیشتر نیاز بود در خدمتم....

موفق باشید :wink:

behnam6500
09-02-2010, 22:43
دوستان عزیز

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

You can see links before reply

موفق باشید :wink:

morteza_rk
09-02-2010, 23:23
ممنون

اگه بتونی بیشتر ادامه بدی کولاک می کنی. فکر کنم این بحث باز بمونه واز این به بعد افراد زیادی مشکلات احتمالی رو اینجا عنوان کنن.

احسنت

kavir
09-02-2010, 23:44
دستت درد نکنه در مجله میکروکنترلر منتشر خواهد شد
این پست هم "مهم" شد و انشاءالله ادامه بدید...

behnam6500
10-02-2010, 01:36
در این پست هم توضیحات مختصری درباره برنامه میکرو میدم... :D

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

یه فایل به نام usbconfig.h وجود داره که از اسمش معلومه که واسه چی هست...

داخل این فایل بیشترین قسمتهایی که نیاز به تغییر دارن اینا هستن:
1- Hardware Config:

USB_CFG_IOPORTNAME

پورت میکرویی که به USB وصل میشه


USB_CFG_DMINUS_BIT
USB_CFG_DPLUS_BIT

پینهایی از میکرو که به D- و D+ پورت USB وصل میشن

2- Device Description

USB_CFG_VENDOR_ID
USB_CFG_DEVICE_ID

برای تعیین VID و PID دستگاه هست


USB_CFG_DEVICE_NAME

برای تعیین نام دستگاه


USB_CFG_DEVICE_NAME_LEN

طول نام دستگاه را تعیین میکند.

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

و اما فایل main.c:
قسمت USB report descripto برای توصیف دستگاه هست.

تابع usbFunctionSetup:



uchar usbFunctionSetup(uchar data[8]) {

uchar len = 0;

if (data[1] == 0x01)
{
replyBuffer[0] = 'b';
replyBuffer[1] = 'e';
replyBuffer[2] = 'h';
replyBuffer[3] = 'n';
replyBuffer[4] = 'a';
replyBuffer[5] = 'm';
ledRedOn();
len = 6;
}
else if (data[1] == 0x02)
{
replyBuffer[0] = '1';
replyBuffer[1] = '2';
replyBuffer[2] = '3';
replyBuffer[3] = '4';
ledRedOff();
len = 4;
}


این قسمت برای انتقال کنترلی هست. بایت کنترلی که از کامپیوتر ارسال میشه به میکرو، در اندیس 1 متغیر data قرار میگیره.
اگه به برنامه applicationای که گذاشتم دقت کنین، میبینین که در قسمت انتقال کنترلی دو مقدار هگز 1 و 2 به میکرو ارسال میشه. میکرو هر کدام از این داده های رسیده رو بررسی میکنه و اگه برابر 1 یا 2 بود، برای پاسخ آرایه replyBuffer رو مقار دهی میکنه و طول آرایه رو در len می ریزه. سپس میکرو این اطلاعات موجود در replyBuffer رو به کامپیوتر ارسال میکنه و در قسمت برنامه کامیپوتری، مقادیر در آرایه buf قرار میگیرند.

تابع usbFunctionRead و usbFunctionWrite برای انتقالهای با حجم بالاتر هست که بصورت صفحه ای ارسال میشه. یعنی در هر انتقال کنترلی 255 بایت منتقل میشه. که در اینجا ازش استفاده نکردیم.

در داخل تابع main، پینهای 4 و 5 پورت C رو ورودی شده بعنوان کلید!
کاربر هر کدام از کلید ها رو که فشار بده، میکرو بر حسب کلید فشار داده شده، مقداری رو از طریق انتقال وقفه ای ارسال میکنه به میزبان (کامپیوتر)

با استفاده از تابع keyPressed بررسی میشه که کدام کلید فشار داده شده و عددش در متغیر key قرار میگیره.
وضعیت کلید فشار داده شده قبلی در متغیر lastKey قرار داده میشه تا با شروطی که در برنامه اومده این امکان به وجود بیاد که اگه کاربر کلید را مدام در حالت بسته نگه داشت، برنامه فقط یکبار داده ارسال کنه! نه n بار....

اگر کلید فشار داده شده با کلید قبلی تفاوت داشت، مقدار keyDidChange 1 میشود.
سپس در شرط



if(keyDidChange && usbInterruptIsReady()) x

اگر keyDidChange برابر 1 بود و usb برای انتقال وقفه ای آماده بود، میکرو آرایه reportBuffer رو بر حسب کلید فشار داده شده پر میکنه و به وسیله تابع usbSetInterrupt داده ارسال میشه و اون طرف هم کامیپوتر با استفاده از اون کلاس دریافتش میکنه




usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); x


به همین سادگی!!!

morteza_rk
10-02-2010, 02:13
ممنون ، واقعا عالی بود

خب مهندس اگه بخوایم یه برنامه ی پیچیده تر بنویسیم چی؟ اونوقت به توابع و قسمتهای دیگه نیازی نداریم؟

مثلا فرض کنیم می خوایم از طریق پورت USB یه LCD کاراکتری رو کنترل کنیم! مثلا عبارت "in the name of GOD" رو از کامپیوتر بفرستیم به میکرو بعد میکرو اونو روی LCD نشون بده یا از طریق یه میکروی دیگه با استفاده از پورت سریال یه رشته به میکرویی که به پورت USB متصل هست بفرستیم و اونم رشته رو به کامپیوتر بفرسته و ....

منظورم اینه که ما در هر ارتباط USB دقیقا باید چه مواردی رو رعایت کنیم و وجود کدوم توابع ضروری و حتمی هست؟ بعبارتی می خوام بدونم الگوی کلی برای این ارتباط به چه شکل هست؟

behnam6500
10-02-2010, 02:39
چیزهایی که ما در این برنامه بهشون نیاز داریم، توابع usbFunctionSetup و usbFunctionRead و usbFunctionWrite و یه سری از خطوط داخل تابع main هست.

برای اینکه متنی از کامپیوتر به میکرو بفرستیم (بیش از 7-8) بایت، باید داده رو بصورت صفحه ای ارسال کنیم...

فرض کن که میخوایم متن یه textbox رو بفرستیم به میکرو:
برنامه کامپیوتریش با استفاده از کلاس به این صورت تغییر میکنه:
1- تعداد عناصر آرایه buf بشه 253.
2- متن textbox در این آرایه قرار بگیره.
3- با دستور زیر اونو میفرستیم به میکرو:



USB.Transmit(UsbController.Programmer07.Net.USBCon troller.USBController.USBRequestType.Host_To_Devic e, _
&H3, 0, 0, buf, 1000)

توجه داشته باش که این کدهای هگز 1و2و3 دلخواه هستند...
این از قسمت کامپیوتر که متن textbox رو فرستادبه میکرو...

و امااااا قسمت میکرو:
برای این منظور این تغییرات را در برنامه میکرو میدیم (یا این خطوط اضافه میشه):
در تابع usbFunctionSetup کد زیر اضافه میشه:



else if (data[1] == 0x03)
{
len = 0xff; x
}

مقدار ff به میکرو میگه که داده رسیده بیش از 8 بایته (صفحه ای)، پس تابع usbFunctionWrite فراخوانی میشه که data حاوی متن textox هست و len هم طول متنه (data و len آرگومانهای تابع هستند).

حالا داده رو میتونی رو lcd بنویسی یا هر کاری که دوست داری....

موفق باشی :wink:

armstk
10-02-2010, 08:33
با تشكر از آقاي behnam ، مي خاستم بدونم من فقط مي خام يك led رو از طريق پورت usb خاموش و روشن كنم فقط همين !
اگر لطف كنن يك آموزش ساده در همين مورد بزارن واقعا عالي ميشه

morteza_rk
10-02-2010, 12:17
واقعا عالیه ، تا الآن یادگیری winavr رو به تاخیر می نداختمو از اینکه هی باید با این زبان C کلنجار می رفتم غصه ام می گرفت ، ولی حالا می فهمم که واقعا ارزش داره آدم کار با این کامپایلر رو یار بگیره ، از این به بعد از طریق آموزشهای انجمن میرم دنبال یادگیری این کامپایلر.

آقا بهنام خسته نباشی ، خیلی گلی ، من یکی توی این کلاس و کلاسی که واسه USBasp گذاشتی شاگرد پر و پا قرصتم. :o

behnam6500
10-02-2010, 15:04
با تشكر از آقاي behnam ، مي خاستم بدونم من فقط مي خام يك led رو از طريق پورت usb خاموش و روشن كنم فقط همين !
اگر لطف كنن يك آموزش ساده در همين مورد بزارن واقعا عالي ميشه

دوست عزیز

در سورس میکرو، دقیقا خاموش و روشن کردن led هست!
اگه به سورس برنامه دقت کنی اینرو میبینی:



#define ledRedOn() PORTC &= ~(1 << PC1)
#define ledRedOff() PORTC |= (1 << PC1)
#define ledGreenOn() PORTC &= ~(1 << PC0)
#define ledGreenOff() PORTC |= (1 << PC0)


و در قسمت main:



DDRC |= 1 << DDC0; // Set PC0 to OutPut x
DDRC |= 1 << DDC1; // Set PC1 to OutPut x


پینهای 0و1 پورت C خروجی تعریف شده اند برای LED

کار خاموش و روشن شدن LED هم بدین صورت اومده:



uchar usbFunctionSetup(uchar data[8]) {

uchar len = 0;

if (data[1] == 0x01)
{
replyBuffer[0] = 'b';
replyBuffer[1] = 'e';
replyBuffer[2] = 'h';
replyBuffer[3] = 'n';
replyBuffer[4] = 'a';
replyBuffer[5] = 'm';
ledRedOn();
len = 6;
}
else if (data[1] == 0x02)
{
replyBuffer[0] = '1';
replyBuffer[1] = '2';
replyBuffer[2] = '3';
replyBuffer[3] = '4';
ledRedOff();
len = 4;
}


usbMsgPtr = replyBuffer;

return len;
}


موفق باشی :wink:

ali3130
14-02-2010, 02:27
سلام
اقای مهندس یه کمکی هم به من بکنی ازت ممنون میشم
من یک A/D (آنالوگ به دیجیتال کانورتر) دارم که میخ.ام اطلاعات خروجی اون رو روی کامپیوتر ببرم بعد روشون آنالیز کنم.
من یک برد ساختم توسط یک میکروکنترلر ATmega32 و FT232 (مبدل سریال به USB) که مبدل پورت موازی به USB هست.
اما هرچی گشتم تو کتاب و اینترنت برنامه برای پروگرم میکرو برای انتقال اطلاعات یکی از پورتهای میکرو توسط بخش USART و سپس انتقال آن به کامپیوتر به صورت پورت USB توسط FT232 پیدا نکردم.
مشکل بعدی من اینه که یه برنامه [هر چند نمیدونم درسته یا نه] واسه میکرو نوشتم ولی هیچ خروجی توی پایه های USART میکرو نمی بینم.
راستی وقتی این مدار اطلاعات رو به کامپیوتر بفرسته، ما کجا می‏تونیم این اطلاعات رو ببینیم.

ممنون میشم پاسخم رو بدید.
حق نگهدارتون

behnam6500
14-02-2010, 11:26
سلام
اقای مهندس یه کمکی هم به من بکنی ازت ممنون میشم
من یک A/D (آنالوگ به دیجیتال کانورتر) دارم که میخ.ام اطلاعات خروجی اون رو روی کامپیوتر ببرم بعد روشون آنالیز کنم.
من یک برد ساختم توسط یک میکروکنترلر ATmega32 و FT232 (مبدل سریال به USB) که مبدل پورت موازی به USB هست.
اما هرچی گشتم تو کتاب و اینترنت برنامه برای پروگرم میکرو برای انتقال اطلاعات یکی از پورتهای میکرو توسط بخش USART و سپس انتقال آن به کامپیوتر به صورت پورت USB توسط FT232 پیدا نکردم.
مشکل بعدی من اینه که یه برنامه [هر چند نمیدونم درسته یا نه] واسه میکرو نوشتم ولی هیچ خروجی توی پایه های USART میکرو نمی بینم.
راستی وقتی این مدار اطلاعات رو به کامپیوتر بفرسته، ما کجا می‏تونیم این اطلاعات رو ببینیم.

ممنون میشم پاسخم رو بدید.
حق نگهدارتون

دوست عزیز

کار با ftdi تماما بصورت سریال هست. ftdi یه virtual communication port واستون میسازه توی کامپیوتر که ارتباط باهاش مثل پورت سریاله. شما نیاز دارین که اطلاعات رو به وسیله پایه های txd و rxd بین میکرو و ftdi منتقل کنی و خود چیپ ftdi اونو اتوماتیک به کامپیوتر میده. در سمت کامپیوتر هم به وسیله برنامه نویسی سریال اطلاعات رو بررسی می کنی.

این کلاسی که در این تاپیک معرفی کردم، برای ارتباط مستقیم کامپیوتر با میکرو هست بدون چیپ واسط (مثل ftdi)
اگه چیپ رو فاکتور بگیری، میتونی از این کلاس استفاده کنی.



مشکل بعدی من اینه که یه برنامه [هر چند نمیدونم درسته یا نه] واسه میکرو نوشتم ولی هیچ خروجی توی پایه های USART میکرو نمی بینم.


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



راستی وقتی این مدار اطلاعات رو به کامپیوتر بفرسته، ما کجا می‏تونیم این اطلاعات رو ببینیم.


کدوم مدار؟؟
مداری که با ftdi بستین یا مداری که با این کلاس کار میکنه؟؟؟؟
اگه با ftdi منظورتونه خوب برنامه نویسی کاملا مربوط به پورت سریاله و در بافر شی سریال اطلاعات قرار میگیره.
ولی با این کلاس، اطلاعات در buf هست. (مطالب رو از اول بخونین)

موفق باشین:wink:

ali3130
14-02-2010, 18:21
سلام اقای مدیر
یعنی برای اینکه مدار طراحی شده توسط FT232 بتونه اطلاعاتش رو به کامپیوتر بده باید براش یک برنامه توی کامپیوتر نوشته بشه؟
راسیتش من الکترونیکی هستم و آشنایی با این برنامه نویسی ها با دلفی و #C و ... ندارم. البته تا حدودی به C واردم. ولی تا حالا ارتباط با کامپیوتر رو با پورت پرینتر (25Pin )(LPT) انجام دادم و خود نرم افزاری که باهاش کار میکردم (LabView) از این پورت پشتیبانی میکرد. ولی اولین باری هست که میخوام ارتباط با پورت USB رو تجربه کنم. البته به سرعتش برای تبادل اطلاعات و راحتی ارتباطش با لپ تاب نیاز دارم وگرنه خودم رو توی دردسر این کار نمی انداختم.
برای پیشنهاد یک تاپیک دیگه هم ممنون حتما این کار رو میکنم.
متشکرم

behnam6500
14-02-2010, 18:49
سلام اقای مدیر
یعنی برای اینکه مدار طراحی شده توسط FT232 بتونه اطلاعاتش رو به کامپیوتر بده باید براش یک برنامه توی کامپیوتر نوشته بشه؟
راسیتش من الکترونیکی هستم و آشنایی با این برنامه نویسی ها با دلفی و #C و ... ندارم. البته تا حدودی به C واردم. ولی تا حالا ارتباط با کامپیوتر رو با پورت پرینتر (25Pin )(LPT) انجام دادم و خود نرم افزاری که باهاش کار میکردم (LabView) از این پورت پشتیبانی میکرد. ولی اولین باری هست که میخوام ارتباط با پورت USB رو تجربه کنم. البته به سرعتش برای تبادل اطلاعات و راحتی ارتباطش با لپ تاب نیاز دارم وگرنه خودم رو توی دردسر این کار نمی انداختم.
برای پیشنهاد یک تاپیک دیگه هم ممنون حتما این کار رو میکنم.
متشکرم

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

زمانی که مدار ftdi رو کامل بستی و توی اینترنت یه سرچی بکن برای دریافت سورس برنامه با پورت سریال. خیلی راحت پورت سریال ftd رو میدی به برنامه و اطلاعات رو دریافت می کنی. :wink:

armstk
14-02-2010, 18:49
سلام اقای مدیر
یعنی برای اینکه مدار طراحی شده توسط FT232 بتونه اطلاعاتش رو به کامپیوتر بده باید براش یک برنامه توی کامپیوتر نوشته بشه؟
راسیتش من الکترونیکی هستم و آشنایی با این برنامه نویسی ها با دلفی و #C و ... ندارم. البته تا حدودی به C واردم. ولی تا حالا ارتباط با کامپیوتر رو با پورت پرینتر (25Pin )(LPT) انجام دادم و خود نرم افزاری که باهاش کار میکردم (LabView) از این پورت پشتیبانی میکرد. ولی اولین باری هست که میخوام ارتباط با پورت USB رو تجربه کنم. البته به سرعتش برای تبادل اطلاعات و راحتی ارتباطش با لپ تاب نیاز دارم وگرنه خودم رو توی دردسر این کار نمی انداختم.
برای پیشنهاد یک تاپیک دیگه هم ممنون حتما این کار رو میکنم.
متشکرم

شما براي استفاده از ft232 بايد يك برنامه هم داخله سيستم بنويسي كار با ft232 مشابه با پورت سريال هستش و هيچ تفوتي نميكنه چون كه ft232 خودش يك پورت سريال مجازي در device manager درست ميكنه
براي بخاي يك نرم افزار براي استفاده از ft232 بكني ميتوني از ويژوال بيسيك استفاده كني تقريبا شبيه بسكام خودمون ميمونه
اينم يك كتاب كه نحوه نوشتن يك برنامه براي ارتباط با پورت سريال هستش
You can see links before reply

ali3130
14-02-2010, 20:22
سلام
ببخشید من منظور این بخش از صحبت هاتون رو نگرفتم

" كار با ft232 مشابه با پورت سريال هستش و هيچ تفوتي نميكنه چون كه ft232 خودش يك پورت سريال مجازي در device manager درست ميكنه"

آخه من اصلا این برنامه هایی رو که پیدا میکنم و یا آنهایی که شما به من داده اید رو متوجه نمیشم.

راستی من کدویژن کار کردم که احتمالا میدانید این برنامه با زبان C برنامه ریزی می شود نه بیسیک، یه مشکل دیگه سر راه منه!

راستی من pdf رو نگاه کردم اما راستش چیزی نگرفتم.

morteza_rk
14-02-2010, 21:07
دوست عزیز وقتی شما تراشه ی ft232 رو به پورت USB کامپیوتر وصل می کنید بعد از چند ثانیه بطور خودکار یک پورت COM در قسمت Device manager کامپیوتر شما ساخته میشه. در عمل شمما با این پورت که بهش پورت مجازی میگن ارتباط بر قرار می کنید اما در اصل قضیه اطلاعات روی پورت USB رد و بدل میشن به این میگن مبدل پورت سریال به USB و بلعکس.

برای اینکه بتونید قسمت Device manager رو ببینید بصورت زیر عمل کنید :

1. بر روی My Computer راست کلیک کنید.
2. گزینه ی آخر یعنی Properties رو انتخاب کنید.
3. سر برگ Hardware رو انتخاب کنید.
4. بر روی دکمه ی Device Manager کلیک کنید.

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

یکی از این موارد گزینه ای به نام (Ports (COM & LPT هست ، اگر بر روی این گزینه کلیک کنید لیست پورتهای COM و LPT که بصورت مجازی یا واقعی بر روی سیستم شما وجود داره ظاهر میشه. مثلا COM1 و COM4 و LPT1

حالا اگه شما تراشه ی ft232 رو به پورت USB متصل کنید یک پورت COM دیگه هم به این پورتها اضافه میشه ، که شما در برنامه هاتون باید از این پورت COM استفاده کنید و فرقش با پورتهای دیگه اینه که هرچی شما روی این پورت بفرستید به پورت USB ارسال میشه.

البته فکر کنم برای اینکه ویندوز بتونه این پورت COM رو بشناسه به درایور هم نیاز داره که این درایورها از طریق سایت FTDI بطور رایگان رائه میشه.

البته اگه نرم افزار بسکام (از نسخه ی 1.11.9.0) رو نصب کنید این درایورها بطور خودکار نصب میشن!

ali3130
15-02-2010, 01:47
علیکم سلام
از اینکه به طور کامل نحوه‏ی اتصال به کامپیوتر را برام توضیح دادید متشکرم.
اما دوست عزیز بنده تمام این مراحل را طی کردم و هم پورت مبدل سریال در قسمت USB controllers نصب شده و هم در قسمت Port(COM&LPT) پورت USB Serial Port (COM5) نصب شده است. و همچنین همانطوری که شما اشاره فرمودید درایور اون رو از سایت FTDIchip گرفتم و نصب کردم.
دوست گرامی من نمیدونم کجا این اطلاعات رو روی کامپیوتر ببینم. دوستان و شما فرموده‏اید یک برنامه نیاز داره و من این برنامه رو ندارم. و اگه گیرش هم بیارم چون زبان دلفی و #C و ... نمی‏دونم ، نمی‏تونم تغییرات توش بدم.

از پیگیری شما توی جواب دادن به سوالاتم متشکرم.
انشاءاالله ایام به کام باشه.

morteza_rk
15-02-2010, 03:44
خب پس تا اینجای کار مشکلی نبود.

میمونه نحوه ی دریافت اطلاعات در طرف کامپیوتر! برای این کار باید یا از نرم افزارهای آماده استفاده کنی یا خودت یه نرم افزار بنویسی. از نرم افزارهای آماده میشه به محیط Hyper Terminal اشاره کرد که در همه ی ویندوزها وجود داره.

اما اگه می خواید داده ها رو به ترتیب یا قالب خاصی دریافت کنید و محیط کاربر پسند و راحتی در اختیار کاربر قرار بدید باید خودتون یه نرم افزار کوچیک تهیه کنید. برای این کار می تونید از VB یا VB.NET استفاده کنید که کار کردن باهاشون خیلی سادست. آموزش نحوه ی کار با پورت سریال در این زبانها در همین انجمن موجوده و می تونید دانلودش کنید. محیط کاریش هم بسیار ساده و قابل فهم هست.

فراموش نکنید که شما مجبورید کار با این زبانهای ویژوال رو یاد بگیرید. دیر یا زود! پس همین الان شروع کنید.

Mahdi_66
16-02-2010, 13:21
سلام بهنام عزیز
من مدار Atmega8 رو بستم با فرکانس 16MHZ درایور اونم با اسم USB Human Interface Devic نصب شد. وقتی در نرم افزار روی Open Device کلیک میکنم پیام Unable_To_Find_Device نمایش داده میشه. نمیدونم مشکل کجاست

farzadsw
16-02-2010, 14:29
نه دیگه ، نباید بگذارید خود ویندوز اتوماتیک نصب کنه
اگه به صورت USB Human Interface Device نصب بشه کار نمیکنه
باید وقتی میخواد نصب کنه به صورت دستی مسیر فایل رو درایور رو بدید و بعدش گزینه پایینی رو انتخاب کنبد تا خودتون تو مرحله بعدی بهش بگید که کدوم درایور رو نصب کنه
الانم که نصب شده از طریق update driver میتونید درایور درستش رو نصب کنید.

Mahdi_66
16-02-2010, 15:14
سلام دستت درد نکنه مشکلم حل شد:o

Mahdi_66
16-02-2010, 20:14
با سلام به همه دوستان
میخواستم بدونم راهی وجود داره که بشه از UsbController.dll در Windows Presentation Foundation استفاده کرد.
من که نتونستم.

behnam6500
17-02-2010, 12:55
با سلام به همه دوستان
میخواستم بدونم راهی وجود داره که بشه از UsbController.dll در Windows Presentation Foundation استفاده کرد.
من که نتونستم.

سلام

بله. برای استفاده از کلاس در Windows Presentation Foundation فقط کافیه که اسمبلی System.windows.forms که کلاس پایه System.windows.forms.control رو شامل میشه، به پروژت اضافه کنی.

از نظر برنامه نویسی هیچ فرقی نداره با مثالهایی که گذاشتم.

موفق باشید :wink:

Mahdi_66
17-02-2010, 14:48
دستت درد نکنه راه افتاد.
یه سوال دیگه : میشه از این مدار برای ساخت پروگرمر jtag استفاده کرد که تمام امکانات رو داشته باشه (دیباگر ، برنامه ریزی و...) ؟

behnam6500
17-02-2010, 23:21
دستت درد نکنه راه افتاد.
یه سوال دیگه : میشه از این مدار برای ساخت پروگرمر jtag استفاده کرد که تمام امکانات رو داشته باشه (دیباگر ، برنامه ریزی و...) ؟

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

Mortezai
04-11-2011, 15:55
آقای بهنام عزیز با تشکر از مقاله مفیدتون
اما متاسفانه دیگه با گذشت زمان لینکهای دانلود قابل استفاده نیستن.

اگه ممکنه اونارو دوباره بذارین
متشکرم

mzarkoob
07-11-2011, 05:09
سلام

دوستان دات نت کار، یه کلاس نوشتم برای usb که کلا کار با usb رو خیلی ساده کرده. برای انتقالهای کنترلی، وقفه ای و توده ای. که در این از libusb استفاده شده. در اصل کار با libusb رو ساده ترش کردم!!!

یه فایل dll هست با نام UsbController.dll که این کار رو انجام میده.

به وسیله این خیلی راحت میتونین با usb ارتباط برقرار کنین و داده ارسال و دریافت کنین! (سادگیش مثل پورت سریاله!)

دو تا برنامه براش گذاشتم. یکی با vb.net و یکی هم با #c

نظر یادتون نره....

دانلود:


با سلام
با تشکر بابت این مطلب مفید. می خواستم بگم لینک دانلود وجود نداره. cry:: ممنون میشم مجددا بذارید. از دوستان که گرفتند می تونند مجددا آپلود کنند؟

kavir
07-11-2011, 11:24
سلام
دوستان فایلها روی سیستم بود در صفحه اول براتون ضمیمه کردم استفاده کنید

esisafa
04-03-2012, 23:53
سلام
اومدم پروژه رو با atmega32a راه بندازم. ولتاژ تغذیه میکرو 3.3 ولت دادم که با این کار دیودهای زنر حذف بشن. با ولتاژ 3.3 و فرکانس 12 مگ میکرو رو آزمایش کردم با برنامه چشمک زن راحت کار میکنه و مشکل تغذیه ی کم، نداشت.
برای بار اول که برنامه رو روی میکرو ریختم ویندوز شروع به شناسایی کرد. ولی از دفعه ی بعد تا حالا دیگه این اتفاع نیوفتاده و همش پیغام خطا در شناسایی میده.

کسی میدونه مشکل چیه؟؟؟؟؟
-از ولتاژ تغذیه؟
-نوع میکرو؟
-...

sadmonew
05-03-2012, 00:31
سلام
اومدم پروژه رو با atmega32a راه بندازم. ولتاژ تغذیه میکرو 3.3 ولت دادم که با این کار دیودهای زنر حذف بشن. با ولتاژ 3.3 و فرکانس 12 مگ میکرو رو آزمایش کردم با برنامه چشمک زن راحت کار میکنه و مشکل تغذیه ی کم، نداشت.
برای بار اول که برنامه رو روی میکرو ریختم ویندوز شروع به شناسایی کرد. ولی از دفعه ی بعد تا حالا دیگه این اتفاع نیوفتاده و همش پیغام خطا در شناسایی میده.

کسی میدونه مشکل چیه؟؟؟؟؟
-از ولتاژ تغذیه؟
-نوع میکرو؟
-...
سلام مهندس صفامنش:hi:
شما چه تغييراتي تو برنامه دادين؟
بار اول كه به كامپيوتر وصل كردين چه پيغامي داد؟
دفعه دوم چه پيغامي داد؟

esisafa
05-03-2012, 01:06
ممنون
تغییرات سخت افزاری:
پایه int0 = PIND2
پایه دیتای مثبت = PIND3
دیتای منفی = PIND4
این تغییرات رو در usbconfig.h هم دادم
ledها و سوئیچها رو نذاشتم

ولتاژ هم که گفتم 3.3 ولته

برنامه هم همین برنامه آقا بهنام هست که با avr studio 5 کاپایل کردم برای mega32

دفعه اول در حال شناسایی بود و usb test که نام دستگاه هست رو مینوشت ولی آخرش گفت که ممکنه درست کار نکنه چون خودش درایور رو شناخت
دفعه بعد هم که not recognize ( امیدوارم درست نوشته باشم)( پیام تشخیص داده نمیشود) داده شد

البته تغییراتی هم در hid و vid دادم ولی مشکل حل نشد

هر مداری تا حالا دیدم پورت پایه وقفه و دیتا فرق میکرد. ممکنه مشکل از این باشه که من همه رو روی یک پورت گرفتم باشه؟

نکنه فقط با mega8 دائما درست کار میکنه. این حرفم مسخره هست ولی گفتم بازم بپرسم

sadmonew
05-03-2012, 01:19
مهندس درايور رو حذف كنيد و دوباره دستي نصبش كنيد(خودتون آدرس درايور رو براش مشخص كنين).
البته دوستان تو چندتا پست اول در مورد درست كار نكردن و رفعش مشكل توضيح دادن.
تست كنيد ببينيد جواب ميده؟

esisafa
05-03-2012, 01:31
ممنون ولی وقتی میگه وسیله تشخیص داده نمیشه not recognize اصلا به مرحله نصب دایور نمیرسه که بخوام عوضش کنم. اول باید یک وسیله شناسایی بشه که بعدش درایور رو عوض کنم

esisafa
06-03-2012, 02:42
با تشکر دوباره. ولی کسی نیست که نظری داشته باشه.

برای این میکرو رو با 3.3 ولت درایو کردم چون دیود زنر 3.6 ندارم
تو شهرمون تا حالا به تعمیرگاه های لوازم الکتریکی سر نزدم ببینم زنر 3.6 ولت دارن یا نه. البته ندارن. و فاصله من تا نزدیکترین فروشگاه 250 کیلومتره.!!!!!!!

آیا برنامه آقا بهنام مشکل داره. یا من مشکل دارم. یا از این ولتاژ تغذیه ی 3.3 ولته میکروه. البته گفتم که میکرو برای چشمک زن درست کار میکنه

armstk
06-03-2012, 09:32
با تشکر دوباره. ولی کسی نیست که نظری داشته باشه.

برای این میکرو رو با 3.3 ولت درایو کردم چون دیود زنر 3.6 ندارم
تو شهرمون تا حالا به تعمیرگاه های لوازم الکتریکی سر نزدم ببینم زنر 3.6 ولت دارن یا نه. البته ندارن. و فاصله من تا نزدیکترین فروشگاه 250 کیلومتره.!!!!!!!

آیا برنامه آقا بهنام مشکل داره. یا من مشکل دارم. یا از این ولتاژ تغذیه ی 3.3 ولته میکروه. البته گفتم که میکرو برای چشمک زن درست کار میکنه
سلام مهندس
ببین حتما هم نمیخاد دیود زنر بزاری
اگر میکرو رو با 3.3 ولت راه بندازی دیگه نیازی به زنر هم نداری
میتونی یک led قرمز رو با vcc سری کنی تا دیگه نیازی هم به رگولاتور نباشه (این روش کامل جواب میده)
اگرم دیود زنر بهای من میتونم بخرم برات بفرستم رفیق:wink:

esisafa
06-03-2012, 12:39
بله درست میگین
منم میکرو رو با 3.3 ولت پاور کامپیوتر راه میندازم.
پس با این تفاسیر مشکل از مدار نیست. چون یکبار کارکرده. چرا دوباره کار نمیکنه؟؟عجیبه
یعنی برنامه آقا بهنام مشکل داره. خود آقا بهنام اینورا نیستن. کسی این برنامه رو تا حالا کامپایل کرده؟؟؟
اگه از این برنامه کسی نتیجه گرفته که پس مطمئن باشم مشکل از برنامه نیست و برم سراغ آزمون خطا و تعویض تک تک وسایل

behnam6500
13-03-2012, 02:02
1. دیود زنر استفاده کن و با 5 ولت بیارش بالا

2. درایور رو کاملا از روی سیستم حذف کن

3. اگه تغییری در فایل های درایور دادی چک کن و با درایور اصلی که گذاشتم دوباره تست بزن

4. قطعاتت رو چک کن، کابل یو اس بی و هر چیزی که به ذهنت میرسه...

برنامه هیچ ایرادی نداره از این بابت مطمئن باشید چون تا الان هم دارم از اون برنامه بدون هیچ تغییری استفاده میکنم.

esisafa
14-03-2012, 01:35
اقا بهنام دمت گرم
نمیدونم چی شد بعد از چند روز که رفتم سراغش تا دوباره ادامه بدم، یکم خازن و از این چیزا بهش اضافه کردم و با همون ولتاژ 3.3 ولت روشن کردم یهو کار کرد.
الان مثل ساعت کار میکنه. حتی پایه اینتراپت و d+ رو یکی کردم یعنی فقط با دوتا پایه ی میکرو کار میکنم.
فقط خواست منو چند روز الاف کنه
بازم ممنون از برنامتون

esisafa
14-03-2012, 01:42
یک سوال هم داشتم.
این کلاس usb controller که نوشتین از تمام امکانات خود کلاس libusb استفاده میکنه؟ یا فقط بعضی چیزا؟؟

m-arm
09-06-2012, 11:42
دوستان عزیز

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

4shared.com - free file sharing and storage (You can see links before reply)

موفق باشید :wink:

سلام
دستتون درد نکنه. لطفا سورس و شماتیک را دوباره اپلود کنید این لینک حذف شده...

mansoory
24-07-2012, 13:02
سلام

دوستان دات نت کار، یه کلاس نوشتم برای usb که کلا کار با usb رو خیلی ساده کرده. برای انتقالهای کنترلی، وقفه ای و توده ای. که در این از libusb استفاده شده. در اصل کار با libusb رو ساده ترش کردم!!!

یه فایل dll هست با نام usbcontroller.dll که این کار رو انجام میده.

به وسیله این خیلی راحت میتونین با usb ارتباط برقرار کنین و داده ارسال و دریافت کنین! (سادگیش مثل پورت سریاله!)

دو تا برنامه براش گذاشتم. یکی با vb.net و یکی هم با #c

نظر یادتون نره....

دانلود:
ویرایش توسط مدیریت سایت
دستت درد نکنه.
وقفه ها سخت افزاری تولید میشه یا اینکه تو یه حلقه اونو چک می کنه و وقفه رو ایجاد می کنه؟

mahsam
10-12-2012, 23:56
ممنون از برنامه ای که در اختیار ما قرار دادید .
می خواستم بدونم در کد سی شارپ با عوض کردن یو اس پی غیر از vid و pid دیگه چی را باید تغییر داد ؟
آخه من هر یو اس پی ای را امتحان می کنیم برنامه پیداش نمی کنه!

mahsam
30-01-2013, 00:26
سلام
ببخشید میشه در مورد انتقال کنترلی برنامه ای که به زبان سی شارپ در اختیار گذاشتید بیشتر توضیح بدهید و چرا این قسمت برنامه جواب نمیده؟!!!
با تشکر :0013:

mohsenchi
03-04-2013, 19:46
دوستان عزیز

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

4shared.com - free file sharing and storage (You can see links before reply)

موفق باشید :wink:
ممنون از توضیحات کامل شما
اگه لینک تصحیح بشه موفق تر هم میشیم.:(