Stránka 2 z 2
Napsal: 17 úno 2010, 17:02
od relatko
Zdravím.
Mohli by ste mi prosím poskytnúť funkčné subrutiny pre I2C komunikáciu.Emulované mi fungujú.Pokúšam sa však naštartovať MODUL SYNCHRONNÍHO SÉRIOVÉHO PORTU MSSP (I2C)v pic16F877A,ale vôbec sa mi to nedarí.
Relatko.
Napsal: 21 bře 2013, 10:47
od dodik
Zdravim, mam problem, snažim sa rozbehat komunikáciu medzi Attiny45 a DS1307. So zapisovanim problmém nie je, ale skor nedokážem z neho čitať dáta, na začiatok nepotrebujem nastavovat čas, stači ak budem vediet načitať z neho sekundy,minuty,hodiny.
Dam sem kusok kodu ako to mam spravene pre read a write
Kód: Vybrat vše
/*i2c_start(0b11010000); //startbit+adresa obodu+write
i2c_write(0x00); //veberiem adresu z ktorej chcem citat
i2c_start(0b11010001); //startbit+adresa obodu+read
i2c_read(data); //nacitane udaje ulozi do data
i2c_stop(); //stop bit
funckia pre write
Kód: Vybrat vše
i2c_start(0b11010000); //adresa obvodu+write
i2c_write(0x00); //adresa na ktoru chcem zapisovat
i2c_write(0b00000000); //data
i2c_stop(); //stopbit
Napsal: 21 bře 2013, 14:46
od Habesan
Z jaké knihovny bereš uvedené funkce?
Napsal: 21 bře 2013, 18:32
od dodik
z i2cmaster.h/i2cmaster.S, tu knižnicu použivam a nemal som snou problem zatial
na ten expander len posielam data ktore citam z rtc aby som videl co z toho lezie
Napsal: 22 bře 2013, 08:39
od Standa33
Změň tohle:
i2c_read(data); //nacitane udaje ulozi do data
na: data = i2c_readNak();
Napsal: 22 bře 2013, 10:57
od dodik
uz som skusal aj to ale nefunguje to. Netreba nahodou nastavit na zaciatku programu ten RTC obvod?
Napsal: 22 bře 2013, 13:10
od Standa33
Tak ještě zkus zadat : data = i2c_read(0); //čtení dat + NoAck
Napsal: 22 bře 2013, 16:08
od dodik
už som konečne rozbehal to čitanie z rtc, takto to zatial vyzera
Kód: Vybrat vše
int main(void)
{
uint8_t data=0x00;
i2c_init();
i2c_start(MCP23017+I2C_WRITE);
i2c_write(IODIRA);
i2c_write(0b00000000); //EXP_PORTA(0..7) OUT
i2c_stop();
while(1)
{
i2c_start(0b11010000);
i2c_write(0x00);
i2c_rep_start(0b11010001);
data = i2c_readNak();
i2c_stop();
/*data++;
if (data == 256)
{
data=0;
}*/
i2c_start(MCP23017+I2C_WRITE);
i2c_write(OLATA);
i2c_write(data); //EXP_LATA(0..7) = 255
i2c_stop();
}
}