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