SEMMOOR

عندي مشكلة ابي مساعدة من مبرمجي البيك بالميكروسي

18 ردود في هذا الموضوع

مشروعي عبارة عن برنامج يقوم بتخزين الارقام المدخلة عن طريق الكيباد او الكيبورد ويعرضها في LCD ومن ثم يقوم بتخزيين الاسم المدخل ورقم الهاتف في SD/MMC CARD .

الاسم المدخل راح يكون اسم الملف في SD/MMC CARD والرقم المدخل راح يكون داخل الملف.

ولكن هناك مشكلة لم استطع حلها وهي ان كل شي شغال تمام ولكن لا ادري كيف ارسل الاسم والرقم الى SD/MMC CARD

ومن ثم عرضها على LCD .

أرجوكم ساعدوني اخواني.

Phone Directory.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كيف كل شئ شغال تمام وفكرة المشروع الأساسية لم يتم حلها

هل قمت من قبل بعمل interface بين ميكروكنترولر وكارت SD

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كيف كل شئ شغال تمام وفكرة المشروع الأساسية لم يتم حلها

هل قمت من قبل بعمل interface بين ميكروكنترولر وكارت SD

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حسنا هل قمت بتصميم برنامج خاص من جهة الكمبيوتر للتعامل مع ال com port ومن ثم الميكرو فال SD card ام انك إستخدمت برنامج جاهز كال Hyper terminal

2

هل لك ان تطلعنا على الكود

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حسنا هل قمت بتصميم برنامج خاص من جهة الكمبيوتر للتعامل مع ال com port ومن ثم الميكرو فال SD card ام انك إستخدمت برنامج جاهز كال Hyper terminal

2

هل لك ان تطلعنا على الكود

طبعا استخدمت Virtual Termianl نفس برنامج الهايبر ترمينال بس موجود في البروتس . استخدمته للتاكد من عملية نجاح الحفظ في الكارد بس يوم اكتب بالكايباد ومن ثم اقوم بارسالها الى الكارد وبعدين اعرضها على البورت تظهر رموز غير مفهومه يعني يمكن اكون ارسلتها فعلا للكارد بس تحتاج بعد التحويلات لاظهار البيانات المحفوظة بشكل سليم .

على فكرة المشرووع مرفق في الاعلى باسم Phone Directory

اسف اخوي على الاطالة وشاكر لك مساعدتك يعطيك العافية.

Phone Directory.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

معذرة لم أرى الكود

انا ليس لدى خبرة فى البيك لكن قرأت الكود ككود سى عادى إعتمادا على ما اعرفه من ال AVR

لى ملاحظة


// Initialise the SD card bus
while(Mmc_Init());

// Initialise the FAT file system
while(Mmc_Fat_Init());

هل تأكدت انه يخرج من هاتين ال while loops وانا اعتقد انه فعل بما انك قلت ان الشاشة تستجيب بعد عملية الضغط على ازرار

سؤال آخر بالنسبة للكى باد هل هى ال 4 * 4 matrix

لأنه فى هذا الكود

MyKey =Keypad_Key_Click(); // Get the name

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

لكن بما اننى لا اعرف الخرج فأنا اسئلك هل بعد ان تكتب على ال ال LCD

Name:

وتدخل أى حرف هل يظهر على الشاشة طبيعيا

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

جرب وضع السطر التالى بعد الكود السابق

MyKey + = 0x30;

وقل لى النتيجة

تم تعديل بواسطه حريف برمجة
إملائى
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أرجو منك ان تلغى الكود السابق

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

              switch(MyKey)//finds whic letter is inputted, then assign its ASCII
{
case 12: MyKey = 65; break; // A
case 13: MyKey = 66; break; // B
case 14: MyKey = 67; break; // C
case 15: MyKey = 68; break; // D
case 16: MyKey = 69; break; // E
}

وهى تبدأ من 12 عشرى حتى 16 لا أعرف اى ازرا تناظر لكنها لا تمثل اى standard code على الإطلاق

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

وانا اريدك ان تكتب بعد ال switch case السابقة سطر إختبار

وهو

 MyKey = 65;

واريدك ان ترفق صورة قبل وبعد الإختبار

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أرجو منك ان تلغى الكود السابق

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

              switch(MyKey)//finds whic letter is inputted, then assign its ASCII
{
case 12: MyKey = 65; break; // A
case 13: MyKey = 66; break; // B
case 14: MyKey = 67; break; // C
case 15: MyKey = 68; break; // D
case 16: MyKey = 69; break; // E
}

وهى تبدأ من 12 عشرى حتى 16 لا أعرف اى ازرا تناظر لكنها لا تمثل اى standard code على الإطلاق

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

وانا اريدك ان تكتب بعد ال switch case السابقة سطر إختبار

وهو

 MyKey = 65;

واريدك ان ترفق صورة قبل وبعد الإختبار

بالنسبة للكيباد هي فعلا 4x4 كما قلت فعلا الحروف تبدا من 12 حتى 16 A-B.

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

بس في حالة الارسال اللى الكارد تجي كتابات ثانية لم اكتبها, مثل تظهر على الشاشة Name No وبعض الاحرف.

جربت الطرق بس مانفعت.

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

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

اكيد لازم نظيف امر تحويل في المايكروسي, انا لما كتبت الامر ;(wordtostr(MyKey,filename اي تحويل الحرف المدخل من الكايباد الى string , كل ماكتب اسم الملف يتم انشاؤه ولكن البيانات غير , مثال عندما ادخل الرقم 66 على الكيباد يظهر لي في الملف 65.

والله لم اجد حلا لهده المشكلة ياخوي.

اسف ياخوي تعبتك معاي.

تم تعديل بواسطه SEMMOOR
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هل تعنى أن هذه المجموعة تم تنفيذها بنجاح

 while(1)
{
do
MyKey =Keypad_Key_Click(); // Get the name
while(!MyKey); //if nothing pressed nothing
if(MyKey == Enter)break; // If ENTER pressed breake form loop

switch(MyKey)//finds whic letter is inputted, then assign its ASCII
{
case 12: MyKey = 65; break; // A
case 13: MyKey = 66; break; // B
case 14: MyKey = 67; break; // C
case 15: MyKey = 68; break; // D
case 16: MyKey = 69; break; // E
}
if(MyKey == 10)MyKey = 0; // If 0 key pressed
Lcd_Chr_Cp(MyKey); //display inputted name on lcd
longToStr(MyKey, Name); //convert the name to string in Name
filename[7] = Name; //now Name as the file name
}

ارجوا ان ترفق صورة للخرج

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هل تعنى أن هذه المجموعة تم تنفيذها بنجاح

 while(1)
{
do
MyKey =Keypad_Key_Click(); // Get the name
while(!MyKey); //if nothing pressed nothing
if(MyKey == Enter)break; // If ENTER pressed breake form loop

switch(MyKey)//finds whic letter is inputted, then assign its ASCII
{
case 12: MyKey = 65; break; // A
case 13: MyKey = 66; break; // B
case 14: MyKey = 67; break; // C
case 15: MyKey = 68; break; // D
case 16: MyKey = 69; break; // E
}
if(MyKey == 10)MyKey = 0; // If 0 key pressed
Lcd_Chr_Cp(MyKey); //display inputted name on lcd
longToStr(MyKey, Name); //convert the name to string in Name
filename[7] = Name; //now Name as the file name
}

ارجوا ان ترفق صورة للخرج

ارفقت الصور اخيرا اسف اخوي كنت مشغوول شوي.

بالنسبة للصور مرقمة .

الصورة رقم 1: ادخلت فيها الاسم وهو حرف A وبعدين ادخلت الرقم 0551050091.

الصورة رقم 2: تم ظهور رسالة على الشاشة Saving Completed.

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

post-151163-070091900 1331907287_thumb.p

post-151163-030510200 1331907308_thumb.p

post-151163-047114800 1331907322_thumb.p

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

             longToStr(MyKey, Name); //convert the name to string in Name

ما وظيفة السطر السابق ولا تقل لى كما هو مكتوب فى التعليق

لأنه أولا اى string لابد وأنه يتكون من مصفوفة ليس متغير واحد بايت من نوع char

و2 دالة longtostr انا لا أعرف لمذا اخترت MyKey من نوع لونج وانت تتوقع ارقام موجبة من رقمين عشريين فإخترها char افضل حتى لا تضطر للتحويل كل مرة

لذلك التصحيح ان تعرف المتغير

char Name[16];

لو إفترضنا جدلا ان اكثر عرض للإسم = 16

من السطر الثانى فهمت ان Name ما هو إلا متغير مؤقت لحفظ حرف واحد

اذا

            filename[7] = Name;    //now Name as the file name

filename هو الإسترنج الذى يحمل إسم الملف

لكن ما فعلته هنا هو أنك قمت بتخزين الحرف Name فى آخر متغير فى المصفوفة دائما ولكن لكى تعلم ان آخر متغير هو الذى يحمل حرف Nullstring أو الرقم 0x00 اى ان اى مصفوفة حرفية يجب ان تحتوى على سلسلة من تلك الحروف ويتم إنهائها بالرقم 0

لذلك إذا ارسلت تلك ال string لدالة أخرى سيتم رفضه

أعتقد ان العيب عندك هنا

           longToStr(MyKey,Num);    //convert number to string in Num

نفس المشلكة بالنسبة للإرقام

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

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

             longToStr(MyKey, Name); //convert the name to string in Name

ما وظيفة السطر السابق ولا تقل لى كما هو مكتوب فى التعليق

لأنه أولا اى string لابد وأنه يتكون من مصفوفة ليس متغير واحد بايت من نوع char

و2 دالة longtostr انا لا أعرف لمذا اخترت MyKey من نوع لونج وانت تتوقع ارقام موجبة من رقمين عشريين فإخترها char افضل حتى لا تضطر للتحويل كل مرة

لذلك التصحيح ان تعرف المتغير

char Name[16];

لو إفترضنا جدلا ان اكثر عرض للإسم = 16

من السطر الثانى فهمت ان Name ما هو إلا متغير مؤقت لحفظ حرف واحد

اذا

            filename[7] = Name;    //now Name as the file name

filename هو الإسترنج الذى يحمل إسم الملف

لكن ما فعلته هنا هو أنك قمت بتخزين الحرف Name فى آخر متغير فى المصفوفة دائما ولكن لكى تعلم ان آخر متغير هو الذى يحمل حرف Nullstring أو الرقم 0x00 اى ان اى مصفوفة حرفية يجب ان تحتوى على سلسلة من تلك الحروف ويتم إنهائها بالرقم 0

لذلك إذا ارسلت تلك ال string لدالة أخرى سيتم رفضه

أعتقد ان العيب عندك هنا

           longToStr(MyKey,Num);    //convert number to string in Num

نفس المشلكة بالنسبة للإرقام

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

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

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

عل العموم اشكرك اخوي حريف صحيح انك حريف الله يجزاك خير.

post-151163-088722900 1332227712_thumb.p

post-151163-026418800 1332227732_thumb.p

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ممكن الملف الجديد بعد التعديل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ممكن الملف الجديد بعد التعديل

تفضل اخوي الملف في المرفقات.

Phone Directory.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كالعادة صلحت اللوب

لكنك لم تنهى ال string ب 0x00 يجب ان تنهيها بالرقم صفر قبل الخروج منها

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

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

نعم كما ذكر الأخ حريف فان هذه القيم عشوائية في الذاكرة

عليك بمراجعة طول البيانات المخزنة قبل استخدام اللوب وراجع كذلك استخدام الأمر size

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

نعم كما ذكر الأخ حريف فان هذه القيم عشوائية في الذاكرة

عليك بمراجعة طول البيانات المخزنة قبل استخدام اللوب وراجع كذلك استخدام الأمر size

السلام عليكم ياشباب .

الحمدلله عدلت الكود اما الان خلاص البرنامج كامل ويعمل بالشكل الصحيح وارفقت صور عند ادخال البيانات وصور الملف اللي تم انشائه والبيانات داخله .

شكرا لكم اخواني حريف و خالد يعطيكم العافية.

post-151163-074320800 1332502451_thumb.p

post-151163-042156900 1332502465_thumb.p

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ياشباب .

الحمدلله عدلت الكود اما الان خلاص البرنامج كامل ويعمل بالشكل الصحيح وارفقت صور عند ادخال البيانات وصور الملف اللي تم انشائه والبيانات داخله .

شكرا لكم اخواني حريف و خالد يعطيكم العافية.

post-151163-071704600 1332504550_thumb.p

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .