سلام
با اجازه اساتید بزرگوار چون دیدم در این مدت خیلی سوال در این مورد شد این جسارت را میکنم که تا جاییکه سوادم برسه در مورد eeprom بنویسم
اول یه کمی در مورد eeprom میگم بعد میریم سراغ کار با آن:
eeprom مخفف (Electrical Ereasable Read Only Memory) میباشد یکی از خصیصه های بسیار مهم این حافظه این است که با قطع برق پاک نمیشود و یکی از عیب های بزرگ آن اینست که سرعت نوشتن در آن خیلی کند میباشد(حدود 2 تا 3 میلی ثانیه)
حال در مورد کار با آن:
ببینید شما به خانه های این حافظه نمیتونید دسترسی مستقیم داشته باشید (یعنی مثل RAM ) نیست شما باید با استفاده از 3 رجیستری که گفتم (EECR وEEDR وEEAR ) با این حافظه کار کنید حالا چطوری؟؟
2 موردی که در حافظه مهم است یکی آدرس خانه هاست و یکی اطلاعاتی که شما میخواهید ذخیره کنید برای مثال شما میخواهید عدد 203 را در خانه ای به آدرس 546 ذخیره کنید و همانطور که میبینید این دو عدد هیچ ربطی به هم ندارند و هر کدام بیانگر یک معنی خاصند
نوشتن در eeprom بوسیله CPU
شما باید اول آدرس خانه ای که میخواهید در آن بنویسید را در رجیستر آدرس یعنی EEAR که مخفف (eeprom address register) هست بریزید مثلا 546 (در ضمن eeprom مگا 32 1024 کاراکتر جا دارد)
سپس data یا اطلاعاتی که میخواهید در این خانه ذخیره شود (حتما از نوع کاراکتر 8 بیتی از 0 تا 255) را در رجیستر EEDR که رجیستر دیتا و مخفف (eeprom data register ) است بریزید مثلا 203 حالا همه چیز آماده است تا شما فرمان write را بدهید برای این کار را باید با رجیستر EECRآ انجام دهید:

همانطور که ملاحظه میکنید ما با 4 بیت آخر این رجیستر کار میکنیم برای نوشتن در eeprom باید در ابتدا بیت EEWME یعنی بیت سوم را یک کنیم بعد از آن بلا فاصله باید بیت EEWEرا یک کنیم با این کار عدد داخل EEDR در خانه ای با آدرس EEAR ذخیره میشود اکنون باید شما 2 میلی ثانیه صبر کنید تا عدد نوشته شود یا صبر کنید تا بیت EEWE صفر شود(در این مثال من صبر مینم تا این بیت صفر شود) اینم کد:
EEDR=203;
EEAR=546;
EECR=0x04;
EECR=0x02;
while((EECR&0x02)==1);
خواندن از eeprom بوسیه CPU
برای خواندن باید اول آدرس خانه ای که میخواهید بخوانید در EEAR قرار دهید (مثلا خانه 742) سپس فرمان خواندن بدهید یعنی بیت اول از EECR یعنی EERE را یک کنید بعد از این کار دیتا موجود در خانه ای که توسط EEAR آدرس دهی شده بود (742) در EEDR ریخته میشود حال شما باید مقدار EEDR را در یک کاراکتر بریزید این هم کد مربوطه:
EEAR=742;
EECR=0x01;
data=EEDR;
در اینجا نیاز به صبر کردن نیست چون فقط نوشتن در eeprom زمانبر است
حال ممکن است بپرسید خب این کار چه فرقی داره با نوشتن یک خط eeprom char data در برنامه؟ دیگه این همه دنگ و فنگ نداره که!!!!!!!!!!!!!!!!!!!!
باید بگم دو مزیت عمده این عمل اینه که:
1) شما با استفاده از این روش میتونید با پروگرامر مقادیر داخل eeprom را خوانده و بسته به آدرسی که دارند آنها را تفسیر کنید یعنی با CPU میکرو عدد را داخل eeprom نوشته و برای خواندن با کامپیوتر این کار ر انجام دهید
2) با پروگرامر eeprom را پروگرام میکنید و هر عددی که خواستید در هر آدرسی که خواستید مینویسید و سپس در برنامه با آدرس دهی بوسیله CPU از این اعداد استفاده میکنید و این مورد دوم بسیار پر کاربرد است
انشا الله در قطعه بعدی این روش که چطور با پروگرامر این کار را انجام دهید را کاملا توضیح میدهم
با اجازه اساتید بزرگوار چون دیدم در این مدت خیلی سوال در این مورد شد این جسارت را میکنم که تا جاییکه سوادم برسه در مورد eeprom بنویسم
اول یه کمی در مورد eeprom میگم بعد میریم سراغ کار با آن:
eeprom مخفف (Electrical Ereasable Read Only Memory) میباشد یکی از خصیصه های بسیار مهم این حافظه این است که با قطع برق پاک نمیشود و یکی از عیب های بزرگ آن اینست که سرعت نوشتن در آن خیلی کند میباشد(حدود 2 تا 3 میلی ثانیه)
حال در مورد کار با آن:
ببینید شما به خانه های این حافظه نمیتونید دسترسی مستقیم داشته باشید (یعنی مثل RAM ) نیست شما باید با استفاده از 3 رجیستری که گفتم (EECR وEEDR وEEAR ) با این حافظه کار کنید حالا چطوری؟؟
2 موردی که در حافظه مهم است یکی آدرس خانه هاست و یکی اطلاعاتی که شما میخواهید ذخیره کنید برای مثال شما میخواهید عدد 203 را در خانه ای به آدرس 546 ذخیره کنید و همانطور که میبینید این دو عدد هیچ ربطی به هم ندارند و هر کدام بیانگر یک معنی خاصند
نوشتن در eeprom بوسیله CPU
شما باید اول آدرس خانه ای که میخواهید در آن بنویسید را در رجیستر آدرس یعنی EEAR که مخفف (eeprom address register) هست بریزید مثلا 546 (در ضمن eeprom مگا 32 1024 کاراکتر جا دارد)
سپس data یا اطلاعاتی که میخواهید در این خانه ذخیره شود (حتما از نوع کاراکتر 8 بیتی از 0 تا 255) را در رجیستر EEDR که رجیستر دیتا و مخفف (eeprom data register ) است بریزید مثلا 203 حالا همه چیز آماده است تا شما فرمان write را بدهید برای این کار را باید با رجیستر EECRآ انجام دهید:

همانطور که ملاحظه میکنید ما با 4 بیت آخر این رجیستر کار میکنیم برای نوشتن در eeprom باید در ابتدا بیت EEWME یعنی بیت سوم را یک کنیم بعد از آن بلا فاصله باید بیت EEWEرا یک کنیم با این کار عدد داخل EEDR در خانه ای با آدرس EEAR ذخیره میشود اکنون باید شما 2 میلی ثانیه صبر کنید تا عدد نوشته شود یا صبر کنید تا بیت EEWE صفر شود(در این مثال من صبر مینم تا این بیت صفر شود) اینم کد:
EEDR=203;
EEAR=546;
EECR=0x04;
EECR=0x02;
while((EECR&0x02)==1);
خواندن از eeprom بوسیه CPU
برای خواندن باید اول آدرس خانه ای که میخواهید بخوانید در EEAR قرار دهید (مثلا خانه 742) سپس فرمان خواندن بدهید یعنی بیت اول از EECR یعنی EERE را یک کنید بعد از این کار دیتا موجود در خانه ای که توسط EEAR آدرس دهی شده بود (742) در EEDR ریخته میشود حال شما باید مقدار EEDR را در یک کاراکتر بریزید این هم کد مربوطه:
EEAR=742;
EECR=0x01;
data=EEDR;
حال ممکن است بپرسید خب این کار چه فرقی داره با نوشتن یک خط eeprom char data در برنامه؟ دیگه این همه دنگ و فنگ نداره که!!!!!!!!!!!!!!!!!!!!
باید بگم دو مزیت عمده این عمل اینه که:
1) شما با استفاده از این روش میتونید با پروگرامر مقادیر داخل eeprom را خوانده و بسته به آدرسی که دارند آنها را تفسیر کنید یعنی با CPU میکرو عدد را داخل eeprom نوشته و برای خواندن با کامپیوتر این کار ر انجام دهید
2) با پروگرامر eeprom را پروگرام میکنید و هر عددی که خواستید در هر آدرسی که خواستید مینویسید و سپس در برنامه با آدرس دهی بوسیله CPU از این اعداد استفاده میکنید و این مورد دوم بسیار پر کاربرد است
انشا الله در قطعه بعدی این روش که چطور با پروگرامر این کار را انجام دهید را کاملا توضیح میدهم
دیدگاه