من نوشتم تستش کنم ولی فکر نمیکنم جواب بده. چون توی حالت عادی و بدون استفاده از وقفه توش جای خوندن اشتباه نمینویسه. فقط زمانی توی حافظه اظلاعات غلط مینویسه که از وقفه استفاده کرده باشم
من نوشتم تستش کنم ولی فکر نمیکنم جواب بده. چون توی حالت عادی و بدون استفاده از وقفه توش جای خوندن اشتباه نمینویسه. فقط زمانی توی حافظه اظلاعات غلط مینویسه که از وقفه استفاده کرده باشم
آقا ما تستشم کردیم ولی جواب ندادش. موندم چیکار کنم واقعا!!!!!!!!!!! 2 یا 3 ماهه رو این مشکل گیر کردم
سلام دوست عزیز
دوست عزیز من شما تاپیکی که گذاشتم رو خوندی ؟
تابع نوشتن شما در حافظه اشتباه است ، به صورت زیر اصلاح کنید
کد:BYTE read_ext_eeprom(long int address) { BYTE data; while(!ext_eeprom_ready()); i2c_start(); i2c_write((0xa0|(BYTE)(address>>7))&0xfe); i2c_write(address); i2c_stop(); i2c_start(); i2c_write((0xa0|(BYTE)(address>>7))|1); data=i2c_read(0); i2c_stop(); return(data); }
من باز هم ازمایش کردم و دوتا عکسی که پایین گذاشتم عکس هایی اند که تو پروتیوس دیباگ کردم ، شما برای خوندن دیتا باید بعد از شرایط شروع ، و A0 و آدرس ، شرایط پایان ایجاد کنید ، دوباره شرایط شروع ، A1 ، و گرفتن دیتا ، شرایط پایان
شما عکس ها رو نگاه کن
تنها نکته اینه که چون AT24C512 هست بعد از دستور A0 آدرس باید دوبار (16 بیتی) نوشته بشه ، در عکسی که نوشتن بصورت اشتباه انجام شده ، I2C دیباگر ، شرایط پایان و شروع رو اصلا احساس نکرده واسه همین نمایش نداده ، میتونم برنامه رو برات قرار بدم تا خط به خط خودت دیباگ کنی
http://s2.picofile.com/file/77130228...READ_WRITE.jpg
http://s3.picofile.com/file/77130232...READ_WRITE.jpg
واقعا دو سه ماهه رو این مورد مشکل داری؟ ، اگه اگه شروع کرده بودی اسمبلی میخوندی الان تمومش کرده بودی
Good Luck
ویرایش توسط scienceaddict : 04-04-2013 در ساعت 00:39
خوب عزیز منم برنامه بالار تستش کردم دیگه. بعد از چند دقیقه اطلاعات اشتباه مینویسه توی حافظه. شما به صورت عملی ببندید متوجه میشیدمیشید. بعد از چند دقیقه که بگذره هر از چند دقیقه ای توی یه حافظه یه چیزی مینویسه. بیشترم 167 مینویسه نمیدونم چرا
سلام دوست عزیز
ببخشید من منظورتونو متوجه نشدم
بهر حال من تو پروتیوس تست کردم و عملا هم دیدم که تو خوندن اون شرط پایان باید باشه و اگر باشه درسته ، خط به خط برنامه ام رو تو پروتیوس دیباگ کردم عکسش هم گذاشتم یعنی نهایت مطمئن ، عملا تو یه خونه فقط نوشتم و خوندم ، برای At24C16
اما حتما حتما حتما ، ظهر دوتا برنامه جدا برای دوتا میکرو مینویسم که یکی تو تمام خونه های At24C16 دیتا هایی رو بنویسه ، بعد حافظه رو میذارم روی یه میکروی دیگه با یه برنامه دیگه که فقط حافظه رو بخونه ، بفرسته به سریال ، شکل دیتا ها رو تو متلب میکشم میذارم همینجا ، عجبب کارم سخت شد
اینجوری مطمئن میشیم که کجا اشتباهه ، مشکل یا از طرز نوشتن و خوندن ما تو این حافظه هست یا از جای دیگه ،
بالاخره پیداش میکنیم دیگه
تا نیمروز
Good Luck
ویرایش توسط scienceaddict : 04-04-2013 در ساعت 03:44
آقا دمت گرم انصافا. من 1 حافظه خالی فقط میخونم حتی توش اصلا نمینویسم. وقتی خالی باشه همه بایتاش 255 هستن.ولی زمانی که زمان وقفر کم میکنم جای اینکه بخونه مینویسه توش. من یه برنامه گذاشتم که فقط میخونه و یه برنامه هم نوشتم که از رو حافظه میخونه و روی ال سی دی نشون میده اطلاعاتش. میخاید اونم بزارم؟؟ میشه بگید شما با متلب چطوری شبیه سازی میکنید؟ با همین زبان سی شبیه سازی میکنید؟؟
یه چیزیرم یادم رفت بگم. من فقط 1 بایت نمیخونم و بعد از خوندن اون یه بایت توی حافظه نوشته بشه. من میزارم 1 ربع , بیست دقیقه میمونه , بعدش که میام میخونم و روی ال سی دی نگاهش میکنم 2 یا 3 بایتش فقط توش نوشته شده.
من فکر میکنم برنامه میاد تا خط قبل از استوپ اولی اجرا میکنه و بعد وقفه روی میده . سی پی یو میره و کارای وقفر انجام میده , وقتی بر میگرده جای اینکه بره بقیه برنامر اجرا کنه دوباره اون تابع از اول میخونه. واسه همین جای خوندن مینویسه توش
ویرایش توسط mahdifah : 04-04-2013 در ساعت 12:18
سلام دوست عزیز
من همین برنامه ای که تو پست #23 هست رو به اسمبلی اجرا کردم ، تو تمام خونه های AT24C16 به ترتیب FF و 00 یکی در میون نوشتم ، بعد از نوشتن پورت B چشمک میزنه ،
بعد با یه میکرو دیگه که برنامش تو لینک هست ، کل 2048 بایت حافظه رو خوندم و با باود ریت 4800 بیت بر ثانیه میفرسته برای سریال ، خروجیش هم نات کردم دادم به پورت کام ، برنامه متلب هم تو فایل read قرار دادم ، متلب انقدر سطحش بالاست که برنامه اش نیاز به توضیح نداره خیلی ساده است ، پورت رو باز میکنه دیتا رو میگیره و نمودارشو میکشه ، تاخیر ها خییییییلی زیاد هستند میدونم اما ببخشید برنامه رو عجله ای نوشتم ، اما کار میکنه
AT24C16
خب حالا که مطمئن شدیم برنامه ی پست #23 شما درسته ، اما شما میگی که به جای خوندن مینویسه ، باید ببینیم چرا ، ببینید تو دوتا عکسی که گذاشتم ، I2C Debugger پروتیوس شرایط شروع جدید رو اصلا احساس نکرد ، تو برنامه ی پست #23 شما ، اگه شرایط پایان نباشه یا به هر دلیلی درست انجام نشه ، آی سی شرط شروع بعد از شرط پایان رو احساس نمیکنه ، و فکر میکنه بایت بعدی که قراره بیاد باید بنویسه ، بایت بعدی هم A1 یا 161 هست ، که شما میگفتی بیشتر 161 مینویسه ، دلیل مشکل اینه ، شما برنامه ات رو با I2C دیباگر پروتیوس دیباگ کن ببین مشکل کجاست ، اگه ممکنه برنامه ات رو اینجا هم بذار تا من هم دیباگ کنم
اگه خواستی عملا ببندی بگو تا برنامه رو تغییر بدم یا بگم خودت تغییر بدی ، چون C16 هشت تا page دویست و پنجاه و شش بایتی داره ولی C8 چهار تا page داره
Good Luck
ویرایش توسط scienceaddict : 04-04-2013 در ساعت 18:45
آقا انصافا خیلی سطح بالا گفتید. میشه میلتون بدید؟؟ من برنامم گذاشتم صفحه 2 دیگه
سلام من دارم برنامه رمز را مینویسم که توش 4 کاربر با رمزهای مختلف وقابل تغییر وارد یه زیر برنامه میشن اما مشکل اینجا ست که موقع کامپایل یه پیام درباره کدword to strمیده که باعث میشه توعمل اعداد روی ال سیدی نمایش داده نشه اما برنامه کار خودش را میکنه تمامی تبدیل هی من هم براساس helpنر م افزارmikroeهست کی میتونه کمکم کنه