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

   

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



شرح ممتاز اخي عبد السلام بارك الله فيك لقد قمت بتجربة الملفات ونجت تمام
ولكن عندي استفسارات كثيرة
ولي طلب لقد قمت بالتعديل في الكود وملف اللاب فيو ليكون اكثر سهولة ووضوح ارجوا ان تتقبلوه مني
وهو نفس فكرة مشروع التانك ولكن بدون شاشة lcd لعدم تركيزنا عليها (ليست مهمة الآن) نريد ان نري الداتا فقط في الاب فيو
وفي الاب فيو مجرد شاشة تظهر الرقم الذي يتزايد او يتناقص ....كل هذا فقط لأجل التبسيط وتركيزنا فقط على استقبال الداتا من البيك للكومبيوتر عن طريق USB
الملفات على هذا الرابط:

http://www.mediafire.com/?e3u6090blls7sh3
السلام عليكم
كم انا سعيد بمشاركتك هذه وتغييرك للكود كان جميل جدااا ونتقبله بكل سرور

بالنسبه الى رؤيه الداتا لم افهم قصدك بالشاشة التي تظهر البيانات هل تقصد الاداة probe watch window فهي الادة الوحيده التي تمكنك من رؤيه البايتات وطول البايتات

ولكن يوجد برامج كثيره خاصه بال usb bus تمكنك من روئيه الداتا وكيفية انتقالها واسم البرنامج UVCView

اعلانات

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


اول استفسار لي هو خاص بالكود الميكروسي:
1-الدالة( HID_Enable(char *readbuff, char *writebuff هي تستقبل وترسل الداتا من ال char فكيف تعرف انت المتغيران هذان من نوع long int حيث ان ملف descriptor يصمم على اساس ان report length فيه ان تكون الداتا ب البايت حيث الرقم 64 او اي رقم اخر يكتب فيها يقصد بها عدد البايتات اللي يرسلها ويستقبلها الميكرو لذلك عند تنفيذ المشروع يرسل لك الميكرو سي رسالة مفادها ان suspcius pionter conversion فاذا عمل الكود في هذه المرة بطريقة صحيحة ففي اي كود اخر كبير او معقد نسيبا اعتقد ان البرنامج لن يعمل بطريقة صحيحة..
نعم اخي كلامك عين العقل ..بالنسبة الى مشروع التنك فهو فقط للتجريب وليس الا..وقد غيرت الكود فيه مئات المرات للتدريب فقط ليس الا...

اما المتغيرات فهذا خطاء مني لانه يمكنني ان اجعله حتى من نوعchar فقط..فيعمل بدون مشاكل...وقد نسيت ان ارجع المتغير الى char....لانه في بادئ الامر كانت عندي اخطاء كثيره نتيجة التجارب ...وكذلك وضعت 64 اقصى بايتات يمكن ارسالها او استقبالها..ويمكنك التحكم في عدد البايتات كما تريد ....

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

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

الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:
قديم 23-04-2013, 12:23 AM المشاركة 35   
افتراضي


lovevb6 مشكوور اخي الكريم على الموضوع الرائع والقيم

صراحة ابداع في الشرح , الى الامام يامهندس.

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


الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 24-04-2013, 10:59 AM المشاركة 36   
افتراضي


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

كما اشكر كل الاخوة الذين نفذو التطبيق الاول وشجعوني على الاستمرار

اولاا سانوة على شيئين ....تعريف البفر ..وهيئة البيانات التي نريد ارسالها او استقبالها...............

سنعرف ما هوا البفر ...BUFFER...عشان اوصلك المعلومه بطريقه جميله ومفهومه وليس بطريقه اكاديميه معقده ..اعتبر البفر هوا حافله (باص) وهذه الحافله تذهب الى داخل الكومبيوتر لتعطي البيانات التي اعطاها لها البك .. وبالمقابل تاخذ المعلومات من الكومبيوتر وتذهب بها الى البك وتعطي للبك المعلومات التي اعطاها لها الكومبيوتر وهكذا ...

ثانيااا : هيئه البيانات التي سنرسلها او نستقبلها ستكون على هيئه مصفوفه ...حتى لو اردنا ان نرسل قيمه صفر فقط او 1 فقط سيكون ذلك عن طريق مصفوفه

الان سندخل في شرح الكود ............
الكود:
كود:
#include"USBdsc.c"
هذا الامر هوا لاحتواء ملف الوصف الذي قمنا بانشائه اول مرة داخل ملف الهكس ..ولن تحتاج اليه بعد استخراج ملف الهيكس ...ولكن ستحتاج اليه فقط في عملية bulid للمشروع... وكما قلنا سيكون ملف الوصف موجودج مع ملفات الميكرو سي وبعد ذلك لن تحتاج اليه ..الا لو اردت فقط ان تعدل على الكود ..يعني كل عمليه بيلد للمشروع سنحتاج للملف .

الكود :

كود:
long int read_buff[64]  absolute 0x500;
long int write_buff[64] absolute 0x540;

في السطر الاول و الثاني قمنا بتعريف المتغيران اللذان سيقومان بقرائة و كتابة البيانات القادمه من الكومبيوتر.. او المرسله الى الكومبيوتر .وهنا لن اشرح نوع المتغير لان هذا يعتمد على نوع البيانات التي تريد قرائتها او ارسالها ..وقد وضعت الرقم 64 وذلك للتجارب فقط لاني وضعت اقصى قيمه للبايتات التي يمكن ارسالها ..اما في الكود الفعلي فهذا يعتمد على عدد ارسالك للبيانات فلذلك انتبه الى هذه النقطه (عدد البايتات التي وضعتها في ملف الوصف يجب ان تكون نفسها هنا ) ..فلذلك لا نختلف على نوع المتغير او عدد البايتات التي نريد ارسالها ..فلامر راجع اليك ......اما الامر absolute 0x500 و absolute 0x540 وهوا لتحديد الرام التي يتم تفعيلها لتكون عمليه قرائة وكتابة البفر عن طريق هذا البنك وهوا بنك خاص باليو اس بي ..والبنوك الخاصه باليو اس بي هيا من 4 الى 7 .. وللمزيد من المعلومات ارجه للداتا شيت تحت عنوان USB RAM

وللعلم فقط قد قمت بحذف الامرين absolute 0x500 و absolute 0x540 وجربت الكود كمحاكاة فقط ..اشتغل الكود بدون مشاكل..ولكن لم اجربه عملياااا

الكود :

كود:
void interrupt(){
 USB_Interrupt_Proc();    
}
هذه داله مقاطعه وذلك لعمل هذه الخدمه (خدمة الاتصال باليو اس بي داخل المقاطعه)...ولن يستطيع البك تنفيذه اي عمل اخر ..لان البك دائماا سيكون في مقاطعه


الدالة الرئيسيه :

الكود :

كود:
HID_Enable(&read_buff,&write_buff);
هذا دالة لبداية تفعيل عمليه الاتصال بين البك والكومبيوتر, ولها عميلين ..عميل للقرائه من البفر وعميل للكتابه على البفر

الكود :

كود:
HID_Read();
    Rd0_bit = read_buff[0];


الامر HID_Read ..هنا سنقراء ما بداخل البفر ...

Rd0_bit = read_buff[0]....هنا حددنا ماذا نريد ان نفعل بالقيمه الموجوده بالبفر وهيا اما صفر او واحد او ربما رقم من 0 الى 256 ..على حسب ما ارسلنا من الاب فيو ...عموماااا
في مثالنا هذا ارسلنا من الاب فيو واحد او صفر ...وهنا يحب ان نحدد للبك اي رقم سيستقبل وهل سيستقبله كبت او كبايت( BIT OR BYTE).......
و بالرغم من انه رقم واحد فقط ..فلذلك يجب ان نحدد بان الاستقبال على شكل مصفوفه ..لذلك قلنا له المصفوفه رقم صفر read_buff[0.....ثم قلنا بان يدخل هذا الرقم كبت AS BIT وليس بايت ..على البورت Rd0

ماذا لو اردنا ان ندخل الرقم كبايت ..فهذا يعني اننا سندخله على بورت كامل وليس بورت معين
سيكون الكود في هذه الحاله PORTD=read_buff[0];...وسيدخل كبايت وليس كبت .....


الكود :

كود:
f(portb.f0=0)write_buff[0]=0;
        else
         write_buff[0]=1;  }
 HID_Write(&write_buff,16);
هنا الامر مفهوم ولكن للتوضيح فقط ....
هنا وضعنا شرط لحالة المفتاح وقلنا لو ان المفتاح تم الضغط عليه, اي حالته بواحد فارسل الرقم واحد ..واذا حالة المفتاح بصفر ارسل القيمه صفر....ويتم ذلك ايظاا عن طريق وضع القيمه المراد ارسالها في مصفوفه .. وهنا وضعناها في المصفوفه رقم صفر ..بمعني في اول المصفوفه ....

الامر :
HID_Write(&write_buff,16);
هنا قلنا بان الارسال سيكون من نوع السادس عشري ...وهذا لغرضي الخاص ..
اما لو اردنا مثلاا ارسال رقم واحد فقط من 0 الى 256 فيمكننا ان نكتفي بوضع رقم 1 في المصفوفه ..وهذه الامر ترجع في الاصل الى نوع المتغير الذي قمت بتعريفه ..ويوجد طرق شتى لكيفيه الارسال ونوع البايتات...

وفي شرح البلوك دايقرام الخاص بالاب فيو ستتضح الامور اكثر عندك ....

وللعلم انا وضعت هذه الدروس ليس لكي تكون محترف ولكن فقط امهد لك الطريق لكي تذهب بها الى الاحتراف ..يعني لن اقود بك بك كثيرااا ..بل تعلم الاساسيات وانطلق لوحدك وابدعنا معك ولا تنسانا


دمتم في رعاية الله ...ولا تترددو في السؤال ...وسؤالكم يقويني في المعرفه ...فانا لازلت اتعلم ..واعذروني على السير ببطئ لان مشاغلي كثيره جدااا


السلام عليكم ورحمة الله وبركاتة


التعديل الأخير تم بواسطة : lovevb6 بتاريخ 24-04-2013 الساعة 12:34 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 24-04-2013, 11:59 AM المشاركة 37   
افتراضي


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


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


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


Tchoo
:: مهندس متواجد ::
تاريخ التسجيل: Jun 2010
الدولة: Algeria
المشاركات: 62
نشاط [ Tchoo ]
قوة السمعة:
قديم 25-04-2013, 08:12 PM المشاركة 39   
افتراضي


ماشاء الله
الله يوفق الجميع


Tchoo
:: مهندس متواجد ::
تاريخ التسجيل: Jun 2010
الدولة: Algeria
المشاركات: 62
نشاط [ Tchoo ]
قوة السمعة:
قديم 26-04-2013, 02:53 PM المشاركة 40   
افتراضي


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

و عند ما قمت بتوصيلها بالكمبيوتر ضهرت هذه المشكلة

عند مراجعة الكتاب وجدت هذه الملاحضة

ارجو منكم مساعدتي باسرع وقت فانا لم اجد اي حل
تقبلو مني كل التقدير والاحترام



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