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

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

Shams-Dimashki
:: مهندس ::
تاريخ التسجيل: Mar 2016
المشاركات: 6
نشاط [ Shams-Dimashki ]
قوة السمعة:0
قديم 15-03-2016, 08:03 PM المشاركة 1   
افتراضي حفظ حالة البرنامج في PIC 16F84A Twitter FaceBook Google+



تحية طيبة
قمت ببناء دارة تحكم الكترونية بإستخدام المعالج PIC 16F84A
كما وقمت ببناء البرنامج بإستخدام لغة Micro C
والمشكلة لدي بأنه عندما أقوم بقطع التغذية عن الدارة وإعادة تشغيلها مرة أخرى
فإن المعالج يبدأ بتنفيذ البرنامج بدءا من الصفر
وما أريده أن يحافظ المعالج على آخر حالة توقف عندها قبل قطع التغذية عنه
هل هناك حاجة لتعديل الدارة أو البرنامج أو التعديل في عملية البرمجة
أرجو من الأعضاء المساعدة
تقبلو مروري

اعلانات

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


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

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

Shams-Dimashki
:: مهندس ::
تاريخ التسجيل: Mar 2016
المشاركات: 6
نشاط [ Shams-Dimashki ]
قوة السمعة:0
قديم 16-03-2016, 04:50 PM المشاركة 3   
افتراضي


بالنسبة للبرنامج فلابد ان يبدا من البداية ...
اما البيانات التي تريد حفظها و البداية منها بعد قطع التغذية فيمكن تخزينها في ذاكرة الايبوم للمعالج ثم قرائتها من جديد و البدء منها
شكرا جزيلا
بالفعل ما أرغب به هو تخزين البيانات الأخيرة للمعالج , وليس تنفيذ البرنامج من الصفر
ولكن للأسف لا أعرف طريقة تنفيذ هذه العملية في البرنامج (استخدم Micro C كما ذكرت في الموضوع)
إذا كانت لديك فكرة عن كيفية القيام بذلك أرجو مساعدتي
مع خالص تقديري


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 16-03-2016, 06:56 PM المشاركة 4   
افتراضي


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


وهذا الكود

كود:
char x=0;
char old_data;
void main()
 {trisb=0;portb=0;
  if(eeprom_read(0)!=0xff)old_data=eeprom_read(0);
 while(1)
        {
        for(x=old_data;x<10;x++)
                         { eeprom_write(0,x);
                           portb=x;
                           delay_ms(500);
                          }
         old_data=0;
        }

}

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

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 16-03-2016, 07:07 PM المشاركة 5   
sun


بسم الله الرحمن الرحيم

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

اخى العزيز للكتابة فى الايبروم ببساطة لو اردت تسجيل قيمة متغير x :

EEPROM_WRITE(0,X); // will save value of (x) in address 0
و تضع هذا الكود فى نهاية برنامجك

و فى بداية البرنامج تقوم بقراءة هذه القيم :
X = EEPROM_READ(0) // read from address 0 to X variable


- ستجد شرح فى ال help للامر مع امثلة
- ملاحظة : وحدة تخزين الذاكرة هى البايت اى حجم المتغير لو كان اكبر من البايت مثلا integer فيجب تقسيمه الى 2 بايت .


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

و ما توفيقي الا بالله

اللهم ارزقنا تعظيم كتابك و العمل به
اللهم ردنا اليه و اجعله ربيع قلوبنا
و دليل حياتنا



احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب Shams-Dimashki ( أعجبته المشاركة )

Shams-Dimashki
:: مهندس ::
تاريخ التسجيل: Mar 2016
المشاركات: 6
نشاط [ Shams-Dimashki ]
قوة السمعة:0
قديم 16-03-2016, 10:40 PM المشاركة 6   
افتراضي


الأستاذ حيدر حسن والمشتاق لله
شكرا جزيلا لكم
لم أتوقع أن تحل المشكلة بهذه السرعة !!!
سررت جدا بردكم , تم حل المشكلة بحمد الله


Shams-Dimashki
:: مهندس ::
تاريخ التسجيل: Mar 2016
المشاركات: 6
نشاط [ Shams-Dimashki ]
قوة السمعة:0
قديم 19-03-2016, 09:47 AM المشاركة 7   
افتراضي


تحية طيبة مجددا
المشكلة السابقة تم حلها بشكل نظري (على برنامج البروتوس) دون اي ملاحظة
ولكن عند تنفيذ الدارة عملية للمرة الأولى فالعملية تبدو طبيعية (portb=0)
ولكن بعد تشغيل مجموعة أزرار وإيقاف التغذية ثم تشغيلها فإن المعالج يقرأ (Portb=0xff) أي أن المخارج جميعا بحالة 1
مخطط الدارة

وهذا هو الكود
كود:
void main()
{
char x;
trisa.f0=1;
trisa.f1=1;
trisa.f2=1;
trisa.f3=1;
trisa.f4=1;
trisb=0;
x=eeprom_read(0);
portb=x;
while(1)
        {
                 if (porta.f0==0)
                    {
                         if (portb.f0 !=1 || portb.f1 !=1 || portb.f2 !=1 || portb.f3 !=1)
                            {delay_ms(200); portb++;}
                     }
                  if (porta.f1==0)
                     {
                          if (portb.f0 !=0 || portb.f1 !=0 || portb.f2 !=0 || portb.f3 !=0)
                              {delay_ms(200); portb--;}
                     }
                      // finish the first section

            if (porta.f2==0 && portb.f4==0 && portb.f5==0)
            {
               while (porta.f2==0)
                               {}
               portb.f4=1; portb.f5=0;
            }

            if (porta.f2==0 && portb.f5==0 && portb.f4==1)
            {
               while (porta.f2==0)
                               {}
               portb.f4=0; portb.f5=1;
            }

            if (porta.f2==0 && portb.f5==1 && portb.f4==0)
            {
               while (porta.f2==0)
                               {}
               portb.f4=1; portb.f5=1;
            }
            // finish up sours

            if (porta.f3==0 && portb.f4==1 && portb.f5==0)
            {
               while (porta.f3==0)
                               {}
               portb.f4=0; portb.f5=0;
            }

            if (porta.f3==0 && portb.f4==0 && portb.f5==1)
            {
               while (porta.f3==0)
                               {}
               portb.f4=1; portb.f5=0;
            }

            if (porta.f3==0 && portb.f4==1 && portb.f5==1)
            {
               while (porta.f3==0)
                               {}
               portb.f4=0; portb.f5=1;
            }
            // finish down button
            if (porta.f4==0)
            {
            portb.f6=~portb.f6;
            while (porta.f4==0)
                               {}
            }
            x=portb;
            eeprom_write(0,x);
        }
}
شاكرا لكم حسن اهتمامكم


ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 453
نشاط [ ahmed idris ]
قوة السمعة:0
قديم 19-03-2016, 04:59 PM المشاركة 8   
افتراضي


ملاحظة: توصيل المذبذب RC في الدائرة خاطئ
التوصيل الصحيح كما في الداتا شيت للمتحكم:
http://ww1.microchip.com/downloads/e...Doc/35007C.pdf
page 23
FIGURE 6-3: RC OSCILLATOR MODE

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب Shams-Dimashki ( أعجبته المشاركة )
إضافة رد

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

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

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


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

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