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
8-)

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();
	}
}