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

   

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 02-08-2012, 10:56 PM المشاركة 25   
افتراضي



بسم الله الرحمن الرحيم
بالنسبة ل pic 16f84a
كود الارسال بتاعه عندى ممكن
لكن انك تستقبل بية فان شاء الله قريب هعمل كود استقبال يعمل علية
والسبب ان الاعتماد فى الاستقبال على التايمر 0
وفى هذا الميكرو لا يوجد تايمر


اما بالنسبة ل16f877a
فاالارسال هو هو استخدم نفس الطريقة عادى

اما المستقبل
فكل التعديل انك هتشيل الامر cmcon=0x07;
وتحط مكانة الامر adcon1=0x07;
وتشتغل عادى خالص بنفس بعد كدا

وطبعا هتركب كريستالة 4 ميجا
وتوصل الطرف MCLR على خمسة فولت

وبعد اشتغل عادى خالص

اعلانات

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 03-08-2012, 03:38 AM المشاركة 26   
افتراضي


السلام عليكم ،،

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



حاليا انا فهمت المغزى من الكود ولكن لدي سؤال ،، كود الرقم 1 مثلا كله اصفار وبالتالي تستطيع استخدام جملة for او ما يسمى بــ for loop لتكرار العملية ،، والجميل انها مجرد 16 بت ،، لكن وكما تعلم انني اعمل على برتوكول مختلف وهو برتوكول الـsamsung وبالتالي لا يمكن استخدام جملة for هنا بشكل واضح لأن ارسال الكود الخاص بزر OK مثلا ،، يتطلب 33 بت كبقية الأزرار وهي كالتالي : 11100000111000000001011011101001 فكيف يمكن ان اكتب كود لارسل مثل هذا االــsequence ؟

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

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 03-08-2012, 04:47 AM المشاركة 27   
افتراضي


السلام عليكم ،،

لقد قمت بكتابة كود لأرسال الكود الخاص بالزر OK أو ENTER ، وهو كالتالي


كود:
char x;

void main() {
CMCON=0x07;TRISA=255;TRISB=0;portb=0;
PWM1_Init(38900);
PWM1_Set_Duty(255);


  while (1) 
  {
  if (porta.f0==0){
      PWM1_Start();delay_us(4500);PWM1_Stop();delay_us(4500);
      
      for(x=0;x<3;x++){
                       PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
                       }
      for(x=0;x<5;x++){
                       PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
                       }
      for(x=0;x<3;x++){
                       PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
                       }
      for(x=0;x<5;x++){
                       PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
                       }
      // start sending the data

      for(x=0;x<3;x++){
                       PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
                       }

      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
                       
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
      
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
      
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);

      for(x=0;x<3;x++){
                       PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
                       }
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
      
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
      
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(560);
                       
      PWM1_Start();delay_us(560);PWM1_Stop();delay_us(1690);
      
      
      delay_ms(250);
      






      }

  }
  }

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


الدائرة التي استخدمتها في المرسل هي كالتالية :

http://www12.0zz0.com/2012/08/03/03/942699714.jpg


ارجوا توضيح الخطا سواء في الدائرة او في الكود !




ارجوا التعقيب على الكود أخي محمد


التعديل الأخير تم بواسطة : المظلوم بتاريخ 03-08-2012 الساعة 06:03 AM

winsock
:: مهندس ::
تاريخ التسجيل: Apr 2004
المشاركات: 10
نشاط [ winsock ]
قوة السمعة:
قديم 03-08-2012, 06:56 AM المشاركة 28   
افتراضي


نفس مشكلتك اخي المظلوم

حتى ليد التلفاز لم تضيء الخاصة باستقبال الاشارة من الريموت

جربت الكود بدون دالة for ولم تنجح

ان شاء الله تحل المشكلة على يد استاذنا الكبير funky112233


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 03-08-2012, 12:43 PM المشاركة 29   
افتراضي


نفس مشكلتك اخي المظلوم

حتى ليد التلفاز لم تضيء الخاصة باستقبال الاشارة من الريموت

جربت الكود بدون دالة for ولم تنجح

ان شاء الله تحل المشكلة على يد استاذنا الكبير funky112233
انا وضعت كاميرا التلفون على ليد الارسال وقمت بالضغط على الزر ولكن لم يظهر اي شيء على الليد ، بمعنى انه لاتوجد اشارة تخرج من الليد اصلا ،، ولكن لا اعلم ما السبب !!


الصورة الرمزية mohamedalikahli
mohamedalikahli
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2010
الدولة: مصر -- الاسكندرية
المشاركات: 153
نشاط [ mohamedalikahli ]
قوة السمعة:
قديم 03-08-2012, 06:37 PM المشاركة 30   
افتراضي


السلام عليكم و رحمة الله و بركاته
وافر الشكر و التقدير الي اخي محمد (funcky) علي ما قدمه من مجهود مبذول و ملاحظ في شروحاته و لولا الله اولا ثم اخي محمد ثانية لما كنت افهم بروتوكولات الريموت و التعامل مع الاشعة تحت الحمراء...
هذا كود ارسال لريموت سوني مختصر شوية لمن يريد ان يفك شفرات جميع الازرار في الريموت و بكل سهولة و انا عامله لخمس مفاتيح من الزر رقم 0 حتي الزر رقم 5
و اليكم الكود ...
كود:
char x;
void bit_start()
{pwm1_start();delay_us(2400);pwm1_stop();delay_us(600);}
void bit_1()
{pwm1_start();delay_us(1200);pwm1_stop();delay_us(600);}
void bit_0()
{pwm1_start();delay_us(600);pwm1_stop();delay_us(600);}
void adress_bits()
{bit_1();for(x=0;x<4;x++){bit_0();}}
void main() 
{
trisb=0xff;
TRISC=0X00;
PORTC=0X00;
pwm1_init(38000);
pwm1_set_duty(255);
while (1)
        {
        if(portb.f0==1)   // the key number '0'
                       {
                       delay_ms(500);bit_start();
                       for(x=0;x<7;x++){bit_0();}adress_bits();
                       }
        if(portb.f1==1)   // the key number '1'
                       {
                       delay_ms(500);bit_start();bit_1();
                       for(x=0;x<6;x++){bit_0();}adress_bits();
                       }
        if(portb.f2==1)   // the key number '2'
                       {
                       delay_ms(500);bit_start();bit_0();bit_1();
                       for(x=0;x<5;x++){bit_0();}adress_bits();
                       }
        if(portb.f3==1)   // the key number '3'
                       {
                       delay_ms(500);bit_start();bit_1();bit_1();
                       for(x=0;x<5;x++){bit_0();}adress_bits();
                       }
        if(portb.f4==1)   // the key number '4'
                       {
                       delay_ms(500);bit_start();bit_0();bit_0();bit_1();
                       for(x=0;x<4;x++){bit_0();}adress_bits();
                       }
        if(portb.f5==1)
                       {  // the key number '5'
                       delay_ms(500);bit_start();bit_1();bit_0();bit_1();
                       for(x=0;x<4;x++){bit_0();}adress_bits();
                       }
        }
}
__________________________________________________ _____________
و هذه هي جميع ملفات المشروع مع المحاكاة ببرنامج بروتس ....

http://www.mediafire.com/?75r3fndv3p8disu

و اي استفسار عن الكود انا في الخدمة ....و لا احد يتردد في السؤال..

ان شاء الله سوف اضع كود افضل من هذا ليؤدي نفس الوظيفة ..
اترككم في رعاية الله .....
و السلام عليكم و رحمة الله و بركاته.....


الصورة الرمزية mohamedalikahli
mohamedalikahli
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2010
الدولة: مصر -- الاسكندرية
المشاركات: 153
نشاط [ mohamedalikahli ]
قوة السمعة:
قديم 03-08-2012, 06:54 PM المشاركة 31   
افتراضي


السلام علكم و رحمة الله و بركاته ......
هذا نفس الكود السابق بس بطريقة تانية ممكن تختار منهم اللي يعجبك و اللي نقدر تفهمه اكتر ....
كود:
char x;
void bit_start()
{pwm1_start();delay_us(2400);pwm1_stop();delay_us(600);}
void bit_1()
{pwm1_start();delay_us(1200);pwm1_stop();delay_us(600);}
void bit_0()
{pwm1_start();delay_us(600);pwm1_stop();delay_us(600);}
void adress_bits()
{bit_1();for(x=0;x<4;x++){bit_0();}}
void main() 
{
trisb=0xff;
TRISC=0X00;
PORTC=0X00;
pwm1_init(38000);
pwm1_set_duty(255);
while (1)
        {
        switch (portb)
                      {
                      case 1:   // the key number '0'
                             {delay_ms(500);bit_start();
                             for(x=0;x<7;x++){bit_0();}adress_bits();}
                      break;
                      case 2:   // the key number '1'
                             {delay_ms(500);bit_start();bit_1();
                             for(x=0;x<6;x++){bit_0();}adress_bits();}
                      break;
                      case 4:   // the key number '2'
                             {delay_ms(500);bit_start();bit_0();bit_1();
                             for(x=0;x<5;x++){bit_0();}adress_bits();}
                      break;
                      case 8:   // the key number '3'
                             {delay_ms(500);bit_start();bit_1();bit_1();
                             for(x=0;x<5;x++){bit_0();}adress_bits();}
                      break;
                      case 16:  // the key number '4'
                             {delay_ms(500);bit_start();bit_0();bit_0();bit_1();
                             for(x=0;x<4;x++){bit_0();}adress_bits();}
                      break;
                      case 32:  // the key number '5'
                             {delay_ms(500);bit_start();bit_1();bit_0();bit_1();
                             for(x=0;x<4;x++){bit_0();}adress_bits();}
                      break;
                      default: break;
                      }
        }
}
و ممكن تجرب الكود دا علي نفس الديساين المرفق في الكود اللي فات
و السلام عليكم و رحمة الله و بركاته...


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 03-08-2012, 11:46 PM المشاركة 32   
افتراضي


بسم الله الرحمن الرحيم
اخوتى المظلوم ..winsock
قوموا بتوصيل الليد بدون ترانزيستور
مباشرة على الطرف RB3/CCP1 الطرف رقم 9 فى الميكرو
وصلوا الطرف الموجب على هذا الطرف مباشرة
وجربوة على مسافة قريبة من المستقبل مسافة 5 سنتى متر تقريبا
وسوف اخبركم لماذا بعد التجربة ان شاء الله
وهذه هى المشكلة التى كنت اتحدث عنها وان شاء الله
سوف اخبركم عن الحلول
واتمنى منكم ان تقوموا بعمل الكود على طريقة اخى محمد
فهى افضل من الطريقة البدائية التى وضعتها انا
وهى كانت للتعلم فقط
واحى اخى المظلوم على اجتهادة الرائع

اخى mohamedalikahli
جزاك الله كل خير وان شاء الله فى ميزان حسناتك
وطريقة مختصرة وجميلة
شكرا جزيلا لك



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