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

   

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 10-12-2012, 10:54 PM المشاركة 41   
افتراضي



ارجوا ان تكون في اتم الصحة والعافية

نحن بانتظارك وكثير من الاخوان متشوفيين للدروس فبارك الله فيك

اعلانات

Mohammedalharbi
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2012
المشاركات: 58
نشاط [ Mohammedalharbi ]
قوة السمعة:
قديم 11-12-2012, 11:46 AM المشاركة 42   
افتراضي


موضوع مشوق..شكراً وجزاك الله خير اخي. اتمنى ان يستمر الدرس.

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

الصورة الرمزية Qudor
Qudor
:: مهندس ::
تاريخ التسجيل: Apr 2011
المشاركات: 37
نشاط [ Qudor ]
قوة السمعة:
قديم 19-01-2013, 01:58 AM المشاركة 43   
x9


السلام عليكم اخوتي الاعزاء واسف لتأخري على اكمال الموضوع وهذا كله بسبب العمل.
سوف نشرح كود المايكروسي وربط الدائرة انشاء الله فلنتوكل على الله
سنأخذ مثال بسيط ليكون اقرب للفهم وهي عباره عن منظومة قياس درجة الحرارة عن بعد سوف تكون المنظومه عباره عن دائرتين هي master و slave فـmaster هو من يبدأ عمليت الكونكشن ويقوم ايضاً باخذ قيمة الحرارة من السنسور وهو LM35 ويقوم بارسالها الى الـslave اما الـslave فيستلم هذه القيمه ويقوم بتعديلها ثم اضهارها على الشاشه
اولاً هذه دائرة الـmaster وهي عباره عن PIC و LM35 وموجيول البلوتوث وبفر وهو CD4050 وسبب وجود البفر لان البلوتوث يعمل على فولتيت 3.3V اما الـPIC يعمل على 5V


وهذا كود الميايكروسي
كود:
//Set variables
 char analog;       /تحديد المتغيرات

void main()
 {

  UART1_init(9600);                             // Initialize UART1 module 
نعمل انيشيال لل UART
  Delay_ms(100);
  

      UART1_Write_Text("$$$");                  // Enter command mode 
بهذا الامر"$$$"نجعل البلوتوث يدخل في وضع الكومند مود
      Delay_ms(100);

      UART1_Write_Text("SN,Bluetooth-Master");  // Name of device 
هنا نقوم بتحديد اسم جهاز البلوتوث
      
      Delay_ms(100);
هنا نقوم بتحديد المود الخاص بالبلوتوث وهو طبعاً هنا Master
      UART1_Write_Text("SM,1");                 // Set mode (0 = slave, 1 = master, 2 = trigger, 3 = auto, 4 = DTR, 5 = ANY)
      Delay_ms(100);
 الان نقوم بالغاء الاوثنتكيشن لان البلوتوث سوف يتصل بجهاز واحد لا غير
      UART1_Write_Text("SA,0");                 // Authentication (1 to enable, 0 to disable)
      Delay_ms(500);
هنا نقوم باعطاء امر الكونكشن للبلوتوث لكي يتصل بالبلوتوث الاخر ونقوم بأدخال الـMAC number الخاص بالبلوتوث الذي نريد الاتصال به في مكان الـ Xs التي كتبتها وهذا الرقم يكون عادتاً مكتوباً عليه
      UART1_Write_Text("C,xxxxxxxxxxxx");      //Connect to the remote address
      
      Delay_ms(100);
  while(1){
الان نقوم باخذ القيم من الـ ADC ثم نرسلها الى الـ UART وسوف ترسل بالبلوتوث
 analog = ADC_Read(2);    // read analog value from ADC module channel 2
 UART1_Write(analog);          // Write the value of analog input to the UART1
 Delay_ms(500);
 }}
اما دائرة الـ Slave فتتكون من PIC وبلوتوث و LCD وايضاً على بفر وهذه الدائرة تستلم المعلومات من دائرة الماستر وتقوم بمعالجة القيمة واضهارها على شاشة الـ LCD
وهذه صورة الدائرة



وهذا كود المايكروسي
كود:
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;                                              
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;                         هذه تعريفات الشاشة
// End LCD module connections

//Set variables                هنا نقوم بتحديد المتغيرات
char txt[17];
char tmp;                                   
int val;
// Uart Rx interrupt handler               هذه دالة المقاطعة للـ UART 
void interrupt(){

  if (PIR1.RCIF == 1) {                          // Do we have uart rx interrupt request?
    tmp = UART1_Read();                          // Get received byte
    }}
void main() {                                          
ANSEL  = 0;                        // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;



// Enable uart rx interrupt                  وهنا قمنا بتفعيل المقاطعه بالنسبة للـ UART 
  PIE1.RCIE   = 1;
  INTCON.PEIE = 1;
  INTCON.GIE  = 1;

  LCD_Init();                                   // LCD Init
  LCD_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);

  Lcd_Out(1,1,"Connecting!");
  Lcd_Out(2,1,"Please, wait...");

  UART1_init(9600);                             // Initialize UART1 module
  Delay_ms(500);
  
الان نجعل البلوتوث موجيول يدخل في وضع الكوماند
        UART1_Write_Text("$$$");                   // Enter command mode
      Delay_ms(500);
  الان نقوم بأعطاء اسم لجهاز البلوتوث وليكن اي اسم انت تحب
      UART1_Write_Text("SN,Bluetooth-Slave");   // Name of device
      Delay_ms(500);

هذا الكود يقوم بوضع الحرف M في كلمة connected فتصبح Mconnected وهذه الكلمه سوف يرجعها لنا البلوتوث عندما تتم عمليت الكونكشن
وكذلك عند فصل عملية الكونكشن سوف يعطينا هذه الكلمة Mdisconnected فانت تستطيع اضافة اي حرف او كلمة انت تريد فانا اضفت حرف M 
      UART1_Write_Text("SO,M");             // Extended status string
      Delay_ms(500);
هنا سوف نحدد وضع البلوتوث وهنا طبعاً هو slave
      UART1_Write_Text("SM,0");                 // Set mode (0 = slave, 1 = master, 2 = trigger, 3 = auto, 4 = DTR, 5 = ANY)
      Delay_ms(500);
هنا نلغي عملية الاوثنتكيشن لانن لا نحتاج اليها لانه لدينا جهازي بلوتوث فقط 
      UART1_Write_Text("SA,0");                 // Authentication (1 to enable, 0 to disable)
      Delay_ms(500);
الان نقوم بالخروج من وضع الكوماند 
     UART1_Write_Text("---");                   // End command mode
     Delay_ms(500);
     while(tmp !='M') {};                        هنا يبقى الـ PIC ينتضر من البلوتوث ليعلمه باتمام عملية الكونكشن عن طريق ارسال كلمة
                                                             Mconnect وهنا سوف نستخدم الحرف M فقط فهو كافي ولا داعي للتحقق من الكلمة بالكامل
                             //Waite to connect    
  LCD_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"Connected!");   نظهر على الشاشة كلمة !Connected
  Delay_ms(1000);
  LCD_Cmd(_LCD_CLEAR);                          // Clear display
  Lcd_Out(1,1,"Receiving...");   نظهر على الشاشة كلمة Receiving
  Delay_ms(1000);
  while(1){
  LCD_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"temperature=");     نظهر على الشاشة كلمة temperature
  val = tmp;           الان ناخذ القيمه المستلمة من البلوتوث ونضعا على متغير
  val=(val*5)/10;   الان نقوم بتصحيح القيمة 
  IntToStr(val,txt);   نحولها الى سترنك ليمكن عرضها على الشاشة
  Lcd_Out(2,1,txt);
  Delay_ms(1000);
  }}


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


kishoko
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2011
المشاركات: 122
نشاط [ kishoko ]
قوة السمعة:
قديم 21-01-2013, 12:20 PM المشاركة 44   
افتراضي


جزاك الله خيرا اخي العزيز ولكن هذا المديول غير موجود ببرنامج بروتي فكيف يمكن اضافته؟
كما ان هذا الموديول له خصائص معينه منها انه يعمل علي لاير او طبقه تواصل محددة عن طريق الUART. ولكن لا اعلم اماكن لبيعه بمصر وكم تكون تكلفته؟
اشكرك مرة اخري جزيل الشكر واتمني منك شروحات لموديولات البلوتوث الاخري التي تدعم ارسال واستقبال الملفات وتشغيل الصوتيات وغيرها و ان امكن ان تقوم بشرح الطبقات االمختلفة للاتصال بتقنيه البلوتوث 2 و 3 و 4 ان امكن ولا تنسي اخي العزيز ان تخبرنا باماكن بيعها واسعارها بمصر وجزاك الله عنا خيرا


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 21-01-2013, 10:46 PM المشاركة 45   
افتراضي


بارك الله فيك اخي الكريم عندي ملاحظتين واقتراح وسؤال ارجوا الرد عليها جميعا:
الملاحظات:
1- في برنامج slave استخدمت مقاطعة لكن لم يتم تصفير flag في نهاية برنامج المقاطعة وفي هذه الحالة قد لاتحدث المقاطعة مرة اخرى ويحدث خطأ في البرنامج؟؟
2-في برنامج master ارسلت ناتج التحويل ولم تحدد high او low لان الريجستر تبع ADC يتكون كما تعلم من 16 bits ثمانية low significant , وثمانية high significant
فهنا ناتج التحويل كما في الموديول pic16f887 هو 10 bits فممكن نرسل الثمانية الاولى ونعمل shift لل2bits الثانية لتكون اكثر دقة اما بالنسبة لارسال قيمة ADC لااعلم هل تتم بنفس الطريقة او انها تحذف 2bits ؟؟

الاقتراح:
ممكن نعمل simulation فقط لنتأكد من البرنامجيين وهنا لايتم توصيل bluetooth module انما يكتفي بمدخل على RX ومخرج على TX لكلا المتحكميين.

سؤال:
هل بالامكان عمل الطريقة بدلا من درجة الحرارة ان نضع sine wave ويتم استقبالها بالمتحكم الثاني وعرضعا على السلسكوب as a real time

بارك الله فيك


الصورة الرمزية Qudor
Qudor
:: مهندس ::
تاريخ التسجيل: Apr 2011
المشاركات: 37
نشاط [ Qudor ]
قوة السمعة:
قديم 24-01-2013, 12:29 AM المشاركة 46   
sun


جزاك الله خيرا اخي العزيز ولكن هذا المديول غير موجود ببرنامج بروتي فكيف يمكن اضافته؟
كما ان هذا الموديول له خصائص معينه منها انه يعمل علي لاير او طبقه تواصل محددة عن طريق الUART. ولكن لا اعلم اماكن لبيعه بمصر وكم تكون تكلفته؟
اشكرك مرة اخري جزيل الشكر واتمني منك شروحات لموديولات البلوتوث الاخري التي تدعم ارسال واستقبال الملفات وتشغيل الصوتيات وغيرها و ان امكن ان تقوم بشرح الطبقات االمختلفة للاتصال بتقنيه البلوتوث 2 و 3 و 4 ان امكن ولا تنسي اخي العزيز ان تخبرنا باماكن بيعها واسعارها بمصر وجزاك الله عنا خيرا
السلام عليكم
اخي العزيز kishoko طبعاً اي موجيول للبلوتوث غير موجود ببرامج السميوليشن والافضل هو اختباره عملياً, اما عن موضوع الـ UARTفكذلك يمكنك ربطه عن طريق الـ USB ويمكنك معرفت التفاصيل اكثر ان قرأت الديتا شيت الخاص به التي قمت بوضع الرابط الخاص بها في بدايت الموضوع, اما اماكن بيعها في مصر الحقيقه لا املك اي فكره لاني من العراق اما اذا احببت ان تشتري هذا الموجيول من الانترنيت فيمكنك الدخول على الرابط التالي http://www.mikroe.com/add-on-boards/communication/#
او ابحت عن الوكيل لشركة mikroelektronika في مصر على هذا الرابط
http://www.mikroe.com/distributors/


الصورة الرمزية Qudor
Qudor
:: مهندس ::
تاريخ التسجيل: Apr 2011
المشاركات: 37
نشاط [ Qudor ]
قوة السمعة:
قديم 24-01-2013, 01:18 AM المشاركة 47   
sun


بارك الله فيك اخي الكريم عندي ملاحظتين واقتراح وسؤال ارجوا الرد عليها جميعا:
الملاحظات:
1- في برنامج slave استخدمت مقاطعة لكن لم يتم تصفير flag في نهاية برنامج المقاطعة وفي هذه الحالة قد لاتحدث المقاطعة مرة اخرى ويحدث خطأ في البرنامج؟؟
2-في برنامج master ارسلت ناتج التحويل ولم تحدد high او low لان الريجستر تبع ADC يتكون كما تعلم من 16 bits ثمانية low significant , وثمانية high significant
فهنا ناتج التحويل كما في الموديول pic16f887 هو 10 bits فممكن نرسل الثمانية الاولى ونعمل shift لل2bits الثانية لتكون اكثر دقة اما بالنسبة لارسال قيمة ADC لااعلم هل تتم بنفس الطريقة او انها تحذف 2bits ؟؟

الاقتراح:
ممكن نعمل simulation فقط لنتأكد من البرنامجيين وهنا لايتم توصيل bluetooth module انما يكتفي بمدخل على RX ومخرج على TX لكلا المتحكميين.

سؤال:
هل بالامكان عمل الطريقة بدلا من درجة الحرارة ان نضع sine wave ويتم استقبالها بالمتحكم الثاني وعرضعا على السلسكوب as a real time

بارك الله فيك
السلام عليكم
وشكراً جزيلاً اخي العزيز ennng على اطروحاتك وسوف ارد عليها جميعاً انشاء الله
بالنسبة للمقاطعه فلم احتاج لتصفير الـ Flag لاني اتعامل مع الـ MicroC Pro اما اذا كنت تستخدم الـ MicroC القديمه فلا اعلم اذا كانت تحتاج للتصفير لاني لم اعمل عليها سابقاً , وايضاً اطمأن ان البرنامج شغال 100% لان قمتو بعشرات التجارب عليه.
بالنسبة للملاحظة الثانية اني ارسلت الثمان بتات الـ low ويمكنك ان تعمل shift للبتين الاخرين من رجستر الـ ADC لتنقل العشرة بتات بالكامل ولاكن لا انصح بهذا فسوف يكون البرنامج اكثر تعقيد وتظهر لك مشاكل انت في غنى عنها واني استخدمت الثمانية بتات فقط لاني لا احتاج الى فولتيات اكثر من 1.2v وهي التي تحققها الثماني بتات اما اذا اردت فولتيات اعلى فيجب ان تنقل العشرة بتات كامله
اما الاقتراح: نعم يمكنك عمل simulation باستخدام pic اخر مكان البلوتوث موجيول ولاكن لن تكون الفائدة كبيره لان الـ simulation سوف يقتصر على برنامج الpic فقط وايضاً اقولها لك مرة اخرى ان البرنامج شغال 100%
اما سؤالك فهو جميل جداً والجواب هو نعم وانا منذو ايام قمت بنقل اشاره ونجحت التجربه والحمد لله . فقط قم بربط DAC للـ PIC الاخر واعطه الديتا ويجب ان تلغي الـ Delay في الوقت داخل اللوب لكي تتجنب الانقطاعات في الموجه. والحقيقه ان هذا البرنامج يمكن استعماله لاي تطبيق انت تحب فقط غير الكود الموجود داخل لوب الـ while فتستطيع نقل اي اشاره سواء للعرض او التحكم كان يكون كي بورد او ازرار او اي شيء اخر


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 24-01-2013, 01:40 AM المشاركة 48   
افتراضي


وعليكم السلام ورحمة الله وبركاتة هلا وغلا باخي المهندس خضر تذكرني بجدي صاحب القلب الطيب خضر رحمه الله

اشكرك على اجاباتك الاكثر من رائعة.

في حالة اني ابنقل اشارة sin او اي اشارة انلق نحتاج ان ننقل العشرة بتات او نكتفي بالثمانية.
ياليت ترسل كود نقل الاشارة واي نوع من DAC استخدمت لاني استخدمت DAC0808 ولم ينتج اي شئ.





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