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

   

محمد55555
:: مهندس متواجد ::
تاريخ التسجيل: Jun 2013
المشاركات: 80
نشاط [ محمد55555 ]
قوة السمعة:
قديم 15-06-2014, 11:23 AM المشاركة 17   
افتراضي



السلام عليكم
كود:
// Manchester module connections
sbit MANRXPIN at RB0_bit;
sbit MANRXPIN_Direction at TRISB0_bit;
// End Manchester module connections
// define all leds
sbit led1 at RC0_bit;
sbit led2 at RC1_bit;
sbit led3 at RC2_bit;
sbit led4 at RC3_bit;
sbit led5 at RC4_bit;
sbit led6 at RC5_bit;
sbit led7 at RC6_bit;
sbit led8 at RC7_bit;
sbit led_ok at RD0_bit;
sbit led_ok_dir at trisd0_bit;
#define on  1
#define off  0
const char divce_address=10;
char error, ErrorCount, temp , kk[2], cont=0 , data_recived=0;
void main()
{
 adcon1=6;
 trisc=0;
 led_ok_dir=0;
 trisa=0;
 portc=0;
 portd=0;
 porta=0;
ErrorCount = 0;

Man_Receive_Init();                             // Initialize Receiver
 while (1) {                                 // Wait for the "start" byte
            temp = Man_Receive(&error);         // Attempt byte receive
            if (temp == 0)                         // "Start" byte, see Transmitter example
            break;                                  // We got the starting sequence
            if (error)                                // Exit so we do not loop forever
            break;
           }

while (1) {                                     // Endless loop

          temp = Man_Receive(&error);             // Attempt byte receive
           if (error) {                            // If error occured
                       ErrorCount++;                         // Update error counter
                       if (ErrorCount > 20) {                // In case of multiple errors
                                             temp = Man_Synchro();   // Try to synchronize again
                                             ErrorCount = 0;         // Reset error counter
                                           }
                     }
         if(temp==0)led_ok=1;
         if(data_recived==0)
                      {
                       switch(cont)  {
                                      case 0:if(temp==divce_address)cont=1;
                                             else cont=0;
                                             break;

                                      case 1:if(temp== ~divce_address)cont=2;
                                             else cont=0;
                                              break;
                                       case 2:kk[0]=temp;
                                               cont=3;
                                               break;
                                       case 3:kk[1]=temp;
                                              if(kk[0]== ~kk[1]) data_recived=1;
                                              cont=0;
                                              break;

                                     }
                      }
        if(data_recived==1)
                          {
                           data_recived=0;
                            switch(kk[0])
                                        {
                                         case 1:led1=on;break;
                                         case 11:led1=off;break;
                                         case 2:led2=on;break;
                                         case 21:led2=off;break;
                                         case 3:led3=on;break;
                                         case 31:led3=off;break;
                                         case 4:led4=on;break;
                                         case 41:led4=off;break;
                                          case 5:led5=on;break;
                                         case 51:led5=off;break;
                                         case 6:led6=on;break;
                                         case 61:led6=off;break;
                                         case 7:led7=on;break;
                                         case 71:led7=off;break;
                                         case 8:led8=on;break;
                                         case 81:led8=off;break;

                                        }
                                kk[0]=0;
                           }

       }
}
============================================
تعريف طرف الاستقبال لمانشيستر كود
كود:
// Manchester module connections
sbit MANRXPIN at RB0_bit;
sbit MANRXPIN_Direction at TRISB0_bit;
=================================================
تعريف ليدات
كود:
// define all leds
sbit led1 at RC0_bit;
sbit led2 at RC1_bit;
sbit led3 at RC2_bit;
sbit led4 at RC3_bit;
sbit led5 at RC4_bit;
sbit led6 at RC5_bit;
sbit led7 at RC6_bit;
sbit led8 at RC7_bit;
sbit led_ok at RD0_bit;
sbit led_ok_dir at trisd0_bit;
يعني مثلا led1 هو نفسه RC0_bit اي بدلا من كتابه RC0_bit اكتب مكانه led1 وهذه طريقه لها فوائد منها
1- استطيع تغير led1 على اي رجل اريده مثلا كان led1 مربوط على RC1 واردت أغيره الى RC5 فأنه يتم كتابه كتالي
sbit led1 at RC5_bit
================================================
تعريف ON , OFF
كود:
#define on  1
#define off  0
وبتالي بدلا من اكتب 0 اكتب OFF و كذلك بدلا من كتابه 1 اكتب ON
هذا فقط لجعل كود مفهوم أكثر

==========================================

الالغاء خاصيه انلوك وجعل جميع الاطراف ديجيتل
كود:
adcon1=6;
=======================================
أجعل جميع البورتان مخارج
كود:
 trisc=0;
 led_ok_dir=0;
 trisa=0;
 portc=0;
 portd=0;
 porta=0;
=======================================
تعريف استقبال اشاره بأستخدام مانشيستركود
كود:
Man_Receive_Init();
=========================================
هذا الكود لضمان التهيئه استقبال اشاره ولكن يمكن حذفه
كود:
 while (1) {                                 // Wait for the "start" byte
            temp = Man_Receive(&error);         // Attempt byte receive
            if (temp == 0)                         // "Start" byte, see Transmitter example
            break;                                  // We got the starting sequence
            if (error)                                // Exit so we do not loop forever
            break;
           }
============================================
الان ندخل في لوب مستمر ونقرا البيانات بأستمرار
كود:
 temp = Man_Receive(&error);             // Attempt byte receive
هذا الكود مهم في حاله حصول error في قراءه يتم عمل مزامنه من جديد عند تكرار أخطاء
كود:
 if (error) {                            // If error occured
                       ErrorCount++;                         // Update error counter
                       if (ErrorCount > 20) {                // In case of multiple errors
                                             temp = Man_Synchro();   // Try to synchronize again
                                             ErrorCount = 0;         // Reset error counter
                                           }
                     }
================================
كود:
if(temp==0)led_ok=1;
طبعا هذا الكود لو ترجع قليلا الى كود الارسال لتجد انه اول مايشتغل مرسل يرسل كود 0 فأذا أستقبله دائره الاستقبال سيضيئ ليد لدلاله على ان مرسل ومستقبل يعملان بشكل صحيح (( طبعا يجب تشغيل مرسل ومستقبل في ان واحد ))
=======================================
كود:
if(data_recived==0)
                      {
                       switch(cont)  {
                                      case 0:if(temp==divce_address)cont=1;
                                             else cont=0;
                                             break;

                                      case 1:if(temp== ~divce_address)cont=2;
                                             else cont=0;
                                              break;
                                       case 2:kk[0]=temp;
                                               cont=3;
                                               break;
                                       case 3:kk[1]=temp;
                                              if(kk[0]== ~kk[1]) data_recived=1;
                                              cont=0;
                                              break;

                                     }
                      }
data_recived=0 تعني لم يتم أستكمال استقبال البيانات او لم يتم أستلامها اصلا
(switch(cont فيه اربع حالات طبعا لو ترجع الى كود الارسال لتجد اننا ارسلنا شفره متكونه من 4 بايتات وبتالي لابد من قراءتها بشكل صحيح ولكن كيف يتم ذلك

كود:
case 0:if(temp==divce_address)cont=1;
                                             else cont=0;
                                             break;
هذا الكود يعني انه اذا كان بيانات التي تم قراءها هو نفسه عنوان divce_address اذن انتقل الى رقم 1 واذا كان لا قم بتصفير عمليه الى حين قراءه بايت الاول من شفره لنفترض انه تم قراءه بايت الاول اذن نتقل الى case1

كود:
case 1:if(temp== ~divce_address)cont=2;
                                             else cont=0;
                                              break;
هنا اذا تم قراءه بايت الثاني من كود نتقل الى case2 واذا لم تكن قراءه هو نفس بايت الثاني نصفر عمليه ونعتبر شفره خاطئه ونعيد عمليه من جديد

ولنفترض انه تم قراءه البايت الثاني من شفره نتقل الى case2


كود:
case 2:kk[0]=temp;
                                               cont=3;
                                               break;
هنا بعدما قرأنا بايت الاول والثاني بنجاح هنا نقرأ البيانات ونخزنها في [kk[0
ونتقل مباشره الى case3


كود:
case 3:kk[1]=temp;
                                              if(kk[0]== ~kk[1]) data_recived=1;
                                              cont=0;
                                              break;
هنا سنقرأ البايت الرابع ونعمل له نفي فأذا كان يساوي بايت الثالث معناه الكود صحيح ونجعل (flag (data_recived=1

===============================================
هنا سوف يتم تشغيل او اطفاء ليدات حسب كود مخزون في [kk[0
كود:
if(data_recived==1)
                          {
                           data_recived=0;
                            switch(kk[0])
                                        {
                                         case 1:led1=on;break;
                                         case 11:led1=off;break;
                                         case 2:led2=on;break;
                                         case 21:led2=off;break;
                                         case 3:led3=on;break;
                                         case 31:led3=off;break;
                                         case 4:led4=on;break;
                                         case 41:led4=off;break;
                                          case 5:led5=on;break;
                                         case 51:led5=off;break;
                                         case 6:led6=on;break;
                                         case 61:led6=off;break;
                                         case 7:led7=on;break;
                                         case 71:led7=off;break;
                                         case 8:led8=on;break;
                                         case 81:led8=off;break;

                                        }
                                kk[0]=0;
                           }
الاستاذ/ حسن جزاك اللة خيرا وبارك اللة فيك

اعلانات

mustafaibraheem
:: مهندس ::
تاريخ التسجيل: Jul 2014
الدولة: Baghdad
المشاركات: 8
نشاط [ mustafaibraheem ]
قوة السمعة:
قديم 01-07-2014, 01:33 AM المشاركة 18   
افتراضي


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

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

najee22
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2013
المشاركات: 127
نشاط [ najee22 ]
قوة السمعة:
قديم 06-07-2014, 01:19 AM المشاركة 19   
افتراضي


سلمت يداك مشروع رائع


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 06-07-2014, 05:18 PM المشاركة 20   
افتراضي


السلام عليكم ورحمة الله ورمضان كريم عليكم وتقبل الله صيامكم وقيامكم .
الاستاذ المبدع
حسن هادي بصراحة مجهود اكثر من رائع
ازادك الله من علمه .
استاذي الفاضل هل بالامكان تنفيذ نفس المشروع لكن باستخدام المتحكم 16F84A . وكيف ذلك وما الذي سيتغير بالكود .
السلام عليكم
تفضل هذا مشروع بعد التعديل بأستخدام 16f84a
http://up.top4top.net/downloadf-top4...a7ee1-rar.html

طبعا اكواد التي تتغير هي موقع سويجات او موقع ليدات لانه البك مستخدم يحتوي على عده بورتات ولكن في 16f84a لايحتوي على سوى porta , portb وعليه عليك بتعديل لانه كمبايلر سوف يعطيك error لانه سوف يخبرك انه لايعرف portc او portd وعليه تعديل وفق البورتات

اضافه الى الالغاء كود
كود:
adcon1=6;
لان البك 16f84a لاتوجد فيه خاصيه انلوك ولهذا لايوجد هذا ريجيستر في ذاكره 16f84a لذا يجب حذفه

ويبقى الكود الباقي مثل ماهو

ملاحظه // التعديل يكون في بدايه مشروع لضرب لك مثال
كود:
sbit sw1 at RC0_bit;
تلاحظ سويج مربوط على بن 0 من بورت c الان اريد تعديله على بن 0 من بورت A
فقط أكتب
كود:
sbit sw1 at RA0_bit;


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 07-07-2014, 09:19 AM المشاركة 21   
افتراضي


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


mustafaibraheem
:: مهندس ::
تاريخ التسجيل: Jul 2014
الدولة: Baghdad
المشاركات: 8
نشاط [ mustafaibraheem ]
قوة السمعة:
قديم 07-07-2014, 01:32 PM المشاركة 22   
افتراضي


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


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 07-07-2014, 03:06 PM المشاركة 23   
افتراضي


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



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