Ako moze mala pomoc, imam zadatak da odradim I2C komunikaciju PIC16f628a i eeprom 24c02 u microC-u, problem je sto 628 nema I2C komunikaciju pa moram da radim softversku ali ne mogu da odradim sledece:
I2C_Repeated_Start() -kao i
while (!I2C_Is_Idle())
asm nop;
nemam softverske naredbe za to.
Unaprijed hvala.
pomoc i2c
Moderators: pedja089, stojke369, [eDo], trax
Re: pomoc i2c
ja sam si za eprome napravio sledecu funkciju :
i onda kad zelim nesto zapisat ukucam :
a za citanje :
za repeated start samo jos jednom stavis komandu Soft_I2C_Start();. mislim da isto pise i u mikroc help-u. funkcija koju sam napisao je za branje i pisanje integera jer sam to trebao kod zadnjeg projekta i bez problema moze se napravit da pise i bere char-ove.
Code: Select all
void e_write(unsigned char address,unsigned int data_) {
Soft_I2C_Start();
Soft_I2C_Write(0xA2); // chip addy + write
Soft_I2C_Write(address); // ee addy
Soft_I2C_Write(Hi(data_));
asm CLRWDT;
//delay_ms(10);
Soft_I2C_Write(Lo(data_));
Soft_I2C_Stop();
delay_ms(10);
}
unsigned int e_read(unsigned char address) {
unsigned int ret;
delay_ms(10);
Soft_I2C_Start();
Soft_I2C_Write(0xA2); // chip addy + w
Soft_I2C_Write(address); // ee addy
Soft_I2C_Start();
asm CLRWDT;
Soft_I2C_Write(0xA3); // chip addy + r
hi(ret) = Soft_I2C_Read(1);
lo(ret) = Soft_I2C_Read(0);
Soft_I2C_Stop();
return ret;
}
Code: Select all
e_write(adresa,data);
Code: Select all
timer[countdown_set] = e_read(0);