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

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

الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 19-06-2013, 08:16 PM المشاركة 1   
افتراضي مشروع لقياس درجة الحرارة ,وقراءة الوقت والتاريخ وحفظ البيانات على ذاكرة sd card Twitter FaceBook Google+



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


هذا المشروع عبارة عن مقياس لدرجة الحرارة وساعة رقمية لعرض الوقت والتاريخ.

خطوات عمل البرنامج :

يتم عرض درجة الحرارة بالفهرنايت والسلسيوز عن طريق حساس الحرارة LM35 , وهناك زرين الاول لزيادة رقم المرجع ولاخر لتنقيص رقم المرجع , رقم المرجع هو الرقم اللي بموجبه يتم تشغييل المروحة او الدفاية , يتم حفظ رقم المرجع في ذاكرة من نوع EEPROM موصوله بالمتحكم عن طريق بروتوكول I2C , عشان اذا طفئ المتحكم يكون محفوظ رقم المرجع.

يتم استحصال الوقت والتاريخ من دارة التوقيت الخارجية الموصلة بالمتحكم عن طريق بروتوكول I2C وعرضها على الشاشة , في كل ثانية يتم اخراج نبضه من دارة التوقيت الى المتحكم ممايسبب مقاطعة ويتم بعدها حساب الوقت والتاريخ.

يتم حفظ درجة الحرارة والوقت والتاريخ في الذاكرة من نوع SD CARD داخل ملف اذا تم الضغط على زر .

يتم حذف ملف واحد في كل مرة يتم الضغط على الزر.

وزر اخر يقوم بمسح جميع الملفات من على الذاكرة.

في كل عملية حفظ يتم تخزين رقم الملف في ذاكرة من نوع EEPROM عشان لما المتحكم يكون طافي وتم تشغيله وقام المستخدم با الضغط على زر الحفظ يقوم المتحكم بحفظ الملف الجديد بعد الملف اللي قبله بدون حصول لخبطه في ترتيب الملفات, والذاكرة الخارجية EEPROM موصوله بالمتحكم عن طريق بروتوكول I2C.


طبعا البرنامج يعمل بشكل كامل في الزمن الحقيقي Real Time اي لم استخدم تاخير زمني بل تم الاعتماد على المؤقتات في ذلك , حتى الازرار تعمل على المقاطعات الخارجية.


شرح الدوال: البرنامج طويل جدا راح احاول شرحه بقدر المستطاع

() void _init :

فيها تعريفات التشابهي الرقمي ADC , شاشة الجرافيك, ازرار المقاطعات الخارجية, والتايمر0 , اقطاب المروحة والدفاية .

()void _initMemory:

فيها تعريفات ذاكرة التخزيين من نوع SD CARD للحفظ عن طريق نظام الملفات , والذاكرة موصوله بالمتحكم عن طريق بروتوكول
SPI.


void interrupt:

برنامج خدمة المقاطعة يقوم بخدمة الماقطعة عند الطفحان , وايضا عن حصول مقاطعات خارجية,

رح يكون فيه مقاطعة في كل 10ملي ثانية للتايمر وزيادة متغيرات بواحد في كل 10ملي ثانية.
ايضا هناك مقاطعات خارجية وهي عند دخول نبضه التوقيت من دارة التوقيت الى B2, الضغط على احد الازرار ,B4,B5,B6,B7


void I2C_eeprom_write:

تقوم بالكتابة على الذاكرة الخارجية EEPROM عن طريق بروتوكول I2C , نلاحظ انا القطب E0 مستخدم لحماية الذاكرة من الكتابات العشوائية اي انه لن يتم الكتابة على الذاكرة اذا لم يفعل هذا القطب,

طبعا الدالة تستقبل متغيرين الاول هو العنوان اللي نريد نكتب فيه البيانات, والثاني هو القيمة المراد حفظها.


unsigned char I2C_eeprom_read:

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


void Create_New_File:

تقوم بإنشاء ملف جديد بالاسم File وبعدها رقم يتم زيادته بواحد لترتيب الملفات رقميا من 1 الى 254 , بعدها يتم كتابة صيغة الملف بعد الاسم اللي هو TXT. ليكون الاسم النهائي للملف مثال لأول ملف File001.TXT , بعدها يتم استدعاء دالة انشاء الملفات
لإنشاء الملف بالاسم اللي كتبناه, بعده يتم استدعاء دالة لتقوم بعمل تهيئة للملف الجديد اي حذف اي بيانات ان وجدت , اخيرا يتم تصفير المتغيرات وارسال رقم الملف في ذاكرة الخارجية.


void Write_To_File :

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


void _delete_file :

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

void _delete_all_files :

تقوم بحذف جميع الملفات اي عمل فورمات , طبعا يتم فعل ذلك في حلقة تقوم بالتكرار على عدد الملفات في الذاكرة .


void get_temp :

تقوم بقراءة درجة الحرارة في كل ثانية , اي اذا تم زيادة المتغير 1000ms_1_ مئة مرة في كل 10مللي ثانية

يعني 10ملي ثانية * 100 = 1000 ملي ثانية يعني واحد ثانية, اذا تحقق ذلك اقراء درجة الحرارة واعرضها على الشاشة , ويتم ايضا التحقق من رقم المرجع كما تم شرحه,

طبعا tmp1 = tempC / 100 تقوم باعطاء اول ثلاثة ارقام لدرجة الحرارة بالسلسيوز طبعا الارقم الثلاثة من اليسار الى اليمين
مثال اذا الحرارة 150.22 tmp1 سيأخذ فقط 150 ويترك الارقام بعد الفاصلة لان في ذاكرة الخارجية التي املكها لا نستطيع كتابة ارقام اكبر من 255, ولا ننسى بانه سيتم حجز العناوين من 0 الى 254 لارقام الملفات اي يجب علينا ان نوفر اماكن الحفظ,
في النهاية يجب تصفير عداد الثانية.

void _i2c_write_RTC :

تقوم بالكتابة على دارة المؤقت الخارجية , تستقبل متغيرين الاول العنوان والثاني للقيمة.

unsigned short _i2c_read_RTC :

تقوم بقراءة محتويات دارة التوقيت الخارجية وهي طبعا راح تكون الوقت والتاريخ.


unsigned char BCD2UpperCh & unsigned char BCD2LowerCh:

تقوم بتحويل الوقت والتاريخ من صغير BCD الى Decimal لان البيانات القادمة من دارة التوقيت تكون بصيغة BCD.


set_time_date:

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


void get_time_date:

تقوم بقراءة الوقت والتاريخ من على دارة التوقيت الخارجية وعرضها على الشاشة طبعا.


هذه هي الدوال الفرعية في البرنامج والان سيتم تلخيص محتوى الدالة الرئيسية:

راح يتم فيها استدعاء دالة التعريفات اللي تم شرحه,

وفي الحلقة الدائمة للبرنامج انا مقسم العمليات الى اجزاء بخطوط طويلة تفصل كل عملية عن الثانية:

القسم الأول:
التحقق من ازرار رقم المرجع للزيادة او التنقيص اخيرا استدعاء دالة درجة الحرارة .

القسم الثاني:
اذا حصلت مقاطعة وصول نبضة من دارة التوقيت الخارجية يتم استدعاء دالة الوقت والتاريخ وبعدها يتم تصفير علم المقاطعة.

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


القسم الرابع:
اذا تم الضغط على زر حذف جميع الملفات , يتم الحصول على عدد الملفات التي تم حفظها مسبقا , بعدها يتم التحقق من ان هناك توجد ملفات , اذا وجدت قم باستدعاء دالة حذف جميع الملفات, اما اذا لم توجد فقم بعرض رسلة تنبيه بان الذاكرة فاضية.


القسم الخامس:
اذا تم الضغط على زر حذف ملف واحد, اولا اذا فيه ملفات في الذاكرة يتم حذف ملف واحد , اذا لم توجد ملفات يقوم بعرض رسالة تنبيه بان الذاكرة فاضية.



<<<<<<<<< الحمدلله تم شرح البرنامج >>>>>>>>>>>>>>

اعلم بان الشرح غير كافي لان البرنامج طويل اخذ منى فترة في الكتابة , ولكن اذا كان في اي شي الرجاء عدم التردد في السؤال.


رابط التحميل:
http://www.libstock.com/projects/vie...imultaions-100

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

الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 19-06-2013, 08:21 PM المشاركة 2   
افتراضي


عند الضغط على رابط التحميل الرجاء النزول الى اسفل الصحفة راح تلاقي مكتوب

Download Project [5.58MB

اضغط عليه.

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

alqynaqaaa
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2011
المشاركات: 178
نشاط [ alqynaqaaa ]
قوة السمعة:0
قديم 19-06-2013, 09:17 PM المشاركة 3   
افتراضي


عند الضغط على رابط التحميل الرجاء النزول الى اسفل الصحفة راح تلاقي مكتوب

Download Project [5.58MB

اضغط عليه.
مشروع رائع مشكور جدا يا غالي


hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 20-06-2013, 11:07 AM المشاركة 4   
افتراضي


السلام عليكم

ماشاء الله عليك
مشروع يستحق كل التقدير
جزاك الله خيرا
زادك الله من علمه وفضله


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 518
نشاط [ Sallam ]
قوة السمعة:0
قديم 20-06-2013, 01:58 PM المشاركة 5   
افتراضي


شكرا عاى المشاركة الرائعة

أرجو أن يكون فيه الفائدة

شكرا سلفا


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 518
نشاط [ Sallam ]
قوة السمعة:0
قديم 20-06-2013, 02:00 PM المشاركة 6   
افتراضي


أخي Semmoor
عند تجربة البرنامج على البروتوس أجد ان الوقت والتاريخ يبدأ عند نقطة ليست مرتبطة بالوقت الحقيقي
فمثلا التاريخ يعود الى 1/1/2013

يرجى التوضيح السبب وكيف نحصل على قراءة حقيقية للوقت والتاريخ
وشكرا


الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 20-06-2013, 04:34 PM المشاركة 7   
افتراضي


مشكوور على المرور للجميع .

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

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


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 518
نشاط [ Sallam ]
قوة السمعة:0
قديم 20-06-2013, 10:10 PM المشاركة 8   
افتراضي


شكرا على الرد والمساعدة
سأقوم بالمحاولة وأخبرك بما يحدث

أشكر تعبك جدا

إضافة رد

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

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

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


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

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