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

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

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

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

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

پست توسط sinaset »

باسلام .

کاربر محترم،به این نکته توجه کنید،تابع 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
تاریخ عضویت: یک‌شنبه ۲۲ اردیبهشت ۱۳۹۸, ۱۲:۳۸ ب.ظ
سپاس‌های ارسالی: 1 بار
سپاس‌های دریافتی: 1 بار

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

پست توسط ali_barani »

sinaset نوشته شده: دوشنبه ۱۹ مهر ۱۳۹۵, ۴:۰۴ ب.ظ بنام خدا
باسلام  

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

همانجور که در پست قبل گفتیم ما از ایسی     کرده ایم . تصویر  می خواهیم،در برنامه شبیه ساز ، حرف "  " رو بر روی خانه 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
[External Link Removed for Guests]برنامه و شبیه ساز.

باتشکر.

سلام و خداقوت

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

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

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

تشکر از مطالب خوب و توضیح کاملتان
New Member
پست: 4
تاریخ عضویت: دوشنبه ۱۳ آبان ۱۳۹۲, ۳:۵۰ ب.ظ
سپاس‌های ارسالی: 8 بار

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

پست توسط sorena01 »

سلام دوست من
 یه سوال دارم اگر راهنمایی کنی بی نهایت ازت ممنون میشم
من برای ارتباط با میخوام دو تا رشته 8 بایتی رو  به یک eeprom ارسال کنم . مثلا  رشته "helloboy"  که 8 بایت هست رو به یک 24c02 در ادرس 0x00  و رشته 6 بایتی "sorena"  رو هم به آدرس 0x08 می فرستم . موقعی که میخوام باین مقادیر رو بخونم  فقط آخرین پیج یعنی "sorena" رو میتونه بخونه . و وقتی ادرس 0x00 رو میفرستم چیزی نمیتونه بخونه . 

تمام دستورات مربوط به مراحل گفته شده رو هم اجرا کردم  . نکته ای چیزی ندارید راهنمایی کنید؟. میکرویی که کار میکنم stm32f107  هست  ولی خب نوع میکرو مهم نیست البته
ارسال پست

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