PDA

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



esisafa
30-09-2011, 09:47
با سلام
در اینجا میخواهیم نحوه ی کار با پورت usb رو به صورت مستقیم و بدون هیچ واسطی مثل ft232 ، با همکاری همه ی دوستان آموزش بدیم
برای این کار باید:
زبان برنامه C#.net رو برای برنامه نویسی کامپیوتر یاد داشته باشین
زبان C++ رو برای برنامه نویسی میکرو در محیط winavr یا avrstudio5 یاد داشته باشین
بتونین از کلاسها و توابع در C# و C++ درک کاملی داشته باشین


اگه نظری دارین بگین تا بزودی اگه از این موضوع استقبال کردین مطالب رو ادامه بدم

------------------------------------------------------------------------------------------------

اگه تاپیک رو ادامه بدین (پست 23) یک برنامه visual C# نوشتم که مستقیما از LibUsbDotNet 1.0.1 استفاده میکنه
با خود برنامه میکرو کنترلر در تاپیک کلاسی برای انتقالهای وقفه ای، کنترلی و توده ای usb (You can see links before reply) کار میکنه و همون مدار.

------------------------------------------------------------------------------------------------

در ادامه میتونین برنامه ی peripheral controler رو دریافت کنین. (پست 50)
برنامه ای که توسط اون میتونین تمام رجیستر های میکرو mega32 رو توسط برنامه کامپیوتر کنترل کنین.
مثلا سرعت موتور با چپ گرد راست گرد رو از طریق کامپیوتر کنترل کنین. چیز جدیدی باید باشه.

kavir
30-09-2011, 11:59
سلام این مبحث خوبیه . فقط با avr میخواین توضیح بدین؟
توی مجلهمیکرو یه بخش هایی استارت خورده بود ولی اون دوست عزیز ادامه نداد

esisafa
30-09-2011, 12:08
فعلا چون میخوام از توابع سطح بالا استفاده کنم و این کتابخونه ها برای avr نوشته شدن، پس فعلا فقط avr
ولی بعدا شاید با همکاری هم تعمیمش دادیم برای حتی arm . البته armها خودشون ابزار هایی برای usb دارن که کارشون فرق میکنه. این مطالب فعلا برای avr هایی هست که خودشون usb ندارن. من با pic هم تا حالا کار نکردم و احتمالا تا مجبور نشم هم کار نخواهم کرد.

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

kavir
30-09-2011, 15:26
فعلا چون میخوام از توابع سطح بالا استفاده کنم و این کتابخونه ها برای avr نوشته شدن، پس فعلا فقط avr
ولی بعدا شاید با همکاری هم تعمیمش دادیم برای حتی arm . البته armها خودشون ابزار هایی برای usb دارن که کارشون فرق میکنه. این مطالب فعلا برای avr هایی هست که خودشون usb ندارن. من با pic هم تا حالا کار نکردم و احتمالا تا مجبور نشم هم کار نخواهم کرد.

کدوم مجله ی میکرو؟ برم برسی کنم تا تکراری نباشه مطالب.
کلاسی برای انتقالهای وقفه ای، کنترلی و توده ای usb - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

esisafa
30-09-2011, 16:21
خیلی خوب ممنون
این دوستمون آقا بهنام الان سایت You can see links before reply (You can see links before reply) رو راه انداختن. پس اگه کسی در این زمینه سوالی داشت ، میتونه هم در لینکی که قرار دادین و هم تو سایت دوستمون پیگیری کنه
تو مجله ی 6-7 هم توضیح دادن
از منم بهتر میدونن در مورد usb

kavir
30-09-2011, 16:54
خیلی خوب ممنون
این دوستمون آقا بهنام الان سایت You can see links before reply (You can see links before reply) رو راه انداختن. پس اگه کسی در این زمینه سوالی داشت ، میتونه هم در لینکی که قرار دادین و هم تو سایت دوستمون پیگیری کنه
تو مجله ی 6-7 هم توضیح دادن
از منم بهتر میدونن در مورد usb
اینکه شما تاپیک رو ندیده بودین این دوستمون اقا بهنام کلا تاپیک رو حذف کرده بود که بنده دوباره باز کردم
ایشون برای سی شارپ چند تاdll گذاشتند که نیاز به باز بینی هست
در ضمن اگر وقتتون ازاد هست یاعلی بگین بیاین رو usb آرم لااقل که توی هبچ سایتی درست و حسابی استارت نخورده:0013::wink:خوشحال میشیم توی این بخش کار بشه

esisafa
30-09-2011, 17:23
پس دوستمون نمیخوان تو این سایت در مورد مطالبشون بحث کنیم.
اگه صلاح میدونین این تاپیک رو یک جور دیگه ادامه بدیم. یعنی با کمک دوستان با تجربه تو انجمن بیایم usb رو از بیخ و بنیان شروع کنیم و بررسی کنیم تا توابع usb رو قدم به قدم خودمون بنویسیم
این کار باعث میشه که usbی مجهول و نفس گیر کاملا قابل فهم بشه تو تمام لایه هاش

مایل هستین همکاری کنین که بسم الله از بیخ شروع کنیم

esisafa
30-09-2011, 17:32
اینم اولین قدم:
انواع usb
low speed usb که حداکثر سرعت اون 1.5 مگابیت بر ثانیه میشه
full speed usb که سرعت اون تا 12 مگابیت میرسه
این دو مدل در استاندارد usb1.1 استفاده میشن و مثل مدولاسیون am دامنه ی ولتاژ در اینجا به عنوان سیگنال استفاده میشه
high speed usb که در usb2 تعریف شد تا 480 مگابیت در ثانیه سرعت داره و در اینجا جریان به عنوان سیگنال استفاده میشه تا نویز کمتر بگیره همون طور که میدونین
super speed usb هم که تازه اومده usb3 هست که سرعتش تا 6000 مگابیت میرسه

esisafa
30-09-2011, 20:16
برای اینکه وسیله ی یو اس بی برای کامپیوتر به عنوان یک low speed شناخته بشه باید پایه ی دیتای منفی D- رو با یک مقاومت 1.5 کیلو به ولتاژ 3.3 ولت وصل کرد
برای full و high speed باید پایه ی دیتای مثبت D+ رو پولاپ کنیم

در مورد پایه های دیتا این نکته هم هست که به صورت تفاضلی عمل میکنن یعنی وقتی D+ یک باشه ، D- صفره و برعکس
ولتاژ تغذیه ای که پورت usb داره 5 ولته ولی دیتا با 3.3 ولت کار میکنه

اگه چیز دیگه ای هم در مورد سخت افزار پورت usb هست لطفا همکاری کنین

esisafa
30-09-2011, 22:14
نحوه ی ارسال داده ها از طریق usb به روش NRZI هست . و داده به صورتی که هست ارسال نمیشه بلکه کد و دکود میشه
این روش یعنی هر وقت بیتی که ارسال میکنیم صفر بود اونوقت سیگنال تغییر وضعیت میده و اگر بیت مورد نظر یک بود هیچ تغییری اتفاق نمیافته
اگه بایت مورد نظر ما 00000001 باشه با NRZI تبدیل میشه به 01010100 یا یک همچین چیزی که با usb ارسال میشه

esisafa
01-10-2011, 10:42
در مورد سیستم هماهنگ سازی کلاک usb بگم که تا اونجا که من فهمیدم هیچ تنظیمی برای تنظیم سرعتش وجود نداره مثل boad rate تو ارتباط uart یا مثل پایه ی clk تو ارتباطای دیگه
اما چه جوری امکان داره کار کنه؟؟؟؟؟
هر بار که داده ای فرستاده میشه اولین بایت اون 00000001 هست که با NRZI تبدیل میشه به 01010100 (یا متممش) بعد وسیله ی مقابل با این بایت خودشو هماهنگ میکنه. سرعت هم که در low speed 1.5 مگ هست.

esisafa
01-10-2011, 20:47
بایت بعد نشون دهنده ی اینه که اطلاعاتی میخواد فرستاده بشه از چه نوعی هستن
کنترلی اند یا داده اند یا ...

تا اینجا دو تا از بایت ها ، نوعشون مشخص شده

تا بعد

kavir
01-10-2011, 23:48
بایت بعد نشون دهنده ی اینه که اطلاعاتی میخواد فرستاده بشه از چه نوعی هستن
کنترلی اند یا داده اند یا ...

تا اینجا دو تا از بایت ها ، نوعشون مشخص شده

تا بعد ا
مهندس Driver API - V-USB (You can see links before reply) اینجا همه چیزش هست فقط یکی میخواد به زبان سادهب رای دوستان بگه تا همه بتونند استفاده کنند بهترین روش ارسال وقفه ای هست که باید روش کار بشه

esisafa
02-10-2011, 00:03
منظور شما اینه که مستقیم برم کار با کتابخونه ی usbdrv رو توضیح بدم. مثل این:؟؟؟؟؟:::

A short and complete API documentation can be found in the comments in the file usbdrv.h which ships with the driver. This document describes the most commonly used features.
Please note that you should create your own usbconfig.h from the driver's usbconfig-prototype.h and go through all options when you start a new project.


در انجا 3 تا کتابخونه معرفی شده usbdrv.h و usbconfig.h و usbconfig.prorotype.h که ابزار های مورد استفاده هستند. یک فایل main.c هم هست که برنامه ی اصلی رو اونجا مینویسیم و ... .

به نظر شما اینجور ادامه بدم یا همون روش قبل یعنی از پایه

esisafa
02-10-2011, 10:33
فعلا مطلب قبل رو تکمیل میکنم
دو تا بایت اول در هر ارسال ،نوعش رو مشخص کردیم
بایت اول sync بود
نوع و تعداد بایت های بعد، با توجه به بایت دوم که اسمش pid بود تغییر میکنه.
مثلا یا آدرس وسیله هست یا داده یا خالی و ... .
بعد از این یک داده ی 5 یا 16 بیتی میاد که crc5و crc16 نامیده میشن و که محاسبه ی اون با توجه به قسمت قبل انجام میشه برای تشخیص ارسال صحیح داده ها
بعد از همه و در آخر هم یک سیگنال به نام EOP-end of packet برای تشخیص پایان ارسال بسته فرستاده میشه

esisafa
02-10-2011, 11:41
انجا یک نمونه از تبادل اطلاعات بین کاپیوتر و وسیله رو قرار میدم
رنگ خاکستری رو کامپیوتر میفرسته و سفید رو وسیله

esisafa
02-10-2011, 18:48
خوب. تا اینجا نحوه ی ردو بدل داده ها روی خطوط بررسی شده و میشه الگوریتم دزیافت و فرستادن اطلاعات رو فهمید
اینجا یک محدودیت وجود داره که سرعت میکرو 12 مگا هرتزه و سرعت usb هست 1.5 مگاهرتز.
یعنی بین هر بیت دریافتی از usb فقط و فقط 8 کلاک فرصت داریم تا بایت sync و EOP رو شناسایی کنیم و بیت ها رو ذخیره کنیم. بعد از شناسایی رسیدن EOP حالا باید بفهمیم که بسته ای که اومده چی هست که باشه بعدا؟؟؟؟....!!!!
به خاطر این محدودیت در زمان ارسال و دریافت داده، پردازنده ی میکرو فقط مشغول دریافت و فرستادن بیت هاست و باید مواظب بود کار اشتباهی از ما سر نزنه مثل یک وقفه ی نابجا

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

esisafa
09-10-2011, 19:41
کتابخونه های V-USB دارای یک فایل به نام main.c هست که چند تا تابع از قبیل usbFanctionSetup در اون تعریف شدن و ما برنامه های مورد نظرمون رو داخل این توابع آماده مینویسیم
مثلا وقتی از طرف برنامه ی کاپیوتر بایت 0x2f فرستاده شد در داخل تابع بالا باید یک شرط بنویسیم که با دریافت 0x2f ، فلان کار رو انجام بده

esisafa
09-10-2011, 19:46
در تمام مدار هایی که من دیدم از این کتابخونه استفاده شده از کریستال 12 مگاهرتز و int0 استفاده کردن
ولی با کمی تغییر کوچک میتوان از int1 و int2 و کریستال های 15 و 16 و 16.5 و 20 مگاهرتز و پایه های دیگه ی میکرو برای تبادل داده استفاده کرد

esisafa
09-10-2011, 20:50
uchar usbFunctionSetup(uchar data[8]) {
uchar len = 0;
if (data[1] == 0x01)
{
replyBuffer[0] = 'e';
replyBuffer[1] = 'h';
replyBuffer[2] = 's';
replyBuffer[3] = 'a';
replyBuffer[4] = 'n';
ledOn();
len = 5;
}
else if (data[1] == 0x02)
{
replyBuffer[0] = 'H';
replyBuffer[1] = 'e';
replyBuffer[2] = 'l';
replyBuffer[3] = 'l';
replyBuffer[4] = '0';
replyBuffer[5] = '!';
ledOff();
len = 6;
}

usbMsgPtr = replyBuffer;

return len;
}

این یک نمونه از برنامه ی نوشته شده در تابع usbFunctionSetup هست
ورودی این تابع یک آرایه ی 8 بایتی هست
در انجا اگر data[1] که میاد 1 باشه یا 2 باشه کاره متفاوتی انجام میشه

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

mojtaba_led
17-10-2011, 01:22
با سلام و خسته نباشید
ببخشید که در تایپیکتون پست زائد ایجاد میکنم
من دارم روی پورت usb میکرو های at90usb و مشخصا at90usb162 کار میکنم چیزی که من توی نت به فارسی واقعیتش چیزی ندیدم با مقداری سرچ در نت یک کتابخانه به اسم lufa پیدا کردم که واقعا کامله ولی متاسفانه خیلی برای من گنگ بود حالا به نظر شما اصلا بهتره من اول برم دیتاشیت میکرو بخونم و با همون رجیستر ها کارم رو راه بندازم یا با این کتابخونه کار کنم
یک چیزی بهتر نیست که بجای کار با برنامه هایی که به صورت غیر مستقیم با پورت usb ارتباط برقرار میکنن روی میکرو هایی که دارای قابلیت usb هستند کار کنیم

یه مورد دیگه و اون اینکه من مطالبتون رو در مورد نحوه عملکرد پورت usb خوندم و دیدم شما یکسری موارد رو تا اینجا فاکتور گرفتین یعنی مثلا آشنایی با ترنزکشن و فیلد ها ش برای کار با usb نیاز نیست و به نظرتون بهتر نیست به جای مثلا لفظ بایت از ترنزکش استفاده بشه چون (البته جسارت بنده حقیر رو ببخشید من چیزی رو که قبلا خوندم با عث شد تا توی ذهنم یک انقولت ایجاد بشه ) این ترنزکشن ها هستند که درواقع ارسال میشند که حالا خود هر ترنزکشن (متناسب با نوع مربوطه) شامل چند فیلد و دوباره هر فیلد میتونه شاملچند بایت ویا چند فیلد و هر فیلد شامل چند بایت بشه که مثلا بایت sync که فیلد اول در هر سه ترنزکشن setup و داده و hand shake هست به همراه فیلد های دیگه اراسال میشه که میشه یک ترنزکشن و در اقع این ترنزکشن هست که به عنوان بسته اطلاعاتی شناخته میشه .

و یک سوال کلی داشتم خدمتتون
نمیشه بییاییم یک چارت کلی برای شکل و نحوه نوشتن برنامه در میکرو در رابطه با ارتباط با پورت usb ترسیم کنیم مثلا بگیم برای ارتباط باید ابتدا این مجموعه کار برای انجام تنظیمات و شروع ارتباط بعد این مجموعه برای ارسال و این مجموعه برای دریافت داده باید انجام بشه
(البته بعد از خاتمه آموزش کلی پورت usb)

ببخشید سرتون رو درد آوردم

ممنون از توجهتون

esisafa
18-10-2011, 00:16
در ابتدا مقدار کمی در مورد نحوه ی ارسال اطلاعات توضیح داده شد تا تفاوت عمل کرد usb با بقیه ی پروتکل ها مشخص بشه. اینکه حتی فقط برای فرستادن یک بایت داده ی کنترلی چند بار بین host و وسیله ارتباط برقرار میشه. اینکه اینجا بیت پریتی نداریم جاش از crc استفاده میشه و ...
در نهایت هم دوستان درخواست کردن که نحوه ی کار با توابع V-USB توضیح داده بشه. V-USB برای میکروهایی استفاده میشه که USB ندارن و موضوعش از AT90USB162 جدا هست

esisafa
17-03-2012, 15:33
خوب بعد از مدت طولانی وقفه در تاپیک بلاخره دوباره شروع کردم

یک برنامه با visual C# 2010 express نوشتم که مستقیما از LibUsbDotNet 1.0.1 استفاده میکنه

آقا بهنام یک کتابخونه به نام usbcontroller نوشته بودن که trialversion بود و از کار میافتاد. گفتم مستقیم با خود libusb کار کنم.
فایل رو ضمیمه کردم

این برنامه همه چیزش کار نمیکنه. یعنی فقط انتقال وقفه ایش کار میکنه. به صورت دستی( فشردن کلید read) یا اتومات (فعال کردن checkBox )

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

هر دو با هم رو نمیزارم تا خودتون دنبالش برین

esisafa
19-03-2012, 14:30
how to use interrupt out transfer in vusb (You can see links before reply)

how to use interrupt out transfer in vusb (You can see links before reply)

by dagakshay (You can see links before reply) » Wed Feb 16, 2011 7:56 am

I HAD UNDERSTOOD THE INTERRUPT IN TRANSFER IN VUSB... PLEASE TELL ME HOW TO USE HOW TO USE INTERRUPT OUT TRANSFER IN VUSB... ANY EXAMPLE OR LINK FOR THAT... HOW TO DECLARE INTERRUPT OUT ENDPOINT
I HAD WENT THROUGH THE LINK:
You can see links before reply (You can see links before reply)


BUT HERE THEY HAD NOT SHOWN HOW TO DECLARE INTERRUPT OUT ENDPOINT....
Re: how to use interrupt out transfer in vusb (You can see links before reply)

by Augend (You can see links before reply) » Sat Feb 26, 2011 10:13 am

first you need to declare in usb configuration . follow these steps:
1- go to usbdrv.c
2- find this line: PROGMEM char usbDescriptorConfiguration[] = { /* USB configuration descriptor */


3- add seven bites to the length of descriptor as followed in this line:
18 + 7 * USB_CFG_HAVE_INTRIN_ENDPOINT + (USB_CFG_DESCR_PROPS_HID & 0xff) +7, 0, //I added las +7


4-now you need to add one ondpoint . find this line and add 1:
USB_CFG_HAVE_INTRIN_ENDPOINT + 1 , /* endpoints excl 0: number of endpoint descriptors to follow */ // I added last +1


5-now at the end of descriptor add these codes to make a new OUT endpoint:
7, /* sizeof(usbDescrEndpoint) */
USBDESCR_ENDPOINT, /* descriptor type = endpoint */
(char)0x01, /* OUT endpoint number 1 */ //instead of 81
0x03, /* attrib: Interrupt endpoint */
8, 0, /* maximum packet size */
USB_CFG_INTR_POLL_INTERVAL, /* in ms */


You need also to configure your driver to use this interrupt-OUT no-1


6- now go to usbconfig.h and set USB_CFG_IMPLEMENT_FN_WRITEOUT to 1


7- find this line:
#if USB_CFG_IMPLEMENT_FN_WRITEOUT
if(usbRxToken < 0x10){ /* endpoint number in usbRxToken */
and change it to this:
if(usbRxToken == USBPID_OUT){ /* endpoint number in usbRxToken *///*
8-every time device receives Interrupt-out, goes into usbFunctionWriteOut()
tell me if it works for you


اینجا تغیراتی رو که باید در V-USB داده بشه تا به صورت intrupt out کار کنه توضیح داده

برنامه ای که با C# نوشته بودم در قسمت قبل برای کارکردن با intrupt in بود

esisafa
20-03-2012, 13:37
اگه بخواهیم که برنامه میکرو رو طوری بنویسیم تا بتونیم کنترل روی تمام ابزارهای میکرو مثل خاموش روشن کردنشون و مثلا فعال کردن pwm و نوشتن روی lcd و ... رو بدون عوض کردن برنامه میکرو و فقط از طریق برنامه کامپیوتر انجام بدیم و حتی به صورتی که پایه های lcd رو بتونیم در برنامه کامپیوتر تنظیم کنیم ، چه پیشنهادی دارن دوستان.
توجه کنین که فقط یک بار برنامه میکرو رو بریزیم تو فلش و از این به بعد میکرو فقط یک واسط باشه و تمام برنامه های کنترلی رو در کامپیوتر بنویسیم.

توجه مینمایی

لطفا نظرهاتون رو بدین.

دیدتون به این صورت باشه که میکرو کنترلر دیگه یک کنترلر نیست و فقط یک آیسی هست که یک امکاناتی داره

روز اول عید 1391 هم ول نمیکنم. فکر کنم مرض دارم و دیوانه شدم

esisafa
20-03-2012, 13:46
یک مرور کلی
در سایت ایران میکرو در رابطه با پورت usb و کلاس LibUsbDotNet.dll و همچنین V-USB اطلاعات زیادی داده شده.
ارتباط به صورت کنترلی host2device و device2host برقرار شده
ارتباط intrupt-IN برقرار شده

ارتباط intrupt-OUT باقی مونده بود که در متون قبلی روش برقرار کردن اون رو هم اعلام کردم که باید چه دستکاری انجام بشه. صددرصد کار کرد و هیچ نقصی نداشت.
دیگه چیزی لازم نیست که از ارتباط ها یاد بگیریم

6 راه ارتباط بین کامپیوتر و میکرو از طریق usb بود

1. کنترلی host2device
2. کنترلی device2host
3 و 4 . intrupt-IN و bulk-IN که مثل همه برنامه نویسیشون
5 و 6 . intrupt-OUT و bulk-OUT که بازم مثل هم هستند ولی باید در معرفی کننده v-usb تغییرات بالا رو انجام داد

ASync باقی مونده که V-USB ساپورتش نمیکنه

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

sadmonew
20-03-2012, 13:57
اگه بخواهیم که برنامه میکرو رو طوری بنویسیم تا بتونیم کنترل روی تمام ابزارهای میکرو مثل خاموش روشن کردنشون و مثلا فعال کردن pwm و نوشتن روی lcd و ... رو بدون عوض کردن برنامه میکرو و فقط از طریق برنامه کامپیوتر انجام بدیم و حتی به صورتی که پایه های lcd رو بتونیم در برنامه کامپیوتر تنظیم کنیم ، چه پیشنهادی دارن دوستان.

سلام مهندس:hi:
سال نو شما مبارك.:018::o

منظرتون اينه كه مثلا از طريق برنامه اي كه تو ويندوز نوشته شده، رجيستر هاي ميكرو تغيير بديم و كنترل كنيم.

esisafa
20-03-2012, 14:33
سلام
سال نو شما هم مبارک
بله منظورم همینه . البته فقط تغییر رجیستر ها رو میشه که رشته فرستاد و تبدیل به عدد کرد و در رجیستر مربوط قرار داد.
اما یک راهی باشه که این کار راحت و خوب انجام بشه.
مهمترش اینه که در مرحله بعد از چه راهی استفاده کنیم تا بتونیم علاوه بر تغییر رجیستر از توابع مثلا نوشتن روی lcd و ارسال با usart و ... هم کار کنیم.
مثلا اول رجیستر های usart رو تنظیم کنیم بعد یک دستور با یک رشته بفرستیم که با usart بفرسته

sadmonew
20-03-2012, 15:37
پس برنامه اي كه براي ميكرو نوشته ميشه وظيفش دريافت داده ها از پورت usb و قرار دادن داده در رجيستر مربوطه هستش يا انتقال متن به lcd.
البته داده هايي كه دريافت ميشه بايد در حافظه eeprom داخلي يا حافظه جانبي ذخيره بشه.
چون براي تنظيم دوباره رجيسترها با داده هاي جديد حداقل ميكرو بايد يكبار ريست بشه.
البته براي ارسال داده از pc به lcd متصل به ميكرو هم راه وحود داره البته فعلا همينارو هم اجراييش كنيم خيلي كاره!

البته ما هنوز مهموني نرفتيم و البته مهمون هم فعلا نداريم وگرنه كه من هم اينجا نبودم.:mrgreen:

esisafa
20-03-2012, 15:51
چون براي تنظيم دوباره رجيسترها با داده هاي جديد حداقل ميكرو بايد يكبار ريست بشه.


فکر نکنم لازم باشه میکرو رست بشه. دلیلش هم اینه که فکر میکنم وقتی میکرو تازه شروع به کار میکنه، همه ی رجیستر ها مقدار صفر دارن . یعنی همه چیز خاموش هستن. و ما در هنگام کارکردن میکر میایم و بهش میگیم که usart رو با این سرعت روشن کن بدون اینکه میکرو رو دوباره روشن کنیم.
البته منظور شما رو میفهمم چون برای خودم هم یک مشکل پیش اومده.
تایمر رو روشن کردم با یک فرکانس. بعد وسط کار باید فرکانسش رو تغییر میدادم و فقط رجیستر های تنظیم فرکانس رو تغییر میدادم ولی فرکانس اون تغییر نمیکرد. و این برام یک مشکل بود. استادمون گفت که اول باید تایمر رو خاموش کنیم، یعنی تمام رجیستر هاش رو صفرکنیم. بعد دوباره برای کار با فرکانس جدید تنظیم کنیم و روشن کنیم. ولی من بعد اون یک همچین کاری رو آزمایش نکردم و مطمئن نیستم.

نظر شما چیه

sadmonew
21-03-2012, 13:22
سلام مهندس جان:hi:
مهندس برنامه اي كه تو ويندوز ميخواين بنويسين، با چه زباني ميخواين بنويسين؟ #C يا ++C يا... ؟
بله درسته براي تايمر اينطوريه اما براي USART و ADC لازم به ريست كردن(صفر كردن رجيستر) نيست.
برنامه اي براي ميكرو نوشته ميشه، بر مبناي V-USB نوشته ميشه؟ يعني از كتابخونه اون استفاده ميكنين؟

esisafa
21-03-2012, 18:52
سلام مهندس جان:hi:
مهندس برنامه اي كه تو ويندوز ميخواين بنويسين، با چه زباني ميخواين بنويسين؟ #C يا ++C يا... ؟


C#. مهم اینه که دات نت باشه



بله درسته براي تايمر اينطوريه اما براي USART و ADC لازم به ريست كردن(صفر كردن رجيستر) نيست.


یعنی برای usart نمیشه خاموشش کرد دوباره با یک سرعت دیگه راه انداختش؟؟؟



برنامه اي براي ميكرو نوشته ميشه، بر مبناي V-USB نوشته ميشه؟ يعني از كتابخونه اون استفاده ميكنين؟

آره V-USB

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

esisafa
21-03-2012, 20:41
چند تا نظر

1. برای مقدار دادن هر رجیستر یک دستور به روش کنترلی بفرستیم با یک مقدار یک بایتی.
در تابع usbFunctionSetup دستور مقدار دهی همون رجیستر دریافت بشه و مقدار بایتمون رو در اون بریزیم.
حتی لازم نیست از اسم رجیستر استفاده بشه. فقط آدرسش رو میفرستیم. برنامه میکرو طولانی میشه

2. دراین روش دستور برای اجرا فقط یکی هست. در دو بایت یکی آدرش رجیستر و یکی مقدارش رو بفرستیم و در داخل میکرو مقدار رو در آدرش مورد نظر بریزیم.

3. یک رشته بفرستیم. هم اسم رجیستر و هم مقدارش رو داشته باشه. فقط باید یکم پردازش داخل میکرو انجام بشه. آیا عملی هست؟؟؟؟؟ فایدش اینه که دستور رو مثل خود برنامه میکرو مینویسیم

4. شما نظر بدین

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

sadmonew
22-03-2012, 01:13
سلام داداش
فكر ميكنم 3 حالت بيشتر نداره(منظورم روش هاي با پردازش كم در واقع نوشتن كد كمتر، كه تو ميكروي با حافظه فلش محدود هم جواب بده).
به نظر منم روش 2 روش خوبيه.
خوب اول بريم برنامه رو تو ويندوز بنويسيم در واقع يه تجسم كلي از كاري كه ميخوايم انجام بديم رو اونجا پياده سازي كنيم.(عجب كلمات قلمبه و سلمبه اي گفتم!؟!:mrgreen:)
البته نظر شما مهمه كه چي باشه.

esisafa
22-03-2012, 02:30
داداش به چندتا مشکل خوردم
int* myPtr
myPtr = data[0]
*myPtr = dafa[1]

این برنامه باید محتویات data[1] رو در آدرس data[0] حافظه بریزه درسته یا نه.
میشه با این کار یک رجیستر رو مقدار داد.
آیا رجیسترهای IO جزو خونه های حافظه رم هستن. آیا کامپایلر اجازه میده با آدرس و اشاره گر با رجیستر های IO کار کرد یا نه؟ و هرچیز دیگه ای که در این زمینه میدونین.

ما دو بایت شامل آدرس رجیستر IO مثلا آدرس DDRC هست 0x14 و محتوای اون رو میفرستیم به میکرو در یک آرایه دو عضوی. عضو 0 میشه آدرس رجیستر و عضو 1 میشه مقداری که در اون رجیستر با توجه به آدرسش میخواهیم بریزیم.
چه بنویسیم

esisafa
22-03-2012, 02:30
داداش به چندتا مشکل خوردم
int* myPtr
myPtr = data[0]
*myPtr = dafa[1]

این برنامه باید محتویات data[1] رو در آدرس data[0] حافظه بریزه درسته یا نه.
میشه با این کار یک رجیستر رو مقدار داد.
آیا رجیسترهای IO جزو خونه های حافظه رم هستن. آیا کامپایلر اجازه میده با آدرس و اشاره گر با رجیستر های IO کار کرد یا نه؟ و هرچیز دیگه ای که در این زمینه میدونین.

ما دو بایت شامل آدرس رجیستر IO مثلا آدرس DDRC هست 0x14 و محتوای اون رو میفرستیم به میکرو در یک آرایه دو عضوی. عضو 0 میشه آدرس رجیستر و عضو 1 میشه مقداری که در اون رجیستر با توجه به آدرسش میخواهیم بریزیم.
چه بنویسیم

behnam6500
22-03-2012, 02:41
داستان چیه؟!

esisafa
22-03-2012, 02:49
داستان اینه که میخوایم با V-USB یک برنامه ثابت برای میکرو بنویسیم که همیشگی باشه.
بعد از طریق usb و با پردازش در کامپیوتر بتونیم مقادیر رجیستر های میکرو کنترلر رو کنترل کنیم.
یعنی میکرو دیگه میکروکنترلر نباشه. بلکه یک آیسی باشه که مثلا pwmداره و با کامپیوتر کنترل میشه

حالا چند تا مشکل هست که:
1. با برنامه ی بالا میشه این کار رو انجام داد؟؟؟؟
2. داخل یک textbox یک عدد هگز رو مثلا f0 مینویسیم. حالا با چه دستوری همین عدد هگز ( در واقع رشته ) رو که در textbox نوشتیم رو به صورت asci ( یا فکر کنم utf8 ) در بایت بریزیم.

sadmonew
22-03-2012, 02:53
نه مهندس محدوديتي جهت كار با كامپايلر وجود نداره.
البته درستش اينه:



int* myPtr
myPtr = data[0]
&myPtr = dafa[1]

behnam6500
22-03-2012, 02:55
خوب مقدار textbox رو تبدیل به بایت کن و بفرست!!!! شما در کل از هر حالت که استفاده بکی در انتقال به usb و برعکس، ارایه ای از بایت رو منتقل میکنی...

esisafa
22-03-2012, 03:09
خوب مقدار textbox رو تبدیل به بایت کن و بفرست!!!! شما در کل از هر حالت که استفاده بکی در انتقال به usb و برعکس، ارایه ای از بایت رو منتقل میکنی...

میشه دستورش رو بنویسی

Encoding.UTF8.GetByte(text)

این دستور آیا fc رو به به کد بایت ascii تبدیل میکنه یا به تو بایت ascii که f و c هستن. این دو از زمین تا آسمون فرق میکنن

esisafa
22-03-2012, 03:12
نه مهندس محدوديتي جهت كار با كامپايلر وجود نداره.
البته درستش اينه:




int* myptr



myptr = data[0]
&myptr = dafa[1]

مطمئنی داداش
& یعنی آدرس
آما * یعنی محتوای

sadmonew
22-03-2012, 03:21
مطمئنی داداش
& یعنی آدرس
آما * یعنی محتوای
داداش گلم مطمئن باش.

behnam6500
22-03-2012, 03:28
میشه دستورش رو بنویسی

Encoding.UTF8.GetByte(text)

این دستور آیا fc رو به به کد بایت ascii تبدیل میکنه یا به تو بایت ascii که f و c هستن. این دو از زمین تا آسمون فرق میکنن

دستور بالا برای مورد شما کاربرد نداره!

FC از دید رشته شامل دو بایت هست وی از مبنای 16 میشه یک بایت که فکر کنم برابر با 252 دسیماله!

در برنامه وقتی که fc در textbox نوشته میشه، باید اون رو تبدیل کنیم به بایت! ولی باید به کامپایلر بفهمونیم که مقداری که قراره تبدیلش کنه، مبناش چی هست؟! که در اینجا fc مبنای هگز هست. به همین خاطر از کد زیر استفاده میکنیم:



byte data = Convert.ToByte( textBox1.Text.Trim(), 16);

esisafa
22-03-2012, 03:29
نه مهندس محدوديتي جهت كار با كامپايلر وجود نداره.
البته درستش اينه:




int* myPtr



myPtr = data[0]
&myPtr = dafa[1]

نه داداش کامپایلر ایراد گرفت

Error 5 lvalue required as left operand of assignment

esisafa
22-03-2012, 03:35
دستور بالا برای مورد شما کاربرد نداره!

FC از دید رشته شامل دو بایت هست وی از مبنای 16 میشه یک بایت که فکر کنم برابر با 252 دسیماله!

در برنامه وقتی که fc در textbox نوشته میشه، باید اون رو تبدیل کنیم به بایت! ولی باید به کامپایلر بفهمونیم که مقداری که قراره تبدیلش کنه، مبناش چی هست؟! که در اینجا fc مبنای هگز هست. به همین خاطر از کد زیر استفاده میکنیم:



byte data = Convert.ToByte( textBox1.Text.Trim(), 16);


ممنون دمت گرم. نمیدونم یادم رفته بود یا اصلا نمیدونستم
ok حله

esisafa
22-03-2012, 03:40
خوب آقا بهنام نظرت راجع به برنامه میکرو . قسمت دریافت آدرس و مقدار رجیستر چیه؟

esisafa
22-03-2012, 04:19
adr[0] = &PINC;
adr[1] = &DDRC;
adr[2] = &PORTC;


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



Convert.ToString(buf[0]) + " + "+ Convert.ToString(buf[1]) + " + " + Convert.ToString(buf[2]

در بنامه کامپیوتر اینا رو دریافت میکنم
نتیجه میشه 3 + 65 + 8 یعنی چی . آدرس اونا پشت سر همه ولی نتیجه فضاییه

esisafa
22-03-2012, 15:03
خوب در نهایت مشکل حل شد.

فقط با یک خط برنامه ناقابل مشکل حل شد. بدون هیچ اشاره گری


_SFR_IO8(data[0])=data[1];

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

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

esisafa
23-03-2012, 22:13
نتیجه بحث هایی که کردیم این شد
خوب اینم از برنامه peripheral controler
برنامه کامپیوتر و برنامه میکرو و درایور usb داخلش هست
برنامه ای که توسط اون میتونین تمام رجیستر های میکرو mega32 رو توسط برنامه کامپیوتر کنترل کنین.
مثلا سرعت موتور با چپ گرد راست گرد رو از طریق کامپیوتر کنترل کنین.

چیز جدیدی باید باشه.

الان فکر کنم یک IC جدید کاملا ایرانی طراحی کردم که از طریق پورت usb و با برنامه نویسی در کامپیوتر میتونین کارتون رو انجام بدین.

sadmonew
23-03-2012, 22:40
مهندس گل كاشتي.:wink:
راستي ميگم يدفه شماتيك و يه فايل PDF آموزشي هم بزار كه پروژت full بشه.
ميشه يه كار بهتري هم انجام داد.
ميتونيد به عنوان يه موضوع و مطلب جالب كه هم جنبه آموزشي داره و هم جنبه تحقيقاتي تو شماره بعدي مجله استفاده كرد.
البته تصميمش با خودتون.

esisafa
23-03-2012, 23:01
لطفا فایل قبلی رو از سیستم حتما پاک کنید و دوباره دریافت کنین.
در فایل جدید نام و ایمیل خودم رو اضافه کردم تا حداقل نویسندش معلوم باشه.
حداقل فایل جدید رو به دیگران بدین تا نویسنده مشخص بشه.
من خنگ یادم رفت نوسنده رو مشخص کنم.

esisafa
23-03-2012, 23:15
نمیدونم بستگی به مدیران سایت داره و اینکه وقت کنم یا نه.

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

sadmonew
23-03-2012, 23:20
نمیدونم بستگی به مدیران سایت داره و اینکه وقت کنم یا نه.

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

esisafa
04-09-2012, 02:49
دوستانی که در نظرسنجی گفتن راه راحتتر و ارزانتر هست لطفا ما رو راهنمایی کنن که چه راهی هست تا از نظراتشون استفاده کنیم

ada
13-03-2013, 11:16
سلام
هیچکس نقشه مدار پروگرمر usb برای میکرو داره می خوام درست کنم!
برای پروگرم کردن میکرو avr می خوام
نیاز فوری

ERSA
13-03-2013, 14:29
سلام
هیچکس نقشه مدار پروگرمر usb برای میکرو داره می خوام درست کنم!
برای پروگرم کردن میکرو avr می خوام
نیاز فوری


راهنمای پروگرامر usbasp (You can see links before reply)

:baad::baad::baad:

من اینو دارم رو 7 32 بیتی راحت کار میکنه.
(You can see links before reply)

mpc
22-03-2013, 02:44
سلام
میشه یه پروژه تعریف کنید ( ساده ) مثلا با چند کلید که حرکت موس را در کامپیوتر انجام بده
مرسی

esisafa
22-03-2013, 19:53
شما باید تنظیمات رو طوری انجام بدین که به صورت hid شناخته بشه و بعد کدهایی که ماوس میفرسته رو ارسال کنید.
مثال ماوس با این کتابخونه ها زیاد هست.
کدهای اسکی کیبورد و ماوس هم زیاد.
کافیه که تو اینترنت دنبالش بگردین

mpc
16-05-2013, 14:45
شما باید تنظیمات رو طوری انجام بدین که به صورت hid شناخته بشه و بعد کدهایی که ماوس میفرسته رو ارسال کنید.
مثال ماوس با این کتابخونه ها زیاد هست.
کدهای اسکی کیبورد و ماوس هم زیاد.
کافیه که تو اینترنت دنبالش بگردین

مهندس جان خیلی یرچ کردم و یه دنیا مطلب دارم فقط یکی را میخواهم که قدم های اولیه را آموزش بده چون با کدویژن کار میکنم ولی برای کدویژن هیچ نمونه USB پیدا نکردم و کامپایل های دیگر میخواهم کار کنم همش خطا میده و ....

یه پروژه یا یک تایپ بزنید" استفاده از ماوش را در usb " لطفا شروع کنید
:0013:

esisafa
16-05-2013, 18:01
دقیقا یک هفته ی بعد اولین امتحان این ترم برگزار میشه پس وقت نیست
برای این منظور باید سراغ atmel studio برین و کدویژن رو بیخیال بشین. برای اینکه موقع کامپایل خطا نگیره تمام فایلها و کتابخونه های لازم رو در خود پوشه ی اصلی پروژه کپی کنید یعنی داخل پوشه ی دیگه نباشه
همون پروژه ی ماوس رو کامپایل کنید

SANBOR
25-05-2013, 21:26
با سلام
من یک کد نوشتم که خواهشمندم اساتید چک کنند و مشکلاتش رو به من بگویند!
البته تو کامپایل یه مشکل میگیره که نمیدونم چرا !
من کاری که میخواهم اینه که ولتاژ ای دی سی 0 (adc 0 ) رو میگیره و بعد میفرسته به کامپیوتر البته میخواهم قسمت ارسال اطلاعات از کامپیوتر به ای وی ار هم درست کنم که بعدا ی کد بهش اضافه کنم
حالا لطفا این کد ها رو چک کنید الان 3 روزه دارم اتمل استادیو یاد میگیرم فقط بخاطر همین کار
ممنون میشم


/*
* USB.c
*
* Created: 2013/05/23 12:07:28 ب.ظ
* Author: Mostafa Nekooei
*/

#include <avr/io.h>
#include <avr/interrupt.h> /* for sei() */
#include <avr/pgmspace.h> /* required by usbdrv.h */
#include <avr/wdt.h>
#include <avr/eeprom.h>
#include <util/delay.h> /* for _delay_ms() */


#include "usbdrv.h"
#include "oddebug.h" /* this is also an example for using debug marcros */


uchar i=0;
float Voltage;
uchar InputData;

/* ------------------------------------------------------------------------- */
/* ----------------------------- USB interface ----------------------------- */
/* ------------------------------------------------------------------------- */

uchar usbFunctionSetup(uchar data[8], uchar len) {
usbMsgPtr = InputData;
return len;
}


uchar usbFunctionWrite(uchar data, uchar len){
data = Voltage;
return 1;
}

/* ------------------------------------------------------------------------- */
/* ----------------------------- ADC interface ----------------------------- */
/* ------------------------------------------------------------------------- */

void adc_init()
{
// AREF = Voltage Reference
// measure ADC0
ADMUX = (0<<REFS0)|(0<<REFS1);

// ADC Enable and prescaler of 128
// 12000000/128 = 93000
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //ADCSRA = 0x87
}

// read adc value
uint16_t adc_read(uint8_t ch)
{
// select the corresponding channel 0~7
// ANDing with '7' will always keep the value
// of 'ch' between 0 and 7
ch &= 0b00000111; // AND operation with 7
ADMUX = (ADMUX & 0xF8)|ch; // clears the bottom 3 bits before ORing

// start single conversion
// write '1' to ADSC
ADCSRA |= (1<<ADSC);

// wait for conversion to complete
// ADSC becomes '0' again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));

return (ADC);
}



/* ------------------------------------------------------------------------- */
/* ------------------------------- Main Code ------------------------------- */
/* ------------------------------------------------------------------------- */

int main(void)
{
uint16_t adc_result0;
// initialize adc and lcd
adc_init();

DDRD = 0b00000000;
usbInit();
usbDeviceDisconnect(); /* enforce re-enumeration, do this while interrupts are disabled! */


//fake USB disconnect for > 250 ms
i = 0;
while(--i)
{
wdt_reset();
_delay_ms(1);
}

usbDeviceConnect();
sei();
_delay_ms(50);

while(1)
{
adc_result0 = adc_read(0); // read adc value at PA0
Voltage = adc_result0 * 5.00/1023;
usbPoll();
_delay_ms(50);
}
}

/* ------------------------------------------------------------------------- */

esisafa
26-05-2013, 01:52
شما تا حالا برنامه ی من یا آقا بهنام رو کامپایل کردین و راه انداختین؟؟؟؟ اگه بدون مشکل برنامه های آماده رو راه انداحتین که بگین کامپایلر چه مشکلی میگیره.
شما کارای ناشیانه ی عجیبی از لحاظ برنامه نویسی سی انجام دادین. مثلا مقدار اعشاری 16 بیتی ولتاژ رو در آدرس آرایه ی دیتا ریختین و اخرش گفتین که یک بایت هست. این که منم باشم هنگ میکنم و جواب نمیدم

SANBOR
26-05-2013, 09:43
سلام
اخه من واقعا گیج شدم تو یدونه از کد ها اینجور تعریف شده تو کد بعدی یه جور دیگه و من هم گیج شدم
من این قضیه رو میدونم که متغییر ولتاژ فلوته و متغیر دیتا کارکتر و اخرش هم داره بیت ریترن میکنم ولی خداییش تقریبا تو هر کدی همین رو گفته
شما میتونید این کد رو اصلاح کنید و بعد به من بگید مشکلات به این صورته تا من هم بتونم به جمع شما دوستان بپیوندم
متشکرم

esisafa
26-05-2013, 10:27
اسم یک آرایه به تنهایی از نوع آدرس هست یعنی شما باید آدرس رو در اسم بدون کروشه آرایه بدین.
شما باید عدد اعشاری که 2 یا 4 بایت هست رو به یک روشی به چند کاراکتر تبدیل کنید و بعد این کاراکترها رو در داخل یک آرایه دیگه قرار بدین و حالا آرایه دیتا رو برابر این آرایه کنید و طول اون رو برگردونید و در کامپیوتر با الگوریتم معکوس دوباره به اعشار تبدیل کنید

SANBOR
26-05-2013, 12:30
سلام
ببخشید میشه با یک مثال توضیح دهید ؟

SANBOR
26-05-2013, 12:30
سلام
ببخشید میشه با یک مثال توضیح دهید ؟

esisafa
26-05-2013, 15:13
الگوریتم تبدیل اعشاری به چند داده ی بایت ( یا همون کاراکتر ) که کاملا دست خودتون هست. بعد این بایت ها رو به ترتیب در داخل آرایه ی مثلا buffer میریزین و بعد مینویسین data = buffer . چون بافر هم آرایه هست اونوقت مقدار دیتا و بافر یکی هستن.
اگه هنوز منظورم رو نمیفهمید پیشنهاد میکنم که حتما یک کتاب آموزش زبان c هم بخونید. چون قطعا خیلی چیزای دیگه هم هست که نمیدونید

SANBOR
26-05-2013, 16:35
میشه یک مثال بزنید ؟
و لطفا یک کتاب معرفی کنید که کد های سی رو توضیح داده باشه تا بتونم با اتمل کار کنم

esisafa
26-05-2013, 18:10
بحث زبان c با میکرو اتمل متفاوت هست و کتابی که میکرو یاد میده جزئیات زبان c رو یاد نمیده. اگه میخواین که زبان c رو خوب با جزئیاتش یاد بگیرین راحتترین و کم حجم ترین کتاب که حدود 5 سال پیش در یک ماه خوندمش کتاب آموزش c ابریشمی بود و کاملترینش که جامع هست جعفرنژاد ولی همش لازم نیست.
الان خیلی وقته که در این زمینه کاری نکردم و بخوام برای usb مثال بزنم حضور ذهن ندارم

Dr.ROOSTA
19-03-2014, 17:22
You can see links before reply
در این سورس کد،شما با نحوه ارتباط با پورت USB در سی شارپ آشنا خواهید شد
این سورس کد به صورت اتوماتیک،پورت های یو اس بی را اسکن و به دنبال یک فایل متنی با نام مشخص میگردد.
درصورت پیدا کردن باز میکند.
You can see links before reply دانلود با لینک مستقیم (You can see links before reply)
You can see links before reply پسورد فايل : You can see links before reply (You can see links before reply) [با حروف كوچك نوشته شود]

avrpicarm
31-03-2014, 13:34
مجموعه ای ازبهترین کتاب های فارسی آموزش پورت USB (You can see links before reply)
پورت ها | مرکز دانلود مجموعه کتابها و فایل های آموزشی پک بوک (You can see links before reply A%A9/ports)

hd_uni_pro
18-06-2014, 14:14
سلام
ممنون از زحمتتون فقط آرم توضیح می دادید بهتر می بود 1؟

sajjad_AD
23-10-2014, 14:50
سلام من یه سوال از اساتید usb دارم:
من یه usb device دارم و براش یه نرم افزار با #C نوشتم و تا اینجا مشکلی نیس اما می خوام بدونم راهی هست که بشه دید بین این نرم افزار و device چیا داره رد و بدل میشه؟ و اینکه میشه کاری کرد که نشه دید؟
در کل منظورم اینه که آیا کسی می تونه یه device درست کنه و با نرم افزار من ارتباط برقرار کنه؟ چه کنم که نرم افزارم فقط با device خودم ارتباط بر قرار کنه؟

esisafa
23-10-2014, 22:48
اصلا اساس usb اینه که هر وسیله مشخصه ی خودشو داشته باشه و اطلاعات قاطی نشه

sajjad_AD
24-10-2014, 12:02
ممنون از پاسختون آقای صفامنش :hi:

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

esisafa
25-10-2014, 10:56
هر چیزی رو میشه هک کرد. باید رفتار یک وسیله رو ردگیری کنی تا بدونی چکار میکنه. برای سخت کردن کار هکر باید از رمزگذاری داده ها استفاده کرد که با توجه به هر کاری روش خاصی لازمه

sajjad_AD
25-10-2014, 23:14
یه سوال دیگه !
این کلاس LibUsbDotNet توسط خود ماکروسافت توسعه داده شده یا نه؟ اگه جواب مثبته پس چرا برای شناخته شدن Device توسط نرم افزاری که با این کلاس نوشتم باید درایور LibUsb-Win32 نصب شه؟
من یه مشکل دارم اونم اینه که دریافت اطلاعات فرستاده شده از طرف Device توسط نرم افزاری که نوشتم بگیر نگیر داره ولی ارسال دیتا به Device کاملا درست کار میکنه
این در حالیه که وقتی با نرم افزار mikroe Hid terminal (بدون نصب درایور LibUsb-Win32 کار مکنه) امتحان می کنم مشکلی نیست
پس device مشکلی نداره و مشکل از برنامه #C یی که نوشتم هست آیا خود visual studio کلاسی برای این کار نداره که قرار نباشه از LibUsbDotNet استفاده کنیم؟
ممنون می شم پاسخ بدی استاد :hi:

pirozy
25-10-2014, 23:58
سلام من یه سوال از اساتید usb دارم:
من یه usb device دارم و براش یه نرم افزار با #C نوشتم و تا اینجا مشکلی نیس اما می خوام بدونم راهی هست که بشه دید بین این نرم افزار و device چیا داره رد و بدل میشه؟ و اینکه میشه کاری کرد که نشه دید؟
در کل منظورم اینه که آیا کسی می تونه یه device درست کنه و با نرم افزار من ارتباط برقرار کنه؟ چه کنم که نرم افزارم فقط با device خودم ارتباط بر قرار کنه؟
اره مهندس میشه
یه یو اس بی انالیزر دانلود کن بعد باهاش کار کن
من قبلا با یکی کار کردم و داده های ارسالی بین دسته ی بازی یو اس بی و برنامه ی خودم تو کامپیوتر رو انالیز کردم
نمیدونم اسمش چی بود ولی خوب بود داده ها رو تو پکتهای ورودی و خروجی و وقه ای و ... دسته بندی می کرد

esisafa
26-10-2014, 00:29
شما باید از event های کتابخونه ی usb استفاده کنی که داده ها بگیر نگیر نداشته باشه.

sajjad_AD
26-10-2014, 17:09
اگه نخوام از درایور libusb0 استفاده کنم و با همون درایور خود ویندوز کار کنم چه باید بکنم؟

sajjad_AD
28-10-2014, 17:23
دوباره سلام
آقا من از رو مثال (Read Write (Event Driven (You can see links before reply) که تو سایت sourceforge (You can see links before reply) اومده برنامه رو به صورت Event نوشتم ولی این دیگه اصلا کار نمی کنه , ارور نمیده ها ولی کارم نمی کنه , اصلا رویداد دریافت اجرا نمیشه , قلق خاصی داره؟



using System;
using System.Text;
using System.Text.RegularExpressions;
using LibUsbDotNet;
using LibUsbDotNet.Main;

namespace Examples
{
internal class ReadWriteEventDriven
{
public static DateTime LastDataEventDate = DateTime.Now;
public static UsbDevice MyUsbDevice;

#region SET YOUR USB Vendor and Product ID!

public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(1234, 1);

#endregion

public static void Main(string[] args)
{
ErrorCode ec = ErrorCode.None;

try
{
// Find and open the usb device.
MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);

// If the device is open and ready
if (MyUsbDevice == null) throw new Exception("Device Not Found.");


// If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
// it exposes an IUsbDevice interface. If not (WinUSB) the
// 'wholeUsbDevice' variable will be null indicating this is
// an interface of a device; it does not require or support
// configuration and interface selection.
IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
if (!ReferenceEquals(wholeUsbDevice, null))
{
// This is a "whole" USB device. Before it can be used,
// the desired configuration and interface must be selected.

// Select config #1
wholeUsbDevice.SetConfiguration(1);

// Claim interface #0.
wholeUsbDevice.ClaimInterface(0);
}

// open read endpoint 1.
UsbEndpointReader reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01 );

// open write endpoint 1.
UsbEndpointWriter writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep0 1);

// Remove the exepath/startup filename text from the begining of the CommandLine.
string cmdLine = Regex.Replace(
Environment.CommandLine, "^\".+?\"^.*? |^.*? ", "", RegexOptions.Singleline);

if (!String.IsNullOrEmpty(cmdLine))
{
reader.DataReceived += (OnRxEndPointData);
reader.DataReceivedEnabled = true;

int bytesWritten;
ec = writer.Write(Encoding.Default.GetBytes(cmdLine), 2000, out bytesWritten);
if (ec != ErrorCode.None) throw new Exception(UsbDevice.LastErrorString);

LastDataEventDate = DateTime.Now;
while ((DateTime.Now - LastDataEventDate).TotalMilliseconds < 100)
{
}

// Always disable and unhook event when done.
reader.DataReceivedEnabled = false;
reader.DataReceived -= (OnRxEndPointData);

Console.WriteLine("\r\nDone!\r\n");
}
else
throw new Exception("Nothing to do.");
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
}
finally
{
if (MyUsbDevice != null)
{
if (MyUsbDevice.IsOpen)
{
// If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
// it exposes an IUsbDevice interface. If not (WinUSB) the
// 'wholeUsbDevice' variable will be null indicating this is
// an interface of a device; it does not require or support
// configuration and interface selection.
IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
if (!ReferenceEquals(wholeUsbDevice, null))
{
// Release interface #0.
wholeUsbDevice.ReleaseInterface(0);
}
MyUsbDevice.Close();
}
}
MyUsbDevice = null;

// Free usb resources
UsbDevice.Exit();

// Wait for user input..
Console.ReadKey();
}
}

private static void OnRxEndPointData(object sender, EndpointDataEventArgs e)
{
LastDataEventDate = DateTime.Now;
Console.Write(Encoding.Default.GetString(e.Buffer, 0, e.Count));
}
}
}

sajjad_AD
29-10-2014, 20:34
سلام مشکل حل شد از Device بود! تشکر فراوان به زودی یه آموزش USB برای دوستان MikroC کار میذارم که همه حالشو ببریم :o

alho777
20-07-2016, 15:38
سلام مشکل حل شد از Device بود! تشکر فراوان به زودی یه آموزش USB برای دوستان MikroC کار میذارم که همه حالشو ببریم :o


دوست عزیر hid نباید نیاز به هیچ گونه نصب درایور داشته باشه .... میشه مثال بزنین که نیاز به نصب درایور نداشته باشه ؟؟؟؟

برنامه microC for ARM تون درسته توی تاپیک usb در بیست دقیقه... حالا میشه برنامه ی سمت کامپیوتر رو هم ردیف کنین که دیگه نیاز به نصب هیچ گونه درایور نباشه؟؟؟

آخه تمام هنر HID به همین بی نیازی به درایور هست:wink::wink:

Self
11-11-2017, 14:30
با سلام
در اینجا میخواهیم نحوه ی کار با پورت usb رو به صورت مستقیم و بدون هیچ واسطی مثل ft232 ، با همکاری همه ی دوستان آموزش بدیم

سلام خدمت همه اساتید و دوستان، المسئلة؟!
مرتبط با بحث تاپیک، من میخوام یه مقدار اطلاعات رو به صورت Bulk بین یه میکرو و PC از طریق رابط USB جابه جا کنم،
- سرعت انتقال چندان مهم نیست و شروع انتقال توسط کاربر و از داخل PC کنترل میشود.
- میکرویی که استفاده میکم XMEGA هست (متأسفانه!) ==> محدودیت فلش دارم!
- با مثالها و DEMO ها و ASF کار نمیکنم (به خاطر حجیم بودن و پیچیدگی کدهاشون)!
- برای این ارتباط کلاس CDC رو انتخاب کردم.
USB 2.0 Specification و دیتاشیت میکروم رو مطالعه کردم و با کار کردن در سطح رجیسترها به مرحله ای رسیدم که Device ، توصیفگرهای دوایس و کانفیگ و اینترفیس و اندپوینت ها رو برای کامپیوتر ارسال میکنه و کامپیوتر شروع به جستجو درایور مربوط به Device میکنه.
خوب این تا اینجا باشه!
سمت کامپیوتر هم من C# کار میکنم (خیلی ابتدایی) و میخوام از اون کتابخانه Serial استفاده کنم، البته در اینجا اصلا مهم نیست، فرض کنید که با یک برنامه ترمینال کار کنیم.
خوب حالا یه جوانمردی بفرماید که تا تکمیل شدن این ارتباط، من چقدر راه دارم؟

لازمه چندتا توضیح تکمیلی بدم:
1 دسکریپتورهایی که من برای دوایسم نوشتم فقط شامل یک دوایس، یک کانفیگ، یک اینترفیس کلاس CDC و دوتا اند پوینت (ورودی + خروجی) نوع Bulk هست!
2 در مورد ساختار کلاس CDC و اگه احتمالا دسکریپتوری نیاز داشته باشه هیچی نمیدونم!
3 سوم اینکه توی دستکاری فایلهای inf به موردی به نام CatalogFile برخوردم که از اون هم هیچی نمیدونم!
در کل فکر کنم هیچی نمیدونم!!
(خداییش خسته شدم انقدر که با این فایلهای inf و دسکریپتورها ور رفتم!)

یه جوانمردی ما رو راهنمایی بفرماید. اجرکم عندالله.