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

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

Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 27-02-2009, 12:47 PM المشاركة 1   
not funny نقاشات المشاركين في دورة الميكروسى Twitter FaceBook Google+



هممممم انا مش عارف أشكركم ازاى على الدورة الجامدة وعلى التفاعل الحى والعطاء المتبادل بصراحة brilliant وخصوصا مهندس أحمد اللى هو أساس الدورة معلش أنا خرجت شوية عن موضوع الدورة وحخرج تانى بس مش عن الموضوع لأ عن الدرس
أنا ابتديت معاكم الدورة متأخر امبارح بس وفى مشكلة فى أمر مش عايز يعمل المطلوب ياريت لو حد يشوف الخطأ فين عشان أنا نافوخى ورم من هالأمر
الأخطاء عند الأسهم الحمراء عند جملة for المفروض ان الأمر يتعاد مرتين بس لا بيتعاد ولا بيتنفذ أصلا أرجو المساعدة لمن يعلم الخطأ سريعا لكى أكمل الدورة فى أقصر وقت ممكن شكرا
كود:
void main ()
{char S;
TRISB=0; F:
PORTB=0B00000001;
delay_ms(0200)      ;
PORTB=0;

PORTB=0B00000010;
delay_ms(0200);
PORTB=0;

PORTB=0B00000100;
delay_ms(0200);
PORTB=0;

PORTB=0B00001000;
delay_ms(0200);
PORTB=0;

PORTB=0B00010000;
delay_ms(0200);
PORTB=0;

PORTB=0B00100000;
delay_ms(0200);
PORTB=0;

PORTB=0B01000000;
delay_ms(0200);
PORTB=0;

PORTB=0B10000000;
delay_ms(0200);
PORTB=0;

PORTB=0B01000000;
delay_ms(0200);
PORTB=0;

PORTB=0B00100000;
delay_ms(0200);
PORTB=0;

PORTB=0B00010000;
delay_ms(0200);
PORTB=0;

PORTB=0B00001000;
delay_ms(0200);
PORTB=0;

PORTB=0B00000100;
delay_ms(0200);
PORTB=0;

PORTB=0B00000010;
delay_ms(0200);
PORTB=0;

PORTB=0B00000001;
delay_ms(0200);
PORTB=0;
delay_ms(0050);
for(S=0;S<2;S++)<------------------
{PORTB=0B11111111;
PORTB=~PORTB;delay_ms(700);}
PORTB=0B00011000;
delay_ms(150) ;
portb=0;
delay_ms(0001);
PORTB=0B00100100;
delay_ms(150) ;
portb=0;
delay_ms(0001);
PORTB=0B01000010;
delay_ms(150) ;
portb=0;
delay_ms(0001);
PORTB=0B10000001;
delay_ms(150) ;
portb=0;
delay_ms(0001);
PORTB=0B00000000;
delay_ms(150) ;
portb=0;
delay_ms(0001);
PORTB=0B10000001;
delay_ms(150) ;
PORTB=0B11000011;
delay_ms(150) ;
PORTB=0B11100111;
delay_ms(150) ;
PORTB=0B11111111;
delay_ms(350) ;
portb=0;
delay_ms(500);
portb=0b11111111;
delay_ms(100);
portb=0b11111011;
delay_ms(50);
portb=0b11111111;
delay_ms(100);
portb=0b11111011;
delay_ms(60);
portb=0b11111111;
delay_ms(50);
portb=0b11111011;
delay_ms(80);
portb=0b11111111;
delay_ms(70);
portb=0b11111011;
delay_ms(40);
portb=0b11111111;
delay_ms(80);
portb=0b11111011;
delay_ms(50);
portb=0b11111111;
delay_ms(50);
portb=0b11111011;
delay_ms(300);
portb=0b11111111;
delay_ms(70);
portb=0b11111011;
delay_ms(40);
portb=0b11111111;
delay_ms(100);
portb=0b11111011;
delay_ms(50);
portb=0b11111111;
delay_ms(70);
portb=0b11111011;
delay_ms(250);
portb=0b11111111;
delay_ms(80);
portb=0b11111011;
portb=0;
delay_ms(500);
portb=0b11111111;
portb=~portb;delay_ms(550);
for(S=0;S<2;S++)<-------------------
{portb=0b10101010;
portb=~portb;delay_ms(650);}
goto F;}

اعلانات

Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 27-02-2009, 01:03 PM المشاركة 2   
افتراضي


آه وفى حاجة نسيتها فى الكتاب A4 يفضل تكون مدخل وليس مخرج يعنى ممكن تكون مخرج فى حين ان لما بعمل A4 مخرج مبتشتغلش بتبقى مدخل دائما قبل مقرأ السطر ده فى الكتاب كنت حتجنن منها بس لغيت اللعب على A كلها ونقلت على B الطيبه اللى كل بتتاتها شغاله زى الفل

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

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 725
نشاط [ ahmad_s_f ]
قوة السمعة:80
قديم 27-02-2009, 05:31 PM المشاركة 3   
افتراضي


أخي Nighto : أهلا ومرحبا بك في هذه الدورة

وأتمنى لك التوفيق في مشروعك وفي رحلة تعلمك ..

بالنسبة للكود الذي كتبته يوجد خطأين منطقيين ( وليس خطأ في طريقة كتابة الكود) ..

كود:
for(S=0;S<2;S++) {PORTB=0B11111111; PORTB=~PORTB;delay_ms(700);}
الآن أنت أمرت البك بأن يضيء جميع الليدات بكتابتك للأمر
كود:
PORTB=0b11111111;
وفعلا سيطيع أوامرك وسيضيء الليدات بعد ذلك مباشرة كتبت له الأمر الذي سيطفئ جميع الليدات وهو
كود:
portb=~portb;
وفعلاً سيطفئ الليدات جميعا ثم ينتظر 700 ملي ثانية ثم يعيد ذلك من جديد ؟؟

لعلك تتسائل وتقول ولكن هذا لم يحدث يا أخي أحمد ؟؟!!!!

فعلا عند تشغيلك للبرنامج فستلاحظ كأن البرنامج لم ينفذ جملة for أي أنه لم يضيء الليدات ويطفئها بعد ذلك ...
إذن ما هي المشكلة ؟؟
المشكلة أخي الكريم أن هناك نقطة هامة يجب ان تنتبه إليها وهي أن البك ينفذ الأوامر بسرعة رهيبة جدا (بالملي ثانية وأحيانا بالمايكرو ثانية) .. فعندما تأمره أن يضيء جميع الليدات عن طريق الأمر PORTB=0B11111111 فسينفذ هذا الأمر بسرعة وستضيئ جميع الليدات .. ثم ينفذ الأمر التالي بسرعة وهو الأمر الذي سيطفئ جميع الليدات PORTB=~PORTB .. وبالتالي لن تلاحظ عينك إضاءة الليدات لأنه نفذ الأمرين بسرعة وراء بعض فأنت جعلته يضيء الليدات ثم يطفئها دون أن ينتظر لمدة معينة بين تنفيذ الأمرين..
كل هذا سينفذ في غاية السرعة لذلك كان يجب عليك أن تجعله بعد أن يضيء الليدات أن ينتظر ثم يطفئ الليدات ثم ينتظر ليتسنى لك رؤية ما يحدث .. وذلك بأن تكتب الكود التالي
كود:
for(S=0;S<2;S++) {PORTB=0B11111111; delay_ms(700); PORTB=~PORTB;delay_ms(700);}
انتبه للأمر الذي تم إضافته (الذي باللون الأزرق)
ولقد شرحت هذه المشكلة في أحد الدروس ..

بالنسبة لجملة FOR الثانية فهي نفس المشكلة التي في الأولى فيجب عليك أن تضع الأمر الذي يجعله ينتظر كما يلي

كود:
for(S=0;S<2;S++) {portb=0b10101010; delay_ms(650); portb=~portb;delay_ms(650);}
جرب الكود الجديد وأخبرني بالنتيجة ..


===============================================
ه وفى حاجة نسيتها فى الكتاب A4 يفضل تكون مدخل وليس مخرج يعنى ممكن تكون مخرج فى حين ان لما بعمل A4 مخرج مبتشتغلش بتبقى مدخل دائما قبل مقرأ السطر ده فى الكتاب كنت حتجنن منها بس لغيت اللعب على A كلها ونقلت على B الطيبه اللى كل بتتاتها شغاله زى الفل
لذلك ذكرت في الدروس أنه يفضل عدم جعل A4 دخل وليس خرج .. وسأشرح ذلك بالتفصيل فيما بعد إن شاء الله .

===============================================

ولكن بالنسبه للمبرمجه فى اول صحفه هلى يمكن ياخى ان تقوم بالتعديل عليها وذلك بوضع حامل 18 طرف بدلاً من 40 طرف وازالة الوصلات الزائده
لانه اكبر عدد متوفر هنا هو 18 طرف مع التوضيح كيفية وصلها
أخي الكريم المبرمجة هذه (جهاز البرمجة) تصلح للأنواع ذو 18 طرف وذو 28 وذو 40 طرف تصلح للجميع فقط يجب تركيب الـ pic بالشكل الصحيح ...

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

===============================================
وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع

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


Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 27-02-2009, 08:21 PM المشاركة 4   
افتراضي


هاهاهاها تصدق فاتتنى دى ده حتى واحد صاحبى قاللى انت بتتعامل مع آله على اد سرعتها على اد غباءها يعنى لو قولتله افتح الباب مش حيقفل وراه شكرا على الرد وآسف على السؤال الغبى ده XD
فى مشكلة تانية فى جملة if -الجملة دى تعبتنى على مفهمتها فى المدرسة فى الانجليزى وشكلها حتتعبنى فى الميكرو كمان- المهم انا حبيت أحط كذا أمر يتنفذو مع بعض بمجرد ضغط الزر يعنى عايز لما ادوس الزرار مثلا منb0 الى b2 ينورو مع بعض أول مسيب الزر يطفو مع بعض كتبت الكود كالتاتى
كود:
void main (){
trisa=0b11111;
trisb=0b00000000;
start:

if(porta.f0==0) {portb.f0=1;portb.f1=1;portb.f2=1;}
if(porta.f0==1) {portb.f0=0;portb.f1=0;portb.f2=0;}

goto start;}
والنتيجة ان اول ثلاثة ليدات يترعشو كأنهم متركبين على ستارتر لمبة نيون ولو فضلت دايس الزرار يقوللى (simulation is not running in real time due to excessive CPU load) عايز أفهم بقى منين الحمل الزايد على معالج البك وازاى أريح سعادة البك وأخليه ينورهم مع بعض لما أدوس على الزرار
أنا خلليت الليدات تنور مع بعض بس فى شكل جرايه بعنى ورا بعض وصلت لحد 15ms بين كل ليد و اللى بعده لو قلت المده عن كده يقوللى فى حمل زياده على معالج البك وده شكل كود ابو time delay
كود:
void main (){
trisa=1;
trisb=0;
loop:
if(PORTA.f0==0)
{portb.f0=1;delay_ms(250);
 portb.f1=1;delay_ms(250);
 portb.f2=1;delay_ms(250);
 portb.f3=1;delay_ms(250);
 portb.f4=1;delay_ms(250);
 portb.f5=1;delay_ms(250);
 portb.f6=1;delay_ms(250);
 portb.f7=1;delay_ms(250);
 portb.f6=1;delay_ms(250);
 portb.f5=1;delay_ms(250);
 portb.f4=1;delay_ms(250);
 portb.f3=1;delay_ms(250);
 portb.f2=1;delay_ms(250);
 portb.f1=1;delay_ms(250);
 portb.f0=1;delay_ms(250);}

if(porta.f0==1){portb.f0=0;}

goto loop;}
ده عباره عن جرايه رايح جاى تطبيق على قاعدة if قصدى جملة if المهم سيبك من الكود العبيط ده شوفلى بس حل للمشكلة بتاعت اللدات اللى بتترعش دى والحمل الزايد شكرا


Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 27-02-2009, 09:28 PM المشاركة 5   
افتراضي


لى سؤال صغير
هل هناك كود يمكننى من وضع مؤقت معين لأكثر من أمر ففى المثال
كود:
PORTB=0B00000001;
delay_ms(0200);
PORTB=0;

PORTB=0B00000010;
delay_ms(0200);
PORTB=0;

PORTB=0B00000100;
delay_ms(0200);
PORTB=0;

PORTB=0B00001000;
delay_ms(0200);
PORTB=0;

PORTB=0B00010000;
delay_ms(0200);
PORTB=0;
نلاحظ أن أمر delay_ms(200); تكرر كثيرا هل يوجد كود يجعلنى أكتب أمر التوقيت مرة واحدة لمجموعة من الأوامر؟


Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 27-02-2009, 09:41 PM المشاركة 6   
x9


ولى استفسار آخر هل يمكن لأحدكم أن يجرب هذا البرنامج عمليا ويطلعنى ان كان هناك أى اختصارات يمكننى عملها لتصغير مساحة هذا البرنامج لأتمكن من زيادة عدد الأوامر به؟
كود:
void main ()
{ int r;
TRISB=0;
loop:
PORTB=0B00000001;
delay_ms(0200);
PORTB=0;

PORTB=0B00000010;
delay_ms(0200);
PORTB=0;

PORTB=0B00000100;
delay_ms(0200);
PORTB=0;

PORTB=0B00001000;
delay_ms(0200);
PORTB=0;

PORTB=0B00010000;
delay_ms(0200);
PORTB=0;

PORTB=0B00100000;
delay_ms(0200);
PORTB=0;

PORTB=0B01000000;
delay_ms(0200);
PORTB=0;

PORTB=0B10000000;
delay_ms(0200);
PORTB=0;

PORTB=0B01000000;
delay_ms(0200);
PORTB=0;

PORTB=0B00100000;
delay_ms(0200);
PORTB=0;

PORTB=0B00010000;
delay_ms(0200);
PORTB=0;

PORTB=0B00001000;
delay_ms(0200);
PORTB=0;

PORTB=0B00000100;
delay_ms(0200);
PORTB=0;

PORTB=0B00000010;
delay_ms(0200);
PORTB=0;

PORTB=0B00000001;
delay_ms(0200);
PORTB=0;
delay_ms(0050);
for (r=0;r<2;r++)
{PORTB=0B11111111;
delay_ms(0700);
PORTB=0;
delay_ms(0700); }

PORTB=0B00011000;
delay_ms(150) ;
portb=0;

PORTB=0B00100100;
delay_ms(150) ;
portb=0;

PORTB=0B01000010;
delay_ms(150) ;
portb=0;

PORTB=0B10000001;
delay_ms(150) ;
portb=0;

PORTB=0B00000000;
delay_ms(150) ;

PORTB=0B10000001;
delay_ms(150) ;
PORTB=0B11000011;
delay_ms(150) ;
PORTB=0B11100111;
delay_ms(150) ;

for(r=0;r<2;r++)
{portb=0b11111111;
delay_ms(100);
portb=0b11111011;
delay_ms(50);
portb=0b11111111;
delay_ms(250);
portb=0b11111011;
delay_ms(60);
portb=0b11111111;
delay_ms(70);
portb=0b11111011;
delay_ms(40);
portb=0b11111111;
delay_ms(300);
portb=0b11111011;}
delay_ms(80);


portb=0;
delay_ms(500);
portb=0b11111111;
delay_ms(800);
portb=0;
delay_ms(300);

portb=0b10000000;
delay_ms(50);
portb=0b01000000;
delay_ms(50);
portb=0b00100000;
delay_ms(50);
portb=0b00010000;
delay_ms(50);
portb=0b00001000;
delay_ms(50);
portb=0b00000100;
delay_ms(50);
portb=0b00000010;
delay_ms(50);
portb=0b00000011;

portb=0b10000011;
delay_ms(100);
portb=0b01000011;
delay_ms(100);
portb=0b00100011;
delay_ms(100);
portb=0b00010011;
delay_ms(100);
portb=0b00001111;

portb=0b10001111;
delay_ms(150);
portb=0b01001111;
delay_ms(150);
portb=0b00111111;

portb=0b10111111;
delay_ms(200);
portb=0b11111111;
delay_ms(1000);
portb=0;
delay_ms(500);
goto loop;
}
شكرا


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


معلومة ,وبالتالي يكون الشكل النهائي للبرنامج المطلوب كما يلي
كود:
void main() { trisb=0; trisa=0xff; loop: if(porta.f0==0){while(porta.f0==0){} portb.f0=1;} else portb.f0=0; goto loop; }
هنا استخدمنا جملة if لاختبار شرط معين في حال تحقق هذا الشرط أي في حال تم الضغط على السويتش سينفذ البك الأوامر التي بين القوسين الخاصين بجملة if وأول أمر في هذه الأوامر هو while والذي سيجعل البك لا يفعل أي شيء طالما لازلت ضاغطا على السويتش وعند رفعي من على السويتش يكون البك انتهى من تنفيذ الأمر while و سينفذ البك الأمر الذي يلي while وهو الأمر الذي سيضيء الليد

بعد ذلك استخدمنا else والتي تعني في حال عدم تحقق الشرط نفذ الأمر التالي وهو الأمر الذي سيطفئ الليد .[/QUOTE]


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

حيدر علاج حسن

Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 27-02-2009, 10:16 PM المشاركة 8   
adevil


هاهاهاها تصدق فاتتنى دى ده حتى واحد صاحبى قاللى انت بتتعامل مع آله على اد سرعتها على اد غباءها يعنى لو قولتله افتح الباب مش حيقفل وراه شكرا على الرد وآسف على السؤال الغبى ده XD
فى مشكلة تانية فى جملة if -الجملة دى تعبتنى على مفهمتها فى المدرسة فى الانجليزى وشكلها حتتعبنى فى الميكرو كمان- المهم انا حبيت أحط كذا أمر يتنفذو مع بعض بمجرد ضغط الزر يعنى عايز لما ادوس الزرار مثلا منb0 الى b2 ينورو مع بعض أول مسيب الزر يطفو مع بعض كتبت الكود كالتاتى
كود:
void main (){
trisa=0b11111;
trisb=0b00000000;
start:

if(porta.f0==0) {portb.f0=1;portb.f1=1;portb.f2=1;}
if(porta.f0==1) {portb.f0=0;portb.f1=0;portb.f2=0;}

goto start;}
والنتيجة ان اول ثلاثة ليدات يترعشو كأنهم متركبين على ستارتر لمبة نيون ولو فضلت دايس الزرار يقوللى (simulation is not running in real time due to excessive CPU load) عايز أفهم بقى منين الحمل الزايد على معالج البك وازاى أريح سعادة البك وأخليه ينورهم مع بعض لما أدوس على الزرار
أنا خلليت الليدات تنور مع بعض بس فى شكل جرايه بعنى ورا بعض وصلت لحد 15ms بين كل ليد و اللى بعده لو قلت المده عن كده يقوللى فى حمل زياده على معالج البك وده شكل كود ابو time delay
كود:
void main (){
trisa=1;
trisb=0;
loop:
if(PORTA.f0==0)
{portb.f0=1;delay_ms(250);
 portb.f1=1;delay_ms(250);
 portb.f2=1;delay_ms(250);
 portb.f3=1;delay_ms(250);
 portb.f4=1;delay_ms(250);
 portb.f5=1;delay_ms(250);
 portb.f6=1;delay_ms(250);
 portb.f7=1;delay_ms(250);
 portb.f6=1;delay_ms(250);
 portb.f5=1;delay_ms(250);
 portb.f4=1;delay_ms(250);
 portb.f3=1;delay_ms(250);
 portb.f2=1;delay_ms(250);
 portb.f1=1;delay_ms(250);
 portb.f0=1;delay_ms(250);}

if(porta.f0==1){portb.f0=0;}

goto loop;}
ده عباره عن جرايه رايح جاى تطبيق على قاعدة if قصدى جملة if المهم سيبك من الكود العبيط ده شوفلى بس حل للمشكلة بتاعت اللدات اللى بتترعش دى والحمل الزايد شكرا
الحمد لله أعتقد أنى وجد الخطأ ولكى لا يقع فيه غيرى الخطأ كالآتى:
عندما أكتب الكود هكذا
كود:
if(porta.f0==0) {portb.f0=1;portb.f1=1;portb.f2=1;}
يتم معالجتة بسرعة رهيبة تتعدى سيطرة معالج البك فيعطى رسالة تفيد بأن هناك تحميل زائد على معالج البك لأنه يحاول تنفيذ الأوامر المتتالية والمتكررة بسرعة فيزداد الحمل عليه ولكن عند كتابة الأمر بالنظام البينارى يطبق البك العملية بسلاسة بدون حمل زائد حيث أن الأمر يكون هكذا
كود:
if(porta.f0==0) {portb=0b00000111;}
ولكن حدث معى نفس المشكلة عندما استخدمت أمر else
واكتشفت أنه لا يمكن تطبيق أمر else مع أمر if فى حالة أن أمر if الثانى يشترط عدم الضغط على الزر فيحاول المعالج معالجة الأمرين فى وقت واحد تقريبا بفارق ضئيل للغاية فى الوقت وهنا يحدث التحميل الزائد على المعالج

أعتقد أن هذا الكلام صحيح أرجو المراجعه والتصديق علية للافادة

ِشكرا وأعتذر على التسرع فى السؤال الأول

إضافة رد

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

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

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


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

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