قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 14-04-2013, 07:52 PM المشاركة 17   
افتراضي



السلام عليكم

بصراحة لم اجد شرح في الانترنت افضل وادق واسهل من هذا الشرح ...وهوا للاستاذ الفاضل والقدير فهد عبدالعزيز
استاذ و مشرف قسم الالكترونيات

وقد وفر شرحة عليا الكثير من الجهد والوقت ..واي سؤال ان شاء الله ان مستعد للاجابة..وانا تعمدت ان انسخ الكلام حتى لا نتوة بين الروابط

المدخل إلى : الميكروسى برو والاتصال عن طريق المنفذ التسلسلى العام USB interfacing




مقدمة
لفترة طويلة , كان نظام UART هو السبيل الوحيد والأفضل للتواصل مع الكومبيوتر . فمن السهل التكيف والتعامل معه . على الرغم من أن بعض الأجهزة تحتوى داخلها على UART , لكن للتواصل مع الكومبيوتر لا يوجد الآن سوى شىء واحد , وهو الناقل التسلسلى العام USB (Universal Serial Bus) .
الغرض من هذا الموضوع هو شرح "كيفية تواصل أو ربط الميكروكونترولر PIC بالكومبيوتر من خلال منفذ USB . على الرغم من أن المفاهيم عامة , لكن الأمثلة مخصصة للاستخدام مع الميكروسى برو .
يشتهر الميكروكونترولر PIC18F2550 و PIC18f4550بسبب وجود وحدة (موديول) USB فى بنائها.
أصعب جزء فى الموضوع هو ما هو المطلوب بالضبط (بالتحديد) للحصول على اتصال بين الميكروكونترولر مع منفذ USB . الشيئان الأكثر أهمية واللذان يجب أن يكونا صحيحان تماما هما : إعدادات configurationالميكروكونترولر وواصف descriptorجهاز USB . حتى لو كان هناك شىء صغير جدا غير صحيح حولهما فإن الاتصال لن يتحقق .

السرعة USB Speed :
مواصفات الاتصال التسلسلى الأصلى USB 1.0 تعرف معدلات نقل البيانات بالقيم : للسرعة المنخفضة
1.5 Mbit/s "Low Speed" و للسرعة الكاملة 12 Mbit/s "Full Speed" . وكان معدل البيانات المرتفع 12 Mbit/s معد للأجهزة ذات السرعة العالية مثل مشغلات الأقراص disk drives ومعدل البيانات المنخفض 1.5 Mbit/s معد للأجهزة ذات السرعة المنخفضة مثل أذرع القيادة joysticks.
مواصفات الناقل التسلسلى العام USB 2.0لها معدل نقل بيانات بالقيمة 480 Mbit/s , والذى يعرف أيضا بالسرعة العالية “High Speed” . مواصفات الناقل USB 3.0 الجديد لها معدل نقل بيانات بالقيمة 5 Gbit/s وتعرف "فائقة السرعة" “Super Speed” .
الميكروكونترولر PIC18F2550/4550 يدعم السرعة المنخفضة (1.5 Mb/s) والسرعة الكاملة
(12 Mb/s). لذا فإن أول شىء عليك أن تعرفه هو كيفية تعيين الساعة clock المطلوبة للاتصال عبرUSB .
تعيين الساعة Clock setting :
سوف نوضح كيفية الإعداد بالسرعة الكاملة ‘Full Speed’أى 12 Mb/s . عندما تستخدم الميكروكونترولر للاتصال من خلال USB يجب استخدام ساعة بتردد 6 MHz أو 48 MHz لعمل USBإعتمادا على ما إذا كان يتم استخدام السرعة المنخفضة Low-Speed أو السرعة الكاملة Full-Speed.
أول شىء يمكنك القيام به هو استخدام كريستال بتردد 48MHz ( من أجل السرعة الكاملة ).
لكن يوجد عيبان :
  • أن التردد 48MHz غير متاح بوفرة كما أنه مكلف .
  • كلما ارتفع تردد الكريستال كلما زادت الضوضاء .
قدمت شركة ميكروشيب عمل رائع من أجل حل هذه المشكلة . لقد ضمنت "مضاعف تردد" ( بدائرة "حلقة قفل الطور" Phase Lock Loop (PLL)) , والذى يسمح بمجموعة واسعة من سرعة الساعة , من 4MHz إلى 48MHz . كما تتم المعالجة لإلغاء الضوضاء داخلها . لذلك سوف نستخدم هذه الميزة لإنتاج السرعة الكاملة للاتصال عبر USB .
الشكل التالى يبين المخطط الصندوقى للساعة :

الميكروكونترولر PIC18F2550يدعم كل من المذبذب الخارجة والمذبذب الداخلى على حد سواء . ولإننا سوف نناقش المذبذب الخارجى لذلك تم إزالة الجزء السفلى من المخطط . من المخطط يمكنك أن ترى أن وحدة PLL تنتج بالفعل 96MHz وبعد القسمة على 2 تكون 48MHz . وحدة PLL يجب أن يكون لها دخل 4MHz . لذلك إذا استخدمنا كريستال 4MHz عندئذ يجب تعيين المعامل PLL prescaler بواحد (PLLDIV = 000) . وإذا استخدمنا كريستال 20MHz عندئذ يجب أن يكون المعامل prescaler بخمسة وهكذا .
كان ذلك نهاية ضبط ساعة USB . الآن ماذا عن مصدر ساعة الميكروكونترولر . من المخطط الصندوقى يمكنك أن ترى أنه يمكن استخدام إما خرج PLL أو يمكن مباشرة استخدام خرج الكريستال .
هنا سوف نستخدم كريستال 20MHz . لذلك من أجل USB سوف يكون PLL prescaler بالقيمة 5 . الميكروكونترولر سوف يعمل عند 20MHz ( أى أن المعامل prescaler سوف يكون بواحد
[CPUDIV = 00] )

اعلانات

الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 14-04-2013, 07:53 PM المشاركة 18   
افتراضي


ضبط الساعة بالميكروسى :
حتى قبل برمجة الميكروكونترولر , يجب أن تكون إعداداته صحيحة . قم بإنشاء برنامج للميكروكونترولر P18F2550 . إذهب إلى القائمة Project→Edit Project,:



سوف يظهر لك النافذة التالية :



راقب بعناية :
  • PLL Prescaler Selection : لإننا نستخدم كريستال20MHz فإن المعامل يجب أن يكون 5.
  • USB Clock Selection : نختار PLL

  • Oscillator Selection : نختار HS (High Speed)

  • System Clock Postscaler Selection : نختار الواحد كما ذكرنا .

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 14-04-2013, 07:55 PM المشاركة 19   
افتراضي


منظم الجهد USB voltage regulator :
يوجد ضمن بناء الميكروكونترولر منظم جهد ويجب تمكينه :


الموضوع أن مستوى الجهد لخط بيانات USB(D+ and D-) هو 3.3 volt . ونظرا لأن الميكروكونترولر يعمل عند 5v , لذلك يوجد منظم الجهد 3.3v الخاص بعمل USB . يجب عليك تمكينه enable.
أيضا إذا أمعنت النظر فى مخطط الأطراف فسوف ترى أن هناك طرف يسمى VUSB (pin14) . إذا كنت لا تريد استخدام منظم الجهد 3.3v الداخلى , يمكنك التغذية بمصدر 3.3v على هذا الطرف . وإذا استخدمت المنظم الداخلى عندئذ يتم إضافة مكثف 220nF على هذا الطرف بالنسبة للأرضى لعمل استقرار للمصدر الداخلى (يمكنك استخدام مكثقين 100nF على التوازى) .








الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 14-04-2013, 07:57 PM المشاركة 20   
افتراضي


الان اترككم مع اهم دوال البرمجه للتعامل مع منفذ اليو اس بي

البرمجة :
الآن حان وقت البرمجة .
الميكروسى يضم مكتبة للاتصال التسلسلى العام USB library . يمكنك أن تجدها فى "إدارة المكتبة" “Library Manager” .
للتفاصيل حول روتينات دوال المكتبة يمكنك تتبع :


Help→mikroC PRO for PIC Libraries→Hardware Libraries


فى نهاية القائمة سوف تجد “USB Library” .





مكتبة USB بالميكروسى :
يوفر الميكروسى نوعين من مكتبة USB . واحدة للاتصال العام للناقل USB والأخرى للاتصال للفئة
HID USB . سوف نناقش النوع الأخير .

دوال المكتبة :
1- الدالة HID Enable :
الصيغة :
void HID_Enable(char *readbuff, char *writebuff);




الغرض :
لتمكين الاتصال USB HID .
البارامترات :




بارامتران :
  • ReadBuffer: المتغير (بعبارة أدق المصفوفة) حيث تريد حفظ بيانات USB التى تأتى من الكومبيوتر .
  • WriteBuffer : حيث تريد أن تخزن البيانات التى سوف ترسلها إلى الكومبيوتر .
العائد :
لا يوجد .
المتطلبات :
لا يوجد .
يجب إستدعاء هذه الدالة قبل استخدام الدوال الأخرى من المكتبة USB HID .


مثال :
HID_Enable(&readbuff,&writebuff);




ملاحظة :
وفقا للداتا شيت هذه المتغيرات يجب أن تكون فى الذاكرة USB RAM . الميكروكونترولر به
1 Kbyte USB RAM , تبدأ من 400h إلى 7FF .






من العنوان 400h إلى العنوان 4FFh من أجل "الواصف" descriptor . لذلك لدينا فعليا من العنوان 500h إلى العنوان 7FFh بتخزين البيانات . لذلك سوف يتم إعلان المتغيران كما يلى :
unsigned char readbuff[64] absolute 0x500;
unsigned char writebuff[64] absolute 0x540;



تذكر :
التوجيه “absolute”Directive :

يحدد عنوان البداية فى ذاكرة RAM "للمتغير" أو عنوان البداية فى ذاكرة ROM "للثابت". إذا كان المتغير أو الثابت متعدد البايتات , فإن البايتات الأعلى سوف يتم تخزينها عند المواقع المتتابعة .




يتم إلحاق التوجيه absolute لإعلان المتغير أو الثابت كما يلى :
  • المتغير x سوف يحتل 1 بايت عند العنوان 0x2 :
// Variable x will occupy 1 byte at address 0x22 :short x absolute 0x22;

· المتغير y سوف يحتل 2 بايت عند العناوين 0x23 و

0x24 :// Variable y will occupy 2 bytes at addresses 0x23 and 0x24 :int y absolute 0x23;
· عناصر المصفوفة ConstantArray سوف توضع فى مواقع متعاقبة بداية من العنوان 0x1000 :

// Array elements will be placed on the consecutive locations starting from 0x1000 :const short ConstantArray[] = {1,2,3} absolute 0x1000;


ملحوظة :
إذا أردت وضع ثابت من النوع البسيط فى ذاكرة Flash memory فبدلا من الإعلان التالى :

const short SimpeConstant = 0xAA absolute 0x2000;

استخدم مصفوفة مكونة من عنصر مفرد كما يلى :const short

SimpleConstant[] = {0xAA} absolute 0x2000;

فى الحالة الأولى , سوف يتعرف المترجم على محاولتك , لكن من أجل توفير حيز ذاكرة الفلاش , ولرفع الأداء , سوف يقوم تلقائيا باستبدال كل مثيل لهذا الثابت بالبرنامج بالقيمة الحرفية له . فى الحالة الثانية , سوف يتم وضع الثابت فى ذاكرة الفلاش فى الموقع المحدد تماما . توخى الحذر عندما تستخدم التوجيه absolute , لإنه قد يحدث تداخل لمتغيران عن طريق الصدفة كما يلى :

· المتغير i سوف يحتل 1 بايت عند العنوان0x33 :

// Variable i will occupy 1 byte at address 0x33char i absolute 0x33;

· المتغير سوف يحتل 4 بايت عند العناوين

0x30, 0x31, 0x32, 0x33// Variable will occupy 4 bytes at 0x30, 0x31, 0x32, 0x33; thus,long jjjj absolute 0x30;

تغيير i يتسبب فى تغيير إعلى بايت فى jjjj فى نفس الوقت والعكس بالعكس .


الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 14-04-2013, 07:58 PM المشاركة 21   
افتراضي


2- الدالة HID_Read :الصيغة :char HID_Read(void);




الغرض :
استقبال الرسالة من المضيف host وتخزينها فى المخزن العازل المؤقت للقراءة Read Buffer .
البارامترات :
لا يوجد
العائد :
  • إذا فشلت قراءة البيانات ترجع الدالة بالصفر "0" .
  • وإن كان خلاف ذلك ترجع عدد الأحرف التى وردت من المضيف .
المتطلبات :
يجب إستدعاء دالة التمكين قبل استخدام هذه الدالة .

مثال : إعادة محاولة القراءة حتى النجاح
// retry until success
while(!HID_Read());





3- الدالة HID_Write :
الصيغة :
char HID_Write(char *writebuff, char len);



الغرض :
ترسل الدالة البيانات من المخزن العازل المؤقت للكتابة Write Buffer إلى المضيف .
البارامترات :
لهذه الدالة بارامتران هما :
  • اسم متغير مخزن الكتابة writebuff . وهو نفس البارامتر المستخدم فى دالة التمكين .
  • و طول البيانات المرسلة len.
العائد :
  • إذا فشل إرسال البيانات تعود الدالة بالصفر "0" .
  • خلاف ذلك تعود بعدد البايتات المرسلة.
المتطلبات :
يجب إستدعاء دالة التمكين قبل استخدام هذه الدالة .
ملاحظة :
إستدعاء الدالة يحتاج إلى التكرار طالما لم يتم إرسال البيانات بنجاح .
مثال : إعادة محاولة الكتابة حتى النجاح
// retry until success
while(!HID_Write(&writebuff,64)) ;





3- الدالة HID_Disable :
الصيغة :
void HID_Disable(void);







الغرض :
عدم تمكين الاتصال USB HID .
مثال :
HID_Disable();






4- الدالة USB_Interrupt_Proc :
الصيغة :
void USB_Interrupt_Proc(void);





الغرض :
هذه الدالة تستخدم لخدمة مختلف أحداث ناقل USB . يجب أن تستدعى داخل روتين مقاطعة USB .
مثال :

void interrupt()
{
USB_Interrupt_Proc();
}



والف تحية وشكر لشرح استاذنا فهد عبدالعزيز وجعلة الله في ميزان حسناتك ..
.كما نوهت تم نقل الشرح



الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 14-04-2013, 08:00 PM المشاركة 22   
افتراضي


السلام عليكم

اليوم الموضوع دسم قليلاا يحتاج الى كباية شاي كبيرة اخظر منعنع...ههههههههههههههه

اترككم مع هذا الشرح الجميل والسلس واي سؤال باذن الله انا في الخدمة ..وبعد الانتهاء من مشاكل الاخوة سيكون درسنا القادم ان شاء الله عن تطبيقنا الاول من ناحية الميكروسي وكذلك ادوات الاب فيو المهمه لكي نستقبل ونرسل الداتا ...


الصورة الرمزية ibn al islam
ibn al islam
:: عضو فضي ::
تاريخ التسجيل: Sep 2012
الدولة: tunisia
المشاركات: 611
نشاط [ ibn al islam ]
قوة السمعة:
قديم 15-04-2013, 02:02 AM المشاركة 23   
افتراضي


1- لقد قمت بتغيير رابط الفيزا ..لان الاول كان ناقصااا ...فقمت بعمل تنبية ونزلته من جديد..هل نزلته من جدبد؟؟؟

2- ما نوع الويندوز عندك؟؟؟

3- ما نوع المشكله بالظبط ارجو التوضيح بالصور
السلام عليكم

اخى وجدت احسن حل لشرح المشكل الفديو



الصورة الرمزية فكروعلم
فكروعلم
:: عضو ماسي ::
تاريخ التسجيل: Mar 2012
الدولة: سوريا
المشاركات: 5,401
نشاط [ فكروعلم ]
قوة السمعة:
قديم 15-04-2013, 02:35 AM المشاركة 24   
افتراضي


موضوع رائع ألف شكر



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:54 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)