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

   

hamedenho
:: مهندس ::
تاريخ التسجيل: Jan 2007
المشاركات: 49
نشاط [ hamedenho ]
قوة السمعة:
قديم 16-10-2012, 07:20 PM المشاركة 457   
افتراضي



بارك الله فيك وفي استاذنا الكبير احمد وعميدنا اللي مجمعنا استاذ فهد

اعلانات

ramroum
:: مهندس ::
تاريخ التسجيل: Mar 2013
المشاركات: 5
نشاط [ ramroum ]
قوة السمعة:
قديم 17-03-2013, 01:01 AM المشاركة 458   
ha نصيحة حول صناعة اللافتات الإشهارية


كيف يمكنني الإتصال بالسيد ناصراحمد2

و شكرا

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

الصورة الرمزية asmaa sedeek
asmaa sedeek
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 4
نشاط [ asmaa sedeek ]
قوة السمعة:
قديم 23-03-2013, 11:59 AM المشاركة 459   
افتراضي


السلام عليكم ورحمة الله وربركاته م/ناصر
اولا اود ان اشكر حضرتك جزيل الشكر على هذا الموضوع الممتاز وجعله الله فى ميزان حسناتك اريد من حضرتك اذا تكرمت( كيفية اختصار الاكواد ؟ ) وجزاك الله خيرا


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 24-03-2013, 04:29 AM المشاركة 460   
افتراضي


السلام عليكم ورحمة الله وربركاته م/ناصر
اولا اود ان اشكر حضرتك جزيل الشكر على هذا الموضوع الممتاز وجعله الله فى ميزان حسناتك اريد من حضرتك اذا تكرمت( كيفية اختصار الاكواد ؟ ) وجزاك الله خيرا

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

وهذا هو رابط الدرس الثامن
http://www.qariya.com/vb/showthread.php?t=96939


التعديل الأخير تم بواسطة : ناصراحمد2 بتاريخ 24-03-2013 الساعة 05:30 AM

الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 24-03-2013, 04:49 AM المشاركة 461   
افتراضي


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


درس (منفصل ) على هامش الشروحات
وهو خاص بكيفية اختصار الاكواد



بالنسبة لاختصار الاكواد ان شاء الله فى منتهى السهولة
ولكن فقط تم وضع الاكواد كما هى فى الشروحات حتى نفهم سويا كل حركة تتم ولا يكون هناك شيئ غامض بالنسبة لنا كمبتدئين واغلبنا طبعا معلوماتنا بسيطة فى مجال البرمجة والحرفية البرمجية .
لكى نستطيع ان نختصر الاكواد بقدر المستطاع
علينا ان نعود الى دروس البرمجة لمهندسنا ومعلمنا الغالى مهندس احمد سمير
http://www.qariya.com/vb/showthread.php?t=40760
وخاصة الدرس الخاص بالدالة ( for ) او بمعنى اخر الجمل التكرارية
وهى اننا نستطيع اختصار اى عدد من الاوامر طالما انها متشابهة
نستطيع اختصارها فى امر واحد
وهنا سوف اضع مثال او اثنين للاختصار
وعلينا فقط فهم الطريقة لكى نتعامل مع كل مايشبة هذة الامثلة .


اولا على سبيل المثال فى الدرس الاول يوجد هذا الكود

كود:
void main()
{
TRISB=0;
 PORTB=0;
loop:
PORTB=0B00000001; delay_ms(500); 
PORTB=0B00000010; delay_ms(500); 
PORTB=0B00000100; delay_ms(500); 
PORTB=0B00001000; delay_ms(500); 
PORTB=0B00010000; delay_ms(500); 
PORTB=0B00100000; delay_ms(500); 
PORTB=0B01000000; delay_ms(500); 
PORTB=0B10000000; delay_ms(500); 

goto loop;
}
نلاحظ هنا ان بداية الكود عادية جدا
ويوجد بعد كلمة loop ثمانية اوامر بالطبع هى مختلفة عن بعضها ولكن اختلافها بسيط فالاختلاف هنا ياتى بالتدريج
بمعنى : البن 0=1 والباقى =0 ثم الامر الثانى البن رقم 1=1 والباقى =0
ثم البن رقم 2=1 والباقى =0 وهكذا ....

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


فيكون الكود بالشكل الجديد كالتالى


كود:
char x; 
void main()
{
TRISB=0;
 PORTB=0;
loop:
PORTB=0B00000001; delay_ms(500);
for(x=0;x<7;x++;){
PORTB=PORTB<<1;   delay_ms(500); 
}
goto loop;
}
الملاحظ هنا انة تم اختصار الكود بشكل كبير
ولكن يوجد نقطة هامة وهى اننا قمنا بعمل الجملة التكرارية حتى عدد7 وانا ذكرت فى البداية اننا نحتاج الى 8 ؟؟؟؟؟

نعم هو بالفعل 8 حركات مع مراعاة اننا وضعنا هذا الامر الميز باللون الاحمر قبل جملة for وبالتالى يكون المجموع الامر الاول مع ال7اوامر فى جملة فور يكون الناتج 8 اوامر
وعلامة >>>> هذة هى تستخدم لازاحة البنات بالكامل بحيث يصبح
البن رقم 1 من اليمين يصبح 0 بدل من 1 وعند التكرار يتحرك مرة اخرى
فتكون النتيجة هى نفس عمل الكود بالظبط


اتمنى ان يكون هذا الشرح بسيط وواضح
والا انتم عارفين ههههههههههههه



وهنا ننتقل الى مثال اخر
وسوف نتحرك الى الدرس الخامس مباشرة

وطبعا الكود واضح جدا انة طويييييييييل جدا جدا

كود:
     char x1=0b00000000;
char x2=0b00000000;
char x3=0b11111110;
char x4=0b11111110;
char x5=0b00000000; ////
char x6=0b11111110;
char x7=0b11111110;
char x8=0b00000110;
char x9=0b00000110;
char x10=0b11111110;
char x11=0b11111110;
char x12=0b00000110;
char x13=0b00000110;
char x14=0b00111110;
char x15=0b00101110;
char x16=0b00101000;
char x17=0b00111000;
char x18=0b00000000; 
char x19=0b00000000;
char x20=0b00000000;
char x21=0b00000000;
  
  
  
  
  
 char n;

 void main()
{
TRISB=0;
 PORTB=0;

 TRISd=0;
 PORTd=0;

loop:

 for(n=0;n<100;n++;){

porta.f1=1;   porta.f1=0;/////////*****///////////


  //////////////////////////////////////////////

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x1;
 delay_us(300);


  //////////////////////////////////////////////

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x2;
 delay_us(300);

  //////////////////////////////////////////////

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x3;
 delay_us(300);

  //////////////////////////////////////////////

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x4;
delay_us(300);


  //////////////////////////////////////////////

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x5;
delay_us(300);


  //////////////////////////////////////////////


  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x6;
 delay_us(300);


  //////////////////////////////////////////////
  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x7;
delay_us(300);

  //////////////////////////////////////////////
  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x8;
 delay_us(300);



}



x1=x2;
x2=x3;
x3=x4;
x4=x5;
x5=x6;
x6=x7;
x7=x8;
x8=x9;
 x9=x10;
x10=x11;
x11=x12;
x12=x13;
x13=x14;
 x14=x15;
x15=x16;
x16=x17;
x17=x18;
x18=x19;
x19=x20;
x20=x21;
x21=x1;


goto loop;
}
حمد الله على سلامة الوصول مشوار بعييييد


هذا هو الكود فى الدرس الخامس
وهنا سوف نحاول ان نختصرة باذن الله (مع الاخذ بالاعتبار انى مازلت مبتدىء فى البرمجة ) فاعزرونى على اى خطا او تقصير .

اولا علينا ان نفهم الكود جيدا
سوف نجد انة عبارة عن 3 اجزاء
اولا التعريفات (المتغيرات ) وثانيا جسم الكود (البرنامج ) ثم حلقة الازاحة

ناخذ اولا الجزء الاول وهو المتغيرات

عدد المتغيرات هو (21)
ولانهم مختلفين فلا سبيل لاختصارهم تماما
ولكن سوف نضعهم بشكل مختلف وداخل متغير واحد فقط بدلا من ال21 متغير
وهذا هو الجزء قبل الاختصار


كود:
char x1=0b00000000;
char x2=0b00000000;
char x3=0b11111110;
char x4=0b11111110;
char x5=0b00000000; ////
char x6=0b11111110;
char x7=0b11111110;
char x8=0b00000110;
char x9=0b00000110;
char x10=0b11111110;
char x11=0b11111110;
char x12=0b00000110;
char x13=0b00000110;
char x14=0b00111110;
char x15=0b00101110;
char x16=0b00101000;
char x17=0b00111000;
char x18=0b00000000; 
char x19=0b00000000;
char x20=0b00000000;
char x21=0b00000000;
سوف نضعهم فقط داخل متغير واحد مكون من 21 جزء
كود:
char x[21]={

0b00000000,
0b00000000,
0b11111110,
0b11111110,
0b00000000,
0b11111110,
0b11111110,
0b00000110,
0b00000110,
0b11111110,
0b11111110,
0b00000110,
0b00000110,
0b00111110,
0b00101110,
0b00101000,
0b00111000,
0b00000000,
0b00000000,
0b00000000,
0b00000000
}
هنا تم الاختصار بقدر الامكان
علينا فقط ان ننتبة الى ماتم تغييرة وهو هذة العلامة ; تم تغيرها الى (,)
وايضا هذة العلامة او القوسين بعد اسم المتغير وهما [21] ونلاحظ الرقم 21
وهو يمثل عدد المتغيرات
ولكى نتعامل مع كل متغير منهم على حدة
علينا ان نستخدم الرقم داخل القوسين كمثال نريد ان نكتب المتغير الاول ثم الثانى ثم الثالث
نكتب هذا

كود:
x[0]
x[1]
x[2]
وهكذا 
واذا اردنا استخدام الكل مرة واحدة
نكتب x[21]
او نضع مكان رقم 21 اى متغير اخر مرتبط بعملية البرمجة
نذهب هنا للجزء الاوسط وهو البرنامج نفسة
ونشاهد جيدا سوف نجد انة هو نفسة امر واحد ولكن مكرر 8 مرات
وهنا يمكننا استخدام الطريقة التى شرحناها من قبل واستخدام جملة for لعدد 8 مرات فيصبح الشكل النهائى للجزء البرنامج كالتالى

كود:
 char n;
char x2;
 void main()
{
TRISB=0;
 PORTB=0;

 TRISd=0;
 PORTd=0;

loop:

 for(n=0;n<100;n++;){
porta.f1=1;   porta.f1=0;/////////*****///////////

for (x2=0;x2<8;x2++;){



  //////////////////////////////////////////////

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x1;
 delay_us(300);
}


}
الملاحظ هنا اننا استخدمنا متغير جديد مميز هنا باللون الاحمر وهو x2 لعمل حلقة تكرار 8 مرات
ولكن لحظة ............... يوجد امر قمنا بتمييزة باللون الاخضر واخرجناة من جملة التكرار ؟؟؟؟
والتفسير ببساطة انة خاص فقط بفتح الداتا لمسجل الازاحة .
ولو قمنا بادخالة داخل حلقة التكرار لتكرر فتح الداتا 8 مرات وهذا يعنى ان مسجل الازاحة سوف يعمل بشكل خاطىء (يمكنكم مراجعة الدرس الخامس).

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

اما بالنسبة للجزء الاخير من الكود وهو الازاحة (ازاحة النص )

لابد ان نستخدم متغير جديد
ونضع جملة تكرارية جديدة
ونستخدم الازاحة (>>)
كود:
for(x3=0; x3<21;x3++;){
x[x3]=x[x3+1];    
ولا ننسى هنا ان نجعل اخر سطر من النص ياخذ قيمة اول سطر 
x[0]=x[20];
طبعا هنا نهاية العدد هى 20 لانة يعتبر x[0]   من ضمن الاعداد 
فيكون الاجمالى هو 21 سطر (بايت)

}
وبالتالى يكون الكود النهائى كالتالى :

كود:
char x[21]={

0b00000000,0b00000000,0b11111110,0b11111110,
0b00000000,0b11111110,0b11111110,0b00000110,
0b00000110,0b11111110,0b11111110,0b00000110,
0b00000110,0b00111110,0b00101110,0b00101000,
0b00111000,0b00000000;,0b00000000,0b00000000,
0b00000000
};
char x3;
char n;
char x2;
 void main()
{
TRISB=0;
 PORTB=0;

 TRISd=0;
 PORTd=0;

loop:

 for(n=0;n<100;n++;){
porta.f1=1;   porta.f1=0;/////////*****///////////

for (x2=0;x2<8;x2++;){

  porta.f0=1;porta.f1=1; porta.f1=0;  porta.f0=0;
   portb=x1;
 delay_us(300);
}
for(x3=0; x3<21;x3++;){
x[x3]=x[x3+1];    
x[0]=x[20];

}
goto loop;
}
اعتقد ان الفرق واضح الان ؟؟؟؟
طبعا هناك فرق كبير بين الكود قبل الاختصار وبعدة ؟؟؟
ونستطيع ان نختصر هذا الشرح بالامل فى جملة واحدة
وهى اننا نستطيع عمل عدة اسطر بدل من مئات الاسطر والنتيجة واحدة
ولكن هذا يعتمد فقط على مدى اجادتنا للتعامل مع اوامر البرمجة وفهمها جيدا

واعتزر عن اى سهو او خطا

ولا تنسوا رش الماء والذى منة


تحياتى لكم جميعا


التعديل الأخير تم بواسطة : ناصراحمد2 بتاريخ 24-03-2013 الساعة 05:01 AM

الصورة الرمزية asmaa sedeek
asmaa sedeek
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 4
نشاط [ asmaa sedeek ]
قوة السمعة:
قديم 24-03-2013, 01:04 PM المشاركة 462   
افتراضي


شكرا جزيلا مهندس/ناصر على ذوقك واهتمامك والشرح رائع ما شاء الله زادكم الله من علمه وجعله الله فى ميزان حسناتك وبالفعل الموضوع مفيد جدا ليس بالقليل ولكن بالكثير ان شاء الله جزاك الله خيرا


waeltealeb
:: مهندس متميز ::
تاريخ التسجيل: Jul 2007
المشاركات: 360
نشاط [ waeltealeb ]
قوة السمعة:
قديم 30-03-2013, 03:06 PM المشاركة 463   
افتراضي سؤال مهم للغايه ، ارجوا الأهتمام ..


السلام عليكم ورحمة الله وبركاته ...
اخى الحبيب الأخ ناصر لا اعرف كيف اقوم بشكرك على هذا العطاء الكبير و المجهود الضخم فعلا ، فأنا اعلم جيدا كم المجهود المقدم فى هذا العمل و المجهود الأكثر فى المتابعه و الردود ، لك منى كل الشكر و التقدير و الأحترام و جزاك الله عنا كل الخير و جعله فى ميزان حسناتك ...

ثانيا :: هناك ملحوظه هامه جدا جدا جدا ... الا وهى فى النطاق العملى لهذه الأمكانيات و هى اللوحات الألكترونيه التجاريه .. فهناك برامج وسيطه للتعامل مع المتحكم يكون فيها كتابة العبارات و الكلمات مباشره باللغه العربيه ، و من ثم يقوم البرنامج بترجمة الكلمات و العبارات الى كود فورا يتم شحنه الى المتحكم ......

هذا سيوفر لنا الكثير و الكثير من الجهد و التفكير فى الكود المستخدم و يفسح المجال للمهندسين و الهواه الى الأنشغال فى التركيبات و التجميع لليدات و الأيى سيهات و الأسلاك و المتحكم الخ ... (( مع العلم انها لن تفرق فى الأسعار كتير عن الجاهزه ))

يا ريت لو فى حد يعرف البرامج دى لا يبخل علينا بها ،، وجزاكم الله خيرا


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 31-03-2013, 02:06 AM المشاركة 464   
angry


السلام عليكم ورحمة الله وبركاته ...
اخى الحبيب الأخ ناصر لا اعرف كيف اقوم بشكرك على هذا العطاء الكبير و المجهود الضخم فعلا ، فأنا اعلم جيدا كم المجهود المقدم فى هذا العمل و المجهود الأكثر فى المتابعه و الردود ، لك منى كل الشكر و التقدير و الأحترام و جزاك الله عنا كل الخير و جعله فى ميزان حسناتك ...

ثانيا :: هناك ملحوظه هامه جدا جدا جدا ... الا وهى فى النطاق العملى لهذه الأمكانيات و هى اللوحات الألكترونيه التجاريه .. فهناك برامج وسيطه للتعامل مع المتحكم يكون فيها كتابة العبارات و الكلمات مباشره باللغه العربيه ، و من ثم يقوم البرنامج بترجمة الكلمات و العبارات الى كود فورا يتم شحنه الى المتحكم ......

هذا سيوفر لنا الكثير و الكثير من الجهد و التفكير فى الكود المستخدم و يفسح المجال للمهندسين و الهواه الى الأنشغال فى التركيبات و التجميع لليدات و الأيى سيهات و الأسلاك و المتحكم الخ ... (( مع العلم انها لن تفرق فى الأسعار كتير عن الجاهزه ))

يا ريت لو فى حد يعرف البرامج دى لا يبخل علينا بها ،، وجزاكم الله خيرا
وعليكم السلام ورحمة الله وبركاتة
كلامك صح ومظبوط
لكن عنوان الموضوع هو الماتركس من الالف وليس الى الياء طبعا .........
هو فقط للاساسيات والتعرف على الماتركس وبعض الطرق للتامل معة
اما بالنسبة للبرامج التى تتعامل معها وتكون وسيطة بينك وبين الماتركس
لا تستطيع الدخول اليها دون معرفة ماهو الماتركس وكيف يعمل
وبناء على هذة المعرفة يمكنك التعامل مع البرمجيات الاخرى وتوظيفها كما تشاء
وهذا يتوقف على مدى معرفتك بهذة الاساسيات الموجودة هنا والاساسيات للتعامل مع البرمجيات الاخرى
كمثال الفجول بيسك والسى شارب و و لدرجة انك تستطيع التحكم فى ماتركس على بعد اميال ويكون تعاملك معة عن طريق الويب والانترنت
ولذلك كتبت كلمة (ليس الى الياء ) لان المجال مفتوح ولا يوجد له حدود حتى الان .
وعلى كل من يستطيع الاضافة فلا يبخل بها وجزاكم الله كل خير جميعا .
===================
ملاحظة بسيطة :
قبل كتابتى لهذا الموضوع ظللت شهورا كاملة
وكان اقصى حلم لى ان ارى حرف واحد بشكل واضح ويتحرك
وللاسف لم يكن هناك اى شروحات باللغة العربية او على الاقل بلغات برمجة مشهورة لنا كعرب
ونحمد الله على كل شىء وانا عن نفسى مازلت تلميذ مع كل التلاميذ فى هذة القرية ومازلت اتعلم واستفيد منكم جميعا


تحياتى للجميع بالتوفيق ان شاء الله



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