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

   

nafissa48
:: مهندس ::
تاريخ التسجيل: Mar 2015
المشاركات: 15
نشاط [ nafissa48 ]
قوة السمعة:
قديم 12-03-2015, 02:42 AM المشاركة 33   
افتراضي microcontroler



j'ai besoin la carte de commande de deux moteurs à courant continu pour un robot mobile à bas d'un pic16f877a et le programme par micro C;cvp

اعلانات

البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 16-03-2015, 02:53 AM المشاركة 34   
ha


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

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

لكن الكود مش بيشتغل على برنامج 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



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

Logic
:: عضو فضي ::
تاريخ التسجيل: Mar 2014
المشاركات: 682
نشاط [ Logic ]
قوة السمعة:
قديم 16-03-2015, 12:27 PM المشاركة 35   
افتراضي


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

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

لكن الكود مش بيشتغل على برنامج 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


السلام عليكم
العنصر J1 في يمنع ملف برتوس من اتمام مهمة المحاكاة لانه غير قابل للمحاكاة على بروتوس .
يمكنك تصحيح الوضع باتباع الخطوات التالية:

+

و ان شاء الله سيعمل :


Logic
:: عضو فضي ::
تاريخ التسجيل: Mar 2014
المشاركات: 682
نشاط [ Logic ]
قوة السمعة:
قديم 16-03-2015, 01:15 PM المشاركة 36   
افتراضي


السلام عليكم
العنصر J1 في يمنع ملف برتوس من اتمام مهمة المحاكاة لانه غير قابل للمحاكاة على بروتوس .
يمكنك تصحيح الوضع باتباع الخطوات التالية:

+

و ان شاء الله سيعمل :
إضافة إلى ماسبق لديك مشكل آخر M
في الكود PWM في برنامجك لا تعمل..
ممكن تستفيد من مشروع مشابه للمهندس semmoor (العضو المتميز في القرية) :
https://www.youtube.com/watch?v=L3dl...NN6Ea&index=49
وهنا رابط الكود والمحاكاة :
http://www.libstock.com/projects/vie...ure-sensor-pwm


التعديل الأخير تم بواسطة : Logic بتاريخ 16-03-2015 الساعة 01:20 PM

gamemn02
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 245
نشاط [ gamemn02 ]
قوة السمعة:
قديم 16-03-2015, 09:11 PM المشاركة 37   
افتراضي


هل تعمل مبرمجة jdm مع win7 64 ؟


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


إضافة إلى ماسبق لديك مشكل آخر M
في الكود PWM في برنامجك لا تعمل..
ممكن تستفيد من مشروع مشابه للمهندس semmoor (العضو المتميز في القرية) :
https://www.youtube.com/watch?v=L3dl...NN6Ea&index=49
وهنا رابط الكود والمحاكاة :
http://www.libstock.com/projects/vie...ure-sensor-pwm
ممكن توضحلى أكثر ما هو الخطأ فى الكود اللى انا كاتبه
انا شاهدت الفيديو اللى حضرتك نزلته لكن انا مش فاهم الجزئية بتاعة ال Vref
بالاضافة انى عاوز التغير فى السرعة يكون على شكل مراحل أو (step) (مثلا يزيد 10% )وليس عندما تزيد درجة الحرارة بمقدار درجة مثلا فيزيد ال duty cycle بمقدار واحد فهيكون مش ملحوظ ان فى تغيير فى السرعة



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