امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
راه اندازی 24c64 با AVR
نویسنده پیام
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #1
راه اندازی 24c64 با AVR
سلام
می خواستم i2c رو یاد بگیرم، گفتم یه eeprom با رابط i2c راه بندازم.
میکرو مگا 32 هست و حافظه 24c64 مال شرکت ST

به تاپیک های زیر نگاه کردم، ولی هیچ کدوم به نتیجه نرسیده بودند.
تاپیک اول

تاپیک دوم

تاپیک سوم

یه سرچ زدم چیز زیادی نبود، فقط اینو پیدا کردم که به زبان C بود. Biggrin
Easy 24C I2C Serial EEPROM Interfacing with AVR

مداری که تو لینک بالا بود رو بستم (البته با کریستال داخلی ) و برنامه ی پائینی رو که توی هلپ بسکام بود را داخل atMega32 ریختم، اما فقط 255 بر میگردونه Biggrin
   
در ضمن e0,e1و e2 آیسی eeprom رو همش به 5 ولت وصل کردم. یعنی:

   
یعنی آدرس eeprom برای خواندن 10101111 معادل عدد 175 در مبنای 10 و آدرس برای نوشتن 10101110 معادل عدد 174 در مبنای 10 است.

مقدار pullup ها هم روی خطوط scl و sda ، را طبق نقشه 4.7 کیلو گذاشتم.

WC (همان Write Protect) را هم زمین کردم(GND) تا بتونم بنویسم.

------------
حالا مشکل من:

هر کاری می کنم ، نمی تونم بنویسم یا بخونم.
با مقاومت های pullup ، مقدار های خوانده شده، برابر 255 و بدون pullup ها 0 هستند(بعضی وقت ها هم اعدادی میان 0 و 255)

کسی تجربه ای با این eeprom ها داره، به منم کمک کنه، گیرم.

این برنامه:
کد:
$regfile = "m32def.dat"
$crystal = 1000000
$baud = 1200
Config Scl = Portb.4
Config Sda = Portb.5

Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Config Lcd = 16 * 2

Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)


Const Addressw = 174 'slave write address
Const Addressr = 175

Dim B1 As Byte , Adres As Byte , Value1 As Byte , Value2 As Byte 'dim byte






Value1 = 101
Value2 = 102


Call Write_eeprom(2 , 170) 'write value of three to address 1 of EEPROM
Call Read_eeprom(2 , Value1)
Call Read_eeprom(2 , Value2)

Home
Lcd Value1
Locate 2 , 1
Lcd Value2






End




Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)

I2cstart 'start condition

I2cwbyte Addressw 'slave address

I2cwbyte Adres 'asdress of EEPROM

I2cwbyte Value 'value to write

I2cstop 'stop condition

Waitms 10 'wait for 10 milliseconds

End Sub





'sample of reading a byte from EEPROM AT2404

Sub Read_eeprom(byval Adres As Byte , Value As Byte)

I2cstart 'generate start

I2cwbyte Addressw 'slave adsress

I2cwbyte Adres 'address of EEPROM

I2cstart 'repeated start

I2cwbyte Addressr 'slave address (read)

I2crbyte Value , Nack 'read byte

I2cstop 'generate stop

End Sub

اینم دیتاشیت 24c64 شرکت ST:
[attachment=5519]
(آخرین ویرایش در این ارسال: ۱۷-شهریور-۱۳۸۹, ۱۸:۲۸:۳۷، توسط salehjg.)
۱۷-شهریور-۱۳۸۹, ۱۸:۲۶:۱۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : reza555, EBKA, hadikh73, WhiteNoise, babak11
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #2
RE: راه اندازی 24c64 با AVR
دوباره سلام.

1. اینکه به سوال من جواب نمی دید 2 حالت داره:-سوالم خیلی سخته(که نیست) - سوالم خیلی چرته

نصف شبه، الان فهمیدم... دو بایت!!

2. اشکال برنامه ی بالا، در قسمت فرستادن آدرس داخلی هست.

طبق دیتاشیت، سایز آدرس داخلی معادل دو بایت هست(16 بیت)
پس باید آدرس داخلی رو به جای یک بایت در دو بایت بفرستیم.

برای مثال:
اگر آدرس داخلی 0 مدنظر باشد، پس به جای یک بار فرستادن 0، آنرا دوبار پشت سر هم میفرستیم.(البته چون صفر است، اگر نبود با شیفت ، بغلش صفر می گذاشتیم بعد در قالب 2 بایت ارسال می کردیم.)
(یکم فکر کنید می فهمید چی میگم. چون می دونم خیلی بد توضیح دادم :-[O) )
(آخرین ویرایش در این ارسال: ۲۱-شهریور-۱۳۸۹, ۰۰:۴۴:۰۴، توسط salehjg.)
۲۰-شهریور-۱۳۸۹, ۰۲:۵۶:۱۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, EBKA, hadikh73, WhiteNoise, goldstar69


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [پروژه] راه اندازی آیسی فلش w25qxx Ambassador 0 1,154 ۲۰-مرداد-۱۳۹۹, ۱۸:۲۲:۵۶
آخرین ارسال: Ambassador
  برنامه راه اندازی رله از طریق پورت شبکه (enc28j60) haisam 15 14,252 ۲۰-آبان-۱۳۹۷, ۰۹:۵۲:۵۹
آخرین ارسال: ali3000aab
  راه اندازی ماژول gy-955 با AVR و کدویژن hadikh73 6 7,689 ۰۴-شهریور-۱۳۹۷, ۱۲:۰۸:۲۱
آخرین ارسال: hadikh73
  [سوال] راه اندازی LCD با ATMEGA16 or 32 parviz2012 11 28,343 ۱۱-مرداد-۱۳۹۷, ۰۵:۵۱:۰۵
آخرین ارسال: ninechip
  راه اندازی سنسور sht11 blackstar368 10 10,511 ۲۶-دى-۱۳۹۵, ۱۲:۲۲:۴۷
آخرین ارسال: ehsan1082
Cool مشکل در راه اندازی ال سی دی گرافیکی sed winnuke 0 2,411 ۱۹-مهر-۱۳۹۵, ۱۳:۱۱:۳۰
آخرین ارسال: winnuke
  راه اندازی tdc-gp2 mostafa-m 0 2,114 ۰۸-مهر-۱۳۹۵, ۱۹:۵۸:۰۰
آخرین ارسال: mostafa-m
  [سوال] راه اندازی igbtبا میکرو mostafa-m 0 2,299 ۰۸-خرداد-۱۳۹۵, ۱۸:۱۹:۱۵
آخرین ارسال: mostafa-m
  راه اندازی ماژول دمای غیرتماسی MCU90615 nex 1 2,516 ۲۹-اردیبهشت-۱۳۹۵, ۲۳:۵۷:۲۰
آخرین ارسال: lolohacko
  راه اندازی LCD های رنگی iman-63 18 34,962 ۲۱-آذر-۱۳۹۴, ۰۵:۰۴:۲۲
آخرین ارسال: alinnn

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS