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

   

hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 27-12-2014, 01:05 PM المشاركة 201   
x6 بوركت وطاب مسعاك



لاحظو الصوره التاليه التي توضح مقصدي


تلاحظون جيد اني شغلت سفن سكمنت رقم 1 تلاحظون 0 على Q0 للمتكامله الثانيه والتي رقمها U1 وبعد ذلك تلاحظون على متكامله الاولى والتي رمزها U8 حسب رسمه البروتيس حيث لاظهار رقم 1 يجب ارسال هذه بيانات 00000110

سؤال لماذا ارسلت بيانات ENABLE اولا وبعدين ارسلت داتا
لان حسب تصميم متكامله الاولى موصله للبيانات ومن ثم تتصل متكامله الثانيه بأولى وهي موصوله enable وقاعده تقول ارسل البيانات من اخير الى اول لان أخير يظهر اولا
لذا راح ارسل بيانات enable وبعدها داتا وبتالي enable ارسلت اولا وبتالي ستذهب الى اخر متكامله ومن ثم تظهر داتا على اولى اذن بيانات ترسل بشكل معكوس بالنسبه لترتيب متكاملات

الان ضمن متكامله نفسها نلاحظ ان بيانات عندي مثلا رقم 1 والذي قيمته 6 بالنسبه للسفن سكمن كمن كاثود اي 00000110 هذه بيانات اذا ارسلتها مثل ماهي راح تظهر هكذا 00110000 انظرو الصوره


اتمنى وصلت لكم الفكره
طبعا كما تعلمون اذا قمت بعمليه تشفيت داخل متكامله لابد من اظهار بيانات على اطراف متكامله وبتالي تحتاج الى أعطاء نبضه الى طرف store لكل متكامله
كود:
ST1=1; ST1=0;
===============================
ماشرحته هو كيف نشغل قطعه واحده من سفن سكمنت اذن اذا اريد أشغل الثانيه ماذا افعل بنفس الطريقه
أطفئ سفن سكمنت بشكل كامل بعدها يوجد متغير أسمه colomn هذا يمثل رقم سفن سكمنت والذي يتحكم في enable فقط لاني طريقه الوحيده للتحكم بأي سفن سكمنت فقط عن طريق enable اما داتا فهي تظهر على كل
وبعدها قلت له اذا تجاوز عدد سفن سكمنت رقم 6 ارجع من جديد لغرض تشغيل الاولى وهكذا اي
كود:
if(colomn==6)colomn=0;
وبعده نعيد تفعيل الانتربت من جديد
كود:
GIE_bit=1;
السلام عليكم
اخي حسن قمت بالتغيير الذي اشرت علي به وهو
كود:
for(x=0;x<16;x++){ds1=0;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
الا انه تم إطفاء الشاشات تماما
وحين رجعت للقيمة الأولي وهي
كود:
for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
تضئ الشاشات وتكتب 888888
اريد شرح هذه الأسطر وفائدتهم في البرنامج
كود:
#define Check_bit(var,pos)  var&(1<<pos)
#define on    1
#define off   0
اين اجد تعرف هذه الجملة وما وظائفها ...
كود:
 GIE_bit=0;
اشكرك اخي الحبيب علي مجهودك معي بارك الله لك

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 27-12-2014, 08:22 PM المشاركة 202   
افتراضي


السلام عليكم
اخي حسن قمت بالتغيير الذي اشرت علي به وهو
كود:
for(x=0;x<16;x++){ds1=0;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
الا انه تم إطفاء الشاشات تماما
وحين رجعت للقيمة الأولي وهي
كود:
for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
تضئ الشاشات وتكتب 888888
اريد شرح هذه الأسطر وفائدتهم في البرنامج
كود:
#define Check_bit(var,pos)  var&(1<<pos)
#define on    1
#define off   0
اين اجد تعرف هذه الجملة وما وظائفها ...
كود:
 GIE_bit=0;
اشكرك اخي الحبيب علي مجهودك معي بارك الله لك
السلام عليكم
بالنسبه للجمله
كود:
GIE_bit=0;
هي في كود التالي
كود:
void display_7seg()
{
  char y;
  GIE_bit=0;
 for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
 
 for(x=0;x<8;x++) // ???? ????? ????? ???? ???? ??? ???? ?? ????
                         {
                          if(Check_bit(segbit[7-colomn],7-x))ds1=1;
                          else DS1=0;
                          SH1=0;SH1=1;
                         }
                         
 for(x=0;x<8;x++) //
               {
                 if(Check_bit(segment[num[colomn]],7-x))DS1=1;
                 else DS1=0;
                 SH1=0;SH1=1;
               }
  ST1=1; ST1=0;
  colomn++;
  if(colomn==6)colomn=0;
  GIE_bit=1;
}
مهمتها أيقاف تفعيل الانتربت لان GIE_bit هو بت في ريجيستر intcon مهمته تفعيل او عدم تفعيل الانتربت
وانا جعلت
كود:
GIE_bit=0;
لكي يتم تنفيذ اوامر موجوده في داله display_7seg()
==========================================
اما
كود:
#define Check_bit(var,pos)  var&(1<<pos)
فهي مايكرو جاهزه مهمتها انها تعمل فحص للبت فهل هو 1 ام 0

كيف تعمل ؟
حيث تم تعريف (Check_bit(var,pos بـــ (var&(1<<pos اي ان مايكرو عندما يشوف (Check_bit(var,pos فأنه سيعوض مكانها (var&(1<<pos وهذه خاصيه #define
الان var تعني متغير او بورت يعني حجمه 1 بايت اما pos يعني رقم البت المراد فحصه
مثلا اريد شوف بت رقم 4 من بورت B هل هو يساوي 1 ام 0
الان تصبح العمليه هكذا (portb &(1<<4
يعني نشفت 1 اربع مرات بأتجاه اليسار
(portb &(00001000 الان كما ترى راح يتم عمل and
بين 00001000 مع بورت B وبتالي نتيجه تعتمد على حاله بت رقم 4 في بورت B فأذا كان =1 فأن نتيجه (portb &(00001000 لا تساوي 0 يعني هنا راح
= 00001000

اما أذا كان بت رقم 4 من بورت B يساوي 0 فأن النتيجه (portb &(00001000 تساوي 0

أتمنى وصلت فكره
يعني هذه الداله تسمى مايكرو وهي جاهزه
وهناك مايكرو أخرى مثل عمل set لاي بت ا
كود:
#define set_bit(var,pos)  (var|=(1<<pos) )
واخرى لعمل تصفير لاي بت
كود:
#define clear_bit(var,pos) ( var&=~(1<<pos) )
وأخرى لعمل toggle لاي بت
كود:
#define toggle_bit(var,pos)  (var^=(1<<pos) )
طبعا هذه تعريفات لقد تعلمناها من أستاذ الفاضل أحمد سمير فايد جزاءه الله خير

تحياتي

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 27-12-2014, 09:08 PM المشاركة 203   
yel


السلام عليكم
اخي حسن هادي
قمت بتجميع مشروع الساعة و بالرغم ان الهاردوير سليم الا ان الساعة لاتعمل تكتب 88888888 فقط ولا تزيد
رجو من الله ان اجد حل
السلام عليكم
أخي حمدالله لاحظت أمرا مهما وهو

السفن سكمنت تعمل في البروتيس ولكن في الحقيقه توجد مشكله دعنا ننظر الى كيف تعمل سفن سكمنت
مفروض طرف enable يعمل اذا كان جهد =0 ويعمل ليد داخل سفن سكمنت اذا كان جهد =1 (( logic 1 )) في بروتيس لايوجد اي ترانزستور لذا مسأله طبيعيه ولكن ماذا يحدث عند وضع ترانزستور
ترانستور لكي يعمل يحتاج الى جهد hi يعني logic 1

اظن وفقك دائرتك بالنسبه لدائره 7seg وأقصد a,b,c,d,e,f,g, هذه الاطراف تحتاج الى جهد موجب ولان ترانزستور مربوط على توالي اي مربوط بين طرف المصدر وبين أحد هذه الاطراف أذن لايوجد تغير لان ترانستور سوف يعمل عندما يتم تغذيته بالجهد اي هنا لاتوجد مشكله

اما الاطراف enable هذه تعمل لما يكون جهد 0 وفي رسم ترانستور مربوط ايضا على توالي اي بين طرف enable وبين GND هنا توجد مشكله وهي كود يرسل 0 بينما ترانستور يريد جهد موجب لكي يربط enable بـــ GND أظن هنا تعمل كدائره نفي
لذا أخي علينا تعديل في كود enable لكي أجعله يرسل 1 بدلا من 0 وترانستور سيعمل على نفي وبتالي أن شالله ستعمل معاك سفن سكمنت

جرب هذا التعديل على void display_7seg
كود:
void display_7seg()
{
  char y;
 for(x=0;x<16;x++){ds1=0;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
 
 for(x=0;x<8;x++) //
                {
                 if(Check_bit(segbit[7-colomn],7-x))ds1=0;
                 else DS1=1;
                 SH1=0;SH1=1;
                }

 for(x=0;x<8;x++) //
               {
                 if(Check_bit(segment[num[colomn]],7-x))DS1=1;
                 else DS1=0;
                 SH1=0;SH1=1;
               }
  ST1=1; ST1=0;
  colomn++;
  if(colomn==6)colomn=0;
}
================
واذا يوجد رمشه في سفن سكمنت جرب هذا
كود:
void display_7seg()
{
  char y;
  GIE_bit=0;
for(x=0;x<16;x++){ds1=0;sh1=1;sh1=0;}// OFF all 7 seg
 ST1=1;st1=0;
 
 for(x=0;x<8;x++) //
                {
                 if(Check_bit(segbit[7-colomn],7-x))ds1=0;
                 else DS1=1;
                 SH1=0;SH1=1;
                }

 for(x=0;x<8;x++) //
               {
                 if(Check_bit(segment[num[colomn]],7-x))DS1=1;
                 else DS1=0;
                 SH1=0;SH1=1;
               }
  ST1=1; ST1=0;
  colomn++;
  if(colomn==6)colomn=0;
 GIE_bit=1;
}


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 27-12-2014 الساعة 09:21 PM

hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 30-12-2014, 04:07 PM المشاركة 204   
x6 بوركت وطاب مسعاك


عليكم السلام ورحمة الله وبركاته
قمت بالتجربة ولكن النتيجة كما هي تكتب 888888
قمت بزيادة سطر قبل السطر الأخير في الكود

كود:
delay_ms(1000);
فكانت النتيجة انه يكتب 111111 ثم 22222222 ثم 3333333 حتي يصل الي 666666 ثم يعيد الكره من جديد مع الرقم 1
مرفق الملفات بعد التعديل ومعها مقطع فيديو يبين الوضع المقصود
اضغط علي الرابط لتحميل الملفات


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 30-12-2014, 04:41 PM المشاركة 205   
افتراضي


عليكم السلام ورحمة الله وبركاته
قمت بالتجربة ولكن النتيجة كما هي تكتب 888888
قمت بزيادة سطر قبل السطر الأخير في الكود

كود:
delay_ms(1000);
فكانت النتيجة انه يكتب 111111 ثم 22222222 ثم 3333333 حتي يصل الي 666666 ثم يعيد الكره من جديد مع الرقم 1
مرفق الملفات بعد التعديل ومعها مقطع فيديو يبين الوضع المقصود
اضغط علي الرابط لتحميل الملفات
السلام عليكم
سأدرس مشكله مره أخرى وسأعطيك النتيجه هذا اليوم ان شالله
تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 30-12-2014, 05:02 PM المشاركة 206   
افتراضي


عليكم السلام ورحمة الله وبركاته
قمت بالتجربة ولكن النتيجة كما هي تكتب 888888
قمت بزيادة سطر قبل السطر الأخير في الكود

كود:
delay_ms(1000);
فكانت النتيجة انه يكتب 111111 ثم 22222222 ثم 3333333 حتي يصل الي 666666 ثم يعيد الكره من جديد مع الرقم 1
مرفق الملفات بعد التعديل ومعها مقطع فيديو يبين الوضع المقصود
اضغط علي الرابط لتحميل الملفات
السلام عليكم
أخي حمدالله يوجد خطأ في كود مصفوفه سفن سكمنت كمن كاثود
وهذه هي صحيحه
كود:
const char segment[]={63,6,91,79,102,109,125,7,127,111}; //for CC
أخي حمدالله حسب رسم اريد توضيح لك مايلي
سفن سكمنت يعني ليدات لاتوثر وجود ترانزستور ام عدم وجوده طبعا من ناحيه الكود لذا لايوجد دائره نفي كما انت رسمت ذلك في بروتيس

اما enable رسمك صحيح

او يمكنك محاكاه كتالي

طبعا انا يمكنني ان أغير مصفوفه
كود:
const char segbit[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
ولكن لغرض محاكاه فقط لانني بأصل غيرتها في
كود:
for(x=0;x<8;x++) //
                {
                 if(Check_bit(segbit[7-colomn],7-x))ds1=0;
                 else DS1=1;
                 SH1=0;SH1=1;
                }
تلاحظ لون أحمر هنا حصل نفي انت في محاكاه يمكنك عكسها (( تذكر هذا في محاكاه اما في العملي يجب البقاء الكود على هذا وضع )) وهنا لايوجد داعي للنفي في رسم
تحياتي


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 30-12-2014 الساعة 05:05 PM

hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 30-12-2014, 06:05 PM المشاركة 207   
x6 بوركت وطاب مسعاك


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


اظن المشكلة هي حساب وقت العرض لشاشات السفن سيجمنت


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 30-12-2014, 06:16 PM المشاركة 208   
افتراضي


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


اظن المشكلة هي حساب وقت العرض لشاشات السفن سيجمنت
السلام عليكم
اوكي ممكن تعطيني الرسم الحقيقي لكي أعطيك الكود
لان ظهور الارقام 111111 بنفس الوقت يعني هناك خطأ بالكود
تحياتي



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