آموزش کار با حافظه EEPROM خارجی(خواندن و نمایش عکس!بررویLCD)

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22016 بار
تماس:

Re: آموزش کار با حافظه EEPROM خارجی(خواندن و نمایش عکس!بررویLCD)

پست توسط sinaset » شنبه 20 بهمن 1397, 10:55 pm

باسلام .

کاربر محترم،به این نکته توجه کنید،تابع eeprom براساس char هستن،و شما نباید متغییر int را برای تابع int بفرستید،اگر بفرستید هشت بایت اول ان فقط فرستاده میشود.

برای اینکه،هر ادرس ایسی ها eeprom خارجی هشت بایتی هستن.

شما باید هشت باید اول را در ادرس 0 و هشت بایت بعد را در ادرس 1 قرار دهید !(ادرس 0 و 1 یک مثال بود!) 

به عنوان مثال این دو تابع دریافت و ارسال برای حافظه eeprom ما هستن:
Please Login or Register, to see this code int v=58200;
int Get;
نحویه نوشتن
;((eeprom_write(0,(v<<8
;(eeprom_write(1,v

نحویه خواندن:

;(Get=eeprom_read(0
8>>Get=Get
;(Get=eeprom_read(1

در واقع به کمک شیفت دادن،ابتدا هشت بایت اول فرستاده میشود! سپس،ادرس بعدی هشت بایت eeprom انتخاب میشود،سپس هشت بایت انتهای فرستاده میشود.
و برخواندن نیز،با همان ترتیب ادرس ها از ایسی حافظه خوانده میشود و دیتات شیفت داده میشوند، تا متغییر int که Get می باشد،همان مقدار V ابتدای شود.

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

New Member
پست: 1
تاریخ عضویت: یک شنبه 22 اردیبهشت 1398, 12:38 pm
سپاس‌های ارسالی: 1 بار
سپاس‌های دریافتی: 1 بار

Re: آموزش کار با حافظه EEPROM خارجی

پست توسط ali_barani » یک شنبه 22 اردیبهشت 1398, 12:44 pm

sinaset نوشته شده:
دو شنبه 19 مهر 1395, 4:04 pm
بنام خدا
باسلام  

   نحویه برنامه نویسی و پرتئوس!  

همانجور که در پست قبل گفتیم ما از ایسی     کرده ایم . تصویر  می خواهیم،در برنامه شبیه ساز ، حرف "  " رو بر روی خانه 0 ایسی     کنیم،سپس بعد از ذخیر سازی،ان را بر روی     کنیم !

قبل از هر چیز،در برنامه کدویژن باید در قسمت   ، تنظیمات مربوط به I2c را مشخص کنیم،

  در   ==>  project/configure/c compiler/Libraries/  تصویر 
در این قسمت باید پایه کلاک     پایه دیتا DATA که به میکرو اتصال پیدا کرده اند را مشخص کنید. (  مانند تصویر  )

در ادامه،بعد از مشخص کردن پایه ها، باید همراه به کتابخانه لازم،کتابخانه، i2C را معرفی کنیم

Please Login or Register, to see this code

سپس در مرحله بعد،برای راحتی کارهای ما در برنامه،دو شناسه ،مربوط به آدرس سخت افزاری ایسی و آدرس سخت افزاری برای زمان که قصد خواندن از حافظه     تعریف می کنیم
Please Login or Register, to see this code

همانجور که می ببینید مقدار    (آدرس سخت افزاری برای شناسایی ایسی و برای نوشتن بر روی آیسی نیز استفاده  )برابر با     می باشد! که به باینری میشود    ، همان مقداری که در پست بالا بطور مفصل تر توضیح دادیم
و در یک شناسه دیگر     با 161 دسیمال می باشد که به باینری     باشد، همان مقداری که در اخر پست قبل ان را توضیح دادیم، مقداری که زمانی که برای ایسی فرستاده شود،می توان مقداری را از ایسی خواند!

اما در ادامه کارهای مهم ، وارد تابع     شویم ، در انجا ابتدا باید،     مقدار دهی اولیه کنیم.

Please Login or Register, to see this code

اکنون میکروکنترولر خود را اماده کرده است تا به ایسی ارتباط برقرار کند.
برای شروع ابتدا به کمک دستور زیر (که مربوط به تابع i2c می باشد  ) بیت شروع را برای ایسی ارسال می کنیم(   شروع را در پست قبل توضیح  )

Please Login or Register, to see this code

بعد از فرستادن دستور شروع، آدرس سخت افزاری ایسی را به کمک   ()  برای ایسی ارسال می کنیم:
Please Login or Register, to see this code
همانجور که می ببینید، بین دستور i2c_write ، شناسه آدرس سخت افزاری (که 160 یا 10100000 می  ) برای ایسی ارسال می شود،تا بعد از صحیح بودن ادرس، ایسی خود را برای دستور بعدی ما،خود را اماده کند!

اما در ادامه،باید، آدرس خانه حافظه،برای ذخیر شدن اطلاعات در ایسی را ارسال کنیم، (  که در پست گذشته گفتیم،آدرس خانه ها ،مجموعه دو بایت می باشد! ) چون ما قصد داریم،در آدرس 0،دیتا را ذخیر کنیم،هر دو بایت را برابر با 0 قرار میدهیم:

Please Login or Register, to see this code

اکنون که ادرس را برای ایسی فرستاده ایم،باید دیتا را بفرستیم،که ما قصد داریم     را ذخیر کنیم برای این منظور،کد زیر را ارسال می کنیم:
Please Login or Register, to see this code

خوب کار تمام است و اطلاعات بر روی ایسی ذخیر شده است! ولی هنوز ارتباط     است!برای همین باید دستور    (  همان بیت stop می  ) را برای ایسی ارسال کنیم
Please Login or Register, to see this code

و در پایان باید 5 میلی ثانیه تاخیر نیز لحاظ شود (  eeprom سرعت پایین در ذخیر سازی دارد،که در حدود چند میلی ثانیه می باشد، برای همین بعد از ذخیره سازی هر دیتا،یک تاخیر 5 میلی ثانیه باید لحاظ باید  )

-----
 [HIGHLIGHT=#76923c]اما برای خواندن دیتا از ایسی:   
ابتدا بیت     می کنیم

Please Login or Register, to see this code

سپس آدرس سخت افزاری ایسی را ارسال می کنیم
Please Login or Register, to see this code

سپس آدرس خانه حافظه را از ارسال می کنیم (چون دیتا در ادرس 0 صفر می باشد، آدرس هردو بایت 0 قرار  )
Please Login or Register, to see this code

اما در ادامه،باید یک بار دیگر بیت شروع را از دوباره بفرستیم!
Please Login or Register, to see this code

در ادامه،باید آدرس سخت افزاری،برای خواندن اطلاعات را ارسال کنیم (  در واقع همان آدرس سخت افزاری ایسی می باشد! با این تفاوت که فقط بیت اخر،که مربوط به نوشتن و خواندن می باشد، 1  )
Please Login or Register, to see this code

حال به کمک دستور زیر،دیتا را می خوانیم و د متغیر مدنظرمان میریزیم
Please Login or Register, to see this code

دیتا به درون متغیر    ریخته میشود!
اکنون دیگر همه چیز اماده است و می توانیم دیتا را بر روی     بدهیم !

   برنامه:  

Please Login or Register, to see this code
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]برنامه و شبیه ساز.

باتشکر.

سلام و خداقوت

آیا درصورتی که فرکانس کریستال ریزپردازنده 12MHZ باشد در کد نویسی تغییری باید بدهیم؟

درآزمایشگاه ریزپردازنده که نمونه پروژه کتاب AVR جابر الوندی را تست کردیم  هیچ عددی در حافظه نوشته نشد و فقط مقدار خواندن را 255 نمایش داد

ممنون می شوم راهنمایی کنید

تشکر از مطالب خوب و توضیح کاملتان

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”