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

   

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



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

لكتابة الدرجة بالسيليزوس بعد السطر
كود:
Lcd_out(1, 8,disp);
مش المفروض انى اكتب هذا الكود ؟؟
كود:
Lcd_Chr(1,13,223);                 
Lcd_Chr(1,14,'C');
بالنسبة للنقطه 3

كان قصدى انك استخدمت المتغير disp فى الدالة التى كتبتها
كود:
FloatToStr(kk,disp);
 disp[4]=0;// reset pointer
 strcat(txt,disp );
وايضا نفس المتغير استخدمته مرة ثانية فى حسابات الحرارة فى اول حلقة while

كود:
temp = ADC_Read(0);
     act_temp = (temp * 500) / 1024;
     floattostr(act_temp, disp); //converting float to char
     disp[4]=0;
     Lcd_out(1, 8,disp);
فكيف يكون له قيمتين
السلام عليكم
بالنسبه لعرض درجه سليزيه كلامكم صحيح وكود صحيح

بالنسبه لنقطه 3
اساسا قيمه درجه حراره مخزونه في act_temp اما disp فهي مصفوفه خزن فيها قيمه التحويل وأستطيع أستعمالها في اي مكان طالما لايوجد اي تأثير في تغير قيمتها يعني

كود
كود:
temp = ADC_Read(0);
     act_temp = (temp * 500) / 1024;
     floattostr(act_temp, disp); //converting float to char
     disp[4]=0;
     Lcd_out(1, 8,disp);
هنا تجد اني أستخدمت disp في عرض قيمه درجه حراره على شاشه وحددت طول نص بخمسه فقط حيث ذكرت disp[4]=0

بعدين من أجيت وعرضت قيمه duty
كود
كود:
 if (act_temp >= 25 && act_temp <30 )
       {
        PWM1_Start(); PWM1_Set_Duty(32);
        if(flag_message.b0==0)display_message(12.5);
        flag_message=0x01;
       }
تلاحظ خليت 12.5 وهي قيمه float طبعا تكدر تخليها عدد صحيح ربما يخف عليك بالكود على عموم
ومن نذهب الى display_message
فأنا ايضا محتاج تحويل 12.5 الى text وبتالي راح أستخدم FloatToStr اذن احتاج الى مصفوفه لخزن نتيجه التحويل فمن غير صحيح انك تستخدم مصفوفه لكل تحويل مفروض هي مصفوفه واحده فقط
كود:
FloatToStr(kk,disp);
 disp[4]=0;// reset pointer
 strcat(txt,disp );
 txt[15]=0;

ولكن أنتبه تلاحظ انا أستخدمت disp بشكل مباشره ولم ابقى محتفظ بالقيمه وبتالي يمكنني أستخدامها في مكان طالما لايوجد هناك تأثير على عمل البرنامج

للتذكير احاول تضع مصفوفه واحده لخزن نتيجه التحويل وليس اكثر من ذلك والا سوف تسبب بأستخدام رام بشكل كبير يودي الى نتائج اسوأ لان هذه الانواع من البيكات ذاكره رام مرتبه بشكل غير منتظم يعني هناك 4 bank في كل بنك يحتوي على ريجسترات واماكن لخزن متغيرات واستخدام مصفوفات بشكل كبير سوف تخزن قيم ب ريحسترات بدلا من مواقع مخصصه لخزن وتغير قيمه ريجيستر بشكل أجباري معناها اجبرت مايكرو على خضوع لاوامر اكيد لاتعجبك كأن مثلا غيرت ريجيستر trisb بتأكيد لن ترى سوى مشاكل

على عموم disp أستخدمتها مره واحده فقط في كل نتيجه تحويل وبتالي أنتهت مهمتها لذا يمكني أستخدامها في أماكن أخرى

تحياتي

اعلانات

البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 24-03-2015, 03:44 PM المشاركة 18   
افتراضي


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

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

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


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

لانك لو أستخدمت التحكم بسويج بشكل مباشره فأنه مجرد تغير حراره فأن سرعه محرك سوف تتغير اذن لابد من وضع سليكتر لاختيار اتو او منول

حاله اتو أظن انت ماعندك مشكله فيها لان تتعتمد على درجه الحراره

اما منول أشرح لي ماذا تريد بالضبط وهل لدرجه حراره لها علاقه بالموضوع

تحياتي


البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 25-03-2015, 10:00 AM المشاركة 20   
افتراضي


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

لانك لو أستخدمت التحكم بسويج بشكل مباشره فأنه مجرد تغير حراره فأن سرعه محرك سوف تتغير اذن لابد من وضع سليكتر لاختيار اتو او منول

حاله اتو أظن انت ماعندك مشكله فيها لان تتعتمد على درجه الحراره

اما منول أشرح لي ماذا تريد بالضبط وهل لدرجه حراره لها علاقه بالموضوع

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


فى حاجة تانية البرنامج اللى انت رفعته بيشتغل معى تمام لكن اذا عدلت اى حاجة فيه ما بيشتغل يعنى انا جيت أضيف الدرجة بالسيليزيوس عليه واعمل build آجى على بروتس ما يشتغلش تانى وتظهر رسالة stack overflow


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


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


فى حاجة تانية البرنامج اللى انت رفعته بيشتغل معى تمام لكن اذا عدلت اى حاجة فيه ما بيشتغل يعنى انا جيت أضيف الدرجة بالسيليزيوس عليه واعمل build آجى على بروتس ما يشتغلش تانى وتظهر رسالة stack overflow
السلام عليكم
أتأكد أخي من ملف hex فأنا عندي يعمل

على عموم جرب هذا مشروع
http://up.top4top.net/downloadf-top4...fc261-rar.html

ملاحظه بروتيس بطيئ جدا لذا جرب ملف بروتيس مرفق الاصدار 7.10

او جرب مشروع عملي
تحياتي


البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 28-03-2015, 08:06 PM المشاركة 22   
افتراضي


السلام عليكم
أتأكد أخي من ملف hex فأنا عندي يعمل

على عموم جرب هذا مشروع
http://up.top4top.net/downloadf-top4...fc261-rar.html

ملاحظه بروتيس بطيئ جدا لذا جرب ملف بروتيس مرفق الاصدار 7.10

او جرب مشروع عملي
تحياتي
الكود شغال تمام فى الاوتوماتيك لكن فى المانيوال مش بيشتغل مرة واحدة ويعطى قيمة duty 11.9%


ما رأيك فى تعديل الجزء الخاص بالسويتش كالتالى
كود:
 else if(sw_select==0)
        {
          if (portd.f0 == 1) flag = 1;
          if (portd.f0 == 0  && flag == 1)  // if the push button is pushed
             {
              portc.f0 == 1;           //signal to motor forward direction
              PWM1_Start();            //start PWM1
              duty = (i*255)/8 ;
              PWM1_Set_Duty(duty);  // set duty cycle from 25% to 100%
              display_message((duty*100)/255);     // lcd indicates reading according to motor speed
              i++;
              delay_ms(250);
              flag=0;
             }
          if (i == 9)
             {
              i = 1 ;
              PWM1_Stop();
              portc.f0 == 0;
              Lcd_out( 2, 1,"     STOP       ");
             }
        }


البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 29-03-2015, 09:26 AM المشاركة 23   
افتراضي


يا باشمهندس انا مش عارف كل ما اعدل اى شئ فى الكود لا يعمل المحاكاة له ولا استطيع ان ارى النتيجة فماذا أفعل


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


الكود شغال تمام فى الاوتوماتيك لكن فى المانيوال مش بيشتغل مرة واحدة ويعطى قيمة duty 11.9%


ما رأيك فى تعديل الجزء الخاص بالسويتش كالتالى
كود:
 else if(sw_select==0)
        {
          if (portd.f0 == 1) flag = 1;
          if (portd.f0 == 0  && flag == 1)  // if the push button is pushed
             {
              portc.f0 == 1;           //signal to motor forward direction
              PWM1_Start();            //start PWM1
              duty = (i*255)/8 ;
              PWM1_Set_Duty(duty);  // set duty cycle from 25% to 100%
              display_message((duty*100)/255);     // lcd indicates reading according to motor speed
              i++;
              delay_ms(250);
              flag=0;
             }
          if (i == 9)
             {
              i = 1 ;
              PWM1_Stop();
              portc.f0 == 0;
              Lcd_out( 2, 1,"     STOP       ");
             }
        }
اخي مشكله في محاكاه يصبح بطيئ جدا لذا جرب نسخه الاصدار 7 ومرفق مع ملف

تحياتي



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