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

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 13-01-2019, 11:10 PM المشاركة 1   
افتراضي سؤال في ذاكره EEPROM الداخليه للميكرو كنترولر Twitter FaceBook Google+



السلام عليكم ورحمه الله وبركاته

أخواني لقد وقعت في مشكله لا اجد لها حل الي الأن ..

بختصار .. عندي ميكرو كنترولر مساحة ذاكرة EEPROM هي 256 خانه وعندي رقم هوا اكبرمن ال 256 خانه فما هوا الحل ..
اريد تخزين قيمة متغير قيمته اكبر من مساحة ذاكرة EEPROM

اريد ان اقسم هذا الرقم علي ثلاث متغيرات وتخزينها في ثلان عناوين من ذاكرة EEPROM .. وبعد ذالك القرأه من من ذاكرة EEPROM من الثلاث عناوين المسبق التخزين فيهم واسناد قيمتهم الي ثلاث متغيرات واسناد قيمة الثلاث متغيرات الي متغير واحد رابع وبعد ذالك اتعامل مع قيمه المتغير الرابع في البرنامج ..

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

فضلا


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

اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 17-01-2019, 10:28 PM المشاركة 2   
افتراضي


السلام عليكم ورحمه الله

لقد حاولت صنع طريقه بمعادله حسابيه لكي افكك الرقم الي ثلاث اجزاء وهم مئات / عشرات / كسر العشري ..
وهذه هي الطريقه
وهنا هنخلي قيمة المتغير Temp1 مثلا 377

كود:
   LCD_Chr(1, 7, 48 + ((Temp2 = Temp1 / 100) % 10));
       LCD_Chr(1, 8, 48 + ((Temp3 = Temp1 / 10) % 10));
       LCD_Chr(1, 10, 48 + (Temp4 = Temp1 % 10));
وهنا ناتج هذه المعادله
كود:
   LCD_Chr(1, 7, 48 + ((Temp2 = Temp1 / 100) % 10));
هيكون 3 وطبعا هذا الناتج تم وضعه في المتغير Temp2

وهكذا ناتج هذة المعادله
كود:
  LCD_Chr(1, 8, 48 + ((Temp3 = Temp1 / 10) % 10));
هوا 7

وايضا تم اسناد ناتج المعادله وهو 7 الي المتغير Temp4

وبعد ذالك تم حفظ هذه المتغيرات وهم Temp2 و Temp3 و Temp4 في ذاكرة ابروم

كود:
    EEPROM_Write(0,Temp2);  delay_ms(5);
        EEPROM_Write(1,Temp3);  delay_ms(5);
        EEPROM_Write(2,Temp4);  delay_ms(5);
وبعد ذالك تم القرأه من ذاكرة ابروم واسناد القيم الي المتغيرات Temp2 و Temp3 و Temp4 مره اخرى

كود:
   Temp2 = EEPROM_Read(0);  delay_ms(10);
      Temp3 = EEPROM_Read(1);  delay_ms(10);
      Temp4 = EEPROM_Read(2);  delay_ms(10);
وهنا قيمه المتغير Temp2 = 3 و المتغير Temp3 = 7 و المتغير Temp4 = 7 ولكن هذه الأرقام فقدت القيمه المكانيه ف علي سبيل المثال المتغير Temp2 = 3 ومن المفترض ان = 300
وهكذا مع باقي المتغيرات لأن قيمة المتغير Temp1 =377 وهنا تم تفكيك المتغير Temp1 الي ثلاث ارقام منفصلين واسناد كل رقم الي متغير اخر ولكي اعيد القيمه المكانيه لهذه الأرقام تم استخدام هذه المعادله

كود:
    Temp2 = Temp2*100;     Temp3 = Temp3* 10 ;   Temp4 = Temp4* 1;
وهي ضرب قيمة المتغير
كود:
 Temp2 = Temp2*100;
واسناد الناتج للمتغير نفسه لكي تصبح قيمته 300 لأن هذا المتغير كان = 3 في المعادله اعلاه

وهذا مع باقي المتغيرات
كود:
 Temp3 = Temp3* 10 ;   Temp4 = Temp4* 1;
وبعد ذالك تم جمع هذه المتغيرات واسناد الناتج الي المتغير Temp1

كود:
  Temp1   = Temp2+ Temp3 + Temp4;
السؤال هل هذه الطريقه صحيحه ام توجد طريقه اكثر اختصارااا .. لأن هذه الطريقه بتطلع ارقام غير مظبوطه

وطبعااا كل هذا الكود لكي اتغلب علي مشكله الكتابه في ذاكرة الأبروم وللأسف ذاكرة الأبروم لا استطيع تسجيل اكثر من رقم 256 وانا هنا اريد ان اسجل في ذاكرة الأبروم 377 فما فوق هذا الرقم

فضلا من لديه فكره لتجاوز هذه المشكله ان يضع لها مثال
وشكرااا للجميع


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 17-01-2019 الساعة 10:32 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 18-01-2019, 05:54 AM المشاركة 3   
افتراضي


معذرة السؤال غير واضح
أى متعير هذا الذى يحتاج أكبر من 256 بايت؟؟؟؟
أعلى متغير استخدم فى اللغات العالية هو المالى و هو 8 بايت 4 أرقام عشرية و الباقى صحيح للتعامل مع الميزانيات الكبيرة وهذا المتغير لم يعرف للميكرو لعدم الحاجة إليه و أى رقم أقصاه 4 بايت = 4294967296 أى 4 مليار


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 18-01-2019, 06:03 AM المشاركة 4   
افتراضي


لو تقصد أنك تريد حفظ متغير من 4 بايت فى EEPROM ففى المساعدة وظائف Low,High,Higher,Highest للتعامل مع هذه الأجزاء الأربعة


احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 20-01-2019, 08:41 AM المشاركة 5   
افتراضي


اخي الكريم تعامل مع الايبروم مباشرة ..

انت تريد خزن متغير 2 بايت لذا عليك تقسيمه لقسمين وحفظ كل قسم في عنوان واحد من الايبروم ثم اجمعهم عند القراءة ,, مثال .. لديك متغير temp=12350

كود:
eeprom_write(1,temp/100);
eeprom_write(2,temp%100);
ثم اجمع عند القراءة ,, هكذا

كود:
int y;

y=(eeprom_read(1)*256)+eeprom_read(2);


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 20-01-2019, 10:30 AM المشاركة 6   
افتراضي


اخي الكريم تعامل مع الايبروم مباشرة ..

انت تريد خزن متغير 2 بايت لذا عليك تقسيمه لقسمين وحفظ كل قسم في عنوان واحد من الايبروم ثم اجمعهم عند القراءة ,, مثال .. لديك متغير temp=12350

كود:
eeprom_write(1,temp/100);
eeprom_write(2,temp%100);
ثم اجمع عند القراءة ,, هكذا

كود:
int y;

y=(eeprom_read(1)*256)+eeprom_read(2);
معذرة أخى الكريم
هو طلب ثلاثة بايت وليس اثنين
ثم كيف نقسم علي مائة فى التجزئة و نضرب في 256 في التجميع
وما جدوي الحساب ووظيفة التعامل موفرة و بكود اقل؟


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 20-01-2019, 09:36 PM المشاركة 7   
افتراضي


معذرة السؤال غير واضح
أى متعير هذا الذى يحتاج أكبر من 256 بايت؟؟؟؟
أعلى متغير استخدم فى اللغات العالية هو المالى و هو 8 بايت 4 أرقام عشرية و الباقى صحيح للتعامل مع الميزانيات الكبيرة وهذا المتغير لم يعرف للميكرو لعدم الحاجة إليه و أى رقم أقصاه 4 بايت = 4294967296 أى 4 مليار
السلام عليكم ورحمه الله

اشكرك استاذي الفاضل علي اهتمامك ...

أخي كيف يمكنني تخزين رقم في ذاكره ابروم اكبر من 256 اقصد رقم وليث بايت

بأختصار عند الكتابه علي ذاكرة الأبرم هذا الرقم 256 وعند القرأه منها بتطلع الناتج مظبوط ولكن لو تجاوز هذا الرقم ثلا واصبح 300 عند القرائه بتطلع النتائج غير صحيحه

ايذا كيف يمكنني تخزين رقم قيمته الرقميه اكبر من 256

وبالمناسبه ما هي الطريقه اللتي اتعامل معها مع هذه النقطه ""ففى المساعدة وظائف Low,High,Higher,Highest""


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 20-01-2019, 09:41 PM المشاركة 8   
افتراضي


اخي الكريم تعامل مع الايبروم مباشرة ..

انت تريد خزن متغير 2 بايت لذا عليك تقسيمه لقسمين وحفظ كل قسم في عنوان واحد من الايبروم ثم اجمعهم عند القراءة ,, مثال .. لديك متغير temp=12350

كود:
eeprom_write(1,temp/100);
eeprom_write(2,temp%100);
ثم اجمع عند القراءة ,, هكذا

كود:
int y;

y=(eeprom_read(1)*256)+eeprom_read(2);
السلام عليكم ورحمه الله

معذرة أخي لم استوعب ما تقصد من هذه المعادلة

إضافة رد

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

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

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


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

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