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

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 08-10-2015, 04:21 PM المشاركة 1   
افتراضي استخدمة %99.9 من الذاكرة الكلية لل PIC16F877a وبدأة المشاكل Twitter FaceBook Google+



السلام عليكم

استخدمة %99.9 من الذاكرة الكلية لل PIC16F877a وبدأة المشاكل

الميكرو بدأ بتنفيذ الأوامر بطريقة عشوائية ..... هل طريقة ترتيب صفحات الذاكرة بطريقة عشوائيه فى هذا الجيل من الميكرو ... هى السبب

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 08-10-2015, 10:11 PM المشاركة 2   
افتراضي


السبب في كتابة الكود ...
ارفع الكود من فضلك

حيدر علاج حسن
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 08-10-2015, 10:56 PM المشاركة 3   
افتراضي السلام عليكم


السبب في كتابة الكود ...
ارفع الكود من فضلك

اولا مشكور جدااا على اهتمامك اخى الكريم



وهذا الكود ..

على المحكاة يعمل بطريقة صحيحة وفى الواقع يقوم النظام بتشغيل الاوامر بطريقة عشوائية ... وتتحقق شروط مكتوبة فى البرنامج بطريقة ذاتية ....

بمعنى انا واضع فى البرنامج أمر شرط لا يتحقق الا عند تفعيل واحد منطقى على احدى رجول الميكرو .... وبلاقى ان الشرط دة بيتحقق لوحدة .. مع انى مركب مقومات فول داون لمنع النويس على الدائرة ..


كود:
          
           /*HYGAZY FOR Microsystem*/

  
   // LCD module connections //
  sbit LCD_RS at RB5_bit;
  sbit LCD_EN at RB4_bit;
  sbit LCD_D4 at RB3_bit;
  sbit LCD_D5 at RB2_bit;
  sbit LCD_D6 at RB1_bit;
  sbit LCD_D7 at RB0_bit;
  sbit LCD_RS_Direction at TRISB5_bit;
  sbit LCD_EN_Direction at TRISB4_bit;
  sbit LCD_D4_Direction at TRISB3_bit;
  sbit LCD_D5_Direction at TRISB2_bit;
  sbit LCD_D6_Direction at TRISB1_bit;
  sbit LCD_D7_Direction at TRISB0_bit;
    // End LCD module connections//
  //*************//**********************//
  #define EZR_KIY portc.f5=1;delay_ms(120);portc.f5=0;delay_ms(60);portc.f5=1;delay_ms(120);portc.f5=0;delay_ms(60);
  #define EZR_TEST portc.f5=1;delay_ms(150);portc.f5=0; delay_ms(60);portc.f5=1;delay_ms(150);portc.f5=0;delay_ms(60);portc.f5=1;delay_ms(150);portc.f5=0;
  #define EZR_eror portc.f5=1;delay_ms(6100); EZR_TEST
  #define CLEAR Lcd_Cmd(_LCD_CLEAR);
 //*************************************//

      /*void interrupt(){
             cut1:

      if(portd.f7==1&& Z==1){while(1)if(portd.f7==0){goto cut2;}cut2: portc=0;EZR_TEST portc.f0=1;delay_ms(300);while(1){if(porta.f1==1){portc=0; EZR_TEST delay_ms(400);portc=20;goto cut1; } }}

    INTCON=0b01100000;
   TMR0=0;
    }*/
//--------------**************-------------//
        void main(){
         int x=0;
         int A=0;
         int Z=0;
  /*OPTION_REG=0b10000101;
   INTCON=0b10100000;
       TMR0=217;*/
//-------**********--------//
       
     adcon1=0x06;
  trisb=0; portb=0;  trisd=1; portd=0;
  trisc=128; portc=0;  trisa=1; porta=0;
       trise=1; porte=0;
         Lcd_Init();
   Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off
          START:
          CLEAR
           A=0;
           Z=0;
   Lcd_Cmd(_LCD_CLEAR);     // clear LCD
   lcd_out(1,1," <<< Welcome >>>>");
   lcd_out(2,2,"Loading System");
           EZR_KIY
        delay_ms(2000);
   Lcd_Cmd(_LCD_CLEAR);
   lcd_out(1,4,"HYGAZY  FOR");
   lcd_out(2,4,"Microsystem");
 EZR_TEST EZR_TEST  EZR_TEST
       delay_ms(3000);
         CLEAR
 lcd_out(1,2,"Chose Cutting");
 lcd_out(2,1,"Program Press UP");
//********************************************************//
               while(1){
 if(porte.f2==1){ A++;EZR_KIY CLEAR delay_ms(100);}
 if(A==3){A=1; }
 if(porta.f0==1&&A==1){delay_ms(400);EZR_KIY goto loop;}
 if(porta.f0==1&&A==2){delay_ms(400); goto loop20sm;}
 if(A==1){ lcd_out(2,3,"PlEASE START");lcd_out(1,4,"CUT 10 SM");}
 if(A==2){ lcd_out(2,3,"PlEASE START");lcd_out(1,4,"CUT 20 SM");}
         }
   //*********************************************************//
   //----------------- CUT 10 SM -----------------//
                            loop:

                           while(1){
 //--------------********** MOTOR 1 LEFT && RIGHT **********---------------//
 if(porta.f1==1){ portc.f4=1; EZR_KIY while(1){if(porta.f1==0){portc.f4=0;goto loop;}}}
 if(porta.f2==1){ portc.f6=1; EZR_KIY while(1){if(porta.f2==0){portc.f6=0;goto loop;}}}
//-------***********************************************************--------//

//-------------************ MOTOR 2 LEFT && RIGHT **********---------------//                                                               //--------********** MOTOR 1 LEFT && RIGHT **********-------//
 if(porta.f4==1){ portc.f1=1; EZR_KIY while(1){if(porta.f4==0){portc.f1=0;goto loop;}}}
 if(porta.f5==1){ portc.f2=1; EZR_KIY while(1){if(porta.f5==0){portc.f2=0;goto loop;}}}
//-------***********************************************************-------//

//-------------*************** CUT 1 MANWAL ****************--------------//
 if(porte.f0==1){portc.f3=1; EZR_TEST delay_ms(300);while(1){if(portc.f7==1){portc=0;goto loop;}}}
//------***********************************************************-------//

//-------------*************** CUT 2 MANWAL ****************--------------//
 if(porte.f1==1){portc.f0=1; EZR_TEST delay_ms(300); while(1){if(portd.f4==1){portc=0;goto loop;}}}
//------***********************************************************-------//

//------------------************* RESTART ******************--------------//
 if(portd.f0==1){ EZR_KIY delay_ms(600);portc=0; goto start;}
//----************************************************************-------//

//---------------*********** MOTOR START **************-----------------//
 if(porta.f0==1){EZR_KIY Z++; delay_ms(400);}
 if(Z==1){ portc=20;}
 if(Z==2){ portc=0;}
 if(Z==3){Z=1;}
 //----------**************************************************--------//
 
 //-------------********** TEST CUT 1 && 2 ************---------------//
 if(portd.f2==1){portc=8;delay_ms(300);while(1){if(portc.f7==1){ portc=4;delay_ms(480);portc=8; goto loop;}}}
 if(portd.f7==1){portc=1;delay_ms(300);while(1){if(portd.f4==1){ portc=20;delay_ms(250);portc=20; EZR_KIY goto loop;}}}
 //-------*************************************************----------//
 
 //--------------****** TESE EREROR 1 && 2*********-----------------//
  if(portd.f5==1){CLEAR lcd_out(1,4,"TESE EREROR"); portc=0; EZR_eror goto START;}
 //-------***************************************************-----//
}
                                 loop20sm:

                                 while(1){
  //--------------********** MOTOR 1 LEFT && RIGHT **********---------------//
 if(porta.f1==1){ portc.f4=1; EZR_KIY while(1){if(porta.f1==0){portc.f4=0;goto loop;}}}
 if(porta.f2==1){ portc.f6=1; EZR_KIY while(1){if(porta.f2==0){portc.f6=0;goto loop;}}}
//-------***********************************************************--------//

//-------------************ MOTOR 2 LEFT && RIGHT **********---------------//                                                               //--------********** MOTOR 1 LEFT && RIGHT **********-------//
 if(porta.f4==1){ portc.f1=1; EZR_KIY while(1){if(porta.f4==0){portc.f1=0;goto loop;}}}
 if(porta.f5==1){ portc.f2=1; EZR_KIY while(1){if(porta.f5==0){portc.f2=0;goto loop;}}}
//-------***********************************************************-------//

//-------------*************** CUT 1 MANWAL ****************--------------//
 if(porte.f0==1){portc.f3=1; EZR_TEST delay_ms(300);while(1){if(portc.f7==1){portc=0;goto loop;}}}
//------***********************************************************-------//

//-------------*************** CUT 2 MANWAL ****************--------------//
 if(porte.f1==1){portc.f0=1; EZR_TEST delay_ms(300); while(1){if(portd.f4==1){portc=0;goto loop;}}}
//------***********************************************************-------//

//------------------************* RESTART ******************--------------//
 if(portd.f0==1){ EZR_KIY delay_ms(600);portc=0; goto start;}
//----************************************************************-------//

//---------------*********** MOTOR START **************-----------------//
 if(porta.f0==1){EZR_KIY Z++; delay_ms(400);}
 if(Z==1){ portc=20;}
 if(Z==2){ portc=0;}
 if(Z==3){Z=1;}
 //----------**************************************************--------//

 //-------------********** TEST CUT 1 && 2 ************---------------//
 if(portd.f3==1){portc=8;delay_ms(300);while(1){if(portc.f7==1){ portc=4;delay_ms(480);portc=8; goto loop;}}}
 if(portd.f7==1){portc=1;delay_ms(300);while(1){if(portd.f4==1){ portc=20;delay_ms(250);portc=20; EZR_KIY goto loop;}}}
 //-------*************************************************----------//

 //--------------****** TESE EREROR 1 && 2*********-----------------//
  if(portd.f5==1){ portc=0; EZR_eror goto START;}
 //-------***************************************************-----//
 //-----**********  END **********------//
}
}


صورة المحكاة





التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 08-10-2015 الساعة 11:07 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 09-10-2015, 08:38 AM المشاركة 4   
افتراضي


بالتاكيد تحميل كل الذاكرة يدخل البك في تهنجات . حاول نقل البيانات و المتغيرات الى ذاكرة الروم .. مثلا
كود:
cons int x=0;
خزن رسائل الشاشة في مصفوفة و استدعها مباشرة من المصفوفة .
اوصل مكثف 1 ميكرو قبل منظم الجهد و بعده .
استخد الاوبتوكوبلر بدل الترانستتور لتشغيل الريلي لان الاول يمنع التشويش بصورة كاملة ..

حيدر علاج حسن
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى, ahmed idris ( أعجبته المشاركة )

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 09-10-2015, 09:55 AM المشاركة 5   
افتراضي


بالتاكيد تحميل كل الذاكرة يدخل البك في تهنجات . حاول نقل البيانات و المتغيرات الى ذاكرة الروم .. مثلا
كود:
cons int x=0;
خزن رسائل الشاشة في مصفوفة و استدعها مباشرة من المصفوفة .
اوصل مكثف 1 ميكرو قبل منظم الجهد و بعده .
استخد الاوبتوكوبلر بدل الترانستتور لتشغيل الريلي لان الاول يمنع التشويش بصورة كاملة ..
بالفعل أخى الكريم .. تم نقل البينات الى ذاكرة الروم ... وتم استخدام الاوبتوكوبلر بدلا من الترنزوستر ... وقلة الشوشرة بشكل كبير فى الدائرة واستقر العمل ...


بارك الله فيك وفى اهلك .... وبارك الله .. فى أهل العراق ...

تحياتى لك ومشكور جداااا على اهتمامك .... ذادك الله علمااااا...


مشكور جدااااااا اخى ... الكريم







التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 09-10-2015 الساعة 10:02 AM
احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب حيدر علاج حسن ( أعجبته المشاركة )

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 453
نشاط [ ahmed idris ]
قوة السمعة:0
قديم 09-10-2015, 10:24 AM المشاركة 6   
افتراضي


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

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب حيدر علاج حسن, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 09-10-2015, 04:57 PM المشاركة 7   
افتراضي


السلام عليكم

استخدمة %99.9 من الذاكرة الكلية لل PIC16F877a وبدأة المشاكل

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

1- لاتتعامل مع كود مباشره مع port لماذا لانه اذا انت الان تريد تعديل يعني تغير طرف من porta.f0 الى porta.f1 ستقع في مشكله لانه لازم اتعدل على كل اوامر الي فيها porta.f0

لذا انصحك بأستخدام sbit في تعاريف مداخل ومخارج

2- الامر delay ياخذ كثير من رام لذا ان كنت تستخدم مثلا( delay_,ms(300

لذا انصحك بتالي وهي عمل داله تضع فيها ديلي الي انت تستخدمه بكثره في برنامج هذه طريقه تقلل حجم كود في رام و روم
كود:
void delay_300ms()
{
 delay_ms(300);
}

طبقا الحال مع اوامر الشاشه
مثلا مسح الشاشه او حتى عرض البيانات يمكن عمل داله واحده لتعرض لك البيانات على شاشه بسهوله
كود:
void display(char row , char col , char *mess)
{
 lcd_out(row,col,mess) ;
}
كود:
void clear ()
{
 lcd_cmd(1);
}

احصائية الشكر والاعجاب - 3 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً سعيد قادر, حيدر علاج حسن, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب سعيد قادر, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 09-10-2015, 10:25 PM المشاركة 8   
افتراضي السلام عليكم


السلام عليكم
اضافه الى ما اضافو اليه الاخوه اود انصحك بتالي

1- لاتتعامل مع كود مباشره مع port لماذا لانه اذا انت الان تريد تعديل يعني تغير طرف من porta.f0 الى porta.f1 ستقع في مشكله لانه لازم اتعدل على كل اوامر الي فيها porta.f0

لذا انصحك بأستخدام sbit في تعاريف مداخل ومخارج

2- الامر delay ياخذ كثير من رام لذا ان كنت تستخدم مثلا( delay_,ms(300

لذا انصحك بتالي وهي عمل داله تضع فيها ديلي الي انت تستخدمه بكثره في برنامج هذه طريقه تقلل حجم كود في رام و روم
كود:
void delay_300ms()
{
 delay_ms(300);
}

طبقا الحال مع اوامر الشاشه
مثلا مسح الشاشه او حتى عرض البيانات يمكن عمل داله واحده لتعرض لك البيانات على شاشه بسهوله
كود:
void display(char row , char col , char *mess)
{
 lcd_out(row,col,mess) ;
}
كود:
void clear ()
{
 lcd_cmd(1);
}



بارك الله فيك أخى الكريم على علمك ومجهودك ....

لى سؤال هل عدم ترتيب صفحات ذاكرة هذا الجيل من الميكرو هى السبب ...

ممكن مثال صغير لأستخدام هذة الدالة فى الكود

كود:
void display(char row , char col , char *mess)
{
 lcd_out(row,col,mess) ;
}

تحياتى لكم جميعاااا اخوانى الكرام ....


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 10-10-2015 الساعة 12:52 AM
إضافة رد

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

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

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


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

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