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

أدوات الموضوع

البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:0
قديم 18-03-2015, 04:07 AM المشاركة 1   
ha ما الخطأ فى هذا البرنامج Twitter FaceBook Google+



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

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

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

البرنامج بيتم عمل build له بدون أخطاء على ال mikroc
لكن الكود مش بيشتغل على برنامج proteus لا يظهر أى نتائج على شاشة ال LCD + المروحة لا تدور ولا حتى بالمفتاح

ولا استطيع تحديد اين الخطأ فى الكود

كود:
// Lcd pinout settings
   sbit LCD_RS at RB2_bit;
   sbit LCD_EN at RB3_bit;
   sbit LCD_D4 at RB4_bit;
   sbit LCD_D5 at RB5_bit;
   sbit LCD_D6 at RB6_bit;
   sbit LCD_D7 at RB7_bit;

   // Pin direction
   sbit LCD_RS_Direction at TRISB2_bit;
   sbit LCD_EN_Direction at TRISB3_bit;
   sbit LCD_D4_Direction at TRISB4_bit;
   sbit LCD_D5_Direction at TRISB5_bit;
   sbit LCD_D6_Direction at TRISB6_bit;
   sbit LCD_D7_Direction at TRISB7_bit;

void main()
  {
   // variables
   float temp , act_temp , duty;
   char disp[10], duty1 [5];
   int i = 0 , flag = 0;

   trisa = 1; trisb = 0; trisc = 0; trisd = 1; trise = 0;
   porta = 0; portb = 0; portc = 0; portd = 0; porte = 0;

   adcon1= 0b11011110 ;  //initialize A0 as analog input

   // LCD instruction
   Lcd_Init();
   Lcd_cmd(_Lcd_cursor_off);
   Lcd_out( 1, 1, "temp = ");

   PWM1_Init(5000); //initialise PWM1 at 5KHz

   while(1)  // start infinit loop
    {
     // temperature reading & calculation
     temp = ADC_Read(0);
     act_temp = (temp * 500) / 1024;
     floattostr(act_temp, disp); //converting float to char

     Lcd_out(1, 8,disp);
     
     portc.f0 = 1;   //signal to motor forward direction

     // PWM orders
     if (act_temp == 25 && act_temp <30 )
       {PWM1_Start(); PWM1_Set_Duty(32);  Lcd_out( 2, 1,"Duty cycle=12.5%");}

     if (act_temp == 30 && act_temp <35 )
       {PWM1_Start(); PWM1_Set_Duty(64);  Lcd_out( 2, 1,"Duty cycle= 25%"); }

     if (act_temp == 35 && act_temp <40 )
       {PWM1_Start(); PWM1_Set_Duty(96);  Lcd_out( 2, 1,"Duty cycle=37.5%");}

     if (act_temp == 40 && act_temp <45 )
       {PWM1_Start(); PWM1_Set_Duty(127); Lcd_out( 2, 1,"Duty cycle= 50%"); }

     if (act_temp == 45 && act_temp <50 )
       {PWM1_Start(); PWM1_Set_Duty(159); Lcd_out( 2, 1,"Duty cycle=62.5%");}

     if (act_temp == 50 && act_temp <55 )
       {PWM1_Start(); PWM1_Set_Duty(191); Lcd_out( 2, 1,"Duty cycle= 75%"); }

     if (act_temp == 55 && act_temp <60 )
       {PWM1_Start(); PWM1_Set_Duty(223); Lcd_out( 2, 1,"Duty cycle=87.5%");}

     if (act_temp >= 60  )
       {PWM1_Start(); PWM1_Set_Duty(255); Lcd_out( 2, 1,"Duty cycle= 100%");}

     if (portd.f0 == 1) flag = 1;
     if (portd.f0 == 0  && flag == 1)  // if the push button is pushed
        {
         i++;

         PWM1_Start();   //start PWM1
         duty = (i*255)/8 ;
         floattostr(duty,duty1);

         PWM1_Set_Duty(duty); // set duty cycle from 25% to 100%
         Lcd_out( 2, 1,"Duty cycle="); Lcd_out_cp(duty1); Lcd_out_cp("%");
         flag=0;
         delay_ms(10000);
        }
     if (i == 9 || act_temp < 25)
        {
         i = 0 ;
         PWM1_Stop();
         Lcd_Cmd(_LCD_CLEAR);
        }
    } //end loop
  } //end main

وهذا ملف دائرة المحاكاة على برنامج proteus 8

http://www.4shared.com/rar/18AGN6xyba/proteus_8.html

وهذه صورة للاخطاء التى يظهرها برنامج proteus

اعلانات

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 18-03-2015, 12:31 PM المشاركة 2   
افتراضي


ارفع صورة المحاكات ونوع الحساس
حتى يتم مساعدتك

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 18-03-2015, 01:36 PM المشاركة 3   
افتراضي


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

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

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

البرنامج بيتم عمل build له بدون أخطاء على ال mikroc
لكن الكود مش بيشتغل على برنامج proteus لا يظهر أى نتائج على شاشة ال LCD + المروحة لا تدور ولا حتى بالمفتاح

ولا استطيع تحديد اين الخطأ فى الكود

كود:
// Lcd pinout settings
   sbit LCD_RS at RB2_bit;
   sbit LCD_EN at RB3_bit;
   sbit LCD_D4 at RB4_bit;
   sbit LCD_D5 at RB5_bit;
   sbit LCD_D6 at RB6_bit;
   sbit LCD_D7 at RB7_bit;

   // Pin direction
   sbit LCD_RS_Direction at TRISB2_bit;
   sbit LCD_EN_Direction at TRISB3_bit;
   sbit LCD_D4_Direction at TRISB4_bit;
   sbit LCD_D5_Direction at TRISB5_bit;
   sbit LCD_D6_Direction at TRISB6_bit;
   sbit LCD_D7_Direction at TRISB7_bit;

void main()
  {
   // variables
   float temp , act_temp , duty;
   char disp[10], duty1 [5];
   int i = 0 , flag = 0;

   trisa = 1; trisb = 0; trisc = 0; trisd = 1; trise = 0;
   porta = 0; portb = 0; portc = 0; portd = 0; porte = 0;

   adcon1= 0b11011110 ;  //initialize A0 as analog input

   // LCD instruction
   Lcd_Init();
   Lcd_cmd(_Lcd_cursor_off);
   Lcd_out( 1, 1, "temp = ");

   PWM1_Init(5000); //initialise PWM1 at 5KHz

   while(1)  // start infinit loop
    {
     // temperature reading & calculation
     temp = ADC_Read(0);
     act_temp = (temp * 500) / 1024;
     floattostr(act_temp, disp); //converting float to char

     Lcd_out(1, 8,disp);
     
     portc.f0 = 1;   //signal to motor forward direction

     // PWM orders
     if (act_temp == 25 && act_temp <30 )
       {PWM1_Start(); PWM1_Set_Duty(32);  Lcd_out( 2, 1,"Duty cycle=12.5%");}

     if (act_temp == 30 && act_temp <35 )
       {PWM1_Start(); PWM1_Set_Duty(64);  Lcd_out( 2, 1,"Duty cycle= 25%"); }

     if (act_temp == 35 && act_temp <40 )
       {PWM1_Start(); PWM1_Set_Duty(96);  Lcd_out( 2, 1,"Duty cycle=37.5%");}

     if (act_temp == 40 && act_temp <45 )
       {PWM1_Start(); PWM1_Set_Duty(127); Lcd_out( 2, 1,"Duty cycle= 50%"); }

     if (act_temp == 45 && act_temp <50 )
       {PWM1_Start(); PWM1_Set_Duty(159); Lcd_out( 2, 1,"Duty cycle=62.5%");}

     if (act_temp == 50 && act_temp <55 )
       {PWM1_Start(); PWM1_Set_Duty(191); Lcd_out( 2, 1,"Duty cycle= 75%"); }

     if (act_temp == 55 && act_temp <60 )
       {PWM1_Start(); PWM1_Set_Duty(223); Lcd_out( 2, 1,"Duty cycle=87.5%");}

     if (act_temp >= 60  )
       {PWM1_Start(); PWM1_Set_Duty(255); Lcd_out( 2, 1,"Duty cycle= 100%");}

     if (portd.f0 == 1) flag = 1;
     if (portd.f0 == 0  && flag == 1)  // if the push button is pushed
        {
         i++;

         PWM1_Start();   //start PWM1
         duty = (i*255)/8 ;
         floattostr(duty,duty1);

         PWM1_Set_Duty(duty); // set duty cycle from 25% to 100%
         Lcd_out( 2, 1,"Duty cycle="); Lcd_out_cp(duty1); Lcd_out_cp("%");
         flag=0;
         delay_ms(10000);
        }
     if (i == 9 || act_temp < 25)
        {
         i = 0 ;
         PWM1_Stop();
         Lcd_Cmd(_LCD_CLEAR);
        }
    } //end loop
  } //end main

وهذا ملف دائرة المحاكاة على برنامج proteus 8

http://www.4shared.com/rar/18AGN6xyba/proteus_8.html

وهذه صورة للاخطاء التى يظهرها برنامج proteus
اخي حاول رفع ملفات مشروع البرمجه + محاكاه على رابط اخر مثل ميديا فاير لان هذا موقع يطلب مني الانتظار 1000 ثانيه

تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 18-03-2015, 01:37 PM المشاركة 4   
افتراضي


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

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

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

البرنامج بيتم عمل build له بدون أخطاء على ال mikroc
لكن الكود مش بيشتغل على برنامج proteus لا يظهر أى نتائج على شاشة ال LCD + المروحة لا تدور ولا حتى بالمفتاح

ولا استطيع تحديد اين الخطأ فى الكود

كود:
// Lcd pinout settings
   sbit LCD_RS at RB2_bit;
   sbit LCD_EN at RB3_bit;
   sbit LCD_D4 at RB4_bit;
   sbit LCD_D5 at RB5_bit;
   sbit LCD_D6 at RB6_bit;
   sbit LCD_D7 at RB7_bit;

   // Pin direction
   sbit LCD_RS_Direction at TRISB2_bit;
   sbit LCD_EN_Direction at TRISB3_bit;
   sbit LCD_D4_Direction at TRISB4_bit;
   sbit LCD_D5_Direction at TRISB5_bit;
   sbit LCD_D6_Direction at TRISB6_bit;
   sbit LCD_D7_Direction at TRISB7_bit;

void main()
  {
   // variables
   float temp , act_temp , duty;
   char disp[10], duty1 [5];
   int i = 0 , flag = 0;

   trisa = 1; trisb = 0; trisc = 0; trisd = 1; trise = 0;
   porta = 0; portb = 0; portc = 0; portd = 0; porte = 0;

   adcon1= 0b11011110 ;  //initialize A0 as analog input

   // LCD instruction
   Lcd_Init();
   Lcd_cmd(_Lcd_cursor_off);
   Lcd_out( 1, 1, "temp = ");

   PWM1_Init(5000); //initialise PWM1 at 5KHz

   while(1)  // start infinit loop
    {
     // temperature reading & calculation
     temp = ADC_Read(0);
     act_temp = (temp * 500) / 1024;
     floattostr(act_temp, disp); //converting float to char

     Lcd_out(1, 8,disp);
     
     portc.f0 = 1;   //signal to motor forward direction

     // PWM orders
     if (act_temp == 25 && act_temp <30 )
       {PWM1_Start(); PWM1_Set_Duty(32);  Lcd_out( 2, 1,"Duty cycle=12.5%");}

     if (act_temp == 30 && act_temp <35 )
       {PWM1_Start(); PWM1_Set_Duty(64);  Lcd_out( 2, 1,"Duty cycle= 25%"); }

     if (act_temp == 35 && act_temp <40 )
       {PWM1_Start(); PWM1_Set_Duty(96);  Lcd_out( 2, 1,"Duty cycle=37.5%");}

     if (act_temp == 40 && act_temp <45 )
       {PWM1_Start(); PWM1_Set_Duty(127); Lcd_out( 2, 1,"Duty cycle= 50%"); }

     if (act_temp == 45 && act_temp <50 )
       {PWM1_Start(); PWM1_Set_Duty(159); Lcd_out( 2, 1,"Duty cycle=62.5%");}

     if (act_temp == 50 && act_temp <55 )
       {PWM1_Start(); PWM1_Set_Duty(191); Lcd_out( 2, 1,"Duty cycle= 75%"); }

     if (act_temp == 55 && act_temp <60 )
       {PWM1_Start(); PWM1_Set_Duty(223); Lcd_out( 2, 1,"Duty cycle=87.5%");}

     if (act_temp >= 60  )
       {PWM1_Start(); PWM1_Set_Duty(255); Lcd_out( 2, 1,"Duty cycle= 100%");}

     if (portd.f0 == 1) flag = 1;
     if (portd.f0 == 0  && flag == 1)  // if the push button is pushed
        {
         i++;

         PWM1_Start();   //start PWM1
         duty = (i*255)/8 ;
         floattostr(duty,duty1);

         PWM1_Set_Duty(duty); // set duty cycle from 25% to 100%
         Lcd_out( 2, 1,"Duty cycle="); Lcd_out_cp(duty1); Lcd_out_cp("%");
         flag=0;
         delay_ms(10000);
        }
     if (i == 9 || act_temp < 25)
        {
         i = 0 ;
         PWM1_Stop();
         Lcd_Cmd(_LCD_CLEAR);
        }
    } //end loop
  } //end main

وهذا ملف دائرة المحاكاة على برنامج proteus 8

http://www.4shared.com/rar/18AGN6xyba/proteus_8.html

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

تحياتي


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


يبدو هناك مشكله في خزن متغيرات في ذاكره البيك ان شالله مشكله بسيطه
اخي حاول رفع ملفات مشروع البرمجه + محاكاه على رابط اخر مثل ميديا فاير لان هذا موقع يطلب مني الانتظار 1000 ثانيه

تحياتي
اخى الكريم الموقع بيعطيك الوقت الطويل هذا لانك مشغل برنامج مانع الاعلانات adblock كان بتحصل معى هذه المشكلة

لكن هذا رابط اخر لتحميل الملف

http://www.up-00.com/?jrKq


التعديل الأخير تم بواسطة : البندقدارى بتاريخ 18-03-2015 الساعة 04:11 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 18-03-2015, 07:07 PM المشاركة 6   
افتراضي


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

حيدر علاج حسن

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


الموجود فقط ملف البروتوس و هو لا ينفتح ...
عموما ارى انك بالغت في حجم الكود ...
المشروع فقط كما ذكرت ؟ و ماذا تعرض على الشاشة ؟ وما هو البك الذي تنوي استخدامه ؟
البك المستخدم 16f877a الشاشة لا تعرض أى شئ يعنى المفروض انها تعرض درجة الحرارة التى يقرؤها الحساس لكن لا شئ يظهر والموتور ايضا لا يدور

الملف الخاص بالدائرة اللى انا رافعه كان على نسخة بروتوس 8

وهذا فولدر فيه الكود + الدائرة على بروتوس 7.7

http://www.up-00.com/?ABQq


Logic
:: عضو فضي ::
تاريخ التسجيل: Mar 2014
المشاركات: 682
نشاط [ Logic ]
قوة السمعة:79
قديم 18-03-2015, 11:02 PM المشاركة 8   
افتراضي


البك المستخدم 16f877a الشاشة لا تعرض أى شئ يعنى المفروض انها تعرض درجة الحرارة التى يقرؤها الحساس لكن لا شئ يظهر والموتور ايضا لا يدور

الملف الخاص بالدائرة اللى انا رافعه كان على نسخة بروتوس 8

وهذا فولدر فيه الكود + الدائرة على بروتوس 7.7

http://www.up-00.com/?ABQq
غريب ..
هل هو نفس الكود هنا أم مختلف عنه ؟:
http://www.qariya.info/vb/showthread...620#post942620
أن سبق لي استخدام برنامج في الرابط المذكور و كمررته إلى برتوس 8.1
و بعد الإجراءات التي توضحها الصور أصبح ممكن فتح البرنامج ببروتوس .
الشاشة تعرض نتائج والمحرك يدور :

لكن السويتش لا يتحكم في البرنامجإلا مرة وحيدة ولا يغير بعد ذلك أي شيء:
http://up.top4top.net/downloadf-top4...36f92-rar.html
هناك نقص أو خطأ في الكود
تخصصي هو البرمجة بفلوكود و مشاركاتي في موضوعك كانت في حدود إمكانياتي الحالية في ما يخص الميكروسي .
لكن إن شاء الله الإخوة خبراء الميكروسي سيساعدونك على تجاوز هذه الصعوبات

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025