به نام خدا : آموزش جامع کار با ic حافظه با کتابخانه i2c
توضیح : والا من منبع آموزشی درست و درمونی در این مبحث تو نت ندیدم(البته تو سایت های فارسی) ولی تو سایت های خارجی مطلب الی ما شا الله.تنها منبع فارسی که من دیدم کتاب جابر الوندی بود که یه پروژه در مورد این موضوع گزاشته بود…..حالا من میخوام این بحث رو به صورت تقریبا کامل آموزش بدم.حالا من سعی کردم به ساده ترین حالت ممن توضیح بدم تا همه ی دوستان بتونن از این آموزش استفاده کنم.این پروژه رو من در عمل انجام دادم و کار میکنه…..لذا نگران کار کردن یا نکردنش در عمل نباشید>>>فقط من فردا باید برم دانشگاه و نه وقتش رو دارم و نه حال بستن مدارش رو….لذا نمیتونم عملی ببندم و فیلمش رو بزارم…….
تشکر : این مطلب تقدیم به داش رامین اصیلی که باعث شد من این مطلب رو بنویسم.
1) نحوه نام گزاری آی سی های سری AT24Cxxx : این سری از آی سی ها که اول اسم همشون AT24C هستش و در ادامه اندازه حافظشون قرار میگیره…مثلا اگه حافظشون 512 باشه نام این آی سی به صورت AT24C512 خواهد بود و اگه اندازه حافظه 2 باشه>>>>به صورت AT24C02 خواهند بود.
2) انواع آی سی های سری AT24Cxxx : حافظه این آی سی ها از 1 شروع میشه تا 1024 و از 1024 به بعد من نیدم.(شاید قطعاتی از این سری با حافظه بیشتر وجود داشته باشه ولیگشتم نبود>>>نگرد نیست) >>>1-2-4-8-16-32-64-128-256-512-1024 >>> لذا این سری از آی سی ها در 11 مدل حافظه ای مختلف در بازار موجوده.
3)قیمت آی سی های حافظه : حافظه 2 قیمتش تقریبا 300 تومن هستش و 1024 هم 15 هزار تومن….در کل قیمت این آی سی ها زیاده….ولی بسته به نیازتون میزان به صرفه بودن متفاوت هستش>>>> قیمت آسی های حافظه سری AT24C
4) حافظه : نوع حافظه اینا EEPROM هستش >>یعنی اطلاعات که توش قرار میگیرند با قطع برق از بین نمیروند و یه بار که اطلاعات رو توشون ریختی تا زمانی که ریستشون نکنی و یا اطلاعاتشون رو خودت پاک نکنی….اطلاعاتشون پاک نمیشه.
حافظه اینا برحسب بیت هستش……یعنی وقتی میگن آی سی AT24C01 یعنی حافظش 2کیلو بیت هستش>>>>
1Kbit=1024bit=128byte
سوال1) 128 از کجا اومد؟
جواب1) از اونجای که هر 8 بیت برابر 1 بایت هستش لذا 1024 بیت برابر 128 بایت هستش…..یعنی 1024 رو تقسیم بر 8 کردم و شده 128.
سوال2) منظور از بیت و بایت چیست …. فرق بین بیت و بایت چیه؟؟؟
جواب2) اصل مطلب : 1دونه صفر یا یک=1بیت>>>>>8 تا صفر یا یک=1بایت
توضیحات بیشتر : مثلا وقتی میگیم مقدار پایه فلان 0 هستش(یا 1 هستش) به این میگن یه بیت.
ولی وقتی میگیم مقدار 8 تا پایه پورت A (یا هر پورت دیگه ای…) >>>این میشه 8 تا بیت که برابر است با 1 بایت.
مثلا وقتی ما تو پروژه هامون میایم و کد زیر رو مینویسیم و یه پورت میکرو رو ورودی خروجی بودنش رو تعیین میکنیم در واقع داریم یه اطلاعات 8 بیتی (یا 1بایتی) بهش میدیم.
1 |
DDRA=0B01010110; |
5) نحوه ذخیره سازی اطلاعات درون آی سی : همون طور که در بالا گفتم مبنای این حافظه ها بیت هستش مثلا میگن آی سی با حافظه 512 بیت.
ولی ما کارمون اکثرا (99%) با بایت ها هستش و نه بیت ها…..مثلا ما میخوایم کد های همچون 0X57 و کد های هگز 8 بیتی=1بایتی رو در آی سی حافظه ذخیره کنیم.
حالا اگه دیتاشیت این آسی ها رو ببینید (مثلا برا آی سی با حافظه 1 ) تو صفحه اولش نوشته شده
1 |
1K (128 x 8) |
که منظورش اینه که حافظش 1کیلو بیتی=1024 بیتی هستش و 128 خانه برا ذخیره سازی بایت ها داره>>>>یعنی 128 تا دونه کد هگز 1 بایتی(به صورت 0Xxx) میتونه در خودش ذخیره کنه.(امید وارم گیجتون نکرده باشم.)
لپ کلوم : ذخیره سازی اطلاعات درون این آی سی ها بر اساس بایت هستش و نه بیت>>>یعنی هر خانه ی این آی سی یه کد 8 بیتی=1بایتی درخودش ذخیره میکنه.
توجه : برا دانلود دیتاشیت های آیسی های سری AT24C به لینک مقابل برید : آموزش کار با آیسی های حافظه سری at24cxx
توضیح پایه های آی سی های حافظه
پایه های این آیسی ها بسته به حافظش یه کمی تفاوت داره.که میتونید ترتیب پایه ها رو تو دیتاشیت(تو صفحه 1 یا 2 باشد باشه) ببینید.
VCC : منبع تغزیه 5 ولت
GND : زمین
NC : به جایی وصل نمیشود >>> No Connect
A0-A1-A2 و… : تعیین آدرس سخت افزاری قطعه هستش>>>Address Inputs >>> اون طوری که یکی از سایت های خارجی گفته بود این پایه ها برا وقطیه که چند تا آی سی حافظه به میکرو وصل باشه …. حالا نحوه کارش دقیقا چیه رو من هنوز نفهمیدم(لذا اگه کسی فهمید به ما هم بگه)….لذا فعلا این پایه ها رو به GND وصل کنید تا بعدا یکارش کنم.
SCL : ارسال کلاک >>>> Serial Clock Input
SDA : انتقال اطلاعات >>>> SDA Serial Data
توجه : اگه کار دو پایه بالا رو متوجه نشدید>> زیاد مهم نیست>>>>لازم هم نیست بدونید فعلا.
TEST : زیاد مهم نیست…به جایی وصلش نکنید…… (Test Input (GND or VCC
WP : محافظت از دیتا های درون آی سی—اگه به VCC وصل بشه نمیشه اطلاعاتش رو تغییر داد و فقط میشه اطلاعاتش رو خوند….ولی اگه به GND وصل بشه ، هم میشه اطلاعاتش رو خوند و هم توش اطلاعات ریخت.
پروژه IC حافظه AT24C512
پروژه در این زمینه من چند تایی انجام دادم….که انشاالله به مرور زمان میزارمشون تو سایت.فعلا پروژه زیر و توضیحاتی که میدم رو قشنگ ببینید و بخونید تا بعد…
نحوه عملکرد پروژه : پروژه به این صورت کار میکنه که ابتدا کاراکتر های A تا Z در آی سی ذخیره میشن و بعد خونده میشن و در LCD نمایش داده میشن.
این از مدار پروژه
در مورد مدارش باید اینو بگم که پایه های SLC و SDA که به میکرو وصل میشوند باید توسط دو مقاومت 10 کیلو ، پول آپ بشن>>>> مطابق شکل زیر.
مورد بعد این که آی سی حافظه زیر از نوع 512 کیلو بیتی هستش >>> و نکته بعد که در بالا هم بهش اشاره کردم اینه که این آیسی ها پایهاشون باهم فرق داره….
مثلا آیسی 2 کیلوبتی با 1024 کیلوبیتی ترتیب پایه هاش مثل هم نیستند.>>>>لذا به این موضوع حتما دقت کنید.
میکرو استفاده شده هم مگا 32 هستش….lcd هم نوع کاراکتری و 16*2 هستش(^_^)
اینم از کد های پروژه
(بر روی دکمه بالای کد ها کلیک کنید تا در یه صفحه جدید و بزرگتر نگاش کنید.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <mega32.h> #include <delay.h> #include <stdlib.h> #asm //شروع کد نویسی به زبون اسمبلی .equ __i2c_port=0x18 ;PORTB //تعیین پورتی از پورت های میکرو که قراره آی سی حافظه بهش وصل بشه .equ __sda_bit=1 //تعیین پایه ای از پورت مورد نظر ( تعریف شده در خط بالا ) که قراره پایه "اس دی ای" آی سی بهش وصل بشه .equ __scl_bit=0 //تعیین پایه ای از پورت مورد نظر ( تعریف شده در خط بالا ) که قراره پایه "اس سی ال" آی سی بهش وصل بشه #endasm //پایان کد نویسی به زبون اسمبلی #include <i2c.h> #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #define EEPROM_BUS_ADDRESS_W 160 #define EEPROM_BUS_ADDRESS_R 161 //این تابع که کارش خواندن اطلاعات از آی سی هستش //چیزی که دریافت میکنه در واقع شماره خونه ای هستش که باید اطلاعات اون خونه رو بخونه unsigned char eeprom_read(char address) { unsigned char data; i2c_start(); i2c_write(EEPROM_BUS_ADDRESS_W); i2c_write(0x00); //high byte address i2c_write(address); //low byte address i2c_start(); i2c_write(EEPROM_BUS_ADDRESS_R); data=i2c_read(0); i2c_stop(); delay_ms(10); return data; } //این تابع وضیفش نوشتن اطلاعات بر روی آی سی هستش //این تابه دو تا مقدار دریافت میکنه....اولی آدرس خونه ای از آیسی هستش که //قراره اطلاعات درش ذخیره بشن و دومی اطلاعات مورد نظر ما هستش //که در خونه مورد نظر باید ذخیره بشه. void eeprom_write(unsigned char address, unsigned char data) { i2c_start(); i2c_write(EEPROM_BUS_ADDRESS_W); i2c_write(0x00); //high byte address i2c_write(address); //low byte address i2c_write(data); i2c_stop(); delay_ms(10); } void main() { int j,number1=0; char i; i2c_init(); lcd_init(16); //نوشتن اطلاعات-کاراکتر های "ای" تا "زد" رو در آی سی ذخیره میکنه for(j='A';j<='Z';j++){eeprom_write(number1,j);number1++;} //خوندن اطلاعات و نمایش دادنش در ال سی دی for(j=0;j<26;j++) { i=eeprom_read(j); lcd_putchar(i);delay_ms(500); } } |
سخن پایانی : والا دیگه فک نکنم چیزی مونده باشه که نگفته باشم ولی اگه چیزی جا انداختم بهم بید.
در ضمن اگه سوالی چیزی هم هست در خدمتیم.
مهمان
سلام . تو این برنامه روش نوشتن و خوندن یک بایت ارائه شده. می شود لطف کنید برنامه نمونه برای خوندن یک صفحه هم رو ارائه کنید.؟
متشکرم
مهمان
میشه این آی سی رو به آردوینو وصل کرد ؟
میشه داخلش بازی ریخت در حد کنسول های قدیمی، چون حافظه آردوینو محدود هست
مهمان
شما کار رو خیلی پیچیده کردی داداش باید افراد عادی هم متوجه بشن لااقل
درکل دمت گرم عااااااالی👏👏👏
مهمان
سلام . داداش پایه های A0-A1-A2 تو آیسی 24HC02.04وغیره دریافت آدرس هست . حالا میگی دریافت از چی ؟؟؟

دریافت از آیسی گیرنده رادیو برای گیرنده های ریموت
من این آیسی 24 رو به اتمگا و اینا وصل نکردم به جاش به 74HC138 وصل کردم که دیگه نیازی به کد دهی و … نداره خیلی ساده
مهمان
اجرت با هرانکس که بهش اعتقاد داری به اعتقاد من زکات هوش و علمی که خدا بهت عطا کردو به زیبایی پرداختی
مهمان
یک موردی که بهش اشاره نشد اینه که در این کد نوشته شده با نوشتن اطلاعات جدید این اطلاعات بر روی اطلاعات قدیمی سوار نمیشن در واقع اطلاعات جدید در فضای خالی حافظه کپی میشن. در صورتی که بخواهیم اطلاعات قبلی حذف شده و اطلاعات جدید جایگزین شن بایستی تابعی بصورت زیر قبل از نوشتن اطلاعات جدید فراخوانی شود.
(void eeprom_set(void
{
()i2c_start
(i2c_write(EEPROM_BUS_ADDRESS_W
()i2c_stop
}
}
مهمان
سلام دوست عزیز. دنبال یه EEPROM یه مگابیتی توی بازار داخل میگردم. هرچی تو سایت های داخلی میگردم بیشتر از 512 پیدا نمیکنم. شما میتونی منو راهنمایی کنی؟ ممنون میشم ازت
مهمان
سلام… مردی به مولا، دمت گرم، یه دونه باشی، واس نمونه باشی… ازت یک دنیا ممنونیم… khoda behet ghodrat bede
مهمان
یاشا قارداش
مهمان
سلام دوستان
میشه به جای 24c01 از 24c02 استفاده کرد
نویسنده این مطلب
سلام – دیتاشیت هر دو رو بررسی کن – پایه هاشون فرق نداشتن استفاده کن.
مهمان
یک سری از ای سی هایی هست که فلش هستند مثل AT45DB161 شما تا حالا با این ای سی ها کار کردید؟ اگر بله من از کجا برم در مورد نحوه کارباهاش بخونم فارسی یا انگلیسی معرفی کنید. بعد تفاوتی که این ای سی های با EEPROM ها دارند دقیقا چیه؟ من میدونم ضرفیتشون بیشتره ولی من برا یه کاری می خوام که قرار هست یک دادخ ای مکررا روی حافظه رایت بشه و چون EEPROM ها اکثرا صدهزار بار بیشتر ظرفیت رایت ندارند من رفتم سراغ اینا شما پیشنهاد بهتری ندارد؟
مهمان
دمت گرم مرد کارت 20 ع
مهمان
سلام و خسته نباشید من میخوام تصویر رو با استفاده از حافظه ۲۴c۶۴ذخیره کنم و در ال سی دی گرافیکی نشون بدم میشه یه توضیح کوچیک در مورد این موضوع بزارید ممنون
نویسنده این مطلب
سلام
عکس؟ 24c64? نمیدونم دقیقا پروژتون چیه ولی از رم هم میتونید استفاده کنید.
توضیح چی بدم – عکسو کد میکنی – در حافظه ذخیره میکنی و بعد میخونه و نمایش میدی-شما عکسو به کم تبدیل کن و داخل خود میکرو بزارش – نمایشش بده – اکی شد – برو بریزش تو حافظه و از اونجا بخون.
مهمان
سلام من دارم برای استخدامی نفت میخونم یه تست دیدم گفته ic حافظه به شماره 2816 کدام است؟ الف) EPROM
ب) EEPROM
ج) RAM دینامیک
د) RAM استاتیک
کلا میخام بدونم چطور میشه ic ها رو حساب میکنن یا ثابت هستن باید حفظ کنم و اینکه چطور پیدا کنم
نویسنده این مطلب
سلام

نفت؟ آیسی؟ چه ربطی داره – ربط هم داشته باشه، حفظ کردن اینا آخه دیگه چیه آخه جان داش – نمیدونم کدومشه – باید تو گوگل بسرچی اسم آیسیرو – طرف ( حالا هر کسی میخواد باشه ) مخ هم باشه – با تموم آیسی های موجود کار نکرده!!!
اینا دیگه چه موجوداتی هستن
مهمان
این احتمالاً یک پرسش تعیین سطح تجربه و نیمه اختیاری بوده برای استخدام در بخش کنترل و تولید ابزار دقیق. این شماره هم شماره تیپ تاریخی ایتوپرامهاست. نترس (:
مهمان
سلام و ممنون بابت اطلاعات خوبی که میذارید میخواستم ببینم حالا چجوری میشه AT24C512 رو پاک کرد
نویسنده این مطلب
سلام
در کل پاک کردن زیاد شاید منطقی به نظر نیاید – ولی میتونی از توابع نوشتن استفاده کنی و دیتا رو کاراکتر ۰ بدی ( و نه عدد ۰ )
مهمان
سلام آقا مهدی ممنون بابت تمام زحماتی که میکشی امیدوارم همیشه همین طور با علاقه بنویسی.
از اون روش ذخیره کردن با توابع نوشتن نمیتونم استفاده کنم چون حدود ۱۱ دقیقه طول میکشه…!
تا حافظه به صورت صحیح با کارکتر های صفر پر بشه من دنبال راهی هستم تا حد اکثر ۱ دقیقه.
یه سوال :
میتونی یه چند خط کد برای پاک کردن کل حافظه at24c512 قرار بدی من از دیتاشیت چیزی نفهمیدم
لطف میکنی اگر کد روشی که تو دیتاشیت گفته رو قرار بدی.
نویسنده این مطلب
سلام
به مطلب همین آییسی با ۱۷۶۸ مراجعه کنید – اونجا توابع کامل تر هستن.
مهمان
سلام
نمونه کدش برای آردوینو رو نداری توی سایت قرار بدی؟؟
اومدم یه پروژه با آردوینو ببندم بابام دراومده تیکه به تیکه به یه مشکلی میخورم
نویسنده این مطلب
سلام-نه-چی مالی هم تو نت پیدا نکردم – احتمالا خودم باید کتابخونشو بنویسم – ولی فعلا سرگرم کارای دیگم ولی مینویسم تو لیست و هفته آینده احتمالا انجام بدمش.
مهمان
کاری میتونم بکنم که به جای هفته دیگه همین دو سه روزه اوکی بکنیش؟

برای پروژه دانشگاه میخوام واقعا لازمش دارم
اصل مشکلم با این حافظه ایپرام خود آردوینو هست یه بار ازت پرسیدم گفتی ۱۰۰ درصد دائمی نیست ولی از هر کی دیگه میپرسم میگه دائمیه حتی توی آموزش ها خودت گفته بودی توی هر مکان از اپرام آی سی یه مقداری هست که از توی دیتاشیت میشه فهمید و اطلاعاتیه که کارخونه گذاشته توش از همین میشه فهمید که حافظه خودش هم کاملا دائمیه
من میخوام اطلاعات یه متغیر string رو روی ایپرام بریزم ولی بعد چند دقیقه که برد رو کاملا خاموش میکنم اطلاعات از روی اون مکانی که نوشته بودم پاک میشه
حدسی که میزنم از سر ریز شدن داده ها از اون آدرسه که اطلاعات رو توش ریختم
یه کمکی برسون شر این پروژه رو بکنم
نویسنده این مطلب
من هیچ قولی نمیدم – اول باید کارای دیگم تموم بشه – قول بدم بد نتونم اون وقت…
حافظه ایپرام avr دائمی هستش ولی ممکنه تحت شرایطی ریست بشه که برا اینم باید تو نت بگردی راه حلشو پیدا کنی.
مهمان
سفارشی بخوام میتونی انجام بدی برام؟
هزینش رو هم پرداخت میکنم چون واقعا لازمش دارم
نویسنده این مطلب
نه جان داش – پروژه دانشجویی انجام نمیدم.
مهمان
فقط قبلش دو تا تابعی که این داده رو یه نگاهی بهشون بکن ببین چه جوریه
http://turbodigital.ir/خواندن-و-نوشتن-رشته-string-در-eeprom-با-آردوینو-arduino/
مهمان
مثل همیشه عااالی
مهمان
حله.لاقل یه آیسی بگو که حافظه rx buffer رو بتونم افزایش بدم!!
نویسنده این مطلب
خب بگو دقیقا میخوای چیکار کنی
والا اولین باره میشنوم حافظه rx-buffer اگه منظورت همون بافر دریافت سریال هستش که نرم افزاری تعریف میکنن تا جایی که من دیدم – مگه این که حجم اطلاعاتت زیاد باشه اون وقت باس بسته به نوع کارت حافظه مناسب رو انتخاب کرد
مهمان
همون حافظه بافر منظورمه.rx interrupt.حجم اطلاعاتم ۹۰۰۰ کاراکتر هس ولی موقع کامپایل ارور میده مینویسه حافظه کمه.میخوام بدونم چه آیسی بزارم مهندس
نویسنده این مطلب
خب شما مثلا ۵۰ تعریف کن و ۵۰ تا ۵۰ تا کارت رو انجام بده.
قرار نیست که آرایه ای به اندازه طول دیتات تعریف کی که.
مهمان
مشکل اینجاس که کل اطلاعات یجا فرستاده میشه.نرخ تبادل اطلاعات ۹۶۰۰ هس
نویسنده این مطلب
خب باشه – شما هم که وای نمیسیتی تا کل دیتا دریافت بشه – همین که داره دیتا دریافت میشه، شما هم اون بلای مد نظر رو سر دیتا ها میاری کم کم.
مهمان
سلام خسته نباشی مهندس.یه سوال در مورد آی سی AT45DB32 داشتم.واسه اتصالش به میکرو باید در کدویزارد در قسمت external sram کدوم گزینه رو فعال کنم؟۱۶k , 32k , 2k , … چیه اصلا؟ممنون میشم پاسخ بدی.یا علی
نویسنده این مطلب
سلام-نمیدونم – کار نکردم با این آیسی
مهمان
میشه گفت که برای وارد کردن یک آدرس 16 بیتی به تابع های خوندن و نوشتن باید یکم تابع رو عوض کرد.
unsigned char eeprom_read(int BUS_ADDRESS_W,int BUS_ADDRESS_R,int address)
{
unsigned char data;
unsigned char addH, addL;
addH = ((address >> 8) & 0xff);
addL = address & 0xff;
i2c_start();
i2c_write(BUS_ADDRESS_W);
i2c_write(addH); //high byte address
i2c_write(addL); //low byte address
i2c_start();
i2c_write(BUS_ADDRESS_R);
data=i2c_read(0);
i2c_stop();
delay_ms(10);
return data;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void eeprom_write(int ADDRESS_BUSS,int address, unsigned char data)
{
unsigned char addH, addL;
addH = ((address >> 8) & 0xff);
addL = address & 0xff;
i2c_start();
i2c_write(ADDRESS_BUSS);
i2c_write(addH); //high byte address
i2c_write(addL); //low byte address
i2c_write(data);
i2c_stop();
delay_ms(10);
}
تو تابع های اصلاح شده بالا هر عددی که بین 0 تا 65535 بعنوان آدرس بدهید تابع تو اون قسمت مینویسه یا از اون میخونه.
حالا مشکل من تو مدل 1024 هستش که نمیدونم چطوری 17 بیت آدرس رو تو این دو بایت بفرستم !! اگر کسی بلده یا بگه یا بهم ایمیل کنه. ممنون
Saeedupdate@gmail.com
مهمان
سلام.
شرمنده این P یا همون صفحه که بجای A0…2 تو بعضی ها هست چیه؟ چه کاری میکنه؟ لطفا جواب بدین.
ممنون.
نویسنده این مطلب
سلام
حقیقتا یادم نیست باید برم دیتاشیت رو بخونم که حسش نیس جان داش
مهمان
بابا تو دیگه کی هستی؟ هر سوالی دارم جوابش تو سایت شما هست. قویاا تشکر می کنم. کاش موقعیتش پیش میومد شما رو ببینم
مهمان
با سلام . ممنون بابت مطالب خوب. اقا یه سوالی دارم . من تو میکرو از حافظه داخلی میکرو استفاده کردم ولی گالهی وقتا پاک میشه . میخوام اینو ایپرام خارجی کنم . الان من بیام فقط اسم متغیر رو تو ایپرام خارجی بفرستم یا چی ؟ اگه میشه یه توضیح بدی چطور اینکارو کنم . (کدی که قراره سیو شه یه ورودی چند بایتی هست و بعد مقایسه میشه . مثل یه رمز دیجیتال) ممنوووون
نویسنده این مطلب
سلام
اسم متغییر نه، مقدارش رو مثلا تو خونه 0 حافظه ایپرام ذخیره میکنی
فقط باید بدونی که هر متغییر کجای حافظه قرار داره
مهمان
سلام اقا مهدی اون تویه پروژه دیگه بود ک سوال کردم و این دو خط بلا استفاده بودن
من از دیتاشیتش ک خوندم متوجه شدم این دوخط ادرس سخت افزاری eepromرو مشخص میکنند چون در مد ارتباط i2c ما نیاز به ادرس سخت افزاری داریم
طبق دیتاشیت دو بیت A0 و A1 ک جزیی از یه رجیستر ۸ بیتی هستند رو میشه تنظیم کرد برا موقعی ک میخوایم چند تا ای سی حافظه ب میکرو متصل کنیم(البته بسته ب نوع ایسی eeprom محدوده)
ک در این پروژه چون یه ایسی داریم جفتش رو 0 میکنیم و با تنظیم بقیه بیت ها و بیت R/W ک یبار 0 و یبار 1 هست دو عدد 160 و 161بدست میاد
10100000
10100001
ک معادل ۱۶۰ و ۱۶۱ هستن
و A0 وA1 به ترتیب بیت ۲ و ۳هستن
و بیت 0 ‘ بیت R/W هست
موفق باشی
مهمان
سلام
اقا مهدی من کله سوالاتو خوندم همچین سوالی مطرح نشده بودا…!!!
جواب نداده بودید .
نویسنده این مطلب
سلام
گفتم قبلا – این دو خط اشتباهی در پروژه قرار داده شده و کاربردی نداره
مهمان
سلام خسته نباشید
ممنون بابت توضیحاتتون خداییش مفید بود
فقط من خودمو کشتم و دیتاشیتم ی نگاهی انداختم ولی این دوخط رو متوجه نشدم میشه توضیح بدید
ممنون
eeprom_bus_addres_w 160
eeprom_bus_addres_r 161
چرا تو همه برنامه هایی ک برا ارتباط با eepromنوشته میشه ادرس read و write
160و 161 در نظر گرفته میشه
نویسنده این مطلب
سلام-قبلا جواب دادم
مهمان
سلام
اقا من هم با at24c2 کار کردم هم با at24c64 هر دوتاش تا 31 بایت رو میتونم ذخیره کنم وقتی ادرس حافظه رو 32 میکنم دوباره تو خونه ی ادرس 0 مینویسه
32 به باینری میشه 100000
و 31 به باینری میشه 11111
لطفا کمک کنید
مهمان
در مورد پایه های a2,a1,a0 که فرمودید هر کی میدونه بگه ، من میدونم ، شما بزارید داخل متن اصلی
شما آدرس سخت افزار برا نوشتن رو گذاشتی 160 و خوندنی رو گذاشتی 161
حالا این دو عدد رو به صورت باینری من مینویسم
160=10100000
161=10100001
صفحه 11 از دیتاشیت گفته بیت شماره صفر برای خوندی 1 و برا نوشتن 0 هست، که در بالا میبینید شما هم رعایت کردید
حالا اگه یک آی سی پایه شماره a0 را به مثبت وصل کردید که شما در بالا گفتید همه رو بدنه کنیم باید بیت شماره 1 رو یک کنیم اگه a1 رو به مثبت دادی باید بیت شماره 2 را یک کنی و اگر a2 را به مثبت دادی باید بیت شماره 3 را یک کنید و آدرس سخت افزاری به این شکل برا هشت آی سی رو یک باس میتونه آدرس دهی بشه
فقط من خودم هم یه چیز رو نفهمیدم برا آدرس دهی حافظه 32kB نیاز به آدرس صفر تا 32768 بایت داریم
اما در صفحه 11 دیتاشیت گفته چهار بیت از بایت اول بی اهمیت هست در این صورت ما با 12 بیت آدرس دهی میکنیم
ولی 12 بیت که فقط میتونه 4096 بایت اشاره کنه، حالا ما باید چطور بقیه حافظه رو بخونیم؟
البته دیتاشیت گفته حافظه 32k تشکیل شده از هشت صفحه 4096 بایتی
حالا چطور ما باید به صفحه های دیگه دسترسی داشته باشیم؟
مهمان
عزیزم بیت های آدرس 16تا هستن یعنی میتونن مقادیر 0 تا 65535 رو اختیار کنن. 65535*8 = 524280 یا همون 512 کیلو بیت. حالا مشکلی نداریم تو آدرس دادنش.
مهمان
سلام
منتظر پاسخ شما هستم
نویسنده این مطلب
سلام
فک کنم جواب نظراتتون رو دادم
یه ctrl +f5 بزنی مشکل حل میشه
مهمان
با سلام
با avr -atmega16
توسط دستورات مربوط به راه اندازی i2c با کمک برنامه شما میتونم اعداد از 1 تا 9 رو بصورت هگز در eeprom 24c512 بریزم و بخونم و روی gcd نمایش بدم. در ضمن با کدویزن کار می کنم
نویسنده این مطلب
سلام
داش این که بخوای من برات انجام بدم به نظرم اشتباه هستش – چون هر کسی کار داره – منم بدم نمیاد این پروژه رو انجام بدم و بزارم تو سایت – قبلا هم تو فکرش بودم ولی وقت نکردم – به نظرم شما خودت بسم الله کار رو بگو و شروع کن و اگه مشکلی داشتی ازم بپرس – وگرنه این طوری حقیقتا وقت نمیکنم – نمیخوام بپیچونمت یا دروغ بگم – دارم حقیقت امر رو میگم.
مهمان
با سلام
اقا مهدی من در رابطه با ارسال کد عکس به 24cxx وخواندن اون و نمایش روی glcd دچار مشکل شدم.باارسال این کد به حافظه فلش میکرو همه چیز درست کار میکند ولی در eeprom نمیتوانم.لطفا در رابطه با ارسال و دریافت کد عکس در 24cxx یک مقدار توضیح داده یا لینک مناسبی رو توصیه بفرمایید.(خیلی به این برنامه نیازمندم)
با تشکر
نویسنده این مطلب
سلام
با avr میخوای یا آردوینو؟
مشکلت کجاس؟
اول تست کن ببینم میتونی دیتا در ایپرام بنویسی و بخونی و بعد برو سراغ نمایشگر
مهمان
معذزت میخوام چطوری میشه آدرس هرکدوم رو مشخص کرد ؟ چون در دستورات راه اندازی I2C ما باید پورت و پینی که بهش وصل میشیم رو تعریف کنیم . چطور مبشه مثلا دو تا پین رو تعریف کرد؟
نویسنده این مطلب
خط 29 پروژه رو ببین
مهمان
با سلام
اگه با I2C همزمان ماژول ساعت رو هم راه اندازی کنیم باهم تداخلی ندارن ؟ برای رفع مشکل چی باید کرد ؟ ممنون
نویسنده این مطلب
سلام – مشکلی رخ نمیده – اون عکس اول مطلب رو ببین که چندید قطعه و ماژول و … از طریق i2c بهم وصل هستن.
مهمان
ممنون از پاسختون.می شه بفرمایید از چه طریق می شه به اون مطالب دسترسی داشت من پیدا نکردم و بعد اینکه برای پروگرام کردن eeprom باید از پروگرمر خاصی استفاده کرد یا با خود avr میشه.
با سپاس
نویسنده این مطلب
کدوم مطالب؟
با Avr هم میشه دیتای ایپرام خارجی رو خوند و نوشت با بعضی پروگرامر ها هم میشه
مهمان
اقا مهدی از زحمات شما بینهایت متشکرم.اگر ممکنه در رابطه با ذخیره اطلاعات به صورت صفحه ای در ای سی های eeprom 24cxxx توضیح بدید. من میخواهم کد عکس را در حافظه ذخیره کنم و سپس با glcd نمایش بدم.
پیشاپیش از راهنماییتون ممنونم
نویسنده این مطلب
سلام
والا با Avr من مطلبش رو گزاشتم – برا آردوینو هم چند بار خواستم بزارم ولی امان از….
سعی میکنم تا 3 روز آینده بزارم تو سایت(البته اگه فراموش نکنم)
مهمان
عالی بود عین خودت مهدی جان
مهمان
با سلام میشه در مورد کارت تلفن هم صحبت کنین
نویسنده این مطلب
سلام
فعلا درگیرم
ولی تو نت مطالب خوبی من قبلا دیده بودم…
مهمان
من میخام تو کد ویژن برنامه نویسیش کنم کتاب خونه پیدا نکردم i2c های شمارو خوندم موندم تو آدرس دهی هاش تور هر سایتی یه چیزی گفته
نویسنده این مطلب
والا با این سنسور من کار نکردم واطلاعاتی در این زمینه ندارم
ولی اگه کتابخونش رو پیدا کنی کارت خیلی راحت میشه و در عرض یه روز میتونی راه اندازیش کنی
که نحوه استفاده از کتابخونه هم معلومه…خود کتابخونه توابعش رو معمولا طوری مینویسن که طرف متوجه میشه هر تابع کارش چیه و طوری نیست طرف نفهمه
مهمان
سلام
من میخوام با mlx90614 و avr ارتباط بر قرار کنم نمی فهمم کجای دیتا شیت رو بخونم
نویسنده این مطلب
سلام
معمولا آی سی ها و نسنور و ماژول ها کتابخونه ای برات تو نت پیدا میشه(البته اگه خوب بگردی)
https://www.google.com/search?es_sm=93&q=mlx90614+LIBRARY+FOR+AVR&oq=mlx90614+LIBRARY+FOR+AVR&gs_l=serp.3…24488.36189.0.36407.0.0.0.0.0.0.0.0..0.0….0…1c.1.64.serp..0.0.0.RzwbS6eIVSw
ولی اگه حتما میخوای دیتاشیت رو بخونی باید بگم غیر از پروتکول ارتباطی اون سنسور که باید خوب بلدش باشی، دیتاشیت سنسور رو هم باید کلش رو بخونی…..صفحات اولیه معمولا یه سری توضیحات کلی درباره سنسور میگه….ولی اگه بخوام دقیقا جواب سوالت رو بدم باید بگم تمام دیتاشیت رو باس بخونی
مهمان
من کارت sd ماژول sd گرفتم . می تونم اطلاعات رو بخونم ولی نوشتن رو خیر.
البته اونم از یک پروژه برداشتم .
حال میشه خیلی راحت و خلاصه یک کد بزارید بخونه و بنویسه داخل فایل متنی در sd کارت ؟
ممنون
مهمان
عالییییییییی ولی چرا هیچی نفهمیدم؟؟

نویسنده این مطلب
کجاش؟
مهمان
سلام خسته نباشید.یه سوال داشتم من باید برای پروژه ام دمای محیط رو که متغیر هستش سنس کنم و توی eeprom ذخیره کنم؟نمیدونم چطور باید یک متغیر رو توش ذخیره کنم؟میشه کمکم کنید؟مرسی
نویسنده این مطلب
سلام
تو مطلب>توی پروژه>>> متغییر داخل آی سی ریختم که!!!
چیش رو بگم؟
تو مطلب مگه نگغتم؟
مهمان
سلام از اطلاعاتی که درباره IC حافظه در اختیارمون قرار دادید بی نهایت متشکرم.
نویسنده این مطلب
سلام
بی نهایت وجود نداره لذا…
شوخی کردم
مهمان
با سلام.
باید برای هر دو ای سی کد جدا بنویسیم؟
یه سوال دیگه.کد بالا روی ایسی حافظه قرار میگیره یا ATmega3؟
نویسنده این مطلب
سلام
این برنامه رو mega پروگرام میشه و کارش ریختن اطلاعات بر روی آی سی هستش….
ok?
مهمان
اقا مهدی میشه راهنمایی کنید
نویسنده این مطلب
تو eca مطرح کنید
مهمان
من میخوام یه ارایه دو بعدی توی eepromذخیره کنم مثلا تو پروژه زیر میخوام ۷۰بشه ۸۰۰۰
***
مهمان
سلام یه سوال میشه حافظه رو به صورت یه ارایه درست کنیم یعنی به شکل زیر
char a [10][10]
نویسنده این مطلب
سلام…متوجه نشدم
مهمان
تو رو خدا I2C رو هم تو یه جلسه کامل توضیح بده مثل usart که با یه پروژه ساده هم ارسال و هم دریافتشو توضیح داده بودی.مرسی
نویسنده این مطلب
چشم حتما سر وقت
الان موقع امتحاناتم هستش
مهمان
صددرصد SD/MMC
^_^
مهمان
ببخشید سرت رو درد اوردم شما یک عدد رو 8 بیت 8 بیت کن تا ما هم یاد بگیریم اخه بی سوادیم فقط با مثال متوجه میشیم
و تنها کاری که بلدم ساخت PCB با مارکاژ و سولدر هستش به صورت صنعتی که فایل اموزشش اماده بشه اگر امکانش هست اینجا بگذاریمش
مهمان
خوب مهندس دردمن هم همینه بی سوادیم گل کرده و بلد نیستم این کار رو بکنم اول 8 بیت 8 بیت کنم و بعد باز کنار هم بگذارمشون و یکی بشن الگوریتمش رو نمیفهمم و بلد نیستم
نویسنده این مطلب
۸ بیت ۸ بیت کن….ذخیره کن….بخون….متصل کن
نویسنده این مطلب
تو همه کتابهای avr نوشته شده….
نویسنده این مطلب
راه۱) ۲۰۰ تا ۲۰۰ تا (یا مثلا ۲۵۵ تا ۲۵۵ تا ) کن عدد رو و ذخیره کن و بعد با هم جمع کن
راه۲) عددت رو درمبنای ۲ بنویس و ۴ بیت ۴ بیت از سمت راست جدا کن و ذخیره کن و بچسبون
مهمان
درسته اما رشته ثابت رو نمیخوام ذخیره کنم.
ببخشید اما برای اعداد بالای 255 جواب نمیده
یعنی من نتونستم باهاش کار کنم
میشه با یک مثال بگید که بشه مثلا عدد 9550 رو داخل حافظه ذخیره و از داخل حافظه بخونیم و روی LCD نمایش بدیم
نویسنده این مطلب
۲۵۵ یعنی یه عدد ۸بیتی—-۸ بیت ۸ بیت باس ذخیره کنی و بعد موقع خوندن متصل کنی به هم—–بالای ۲۵۵ هم نباید جواب بده—
مهمان
ممنون و سپاس از سرعت پاسخگویی امتحان میکنم ببینم چ میشود متغیر j رو با یک متغیر از نوع int مقدار بدم
و برای رشته مثل hello چ باید کرد
نویسنده این مطلب
دادا مگه من حروف انگلیسی رو کلمه کلمه ذخیره نکردم….تو هم اینو کلمه کلمه ذخیره کن
مهمان
سلام ممنون از برنامه کاملی که قرار دادین
چند تا سوال ببخشید چطوری میشه داده از نوع int رو داخل AT24cxx نوشت و دوباره خوندش
و سوال دوم اینکه چطور میشه یک رشته مثل hello رو داخل این سری حافظه نوشت و دوباره اون رو خوند
با سپاس
نویسنده این مطلب
سلام
تو مطلب-قسمت کد ها-قسمت void main رو نگاه کنی جواب سوالت رو پیدا میکنی………….تو اون حلقه هه به چای j عدد بزار…از نوع int بزار
مهمان
اقا دمت گرم واقعا
مهمان
سلام ،خسته نباشید . مطالب بسیار عالی بود. یک سوال داشتم ،ممنون می شم اگه پاسخ بدید
نحوه ریست کردن کل اطلاعات در این مدل حافظه چگونه است؟
نویسنده این مطلب
سلام
تو دیتاشیتش کامل گفته……
مهمان
سلام.اولش که نوشتم lpc1788 این همون آرم هست دیگه.
نویسنده این مطلب
سلام….والا من با آرم کار نکردم و اطلاعی در موردش ندارم
مهمان
سلام .اینم لینکش
http://uplod.ir/wqa2sx1zjofr/%5B02%5D_EV_EEPROM_(AT24Cm
با at24c02 کار میکنه ولی با 128 نه اگر اصلاح کردی برام بفرستی ممنون میشم.
برا استارت آرم هم فایلای زیادی دارم .ایمیلت رو بده سر فرصت برات میفرستم.
کل پروژه با کیل نوشته شده.128).rar.ht
رو سایت هم آپلود کردم.منتظر میمونم.
نویسنده این مطلب
گفتم که….با آرم کار نکردم(رفتم کتابش رو بخرم ولی…)
پروژه تو هم که با آرم هستش….این کتاب خونه برا کدویژن هستش و نه آرم….
مهمان
اینه که توی ایپرام نوشته نمیشه.شما با میکرو آرم کار کردی؟برا این ایپرام کتابخانه ای داری؟
نویسنده این مطلب
با آرم کار نکردم ولی تو فکرشم…

پروژت چیه…..کداش رو ببینم…..(آپلود کن تو سایت برام بفرست)……….من تستش کردم و گزاشتم تو سایت
مهمان
اینه که کار نمیکنه !شما کتابخانه ای برای این داری؟یا هدری؟شما با میکرو آرم کار کردی؟اینجا شما مینویسی i2cstart
اونجا باید این تابع رو خودت درست کنی .اینجا مینویسی i2cstop ولی اونجا باید اینو خودت بنویسی و کل توابعی مثل i2c_write(data); اینا رو من انجام دادم ولی هرکاری میکنم نمیشه .شما کتابخانه ای داری که کار کنه؟من یه چند تا لایبرری دارم ولی وقتی استفاده میکنم میبینم کار نمیکنه با جلینک تست گرفتم.از سخت افزار مطمئنم .نرم افزار مورد داره.
مهمان
سلام.من یه ایپرام خارجی به lpc1788 وصل کردم ولی هرکاری میکنم جواب نمیده.هر کی بلده کمک کنه.ایپرامم هم at24c128 هست.هزینه هم پرداخت میکنم.کل پروژه رو انجام دادم توی این قسمت گیر کردم.
نویسنده این مطلب
سلام
مشکل پروژت چیه؟
مهمان
سلام و خداقوت خدمت آقا مهدی، خیلی آقایی
خیلی ممنون که وقت میذاری
موفق باشی داداش
نویسنده این مطلب
سلام
چاکریم.
مهمان
چشم حتما پروژت چی هست؟
مهمان
فردا میتونی یه نگاه بندازی؟
نویسنده این مطلب
چان داش اصلا کارام معلوم نیست……یه پروژه هستش که 1 ماهه پاشم ولی مشکلش هنوز که هنوزه حل نشده…دارم دیوونه میشم…کسی هم نیست کم کنه…تو eca هم کسی بلد نیست انگار….اگه هم بلد باشه جواب ما رو نمیده….یکی بلد بود….بابت رفع مشکلم پول میخواست……
نویسنده این مطلب
در ضمن یکی از کاربرای سایت تو مطالبت نظر گزاشته….بیا تاییدش کن……
مگه وقتی یکی تو مطالبت نظر میده….برات ایمیل نمیاد؟؟؟؟
مهمان
ما که بی سوادیم ولی بزار یادبگیرم اگه خدا توفیق بده سایتمونو از مطلب می ترکونم.به جون خدا یه لحظه می خواستم بنویسم سایتمون ولی گفتم ناراحت میشی دروغ نمی گم
نویسنده این مطلب
مدار رو که بهت دادم…..کدت رو بده بهش ببین چطور عمل میکنه……من الان کار دارم خودم….در ضمن چرا سایتت؟؟
مگه تو با ما نیستی؟
مهمان
سلام
آقا مهدی ممنون از اینکه وقت برای نوشتن و آموزش میذارین واقعا سایتتون یکی از کاملترین سایتهای آموزش AVR هستش که هم زود به زود و هم مطالب جدید و غیر تکراری گذاشته میشه امیدوارم ادامه داشته باشه چون آموزش AVR نصفه و نیمه تو اینترنت زیاد هستش بابت زحماتتون واقعا ممنونم امیدوارم در تمام مراحل زندگی موفق باشین.
نویسنده این مطلب
سلام
ممنون…
مهمان
ممنون اقا مهدی