Fórum témák

» Több friss téma
Fórum » I2C Két PIC között
 
Témaindító: VrGakos, idő: Feb 4, 2008
Témakörök:
Lapozás: OK   2 / 2
(#) bistvan196700 válasza spepe hozzászólására (») Máj 19, 2011 /
 
Szia Nokia 3220 -hoz nem találtam, viszont ezt tudom küldeni.
(#) spepe válasza bistvan196700 hozzászólására (») Máj 19, 2011 /
 
Nagyon köszönöm.
(#) reechee88 hozzászólása Máj 25, 2012 /
 
Lehetséges i2c kommunikáció egy picf4523 és egy pic24fj64gaa02 ic között? Egyik 5 v-on, másik 3,25 v-on üzemel. Valami speciális szintáttevő kell vagy össze lehet őket kötni csak simán?
(#) potyo hozzászólása Márc 2, 2014 /
 
I2C busszal kapcsolatos elméleti kérdésem lenne. Mivan akkor, ha egy slave eszköznek küldünk valami parancsot I2C-n keresztül, az elkezdi azt csinálni, de valamiért viszonylag hosszú időbe telik, mire végez vele, de közben ismét megcímezzük az eszközt? Van ennek a jelzésére valami szabványos megoldás a master irányába (pl. mint a clock stretching, amikor a slave nem tud több adatot fogadni/nem kész még a küldeni való adat), hogy a slave még nem áll készen, vagy pedig ezt mindenki csinálja, ahogy akarja? Ahogy neten túrtam, az EEPROM-ok azt csinálják, hogy amíg nem végeznek az adat írásával, addig nem válaszolnak az újabb címzésre, ezért a master egy NACK-t fog látni a buszon, ebből fakadóan pedig később újra próbálkozik. De nekem az a gondom, hogy a kontroller mással van elfoglalva, megvan címezve írásra, kap egy bájtot, majd egy restart esemény jön a buszon, majd címzés olvasásra, és a master akar X számú bájtot olvasni. Előfordul, hogy a slave nem tudja lekezelni még a bájt fogadását, és a stop eseményt, amikor már befut az olvasásra a címzés, ezzel pedig egymásra futnak a dolgok, többé nem lehet megmondani, hogy mi volt előbb. Mivel a FIFO-ban még lenne hely, ezért az SCL vonalat nem tartja alacsonyan a slave hardverből, mert tud fogadni még adatot, tehát nem tudja megfogni a kommunikációt.

Tudom, szervezzem át a programokat, de sajnos nem csak rajtam múlik a dolog, ez egy kész modul RTOS-el, és úgy néz ki, hogy az RTOS dinamikus memóriakezelője néha elmolyol hosszabb ideig, és akkor jön a fenti egymásrafutás. Memóriakezelő tiltja a megszakításokat egy kódrészletnél, és engedélyezi utána, nagyon úgy néz ki, hogy ez a kódrészlet tart (néha) sokáig.

Őszintén szólva én nem látok a problémára semmi megoldást. Az jutott eszembe, hogy belenyúlni a memóriakezelőbe, hogy ne az összes megszakítást tiltsa, hanem a legmagasabb prioritásút hagyja meg, és akkor az I2C megszakításkezelői le tudnak futni időben, de ez elég tákolásnak tűnik, bár lehet, hogy ez lesz a vége...
(#) kissi válasza potyo hozzászólására (») Márc 3, 2014 /
 
Szia!
Nézz utána, mert csak emlékezetből írom, de nekem úgy rémlik, hogy itt is lehet foglaltságjelzést adni ( ha jól emlékszem a CLK láb GND-re húzásával) , mivel érzékelni lehet a master részéről, hogy nem úgy alakulnak a lábai ahogy szeretné ( OC, OD lábak ) és akkor felfüggesztheti az adást!
(#) potyo válasza kissi hozzászólására (») Márc 3, 2014 /
 
Ezaz, hogy én erre vonatkozóan nem találtam semmit sem. És a chip adatlapja is említ olyat, hogy ha a transfer complete flag (ami ugye stop vagy restartkor billen be) még nincs lekezelve, amikor a címzés befejeződik, akkor ez bebillenti az overflow flaget, és innentől kezdve nem lehet tudni, hogy mi is történik pontosan a buszon. Ha az adatlap is ezt írja, akkor szerintem erre nincs megoldás az i2c szabványban
(#) ktamas66 válasza potyo hozzászólására (») Márc 3, 2014 /
 
A Microchip AN734/735-ben nincs erre megoldás (ütközés lekezelés)?
(#) potyo válasza ktamas66 hozzászólására (») Márc 3, 2014 /
 
Belenézek, de nem PIC a slave, hanem egy BlackFin. Mondjuk a Master az egy PIC32, de ez nem sokat számít jelen állás szerint...
(#) pagaby hozzászólása Ápr 1, 2014 /
 
Sziasztok!
2 PIC I2C kommunikációjával szórakozok egy ideje. Az már működik, hogy a master adatokat küld a slave-nek és az azokat értelmezi. Viszont visszafele, amikor a master akar olvasni befagy a program (a master-é és a slave-é is). Hol lehet a probléma? Mellékeltem az érintett kódrészleteket.
(#) whalaky hozzászólása Júl 7, 2018 /
 
Sziasztok!

Életem első I2C slave-jével küzdök, értelemszerüen eredménytelenűl. Egy kis kezdő lökést szeretnék kérni. A dolog még nagyon az elején tart, de már elakadtam.
Egyenlőre csak szimulátorban (proteus) próbálom de már így sem.....
Az AN734 alapján csinálnám, de
- a megszakításba bele sem fut
- a slave (gyanitom ugyan ezért) nem válasol, még a cím byte-ra sem küldi ak ACK-t
Amig ezek nem mennek, nem tudok tovább lépni.

Az init
  1. SSP1STAT = 0b10000000;      // Slew rate control disabled for standard
  2.                                 // speed mode (100 kHz and 1 MHz)
  3.     SSP1CON1 = 0b00110110;              // Enable serial port, I2C slave mode,
  4.                                  // 7-bit address
  5.     SSP1CON2bits.SEN = 1;       // Clock stretching is enabled
  6.     SSP1CON3bits.BOEN = 1;      // SSPBUF is updated and NACK is generated ?
  7.                                 // for a received address/data byte,
  8.                                 // ignoring the state of the SSPOV bit
  9.                                 // only if the BF bit = 0
  10.     SSP1CON3bits.SDAHT = 1;             // Minimum of 300 ns hold time on SDA after
  11.                                 // the falling edge of SCL
  12.     SSP1CON3bits.SBCDE = 1;             // Enable slave bus collision detect interrupts
  13.     SSP1ADD = I2C_SLAVE_ADDRES << 1; // Load the slave address
  14.     SSP1IF = 0;                 // Clear the serial port interrupt flag
  15.     BCL1IF = 0;                 // Clear the bus collision interrupt flag
  16.     BCL1IE = 1;                 // Enable bus collision interrupts
  17.     SSP1IE = 1;                 // Enable serial port interrupts
  18.    
  19.     PEIE = 1;                   // Enable peripheral interrupts
  20.     GIE = 1;                                    // Enable global interrupts


Gyakorlatilag az AN734 szerinti, csak az SSP van SSP1-ra állítva mert a 16F1828-el akarom megépíteni.
A master biztos jó, mert az i2C buszon van egy DS1307 is, és azt jól kezeli, tehát a slave-ben van a hiba (vagy bennem). Az erősen hiányos (0) angoltudáson "kissé" hátráltat.
Valakinek ötlete hogy merre keresgéljek tovább?
A hozzászólás módosítva: Júl 7, 2018
(#) bbb válasza whalaky hozzászólására (») Júl 7, 2018 /
 
Engem az futtatott meg I2C szimulálásakor, hogy sose érkezett meg az adatcsomag a szimulátorban. Ezután felhagytam a szimulálással és inkább az éles PIC-re akaszkodtam rá debug módban és láss csodát élből ment a hibakeresés!
Neked is ezt ajánlom, I2C szimulálás helyett töltsd rá a programod egy debugolható PIC-re és ott nézd mi történik (erre nagyszerű segítség egy logikai analizátor).
(#) whalaky válasza bbb hozzászólására (») Júl 8, 2018 /
 
Na valami ilyesmi a jelenség, de mintha méda cím sem érkezne meg.
Pont ezt akartam elkerülni hogy össze kelljen állítani a deszkát. Nem igazán kötséghatékony.
Alapvetően smd PIC-et használok, de így be kell szerezni (ha lehet) furatszereltet.......
Nem hiszem hogy ennyire alap dolgot ne tudna a Proteus.
(#) bbb válasza whalaky hozzászólására (») Júl 8, 2018 /
 
Én az MPLAB-X szimulátorát próbáltam. Kijelzőhöz írt I2C kommunikációt figyeltem volna, s a kommunikáció ACK parancsai nem jöttek vissza, így leállt a program és várt rá... Ezt a programot rátöltöttem egy PIC-re, debug mód és láss csodát, rendesen ment a kommunikáció (igaz zagyvaságok voltak a kijelzőn eleinte, de az már más lapra tartozik).
A szimulátornak azzal volt gondja, hogy a kommunikációs kísérletre mit feleljen, vagy éppenséggel, hogy ő maga adja a parancsokat.

Sajnos ez a magyarázó videó tele van reklámmal, de talán hasznos lehet Proteushoz: Bővebben: Link
(#) Hp41C válasza whalaky hozzászólására (») Júl 8, 2018 /
 
Melyik AN734 -et használod? AN734C
(#) eSDi válasza whalaky hozzászólására (») Júl 8, 2018 /
 
Hali!

Egy kicsit szívtam vele én is annak idején. Ha érted a BASIC-et, akkor a melléklet talán segít kicsit. Igaz 16F819-re írtam.
(#) whalaky válasza eSDi hozzászólására (») Júl 12, 2018 /
 
Átfutottam a bas kódot, de nem látok benne semmi rendkívülit. A konfig biteket még egyszer alaposan áttanulmányozom.
Vannak ugyan előrelepésék, de azt hiszem nagyon messze van még a megoldás.
Jelenleg azzal küzdök ( még csak három napja ) hogy a mester nem hajlandó olvasni a slavről.
A jelenlegi állapot:
Kiküldöm a címet, az meg is jőn szépem
kiküldöm a TX offsetet (egy tömd ahonnan olvasmia kéne x. byt.tól ) ez is megjön, be is állítja
de itt jön a kufirc, mert hiába kérnék le bytokat a pufferből - ReadI2C - nem generélódik megszakítás.
Hp41C:
Nagyon ug néz ki hogy a AN437-et használom. Biztam benne hogy karbantartják, de rákeresek a C re hátha előrébb visz.
(#) whalaky válasza Hp41C hozzászólására (») Júl 12, 2018 /
 
Aranyos. Imádom mikor egy pdf-ben van link de nem működik.
Maradt a bitzsonglörködés.
(#) superuser hozzászólása Júl 12, 2018 /
 
Javaslom mindenkinek aki i2c, SPI interface-t használ, hogy vegyen 1500 Ft-ért ebayről egy logikai analizátort, pl. Salae kompatibilisat. Nem kell szimulátorral vacakolni, egyből látod ami az adatvonalon van. Nekem többször nagyon jól jött.
(#) whalaky válasza Hp41C hozzászólására (») Júl 12, 2018 /
 
Nem tudsz egy működö linket ahol a példaprogramokat nem csak emlegetik hanem le is tölthetőek?
(#) Hp41C válasza whalaky hozzászólására (») Júl 12, 2018 /
 
Ezen az oldalon a pillanat szorító. Ezen kívül a Google a "pic i2c slave tutorial" kérdésre 70000 találatot, de nem tudom melyik működik.
(#) whalaky válasza Hp41C hozzászólására (») Júl 12, 2018 /
 
Köszi, de eddig is ezekből próbálkoztam kevés szerencsével, amiket találtam hasonló, de azért köszi. Túrok tovább hátha egyszer szerencsém is lesz.
(#) whalaky válasza bistvan196700 hozzászólására (») Aug 4, 2018 /
 
Én is ebben a cipőben járok.
Azt a "tudományos" megközelítést választottam hogy letöltöttem egy valag példaprogramok és próbálkoztam, összahasonlítgattam, és mikor végre elindult elkezdtem debugolni és átírni a programokat hogy azt csinálja amit szeretnék.
Elértem ugyan arra a pontra hogy működik proteusban is, de még nem találtam meg a magyarázatot hogy MITŐL. Amíg ez nincs meg nem lépek tovább.
Kitartás, és nagy szerencse. Előbb utóbb el fog indulni....
Következő: »»   2 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem