PIC 18F2550 ja I2C-väylän ACK-kuittaus

Olen jo pidemmän aikaa ihmetellyt, miten tuo PIC18F2550 I2C-väylän ACK-kuittaus toimii. Kun PIC 18F2550:sta tehdään orja I2C-väylään. Jota taas luetaan toisella 18F2550, joka on taas isäntä. Koodit siis tehty asemblynä. Ja tälläistä olen yrittänyt saada toimiin: innopultti.fi/projekti/i2c/i2corja.asm

Koodi on hieman “sekaista” koska sisältää erilaisia kokeiluja. Mutta koodi sisältää aliohjelman “SSP_Handler” joka toimii hienosti, mutta ACK-bittiä ei lähde isännälle. Samoin alustus aliohjelmat I2C_ALUSTUS_KIRJOITA ja I2C_ALUSTUS_LUKU. Joista I2C_ALUSTUS_LUKU on käytössä. Veikkaan siis että ongelma on siis “I2C_ALUSTUS_LUKU” tai “SSP_Handler” aliohjelmissa.

Eli kun yritän isännällä lukea orjaa niin kaikki menee siihen asti hyvin. Kunnes isäntä jää odottaan osoitteeseen tai lähetettyyn tavuun ACK-kuittausta orjalta. Sitä ei näytä tulevan. Olen lueskellut monta kertaa jo tätä läpi engr.usask.ca/classes/EE/331/AN734.pdf huonolla englanninkielen taidolla. Eli selostusta siitä miten homman pitäisi toimia. Tuolla jos oikein olen ymmärtänyt, niin orja lähettää automaattisesti ACK-kuittauksen jos orjalle lähetetty osoite tai tavu on saapunut onnistuneesti perille. Ja tuolta myös olen asemblykoodeja kopioinut.

No tämän oikean tavun ja osoitteen saapumisen perille olenkin todennut olevan oikea tarkistamalla isännältä orjalle saapuneen osoitteen ja tavun ohjelmallisesti. Eli sekä osoite ja sen perään lähetetty data-tavu täsmää. Mutta sitten ACK-kuittaus ei lähdekään orjalta automaattisesti kun ne täsmää. Vai pitääkö vielä joku bitti laittaa kohdalleen että kuittaus lähtisi.

Kumminkin I2C-väylään kytkettävän lämpötila-anturin TMP75 olen saanut toimimaan. Eli tämän: innopultti.fi/innopultti.fi/ … /index.php . (Sivu vielä kesken tosin.) Niin että 18F2550 on isäntä ja lukee tuota TMP75-anturia.

Mutta 18F2550 ei saa näemmä orjana toimiin millään tai ei ainakaan ACK-kuittausta lähettämään isännälle saadun osoitteen tai tavun jälkeen. Voisiko jollain olla valaisevaa ideaa tähän? Voisi niistäkin väsätä ehkä jotain toimivaa nettiin joku päivä.

En tästä enempää tiedä, mutta olisiko tästä apua?
theskyway.net/tag/18f2550/

Edellinen viestini koski SPI-väylää, joten sen voi unohtaa.

Netissä on runsaasti juttua tuosta ACK-ongelmasta, mm. väite, että Microchipin AN734 sisältää virheitä.
Millaiset ylösvetovastukset sinulla on i2c-väylässä?
Suositus on 4.7k-10k
Liian suuri väylän nopeus voi aiheuttaa ongelmia.