Ynt: mikroc i2c library

Başlatan Karamel, 02 Ağustos 2015, 06:08:35

Karamel

merhaba. mmc fat ile ilgili ilerleme katedemeyince bende i2c eeprom(24LC512) ile calismalar yapayim dedim ama bundada gidim yol katedemedim.

mesur datasheetimize gore http://ww1.microchip.com/downloads/en/DeviceDoc/21754M.pdf

write data icin once start. sonra control byte. ack. sonra address high. ack. address low. ack. data ack ve stop

read data icin once star sonra control byte. ack. sonra address high. ack. address low. ack. datayi oku ack ve stop seklinde tanimlanmis.

mikroc librarysinde I2C_Write(0x50, data_, num_bytes, END_MODE_STOP);  boyle tanimlanmis.


data_ bir array degisken. yani data_[20]; seklinde tanimlanabilir. num_bytes ta bu array denkac tane godnerecegi yani  I2C_Write(0x50, data_, 1, END_MODE_STOP);  sanirim bu sadece data_[0] i karsi tarafa gonderiyor.

eger tezim dogruysa.

  data_[0] = 0;
  data_[1] = 1;
  data_[2] = 'P';

  I2C1_Start();
  // issue I2C start signal
  I2C1_Write(0xA0, data_,3, END_MODE_STOP);


dersem. 00000000 00000001 nolu address e 'P' harfini yazmam gerekir? ama aradaki ack ler ne oluyor? bunlar gidiyormu? yoksa gitmiyormu anlayamadim?

birde read icin ayni seyleri yapip ardindan sunu yapiyorum.
  data_[0] = 0;
  data_[1] = rAddr;
  
  I2C1_Start();              // issue I2C start signal
  I2C1_Write(0xA1,data_,2,END_MODE_RESTART);
  I2C1_Read(0xA1,data_,1,END_MODE_STOP);


data_[0] a okunan degeri atmasi gerekmez mi? ilginc bir sekilde hic birsey okumuyor?

mesaj birleştirme:: 02 Ağustos 2015, 06:23:42

az once microcontrollerin write yada read rutinlerine girince orada cakilip kaldigini farkettim. sanirim bu tezimi dogruluyor. ack bizi bozuyor?  :-\

mesaj birleştirme:: 02 Ağustos 2015, 07:52:33

soyle yapinca calistirabildim.
void EEPROM_24LC512_Write(unsigned char wAddr0,unsigned char wAddr1, unsigned char wData)
{
  Delay_ms(5);
  Soft_I2C_Start(); 
  Soft_I2C_Write(0xA0); 
  Soft_I2C_Write(wAddr0); // MSB ADDRESS FOR 24LC512
  Soft_I2C_Write(wAddr1); // LSB ADDRESS FOR 24LC512

  Soft_I2C_Write(wData);  // DATA TO WRITE
  Soft_I2C_Stop(); 
}

void EEPROM_24LC512_Read(unsigned char wAddr0,unsigned char wAddr1)
{
  Delay_ms(5);
  Soft_I2C_Start(); 
  Soft_I2C_Write(0xA0); 
  Soft_I2C_Write(wAddr0); // MSB ADDRESS FOR 24LC512
  Soft_I2C_Write(wAddr1); // LSB ADDRESS FOR 24LC512
  Soft_I2C_Start(); 
  Soft_I2C_Write(0xA1); 

  EEPROM_Verisi = Soft_I2C_Read(0);

  Soft_I2C_Stop();
}



ama birsey ogrenmedim. simdi ack lar nereye gittiler? neden hardware ile calismadida sorfware ile calisti? acaba CLR hocamin i2c ileilgili anlattigi problememi takildim? her islem arasina 5 ms bekleme koymayinca neden calismadi?

sectorler 128 byte? madem her islem arasinda 5 msn durmam gerekli. bende okumaya yada yazmaya girmisken bir kerede sector e hepsini yazar yada hepsini okurum ama buda cok yavaslatici birsey. sanirim biryerde hata yaptim.

LukeSkywalker

@Karamel bilmem biliyor musun ama mikroc ile arm programlama diye bir kitap yazdik ve son zamanlarda sordugun sorularin cogunun cevabi o kitapta var. Ben senin yerinde olsaydim o kitabi alirdim. 25 tl bence çok uygun.

Karamel

#2
hocam ben stm32f103vet6 ile calisiyorum ama size destek olmak acisindan hemde kendim birseyler ogrenirim diye kitabimi dun siparis verdim :) suan hafta sonunda oldugumuzdan sanirim pazartesi gelecek.

mesaj birleştirme:: 02 Ağustos 2015, 08:47:23

yukarida kendimde birseyler ogrenirim diye dedim cunku kitap stm32f407 yi anllatigindan boyle dedim. cok bilmis gibi konusmak istemedim. bilgimin halen %0 larda oldugunu dusunmekteyim ::)

LukeSkywalker

Kitapta stm32f407 anlatılmış olsa da register yapıları birbirlerine çok benzer olduğundan diğer işlemcilerle çalışmanız açısından problem olmayacaktır. En azından mikroC kütüphanelerinin nasıl kullanıldığına örnek olacaktır.  Kendi çabalarını küçümsememeni öneririm. Seni daha çok çalışmaya motive ediyorsa devam et fakat nice elektronik mühendisliği öğrencileri, nice elektronik öğretmenleri var ki senin çabanın %1'ini göstermiyorlar.

Karamel

hocam nazik yorumunuz icin tesekkur ederim. ::) Atamizin cok guzel lafini dedem hep bana soylerdi. "Çalışmadan, öğrenmeden, yorulmadan rahat yaşamanın yollarını alışkanlık haline getirmiş milletler; evvela haysiyetlerini, sonra hürriyetlerini ve daha sonra da istikballerini kaybetmeye mahkumdurlar." diyip calismaya devam edelim ::)

24LC512 eeprom entegresi 512 Kbyte degil. 512K'bit' imis. yani 64Kbyte mis. ayni bizim internet hikayesi gibi. 8 mega BIT diye aliyorsun. max.(theoryde) bunun 8 de biri kadar hizda indirebiliyorsun :) ve niye boyle diyede uzuluyorsun.

24C02 de anladigim kadariyla 256 veya 512 byte mis.

bu entegreden herhangi bir beklentim yoktu. sadece deney yapmak icin 2 adet satin almistim. I2c communication inida az cok ogretti bana ama hani buyuk hayallerle birsey alirsiniz. kutuyu acinca bunun aslinda 10 da biri cikar. pazarlama maduru oldugunuzu anlarsiniz ya. suan oyle hissediyorum :)