NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4013 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید

نمایش نتیجه های نظرسنجی ها: میزان کاربرد این کلاس در برنامه های مورد نظر؟

رأی دهندگان
41. شما نمی توانید در این نظرسنجی رای دهید.
  • عالی

    30 73.17%
  • خوب

    10 24.39%
  • متوسط

    1 2.44%
  • ضعیف

    0 0%
صفحه 1 از 3 123 آخرینآخرین
نمایش نتایج: از 1 به 20 از 49

موضوع: کلاسی برای انتقالهای وقفه ای، کنترلی و توده ای usb

  1. #1
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    Gadid کلاسی برای انتقالهای وقفه ای، کنترلی و توده ای usb

    سلام

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

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

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

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

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

    دانلود:
    ویرایش توسط مدیریت سایت
    ویرایش توسط kavir : 07-11-2011 در ساعت 11:23 دلیل: ضمیمه کردن فایل


  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    من هنوز این فایلها و برنامه هارو ندیدم ، ولی همین که تا این حد پیگیر موضوع بودید و قطعا هستید و خواهید بود جای تشکر بسیار زیادی داره ، من شخصا تبریک میگم و صمیمانه آرزوی موفقیت و سربلندی براتون دارم.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  4. تشکرها از این نوشته :


  5. #3
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    نمیدونم این صفحه ای که گذاشتید چرا باز نمیشه؟

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


    وبلاگ شخصی من

  6. تشکرها از این نوشته :


  7. #4
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    سلام
    دستت درد نکنه چیز خیلی عالی هست
    لطفا پیام خصوصی هم چک کنید
    کویر ویدئو راه اندازی شد

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

  8. #5
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    سلام

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

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

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

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

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

    وی بی دات نت
    [highlight=vb]
    Dim USB As New UsbController.Programmer07.Net.USBController.USBCo ntroller
    [/highlight]
    سی شارپ
    [highlight=c#]
    private UsbController.Programmer07.Net.USBController.USBCo ntroller USB = new UsbController.Programmer07.Net.USBController.USBCo ntroller();
    [/highlight]

    بعد یه delegate به نام OnDataReceivedDelegate میسازیم:
    وی بی دات نت
    [highlight=vb]
    Private Delegate Sub OnDataReceivedDelegate(ByVal data() As Byte, ByVal Length As Integer)
    [/highlight]
    سی شارپ
    [highlight=c#]

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


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

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

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

    وی بی:
    [highlight=vb]

    AddHandler USB.EndPointDataReceive, AddressOf UsbCtrl_DataReceived
    AddHandler USB.EndPointMessage, AddressOf UsbCtrl_Message
    [/highlight]


    سی شارپ:
    [highlight=c#]

    USB.EndPointDataReceive += UsbCtrl_DataReceived;
    USB.EndPointMessage += UsbCtrl_Message;
    [/highlight]


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

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

    وی بی:

    [highlight=vb]
    USB.UsingEndPoint = True
    USB.AutoReceiveDataOnEndPoints = True

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

    USB.OpenDevice()
    lblStatus.Text = USB.GetStatus.ToString
    [/highlight]


    سی شارپ:
    [highlight=c#]

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

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

    USB.OpenDevice();
    lblStatus.Text = USB.GetStatus().ToString();
    [/highlight]


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

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

    کلاس دارای متدی به نام OpenDevice هست که overload شده هست. یعنی هم میتونین بصورتی که تو برنامه اومده فراخوانی بشه و هم بصورت زیر:
    [highlight=c#]
    USB.OpenDevice(0x16c0,0x05dc); x

    [/highlight]

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

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

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

    [highlight=c#]
    txtReceive.Text += System.Text.Encoding.UTF8.GetString(USB.EndPointRe ad)
    [/highlight]

    اگر بخواهیم در اندپوینت بنویسیم کافیست به صورت زیر عمل کنیم:
    [highlight=c#]
    USB.EndPointWrite(txtSend.Text.Trim)
    [/highlight]

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

    وی بی:
    [highlight=vb]
    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) [/highlight]

    سی شارپ:
    [highlight=c#]
    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);
    [/highlight]

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

    ولی گفتم که transmit بصورت overload ساخته شده. به این صورت به دو طریق میتونم با transmit کار کنم. روش اول رو که گفتم و روش دوم هم به بدین صورت هست که میخواهیم داده ای به دستگاه بفرستیم:
    [highlight=c#]
    USB.Transmit(UsbController.Programmer07.Net.USBCon troller.USBController.USBRequestType.Host_To_Devic e, _
    &h1, CMD, buf, 300)
    [/highlight]

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

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

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

    موفق باشید
    ویرایش توسط kavir : 14-02-2010 در ساعت 12:23

  9. کاربران : 13 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  10. #6
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    دوستان عزیز

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

    http://www.4shared.com/file/21849304.../Firmware.html

    موفق باشید

  11. کاربران : 7 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  12. #7
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    ممنون

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

    احسنت
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  13. تشکرها از این نوشته :


  14. #8
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

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

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

  15. کاربران : 2 تشکر کرده اند از شما kavir برای ارسال این پست سودمند:


  16. #9
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    در این پست هم توضیحات مختصری درباره برنامه میکرو میدم... :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

    به همین سادگی!!!
    ویرایش توسط behnam6500 : 10-02-2010 در ساعت 01:39

  17. کاربران : 8 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  18. #10
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    ممنون ، واقعا عالی بود

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

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

    منظورم اینه که ما در هر ارتباط USB دقیقا باید چه مواردی رو رعایت کنیم و وجود کدوم توابع ضروری و حتمی هست؟ بعبارتی می خوام بدونم الگوی کلی برای این ارتباط به چه شکل هست؟
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  19. تشکرها از این نوشته :


  20. #11
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    چیزهایی که ما در این برنامه بهشون نیاز داریم، توابع usbFunctionSetup و usbFunctionRead و usbFunctionWrite و یه سری از خطوط داخل تابع main هست.

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

    فرض کن که میخوایم متن یه textbox رو بفرستیم به میکرو:
    برنامه کامپیوتریش با استفاده از کلاس به این صورت تغییر میکنه:
    1- تعداد عناصر آرایه buf بشه 253.
    2- متن textbox در این آرایه قرار بگیره.
    3- با دستور زیر اونو میفرستیم به میکرو:
    کد:
    USB.Transmit(UsbController.Programmer07.Net.USBController.USBController.USBRequestType.Host_To_Device, _
                          &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 بنویسی یا هر کاری که دوست داری....

    موفق باشی
    ویرایش توسط behnam6500 : 10-02-2010 در ساعت 02:49

  21. کاربران : 5 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  22. #12
    مدیر باز نشسته armstk آواتار ها
    تاریخ عضویت
    Mar 2009
    نوشته ها
    926
    تشکر
    839
    تشکر شده 1,198 بار در 573 پست

    پیش فرض

    با تشكر از آقاي behnam ، مي خاستم بدونم من فقط مي خام يك led رو از طريق پورت usb خاموش و روشن كنم فقط همين !
    اگر لطف كنن يك آموزش ساده در همين مورد بزارن واقعا عالي ميشه


    میکروکنترلر STM32103-RBT6 بطور کامل راه اندازی شد !!!
    مرحله بعدی اتصال TFT 3.2 به میکرو و بوت کردن UC-OS II + GUI !!!

    .

  23. کاربران : 2 تشکر کرده اند از شما armstk برای ارسال این پست سودمند:


  24. #13
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    واقعا عالیه ، تا الآن یادگیری winavr رو به تاخیر می نداختمو از اینکه هی باید با این زبان C کلنجار می رفتم غصه ام می گرفت ، ولی حالا می فهمم که واقعا ارزش داره آدم کار با این کامپایلر رو یار بگیره ، از این به بعد از طریق آموزشهای انجمن میرم دنبال یادگیری این کامپایلر.

    آقا بهنام خسته نباشی ، خیلی گلی ، من یکی توی این کلاس و کلاسی که واسه USBasp گذاشتی شاگرد پر و پا قرصتم.
    ویرایش توسط morteza_rk : 10-02-2010 در ساعت 18:21
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  25. کاربران : 2 تشکر کرده اند از شما morteza_rk برای ارسال این پست سودمند:


  26. #14
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    نقل قول نوشته اصلی توسط armstk نمایش پست ها
    با تشكر از آقاي 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;
    }

    موفق باشی

  27. کاربران : 6 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  28. #15
    عضو جدید
    تاریخ عضویت
    Oct 2009
    نوشته ها
    15
    تشکر
    21
    تشکر شده 6 بار در 5 پست

    پیش فرض

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

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

  29. کاربران : 2 تشکر کرده اند از شما ali3130 برای ارسال این پست سودمند:


  30. #16
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

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

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

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

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

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

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

    موفق باشین
    ویرایش توسط behnam6500 : 14-02-2010 در ساعت 11:28

  31. کاربران : 3 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  32. #17
    عضو جدید
    تاریخ عضویت
    Oct 2009
    نوشته ها
    15
    تشکر
    21
    تشکر شده 6 بار در 5 پست

    پیش فرض

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

  33. تشکرها از این نوشته :


  34. #18
    مدیر باز نشسته behnam6500 آواتار ها
    تاریخ عضویت
    Jan 2009
    نوشته ها
    801
    تشکر
    311
    تشکر شده 899 بار در 390 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali3130 نمایش پست ها
    سلام اقای مدیر
    یعنی برای اینکه مدار طراحی شده توسط FT232 بتونه اطلاعاتش رو به کامپیوتر بده باید براش یک برنامه توی کامپیوتر نوشته بشه؟
    راسیتش من الکترونیکی هستم و آشنایی با این برنامه نویسی ها با دلفی و #C و ... ندارم. البته تا حدودی به C واردم. ولی تا حالا ارتباط با کامپیوتر رو با پورت پرینتر (25Pin )(LPT) انجام دادم و خود نرم افزاری که باهاش کار میکردم (LabView) از این پورت پشتیبانی میکرد. ولی اولین باری هست که میخوام ارتباط با پورت USB رو تجربه کنم. البته به سرعتش برای تبادل اطلاعات و راحتی ارتباطش با لپ تاب نیاز دارم وگرنه خودم رو توی دردسر این کار نمی انداختم.
    برای پیشنهاد یک تاپیک دیگه هم ممنون حتما این کار رو میکنم.
    متشکرم
    بله، باید برنامه ای سمت کامپیوتر نوشته بشه که بتونی با اطلاعات دریافت شده از چیپ استفاده کنی.

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

  35. کاربران : 2 تشکر کرده اند از شما behnam6500 برای ارسال این پست سودمند:


  36. #19
    مدیر باز نشسته armstk آواتار ها
    تاریخ عضویت
    Mar 2009
    نوشته ها
    926
    تشکر
    839
    تشکر شده 1,198 بار در 573 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali3130 نمایش پست ها
    سلام اقای مدیر
    یعنی برای اینکه مدار طراحی شده توسط FT232 بتونه اطلاعاتش رو به کامپیوتر بده باید براش یک برنامه توی کامپیوتر نوشته بشه؟
    راسیتش من الکترونیکی هستم و آشنایی با این برنامه نویسی ها با دلفی و #C و ... ندارم. البته تا حدودی به C واردم. ولی تا حالا ارتباط با کامپیوتر رو با پورت پرینتر (25Pin )(LPT) انجام دادم و خود نرم افزاری که باهاش کار میکردم (LabView) از این پورت پشتیبانی میکرد. ولی اولین باری هست که میخوام ارتباط با پورت USB رو تجربه کنم. البته به سرعتش برای تبادل اطلاعات و راحتی ارتباطش با لپ تاب نیاز دارم وگرنه خودم رو توی دردسر این کار نمی انداختم.
    برای پیشنهاد یک تاپیک دیگه هم ممنون حتما این کار رو میکنم.
    متشکرم
    شما براي استفاده از ft232 بايد يك برنامه هم داخله سيستم بنويسي كار با ft232 مشابه با پورت سريال هستش و هيچ تفوتي نميكنه چون كه ft232 خودش يك پورت سريال مجازي در device manager درست ميكنه
    براي بخاي يك نرم افزار براي استفاده از ft232 بكني ميتوني از ويژوال بيسيك استفاده كني تقريبا شبيه بسكام خودمون ميمونه
    اينم يك كتاب كه نحوه نوشتن يك برنامه براي ارتباط با پورت سريال هستش
    http://www.khazama.com/learn/mscomm32.pdf


    میکروکنترلر STM32103-RBT6 بطور کامل راه اندازی شد !!!
    مرحله بعدی اتصال TFT 3.2 به میکرو و بوت کردن UC-OS II + GUI !!!

    .

  37. تشکرها از این نوشته :


  38. #20
    عضو جدید
    تاریخ عضویت
    Oct 2009
    نوشته ها
    15
    تشکر
    21
    تشکر شده 6 بار در 5 پست

    پیش فرض سلام دوست عزیز

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

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

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

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

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

  39. تشکرها از این نوشته :


صفحه 1 از 3 123 آخرینآخرین

موضوعات مشابه

  1. پاسخ: 0
    آخرين نوشته: 18-10-2012, 13:46
  2. شرکت Dell برای گسترش خدمات ابری، Wyse را خرید
    توسط iRobo در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 07-04-2012, 13:42
  3. با «صفحه معجزه‌گر» هر سطحی، مبدل به سطح لمسی می‌شود
    توسط M3R در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 20-08-2010, 13:10
  4. آی سی مولد بیت توازن و چک کننده بی
    توسط navidp در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 8
    آخرين نوشته: 27-05-2009, 13:50
  5. قابل توجه کسانی که به جزوات درسی
    توسط kavir_engineer در انجمن پرسش و پاسخ (نرم افزارهای تخصصی)
    پاسخ: 2
    آخرين نوشته: 10-12-2007, 17:14

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •