|
ما المشكلة مادام يعمل بشكل سليم و يكمل من آخر رقم؟ و ماذا تقصد بلم تفلح العملية؟
إن شاء الله سأرسل شرحا لعملية التحويل, و أرجو أن تخبرني ما هي المشكلة بالضبط
|
اخي كريم سلام عليكم
مشكله اريد ضبط القراءه وكتابه يعني التاكد من صحه عمل مشروع على بروتيس
لان ياخي احيانا عندي مشروع كبير ويحتاج لوحه مفاتيح مثلا او حسسات اوغيرها لااملكها في واقع العملي فاكيد رؤيه مشروع يعمل على بروتيس شي رائع واكيد الملاحظات التي يعطيها احيانا بروتيس لها سبب علمي لربما اذا تجاهلتها ستؤثر على استقراريه الدائره واحيانا قد تؤثر او لا لايمكن ان شعر بذلك فعمل مشروع بدون اخطاء في بروتيس يقيك هذا احتمال هو نعم لايشبه حقيقه ولكن اعطاء خطاء ربما لها تأثير سلبي
فكل مااريده هول حل مشكله رساله التي تظهر في بروتيس والعجيب في الامر انه اذا استخدم البك من عائله 16f لاتظهر رسائل الخطا ماعدا البك من عائله 18f
ولكن جمعيهم لاتعمل ايبروم في بروتيس
لاني لاحظت شغله بواقع عملي اني اذا عندي رقم حجمه يحتاج الى 2 byte هنا
قمت بهذا بكتابه طريقه خزن الارقام بهذه طريق لاحظ الكود كاملا
كود:
char y=0, old=0,kk=0,old1=0,old2=0;
int x=0;
// char segment[]={192,249,164,176,153,146,130,248,128,144};
char segment[]={63,6,91,79,102,109,125,7,127,111};
void show_number();
void main()
{
ANSELA=0;
ANSELD=0;
trisd=0;
trisa=0;
porta=0;
portd=0;
if( eeprom_read(2)!=0xff ||eeprom_read(3)!=0xff ) { old=eeprom_read(3) *100+ EEPROM_Read(2);
delay_ms(20);
}
while(1)
{ //
for( x=old ;x<=999;x++)
{
show_number();
EEPROM_Write(3,x/100);
EEPROM_Write(2,x%100);
}
old=0;
}
}
void show_number()
{
for( y=0; y<100;y++)
{
porta.f0=0; porta.f1=0;porta.f2=0; porta.f3=1;
portd=segment[x/1000];
delay_ms(1);
portd=0;
porta.f0=0; porta.f1=0;porta.f2=1; porta.f3=0;
portd=segment[x%1000/100];
delay_ms(1);
portd=0;
porta.f0=0; porta.f1=1;porta.f2=0; porta.f3=0;
portd=segment[x%1000%100/10];
delay_ms(1);
portd=0;
porta.f0=1; porta.f1=0;porta.f2=0; porta.f3=0;
portd=segment[x%1000%100%10];
delay_ms(1);
portd=0;
}
}
طبعا في بروتيس اصلا لايخزن الارقام فقط يعطي رسائل خطأ
لاحظت في واقع عملي انه اذا اطفئ جهاز وقم بشغيله احيانا مايبدا من اخر قم
مثلا كان عداد =400 واطفاته وعندما شغله بدأ من رقم 150
وكان عدد 240 اطفاته وشغلته بدء الدد من 240
وكان عدد 470 بدء العدد من 240
واحيانا من الصفر يعني ماتوجد اي استقراريه
===================================
فكرت بطريق اخرى لخزن الارقام وكان هذا هو كود جديد
كود:
char y=0, old=0,kk=0,old1=0,old2=0;
int x=0;
// char segment[]={192,249,164,176,153,146,130,248,128,144};
char segment[]={63,6,91,79,102,109,125,7,127,111};
void show_number();
void main()
{
ANSELA=0;
ANSELD=0;
trisd=0;
trisa=0;
porta=0;
portd=0;
if( eeprom_read(2)!=0xff ||eeprom_read(3)!=0xff ) { old1=eeprom_read(3) ;
old2= EEPROM_Read(2);
delay_ms(20);
}
while(1)
{ //
for( kk=old1 ;kk<=10;kk++)
{
EEPROM_Write(3,kk);
for( x=old2 ;x<=99;x++)
{
show_number();
EEPROM_Write(2,x);
}
old2=0;
}
old1=0;
}
}
void show_number()
{
for( y=0; y<100;y++)
{
porta.f0=0; porta.f1=0;porta.f2=0; porta.f3=1;
portd=segment[kk/10];
delay_ms(1);
portd=0;
porta.f0=0; porta.f1=0;porta.f2=1; porta.f3=0;
portd=segment[kk%10];
delay_ms(1);
portd=0;
porta.f0=0; porta.f1=1;porta.f2=0; porta.f3=0;
portd=segment[x/10];
delay_ms(1);
portd=0;
porta.f0=1; porta.f1=0;porta.f2=0; porta.f3=0;
portd=segment[x%10];
delay_ms(1);
portd=0;
}
}
في هذه مره حصلت استقراريه افضل من كود سابق
اطفاته عند عدد 265 وشغلته وبدا من نفس العدد
اطفاته عند عدد 400 وشغلته وبدا من نفس العدد
اطفاته عند عدد 500 وشغلته وبدا من نفس العدد
برايك ماهو الخطأ في كود الاول جعل ايبروم غير مستقره يعني اقصد عمل البك ليس سليم
وشكرا جزيلا اخي كريم حقيقه ان اتعبتك وياي زادك الله علما واتمنى لك ولجميع الاخوه التوفيق بحق شهره الفضيل