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

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

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,044
نشاط [ محمد ع يسى ]
قوة السمعة:81
قديم 23-06-2016, 01:15 AM المشاركة 1   
افتراضي ما هذه المشاكل!! لماذا لا تمشي الأمور كما يقول الكود!!!!! Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته.
المشكلة غريبة عجيبة... أكتب الكود بأنه يذهب يمين فإذا المحاكاة تذهب شمال!!
كتبت هذا الكود:




وهذه صورة المحاكاة:





المفروض كل ما أضغط على الزر أو أرفع الضغطة y تزيد بواحد.. حتى تصل 96 فتخرج من حلقة دو وايل وتصل للأمر الذي داخل المربع الأسود... ولا ننس أنها تعرض قيمة y على portd أثناء الضغط ورفع الضغط.
المشكلة أنه كلما وصلت y إلى القيمة 16ترجع للصفر مرة أخرى!! وهكذا لا تخرج أبدا من حلقة دو وايل!!!
جربت حذف التعليمات الأخرى اللي داخل المربع الأحمر والأزرق والفوشية والأخضر اشتغل الكود بلا مشاكل وتمكنت y من الوصول إلى96
الغريب أني لما تركت الأمر اللي داخل المربع الأحمر والفوشية ومسحت أمر تصفير التايمر زيرو عندما تصل y لقيمة معينة لا أتذكرها تحدث اضرابات وتغيرات في بورت c وبورت d حتى لو لم أضغط على زر تستمر هذه الاضطرابات والتغيرات (مع أن بورت c لم يدخل في الكود أصلا).

اعلانات

magdy_3
:: مهندس متميز ::
تاريخ التسجيل: Aug 2006
الدولة: Philippines
المشاركات: 343
نشاط [ magdy_3 ]
قوة السمعة:0
قديم 23-06-2016, 03:47 AM المشاركة 2   
افتراضي


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

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 23-06-2016, 05:51 AM المشاركة 3   
افتراضي


السلام عليكم ورحمة الله وبركاته.
المشكلة غريبة عجيبة... أكتب الكود بأنه يذهب يمين فإذا المحاكاة تذهب شمال!!
كتبت هذا الكود:




وهذه صورة المحاكاة:





المفروض كل ما أضغط على الزر أو أرفع الضغطة y تزيد بواحد.. حتى تصل 96 فتخرج من حلقة دو وايل وتصل للأمر الذي داخل المربع الأسود... ولا ننس أنها تعرض قيمة y على portd أثناء الضغط ورفع الضغط.
المشكلة أنه كلما وصلت y إلى القيمة 16ترجع للصفر مرة أخرى!! وهكذا لا تخرج أبدا من حلقة دو وايل!!!
جربت حذف التعليمات الأخرى اللي داخل المربع الأحمر والأزرق والفوشية والأخضر اشتغل الكود بلا مشاكل وتمكنت y من الوصول إلى96
الغريب أني لما تركت الأمر اللي داخل المربع الأحمر والفوشية ومسحت أمر تصفير التايمر زيرو عندما تصل y لقيمة معينة لا أتذكرها تحدث اضرابات وتغيرات في بورت c وبورت d حتى لو لم أضغط على زر تستمر هذه الاضطرابات والتغيرات (مع أن بورت c لم يدخل في الكود أصلا).
السلام عليكم ورحمه وبركاته
على مااعتقد يوجد خطأين
1- عند الضغط على سويج لابد من وجود زمن تاخيري حتى نتخلص من debouncing
2- خطأ واضح انك تركت مصفوفه مفتوحه عبر زياده قيمه y اي من محتمل ان تزيد y عن 96 وبتالي هذه زياده تسبب overflow هذه مشكله تغير من قيم ريجيسترات موجوده في البيك وبتالي من طبيعي ان ترى نتائج لم تضعها في كود

كود:
if(y>=95){x[94]=0;
y=0;}
اي ان قيم هذه مصفوفه من محتمل تخزن في اماكن بالذاكره تشغلها ريجيسترات حساسه


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 23-06-2016 الساعة 06:34 AM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً محمد ع يسى ( شكر العضو على هذه المشاركة )
اعجاب محمد ع يسى ( أعجبته المشاركة )

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,044
نشاط [ محمد ع يسى ]
قوة السمعة:81
قديم 23-06-2016, 12:37 PM المشاركة 4   
افتراضي


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

السلام عليكم ورحمه وبركاته
على مااعتقد يوجد خطأين
1- عند الضغط على سويج لابد من وجود زمن تاخيري حتى نتخلص من debouncing
2- خطأ واضح انك تركت مصفوفه مفتوحه عبر زياده قيمه y اي من محتمل ان تزيد y عن 96 وبتالي هذه زياده تسبب overflow هذه مشكله تغير من قيم ريجيسترات موجوده في البيك وبتالي من طبيعي ان ترى نتائج لم تضعها في كود

كود:
if(y>=95){x[94]=0;
y=0;}
اي ان قيم هذه مصفوفه من محتمل تخزن في اماكن بالذاكره تشغلها ريجيسترات حساسه
وعليك السلام ورحمة الله وبركاته.
أما عن الخطأ الثاني فأنا لست مقتنعا به لأني بالفعل كتبت أمر بالخروج من الحلقة عندما تصل y إلى 96 وهو الأمر اللي في المربع الأحمر في الصورة التي سأضعها.
أما الخطأ الأول فالمفروض لا يؤثر على المحاكاة وإنما يؤثر في العملي فقط.
وبالنسبة للخطأ الثاني المفروض تحدث هذه المشاكل عندما تصل قيمة y إلى 96 ولكن الذي يحدث أنها عندما تصل إلى 18 ثم أضغط على الزر تصبح بواحد!!
الصورة التالية لكود طبقته عملي فكانت النتيجة وهي أنه عندما تصل y إلى 18 ثم أضغط على الزر الضغطة التالية تصبح y بواحد... وجعلت زمن الارتداد ألف ملي ثانية كما في المربع الأزرق حتى أطمئن أثناء التجربة العملية.
أعيد وأقول أنني جربت هذا الكود عملي فكان يحدث ذلك كما يحدث نفس الشيء على المحاكاة لكن بشرط عدم وجود السطر:
Y=7;portd=y;
أما مع وجود هذا السطر في تجربة المحاكاة تحدث اضطرابات غريبة في بورت c و d مع أول ضغطة.
والآن إليكم الكود الذي طبقته عملي:




ومعذرة على تأخر الرد حيث كنت مشغولا بتجارب هذا الكود.


سأحاول كتابة الكود على الأندرويد.. قد يصلح:
كود:
Char x[96],y;
Void main()
{
Ansel=0;
Anselh=0;
C1on_bit=0;
C2on_bit=0;
Option_reg.f7=0;

Trisa=0;
Trisb=128;
Trisc=0;
Trisd=0;
Porta=0;
Portb=0;
Portc=0;
Portd=0;
Porta.f0=1;
Delay_ms(200);
Porta.f0=0;
Delay_ms(200);
Porta.f0=1;
Delay_ms(200);
Porta.f0=0;
Delay_ms(200);
Porta.f0=1;
Delay_ms(200);
Porta=2;
Y=7;
Portd=y;
Do
{
While(portb.f7==1){}
Delay_ms(1000);
X[y]=tmr0;
Tmr0=0;
Y++;
Portd=y;
While(portb.f7==0){}
Delay_ms(1000);
X[y]=tmr0;
Tmr0=0;
Y++;
Portd=y;
}while(y<95);
Porta=7;
}

لقد فعلتها وكتبته على الأندرويد... استغرق وقتا طويلا جدا.


التعديل الأخير تم بواسطة : محمد ع يسى بتاريخ 23-06-2016 الساعة 01:42 PM

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,044
نشاط [ محمد ع يسى ]
قوة السمعة:81
قديم 23-06-2016, 05:44 PM المشاركة 5   
افتراضي


أخيرا وصلت لسبب المشكلة.
قبل أن أخبركم بالحل.. لماذا جعلت مصفوفة x بـ96؟
لأن هذه أكبر قيمة سمح لها البرنامج.. حيث لو كان أكبر من ذلك تظهر رسالة تقول:
Not enough RAM
'x'
هل هذه شتيمة؟
هههههه
والآن حل المشاكل السابقة أن تكون قيمة مصفوفة x 80 كحد أقصى.
السؤال الأول لماذا تظهر الرسالة السابقة إن زاد العدد عن 96
السؤال الثاني لماذا تحدث المشاكل التي ذكرتها في المشاركة التي قبل هذه إن زاد العدد عن 80


magdy_3
:: مهندس متميز ::
تاريخ التسجيل: Aug 2006
الدولة: Philippines
المشاركات: 343
نشاط [ magdy_3 ]
قوة السمعة:0
قديم 23-06-2016, 07:30 PM المشاركة 6   
افتراضي


أخيرا وصلت لسبب المشكلة.
قبل أن أخبركم بالحل.. لماذا جعلت مصفوفة x بـ96؟
لأن هذه أكبر قيمة سمح لها البرنامج.. حيث لو كان أكبر من ذلك تظهر رسالة تقول:
Not enough RAM
'x'
هل هذه شتيمة؟
هههههه
والآن حل المشاكل السابقة أن تكون قيمة مصفوفة x 80 كحد أقصى.
السؤال الأول لماذا تظهر الرسالة السابقة إن زاد العدد عن 96
السؤال الثاني لماذا تحدث المشاكل التي ذكرتها في المشاركة التي قبل هذه إن زاد العدد عن 80
السلام عليكم
اخى العزيز هذا ما كنت اود ان اخبرك به بس بعد تجربة الكود
بنسبة لسؤال الاول لان اكبر عدد موجود فى البنك لعناصر متتالية هو 96 عنصر
اما لسوالك الثانية ده لان ليس دائما يبدا اول عنصر فى المصفوفة من اول عنصر فى الرام
ولتغلب على هذه المشكلة بنستخدم الامر
كود:
x[96] absolute 0x20;
وه لجعل عناصر المصفوفة تبدا من اول عنصر فى الجنرال رام

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 24-06-2016, 04:43 AM المشاركة 7   
افتراضي


السلام عليكم
اخي كريم مشكله الي عندك هي بسبب ترتيب ذاكره رام في داخل البيك

لاحظ هذه صوره لذاكره 16f887 تجدها متكونه من 4 بنوك وفي كل بنك يحتوي على ريجسترات خاصه ومواقع تخزين مشكله انك لما تتعامل مع مصفوفات وكان البنك لايغطي حجم مصفوفه فان البيك لايذهب مباشره الى البنك2 لغرض خزن في امكان فارغه مما يسبب خزن قيم مصفوفات في ريجسترات البيك بشكل اجباري وبتالي بتأكيد راح تنقلب حال البيك من حال الى حال اخر

انت حجزت 96 لحجم مصفوفه ولكن بالحقيقه هناك متغيرات اخرى مثلا موجوده في ديلي او اي مكتبه تستخدمها او متغيرات انت تستخدمها مثل x,y,..... هذه ايضا سوف تاخذ من البنك 0

ملاحظه // مشكله هذه تحدث فقط مع مصفوفات وتظهر بشكل واضح عندما تملي حجم البنك



اما في ذاكره البيك 18f45k22 تم ترتيب صفحات الذاكره بشكل تسلسلي هنا عندما ينتهي البنك0 مباشره يتحول الى البنك1 وهكذا لذا لن ترى هذه مشكله في البيك 18f45k22



التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 24-06-2016 الساعة 04:47 AM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً محمد ع يسى ( شكر العضو على هذه المشاركة )
اعجاب محمد ع يسى, magdy_3 ( أعجبته المشاركة )

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,044
نشاط [ محمد ع يسى ]
قوة السمعة:81
قديم 24-06-2016, 03:57 PM المشاركة 8   
افتراضي


بارك الله فيكم... معذرة على تأخر ردي... لا زالت التجارب جارية.

إضافة رد

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

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

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


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

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