16F877 a nefunkční komunikace s AD7746 přes I2C

Chtěl bych se zeptat (jen doufám ze se to tu již neřešilo,ale snažil jsem se vše projít) Pokouším se rozjet kapacitní převodník AD7746 po I2C a protože jsem tuhle komunikaci nikdy nepoužíval emuluji to na PIC SIMULÁTORU IDE jako čteni z EEPROM 24c256. Nemá někdo zkušenost s HW komunikací?. Na SW mi to jede ale při HW čekám na příznak z PIR1,SSPIF který prostě nenastane… Děkuju

:arrow_right: administrator: přejmenováno z "16f877 I2C"

Přečti si tento příspěvek.

Koukal jsem na to ale na ten SSPIF cekas taky. Problém je že mě tam procesor zustane trčet…

Call I2CSTART

I2CSTART
BSF STATUS,RP0
BSF SSPCON2,SEN
BCF STATUS,RP0
CALL I2CCEKEJ
RETURN

I2CCEKEJ
I2CC
BCF STATUS,RP0
BTFSS PIR1,SSPIF
GOTO I2CC
BCF PIR1,SSPIF
RETURN

Možná že to na realné součástce bude fungovat ale na simulátoru čekám marně

Z vlastní zkušenosti vím, že budeš čekat marně. Musíš si SSPIF nastavit sám a pak zase pokračovat.

skus to takto, nečekej na SSPIF ale po vyvolání SEN čekej na jeho nulování. Když nastavíš SEN tak po dokončení Start signálu se bit SEN automaticky nuluje, tak tam po vyvolání SEN švihni podmínku na čekání kdy se tento bit nuluje.

Zkoušel jsi to v realu?

Zatím ne, dělám s tím poprvé tak si dávám bacha abych to neodpálil. Zkusím ještě to nulování SEN

Bohůžel ne v simulátoru v MPLABu.

A v zapojení to taky není moc stabilní, vypadává komunikace. Zkoušeno na MCP9801, DS1631 a DS75. Lepší a určitě spolehlivější je čekat na PIR1,SSPIF, které ti zajistí např. i přijetí ACK od zařízení a nemusíš se o to starat.

Odzkoušeno v reálu a funguje to bez problému i při čekání na PIR1,SSPIF. Je to chyba simulátoru který neumí simulovat HW komunikaci I2C. Funguje pouze v emulované verzi což je kostrbaté. Děkuju za radu, bylo opravdu nutné to zkusit na " ostro " .