I2C bus lock, PIC

Moczik Gabor pm at progzmaster.hu
Fri Dec 8 00:07:18 CET 2006


Kovács Árpád wrote:
> Igen, és ez gyanús is, ha ennyire rapszódikus és nem tudod szándékosan 
> előidézni, akkor nem biztos, hogy itt kell keresni a hibát. Ha például IT-t 
> használsz ellenőrizd, hogy minden legyen mentve, ami megváltozhat az 
> ISR-ben.

C-ben irom a szoftot, elvileg az elintezi a regiszter mentesekkel 
kapcsolatos dolgokat...
Nincs ISR tiltas se sehol.

> Igen a slave egység automatikusan küldi az ACK-ot, negatív nyugtát csak 
> master tud küldeni. Ha nem tetszik a vett adat, akkor is végig kell játszani 
> a kommunikációt :)

Hja, ebben csak az a ciki, hogy dummy adatot kell kuldozgetni, ha pl. az 
alabbit akarom megoldani:
MASTER: kerem a 0x72 parameter erteket
azaz: i2c_write(0x72), i2c_restart, i2c_read

SLAVE: nincs ilyen parameter, de mivel az i2c_write(0x72)-re nem lehet 
NACK-ot kuldeni, vissza kell kuldeni valamit az i2c_read-re...

>>Hogy lehet az SSPBUF-ot kiolvasni a 9.-ik clock lefuto ele elott?
>>Interrupt-tal szerintem sehogy, mert a BF bit ugyan bebillen a 8-ik clock
>>utan, de az SSPIF csak a 9.-ik utan, tehat csak ekkor tudom kiolvasni.
> 
> Igen ez tényleg így van. Tehát csak úgy tudod kiolvasni a beérkezett adatot 
> az SSPBUF-ból a 9. clock előtt, ha nem IT-ben csinálod, hanem poolingolod a 
> BF-et és akkor olvasod ki.

OK, akkor jol ertem hogy engem nem erint. Ugy mukodik az ISR-em, hogy 
lekezeli az I2C periferiat, kiolvassa a buffert, stb, de a CKP-t 0-n hagyja.

Utana jon a feldolgozo resz, az majd elszorakozik, es a vegen 1-re allitja a 
CKP-t.
Ezert aggodtam, hogy esetleg eleve nem is megy alacsonyba a CKP, de ezek 
szerint intterupttal nem lehetseges.

> vár a további adatok küldésével. Te pedig nyugodtan kiolvasod az SSPBUF-ot 
> (a BF erre törlődik automatikusan), akár molyolhatsz tovább, mert addig nem 
> megy tovább a kommunikáció, amíg azt nem mondod, hogy a master folytathatja: 
> a CKP-t magasba visszabillented, és erre a CLK lehúzása is megszűnik.

Van egy gyanum, hogy ettol ragad be a busz, pedig mindig visszabillentem a 
CKP-t, feltetel nelkul, meg az ISR-ben par sorral az adatkiolvasas utan.
Na mindegy, majd ha megnezem a forgalmat, talan kiderul...

> Megjegyzendő továbbá, hogy nem is kötelező használni ezt a funkciót, ha 
> gyorsan át tudod venni az adatokat és nincs ráfutás veszélye.

Elvileg at tudnam, 18MHz-en megy a PIC, high priority isr masodikkent 
ellenorzott resze az SSPIF, de biztos ami biztos betettem a funkciot.
Megprobalom esetleg nelkule.

> Ha korrekten meg van írva a master és a slave is, akkor az I2C nem fagyhat 
> le. Még akkor sem, ha Te földelsz bele vezetékkel teszt célból :) Még a 

Hja, csak a masterem az egyelore nem interruptbol megy es nincs timeout, 
hogy meddig probaljon kuldeni. A BCLIE-t be kellett kapcsolni, hogy 
eszrevegye, hogy nem jo a busz.

De vegul is mindegy, hogy megakad vagy sem, mert ha nem valaszol a slave, 
akkor ugyse tud semmit csinalni :-), ha meg resetelem csak a slave procit, 
akkor tudja folytatni a master.

> diagnosztikához annyit, hogy célszerű kitalálni valamit arra, hogy ha lenn 
> maradnak a jelek meg tudd állapítani műszerrel, hogy ki fogja lenn. pl. 
> mindkét oldalra felhúzó ellenállásokkal és kis értékű ellenállással 
> összekötve egymással a két egység.

Nem rossz otlet, bar ezt mar sikerult kitalalni ugy, hogy tudom kulon 
reset-elni a mastert es a slave-t is. A slave a hunyo.

-- 
((( Móczik Gábor  )))--((( pm -> @ -> progzmaster -> . -> hu  )))
((( Skype: moczik )))--((( Website: http://www.progzmaster.hu )))



More information about the Elektro mailing list