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

   

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 16-04-2016, 11:16 PM المشاركة 9   
افتراضي



استخدمت العارضات السباعية بدلا من LCD و واجهتني مشكلة تحويل البيانات .
فعندما يصل عدد الثواني الى 9 بعدها يقفز مباشرة الى 16 و كان البيانات ترسل الى البك بصيغة عشرية و البك يحولها الى سداسي عشري طبعا هذا بعد حذف تعليمة التحويل التي وضحتها في الكود ... لانه عند استخدمها فلا يظهرشي على العارضات و كانها مصممه لشاشة LCD .
السؤال هو اذا كانت الساعة ترسل البيانات بصيغة الهيكس فلماذا تحتاج الى تحويل مع ان البك و المايكروسي يتعاملون مع هذا النظام بشكل طبيعي ..

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 16-04-2016, 11:34 PM المشاركة 10   
افتراضي


لو تلاحظ هنا كيف ان العدد يقفز من 9 الى 16 مباشرة ...


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

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 17-04-2016, 12:23 AM المشاركة 11   
افتراضي


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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-04-2016, 12:40 AM المشاركة 12   
افتراضي


استخدمت العارضات السباعية بدلا من LCD و واجهتني مشكلة تحويل البيانات .
فعندما يصل عدد الثواني الى 9 بعدها يقفز مباشرة الى 16 و كان البيانات ترسل الى البك بصيغة عشرية و البك يحولها الى سداسي عشري طبعا هذا بعد حذف تعليمة التحويل التي وضحتها في الكود ... لانه عند استخدمها فلا يظهرشي على العارضات و كانها مصممه لشاشة LCD .
السؤال هو اذا كانت الساعة ترسل البيانات بصيغة الهيكس فلماذا تحتاج الى تحويل مع ان البك و المايكروسي يتعاملون مع هذا النظام بشكل طبيعي ..
أخى الكريم شكرا جزيلا لك

السؤال هو اذا كانت الساعة ترسل البيانات بصيغة الهيكس فلماذا تحتاج الى تحويل مع ان البك و المايكروسي يتعاملون مع هذا النظام بشكل طبيعي
من الذى قال ذلك برجاء اقتباس الجملة المعبرة عن ذلك فيما ذكرته .ربما يكون الشكل هو الذى يوحى بذلك فقط لكن المضمون مختلف تماما فبعد الترجمة كل شىء يصبح فى شكل آحاد وأصفار . ومع ذلك :
ربما لم استطيع أن أوصل المعلومات بشكل صحيح . الساعة ترسل وتستقبل فقط البيانات فى شكل ثنائى مكود عشرى BCD وربما هنا يمكن سوء الفهم

على سبيل المثال الميكروكونترولر فى البداية يرسل عنوان تعريف الجهاز بالصيغة
0xd0 وقد يرسله بالصيغة 0b11010000 وفى كلتا الحالتين فسوف تتعامل معها الأجهزة فى شكل أحاد وأصفار وسوف يستقبل ds1307 كل بايت على أنه مكون من 8 بتات كل 4 بت (تسمى نبل) تمثل رقم ثنائى مكود عشرى فالأربعة الأولى (الأدنى) تمثل رقم الآحاد وهو هنا الصفر 0000=0 بصيغة bcd والأربعة بتات الأعلى وهى 1101=d بصيغة bcd أى أنه يستقبل d يقوم بالتعرف عليها بوصفها 1101

ربما هذا المثال لا يوضح الفكرة بشكل كامل ، ولذلك سوف نذكر مثال آخر :
كيف يرسل الميكروكونترولر الرقم 13 إلى ds1307 لضبط الدقائق على سبيل المثال:
الميكروكونترولر يرسل ذلك بالصيغة 0b00010011 أو الصيغة 0x13 لكن ds1307 مصمم على أن يستقبلها ويترجمها إلى عدد مكون من رقمين رقم الآحاد وهو 0011=3 ورقم العشرات وهو 0001=1 ليكون العدد هو 13 وهذا هو مفهوم الثنائى المكود عشرى لاحظ الثنائى المكود عشرى . فناك وسطاء بين الميكروكونترولر وجهاز DS1307 مثل المترجم ميكروسى ودوالة وكذلك التصميم الداخلى للساعة .مراجعة الداتا شيت قد تعطى الفيصل فى الموضوع .

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


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 17-04-2016 الساعة 03:08 AM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 17-04-2016, 03:20 AM المشاركة 13   
افتراضي


لناخذ مثلا هذا المثال :
كود:
seconds=((seconds & 0xF0) >> 4)*10 + (seconds & 0x0F);
عندما رجعت الى هذه المعادلة سارت العملية بشكل طبيعي ...
فهل هي تحول الرقم من نظام السادس عشر الى العشري ؟ ولماذا يحتاجها المعالج ؟
مع جزيل الشكر


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-04-2016, 11:48 AM المشاركة 14   
افتراضي


لناخذ مثلا هذا المثال :
كود:
seconds=((seconds & 0xF0) >> 4)*10 + (seconds & 0x0F);
عندما رجعت الى هذه المعادلة سارت العملية بشكل طبيعي ...
فهل هي تحول الرقم من نظام السادس عشر الى العشري ؟ ولماذا يحتاجها المعالج ؟
مع جزيل الشكر
أخى الكريم شكرا جزيلا لك
شكرا لك على المتابعة وإثراء الموضوع .
ما ذكرته خطوة متقدمة ،لقد سبقت الأحداث ، لم نصل بعد إلى الخطوة التى نكون فيها مجبرين على تحويل ما تحصلنا علية من DS1307 بالشكل BCD إلى شكل آخر حتى يتمكن مترجم الميكروسى بالمعالجة ، بالجمع على سبيل المثال ، وذلك عند إنشاء مشروع يحتاج للضبط وتغيير البيانات وذلك خطوة تلو الخطوة .
مع تمنياتى بالتوفيق


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-04-2016, 05:45 PM المشاركة 15   
افتراضي


تحويل عدد من رقمين من BCD إلى عشرى والعكس :

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

1- دالة تحويل عدد BCD مكون من رقمين 2-digit BCD إلى عدد عشرى Decimal:


كود:
unsigned short myBcd2Dec(unsigned short bcd){
return ((bcd >> 4)*10+(bcd & 0x0F));
}
Example: myBcd2Dec(01000101) = 45

الشرح :
• العدد BCD المكون من رقمين ، كل رقم يمثله 4-bits ويكون الإجمالى 8-bits .
• دالة التحويل مكونة من جزءين جزء العشرات وجزء الآحاد يتم جمعهما معا . كل جزء خاص بتحويل 4-bits (نبل) .
• النبل العلوى يمثل رقم العشرات ولتحويله نتخلص من النبل السفلى بزحزحة العدد الكلى أربعة مواقع للحصول على العدد العشرى ثم نضربه فى 10 للحصول على قيمة العشرات (bcd >> 4)*10 .
• النبل السفلى يمثل رقم الآحاد ولتحويله نتخلص من النبل العلوى بإجراء عملية AND بالعامل 7 بين العدد الكلى والعدد 0x0F (تسمى عملية تغطية mask ) لنحصل على النبل السفلى (المقابل للآحاد) دون أى تغيير وحيث أنه الآحاد يتم الضرب فى واحد (bcd & 0x0F)
• فى النهاية تكون النتيجة ((bcd >> 4)*10+(bcd & 0x0F))
ففى المثال : 01000101 نتيجة الجزء الأول تكون 00000100 وهى القيمة (4) تضرب فى 10 فتكون 40 . فى حين أن نتيجة الجزء الثانى 00000101 أى القيمة (5) ويكون المجموع (45) . سهلة 1 أليست كذلك .

2- دالة تحويل عدد عشرى مكون من رقمين 2-digit Decimal إلى عدد BCD :


كود:
unsigned short myDec2Bcd(unsigned short dec){
return (((dec/10)<<4)(dec%10));
}
Example: myDec2Bcd(45) = 01000101

الشرح :
• نحصل على رقم الخانة العلوية بقسمة بايت العدد العشرى على 10 ونزحزح النتيجة 4 مواقع جهة اليمين (dec/10)<<4) ، ونحصل على رقم الخانة السفليى بإيجاد باقى خارج قسمة العدد العشرى على عشرة (dec%10) ، ثم نضع الجزئين بجوار بعضهما بالترتيب المناسب (dec/10)<<4)(dec%10)
ملحوظة :
تستخدم الأقواس ( ) فى تجميع التعبيرات ، وفصل تعبيرات الشرط ، وفى استدعاء الدوال، وفى احتواء بارامترات الدوال .


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 17-04-2016, 10:55 PM المشاركة 16   
افتراضي


استاذي العزيز من فضلك في هذا المقطع البرمجي

كود:
I2C1_Init(100000);  		//DS1307 I2C is running at 100KHz
///////////////////////////
I2C1_Start();       		// begin I2C communications
I2C1_Wr(0xD0);      		// addresses the chip
I2C1_Wr( 0x01 );    		// access register address for minutes check table 2 above.
I2C1_Wr(0b00010011 );   	// write value into minutes register
I2C1_Stop();
///////////////////
و تحديدا الجملتين قبل الاخيره كيف يميز المعالج ان الجملة الاولى هي لتحديد العنوان و الجملة الثانية لادخال قيمة الدقائق ؟
وهل نحتاج الى استدعاء العنوان كلما اردنا ان ندخل بيانات اليه ؟



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