PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ارتباط حافظه فلش at45db161d با avr



mj3747
19-06-2012, 00:40
دوستان میخوام یه سری اطلاعات رو توی AT45DB161D ذخیره کنم، به نظر مثل همین MMCهاست. اگه کسی کار کرده لطفا راهنمایی کنه.

با سپاس :hi:

sadmonew
19-06-2012, 01:16
سلام مهندس
من با اين حافظه فلش كار كردم. ميتوني وبلاگم(امضا) رو يه نگاه بندازي.
سورس به همراه شماتيك.

mj3747
21-06-2012, 22:57
آقا صادق من تونستم باهاش کار کنم، اما اول اینکه به نظر فقط متغیر char میشه توش نوشت، یعنی من بهش مقدار عددی int دادم قبول نکرد:unh: و بعد اینکه من اطلاعاتی حدود 600 بایت که میگیرم میخوام توش ذخیره کنم، چطوری باید این کار انجام بدم. یه نگاهی به برنامه من بنداز، از تو کتاب آقای مصلایی نوشتم.
باور کن کچلم کرده :unh:
با سپاس :hi:

sadmonew
22-06-2012, 00:29
آقا صادق من تونستم باهاش کار کنم، اما اول اینکه به نظر فقط متغیر char میشه توش نوشت، یعنی من بهش مقدار عددی int دادم قبول نکرد:unh: و بعد اینکه من اطلاعاتی حدود 600 بایت که میگیرم میخوام توش ذخیره کنم، چطوری باید این کار انجام بدم. یه نگاهی به برنامه من بنداز، از تو کتاب آقای مصلایی نوشتم.
باور کن کچلم کرده :unh:
با سپاس :hi:
سلام مهندس
يعني شما با همين توابعي كه تو اون كتاب بود، تونستين روي فلش ديتا رو ذخيره كنيد؟ منظورم به اندازه ظرفيت بافر( 512 بايت)؟

mj3747
22-06-2012, 02:30
512 تا رو که امتحان نکردم اما 20 تایی نوشتم و خوندم.
صادق جان اگه اطلاعاتی داری ممنون میشم راهنماییم کنی :hi:

sadmonew
22-06-2012, 12:20
... اما اول اینکه به نظر فقط متغیر char میشه توش نوشت، یعنی من بهش مقدار عددی int دادم قبول نکرد:unh: و بعد اینکه من اطلاعاتی حدود 600 بایت که میگیرم میخوام توش ذخیره کنم، چطوری باید این کار انجام بدم.
سلام
مهندس حتما خودتون هم ديتاشيت رو نگاه كردين. اين حافظه از 4095 صفحه(PAGE) كه ظرفيت هركدوم 512 بايت(دقيقا به اندازه ظرفيت بافر) تشكيل شده. يعني مثلا براي ذخيره كردن 600 بايت ديتا تو اين حافظه فلش، شما 512 بايت رو تو PAGE0 و 88 بايت باقي مونده رو تو PAGE1 ذخيره ميكنيد.
يعني نميتونيد ديتا رو 1 بايت- 1 بايت تو PAGE0 ذخيره كنيد، بايد كل 512 بايت رو پشت سرم هم تو اين PAGE ذخيره كنيد. پس استفاده كردن از متغيري از نوع char الزاميه.

mj3747
22-06-2012, 13:43
پس باید مقادیر عددی رو به char تبدیل کنم دیگه؟
بعد مگه 512 بایت توی char جا میشه!؟
اونوقت اگه page0 پر بشه خودش میره page بعدی؟

sadmonew
22-06-2012, 18:25
پس باید مقادیر عددی رو به char تبدیل کنم دیگه؟
بعد مگه 512 بایت توی char جا میشه!؟
اونوقت اگه page0 پر بشه خودش میره page بعدی؟
سلام مهندس
بله، بايد به صورت آرايه(رشته اي) درشون بياري.

نه مهندس، بعد از پر شدن page0 خودش به صورت اتوماتيك نميره page1 رو براي ذخيره كردن آماده كنه. خودتون بايد براي اين قسمت برنامه بنويسين. البته كار سختي نيست.

mj3747
28-06-2012, 00:19
آقا صادق من هنوز نتونستم درست راه اندازیش کنم.
در واقع فقط میتونم توی بایت اول هر page ذخیره کنم و بخونم.
فرض کنیم اطلاعات ما اینا باشه:
{10,00,00,01,00,00,01,01,00,00,01,00,01,01,00,00,0 1,01,00,E8}
حالا من باید همه اینا رو کنار هم بچینم و توی یک متغیر char بریزم و بعد توی page اول و هرچی از 512 تا بیشتر شد رو به همین صورت توی pageهای بعد ذخیره کنم؟
یعنی بعد از تبدیل به این صورت بشه؟
{10000001000001010000010001010000010100E8}

sadmonew
28-06-2012, 14:50
آقا صادق من هنوز نتونستم درست راه اندازیش کنم.
در واقع فقط میتونم توی بایت اول هر page ذخیره کنم و بخونم.
فرض کنیم اطلاعات ما اینا باشه:
{10,00,00,01,00,00,01,01,00,00,01,00,01,01,00,00,0 1,01,00,e8}
حالا من باید همه اینا رو کنار هم بچینم و توی یک متغیر char بریزم و بعد توی page اول و هرچی از 512 تا بیشتر شد رو به همین صورت توی pageهای بعد ذخیره کنم؟
یعنی بعد از تبدیل به این صورت بشه؟
{10000001000001010000010001010000010100e8}
سلام مهندس
ببخشيد.
مهندس شما در حال حاضر از كدوم برنامه استفاده ميكنيد، اوني كه من نوشتم؟ يا اون برنامه اي كه داخل كتابه؟

mj3747
28-06-2012, 16:33
سلام
صادق جان اگه اشتباه نکرده باشم برنامه شما با AVR Studio ، من برنامه ای که دارم کار میکنم با codevision، راستش من چیز زیادی از برنامه شما دستگیرم نشد و از برنامه کتاب استفاده کردم.

sadmonew
28-06-2012, 19:45
سلام
صادق جان اگه اشتباه نکرده باشم برنامه شما با AVR Studio ، من برنامه ای که دارم کار میکنم با codevision، راستش من چیز زیادی از برنامه شما دستگیرم نشد و از برنامه کتاب استفاده کردم.
سلام
مهندس پيشنهاد ميكنم شما هم از AVRstudio و كامپايلر قدرتمند WinAVR استفاده كنيد.
چون هر دو رايگان هستن و كامپايلر WinAVR هم اوپن سورسه و روزبروز در حال توسعه هستش.
خودم خيلي وقته ديگه از كدويژن استفاده نميكنم. خودتون هم ميدونيد كرك شده و اصلا قابل اعتماد نيست.

sadmonew
28-06-2012, 19:50
در مورد برنامه خودم كمي توضيح ميدم.
مهندس تو اين برنامه شما فقط با دو تابع سرو كار داريد:


1- Write_data_to_main_MEM(arg1,arg2)
2- Read_data_from_main_MEM(arg);
تابع اول براي نوشتن(ذخيره كردن) ديتا تو صفحه(Page) دلخواه حافظه و تابع دوم جهت خوندن ديتا از صفحه(Page) مورد نظر به كار ميره.
مثلا شما 10 بايت ديتا(عدد) داري. اول از همه اين اعداد رو به صورت رشته تبديل ميكنيد، به اين صورت:


unsigned char data_example_temp[10];
unsigned int i; //counter

for(i=0;i<10;i++)
{
data_example_temp[i] = i;
}

تو مرحله بعد داده رو با استفاده از دستور شماره 1 تو حافظه و داخل صفحه 4 ذخيره ميكينم. اينطوري:


Write_data_to_main_MEM(data_example_temp,4);

mj3747
23-07-2012, 01:25
صادق جان من سعی کردم تا با winavr کار کنم اما اصلا فرصتش ندارم و باید زودتر پروژه رو تحویل بدم، یه برنامه ساده نوشتم... یه نگاهی بهش بنداز ببین ایراد کارم کجاست.
در ضمن نمیدونم چرا وقتی متغیرهای char رو 512 تایی تعریف میکنم کامپایلر ارور میگیره. اگه این مشکل حل بشه فکر کنم بتونم راحت توی حافظه بنویسم و بخونم.
با سپاس.

sadmonew
23-07-2012, 13:04
سلام مهندس:hi:
باشه نگاه ميكنم، فقط كمي فرصت بده. :0013:

sadmonew
23-07-2012, 13:26
مهندس اين ارورو ميده:


Linker error: global RAM variables size: 920 bytes is too large

اگه اين ارورو ميده طبق عكس عدد مربوط به Data Stack size رو تغيير بدين.

nicolas1390
23-10-2012, 10:16
سلام
ببخشید من میخوام با این آیسی توی bascom کار کنم ، کسی مثالی داره ؟
توی proteus چرا این آیسی نیست ؟!
آیسی از خانواده همین آیسی که حجم کمتری داشته باشه و ارزون تر باشه و در بازار ایران موجود باشه هست ؟

من از الکترونیک هیچی نمیدونم لطفا بگید جدا از atmega8 و این آیسی چه چیز هایی لازمه و چجوری باید وصل کرد ؟

behnam6500
15-07-2013, 11:27
من با کتابخونه و مثالی که صادق عزیز در وبلاگشون ارائه دادن مدار رو بستم ولی داده ای که دریافت میکنم همش علامت سوال هست!!!! ؟؟؟؟؟ به اندازه اندازه بافر علامت سوال دریافت میکنم... در اصل کاراکتر 255 دریافت میکنم!!!

علتش چیه؟؟

ای سی حافظه رو هم عوض کردم باز هم همینه...

دقیقن مثل مثالی که صادق عزیز گذاشتن توی کتابخونه می نویسم و میخونم!



شماتیکمم این هست:

sadmonew
17-07-2013, 14:54
سلام مهندس
از تابع Manufactor_ID_Read استفاده کنید. ببینید ID آیسیتون رو درست میخونه

behnam6500
18-07-2013, 15:37
سلام مهندس
از تابع manufactor_id_read استفاده کنید. ببینید id آیسیتون رو درست میخونه

سلام

اون رو هم چک کردم... همون مقدار 255 رو برمیگردونه (چهار بایت 255)