Eile õhtul, või oli see pühapäeva õhtu...ikka pühapäeva õhtul sain lõpuks I2C siini tööle. Toimis, mingil määral, jonnis ja oli isekas. Nüüd, kaks päeva hiljem...tegelikult küll kuskil 6h tagasi sain ka selle jonnimisest lahti. Ming müstiline sageduspiir 190kHz tuli ette, millest alla poole optimiseeritud koodiga asi ei toiminud. Optimeerimata koodiga (loe väga suur ruumi raiskamine kivi mälus) jooksis asi kuitahes madalalt, sain ju isegi 6kHz kätte, aga see selleks. Asi käib SCL signaali järgi, mis ühenduse takti toksib ja see on hea. Pole ajastamise porri.
Nüüd on üks suur osa ületatud, suudan lülitada pinne ehk LED-e, orjade adresseerimine I2C siinil toimib ka nii, nagu peab. Vaja teha veel elu lihtsaks...Ex:
Ma ütlen "XBR1_hi"
aga mõtlen:
1) saadame üle I2c siini orja adressi ja kuulame kas ta vastab
2) saadame orjale käsu olla kas daata või pordi register
3)saadame sinna info
4)saadame info esimese pordi suunaregistrisse
5) saadame info teise pordi registrisse
6)saadame uuesti aadressi ja ootame orja vastust
7)käseme orjal olla command käsuga pordiregistrite daata vastuvõtja
8)saadame esimese pordi daata
9) saadame teise pordi daata
10)paneme I2C kinni
Ja tegelikult on asi keerulisem. :)
VÄLJUNDI funktsiooni kere näeb praegu välja selline, tarkus läheb sulgude vahel:
void XB1(uint8_t device, uint8_t port, uint8_t pin, uint8_t direction, uint8_t value)
{
palju tarkust
}
//*************************//
Hale tudi on, lähen ajan printsessi ka diivanilt voodisse.
Und, sipelgad!
Kommentaare ei ole:
Postita kommentaar