طيب ما رأيك يا بشمهندس حسن فى هذا الكود
كود:
void main(){
// variables
int x[5]={0, 1, 2, 4, 8};
int i = 1 , flag = 0;
trisa = 0; trisb = 0; trisc = 0; trisd = 255; trise = 0;
porta = 0; portb = 0; portc = 0; portd = 0; porte = 0;
adcon1=6;
PWM1_Init(5000); //initialise PWM1 at 5KHz
while(1) { // start infinit loop
if (portd.f2 == 1) flag = 1;
if(portd.f2 == 0 && flag == 1) // if the push button is pushed
{
portb.f7=1; //signal to motor forward direction
portb = x[i]; // indicator led according to motor speed
PWM1_Start(); //start PWM1
PWM1_Set_Duty(i*255/4); // set duty cycle from 25% to 100%
flag=0;
i++;
}
if (i > 4)
{
i = 0 ;
portb =0;
PWM1_Stop();
}
} //end loop
} //end main
|
أخي كريم عندك مجموعه من اخطاء ولكن لابأس حاول أستفاده منها فهي وسيله وحيده لاكتساب الخبره
1- انت خليت بالبدايه i=1 في بادئ الامر تسلسل تشغيل محرك صحيحه ولكن بعدما تصبح i اكبر من 4 راح يصبح i=0 وهنا لو ترجع تدقق بالامر ستجد هناك خطأ وهو لما i=0 وتضغط على سويج راح ماينفذ شيئ لانك وضعت i++ بعد مجموعه من عمليات
كود:
portb.f7=1; //signal to motor forward direction
portb = x[i]; // indicator led according to motor speed
PWM1_Start(); //start PWM1
PWM1_Set_Duty(i*255/4); // set duty cycle from 25% to 100%
خطأ الثاني هو انت كتبت هذا الكود
كود:
portb.f7=1; //signal to motor forward direction
portb = x[i]; // indicator led according to motor speed
ستلاحظ هناك خطأ كبير في الكود وهو انت جعلت بن رقم 7 من بورت portb ب 1
ثم قمت بأعاده تغير قيمه portb بالكامل وهنا سوف تصفر قيمه بن رقم 7 من بورت portb
خطأ الثالث هو في هذا الكود
كود:
PWM1_Set_Duty(i*255/4)
هنا ايضا خطأ كبير وهو عليك معرفه حدود متغيرات فكل متغير له قيمه محدده فلا يزيد عنها ابدا
مثلا على فكره هاي مجربه عمليا راح اعطيك مثال
لو عندي متغير من نوع unsigned char لو أفترضناه اسمه x اذن اقصى قيمه له هو 255 ومتغير اخر من نوع int لنفترض اسمه y طبعا اقصى قيمه له 65536
وقلنا
y=x*200
و قيمه x=10 هل تتوقع ان y=2000
الجواب خطأ هنا حدث خطأ كبير وهو انه اذا كانت نتيجه ضرب x*200 اكبر من 255 فسيحدث مشاكل في الحساب ولن تتمكن من حساب قيم صحيحه لذا عليك انتباه لهذه خطوه والتأكد من متغيرات ان لايحدث تجاوز لقيم حتى وان لم يتم خزن تلك القيم بهذه متغيرات
فمثلا الحل
اقول اضع y=x
y=y*200
هنا سوف تجري الامور بشكل صحيح
لذا وضع i*255 خاطئ لانه اولا i من نوع char وثانيا اصلا داله duty تأخذ قيمه من نوع char
تحياتي