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

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

malik1988
:: مهندس ::
تاريخ التسجيل: Dec 2009
الدولة: tunisia
المشاركات: 3
نشاط [ malik1988 ]
قوة السمعة:0
قديم 08-12-2009, 08:35 AM المشاركة 1   
ha مساعدة في برمجة pic 16f877 Twitter FaceBook Google+






:¤:طلب المسعدة :¤:
اما بعد
انا مبتدء في برمجة البك و استعمل لغة الميكرو س .
اواجه مشكلة في برمجة البك لمشروعي والمتمثل في التحكم في سرعة الموتور .
  • اولا يضهر لنا في الشاشة طلب لإدخال duty ratio
  • ثانيا يستعمل العدد الذي قمنا بإدخاله بواسطة keypad ليغير pwm
pic 16f877a

مع العلم اني اطلاعت علي

مشروع التحكم في47 ريلاي بالكايباد و LCD - سلسلة المشاريع مفتوحة المصدر

Read more: http://www.qariya.com/vb/showthread....#ixzz0Z5T8iAVB

هذه فكرة المشروع الذي لم يشتغل معي فالرجاء من الإخوة مسعدتي
صورة المشروع


كود:
  ***********************************************
char m;
char result=0;
char number[]={'x',' ','9','8','7','x','6','5','4','x','3','2','1','x','x','0','x'};
char number2[]={'x',' ',9,8,7,'x',6,5,4,'x',3,2,1,'x','x',0,'x'};
char tens=0,ones=0;

void on() {
pwm_init (5000);
while (1) {
pwm_start ();
pwm_change_duty(tens);
}
}
void main()
{
m=keypad_read() ;
trisd=0;portd=0xf0 ;
Keypad_Init(&PORTC);

stop:                 //pwm stop
{
Pwm_Stop();
}


lcd_init(&portb);
lcd_cmd(LCD_CURSOR_OFF);
lcd_out(1,1,"tension");
lcd_out(2,6,"DESIRER");

loop:
                 //testing the first pushing down
m=keypad_read() ;
if(m==0)      {goto loop;}
else if(m==14){goto stop;}
else if(m==16){Lcd_Cmd(Lcd_Clear);portd=0xF0;goto loop;}
else          {Lcd_Cmd(Lcd_Clear);tens=number2[m];lcd_chr_cp(number[m]);delay_ms(500);}
}



اعلانات

16mofed84
:: مهندس متميز ::
تاريخ التسجيل: Jul 2009
الدولة: فلسطين
المشاركات: 322
نشاط [ 16mofed84 ]
قوة السمعة:0
قديم 08-12-2009, 11:53 AM المشاركة 2   
افتراضي


اقترح عليك استخدام الامر
كود:
vdelay_ms();
انا لم اخطء في الكتابه
الفرق بينه و بين الديلاي العادي هو انه بقيمه متغيره(يمكنك وضع اي بورت و ضع عليه سوتش ونظر الى التغيرات...

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

malik1988
:: مهندس ::
تاريخ التسجيل: Dec 2009
الدولة: tunisia
المشاركات: 3
نشاط [ malik1988 ]
قوة السمعة:0
قديم 08-12-2009, 12:01 PM المشاركة 3   
افتراضي


اقترح عليك استخدام الامر
كود:
vdelay_ms();
انا لم اخطء في الكتابه
الفرق بينه و بين الديلاي العادي هو انه بقيمه متغيره(يمكنك وضع اي بورت و ضع عليه سوتش ونظر الى التغيرات...
مشكور اخي علي الرد


حمودي1010
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
المشاركات: 237
نشاط [ حمودي1010 ]
قوة السمعة:0
قديم 08-12-2009, 12:27 PM المشاركة 4   
ha


السلام عليكم
من فضلك ممكن تشرحلي مامعنى هذه التعليمة vdelay -ms

لانني اعرف فقط التعليمة delqy-ms


شكرا وبارك الله فيك


حمودي1010
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
المشاركات: 237
نشاط [ حمودي1010 ]
قوة السمعة:0
قديم 08-12-2009, 12:37 PM المشاركة 5   
ha


السلام عليكم
من فضلك ممكن تشرحلي مامعنى هذه التعليمة vdelay -ms

لانني اعرف فقط التعليمة delay-ms


شكرا وبارك الله فيك


malik1988
:: مهندس ::
تاريخ التسجيل: Dec 2009
الدولة: tunisia
المشاركات: 3
نشاط [ malik1988 ]
قوة السمعة:0
قديم 08-12-2009, 03:40 PM المشاركة 6   
افتراضي


كود:
char m ;
char tens=0,ones=0,speed=0;
char number[]={'x',' ','9','8','7','x','6','5','4','x','3','2','1','x','x','0','x'};
char number2[]={'x',' ',9,8,7,'x',6,5,4,'x',3,2,1,'x','x',0,'x'};
void main() {

  Keypad_Init(&PORTD);
  Lcd_Init(&PORTB);         // Initialize LCD on PORTb
  Lcd_Cmd(LCD_CLEAR);       // Clear display
  Lcd_Cmd(LCD_CURSOR_OFF);  // Cursor off

lcd_out(1,1,"Enter the "  );
lcd_out(2,5," duty");
loop:
m=keypad_read();
if(m==0)      {goto loop;}
else if(m==14){goto loop;}
else if(m==16){Lcd_Cmd(Lcd_Clear);portd=0xF0;goto loop;}

else {Lcd_Cmd(Lcd_Clear);tens=(number2[m]*10)*2.55;lcd_chr_cp(number[m]);delay_ms(500);}




test2:               //testing the second pushing down
m=keypad_read();
if(m==0)      {goto test2;}

else if(m==16){Lcd_Cmd(Lcd_Clear);portd=0xF0;goto loop;}
else          {ones=number2[m];lcd_chr_cp(number[m]);delay_ms(500);}
 speed=tens+ones   ;

test3:             //tes ng the third pushing down
m=keypad_read();
if(m==0)      {goto test3;}

else if(m==14){Lcd_Cmd(Lcd_Clear);portd=0xF0;}

else          {goto test3;}



// initialize PWM1 module
PWM1_Init(5000);

PWM1_Start();


// set new PWM1 pattern ratio,
PWM1_Change_Duty(speed);
lcd_out(1,1,"speed");
lcd_chr_cp(number[m] );
 }
النتيجة
1

2

3


المشاكل بعد هذا التعديل

. لا استطيع تغير الدوتي مرة اخري يبقي البرنامج كما في الصورة رقم3

إضافة رد

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

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

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


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

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