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   1 / 2
(#) VrGakos hozzászólása Feb 4, 2008 /
 
Sziasztok!
Az I2C kapcsolatról szeretnék kérdezni. Pontosabban az egyik PIC 18F4550 a másik pedig 16F877P. Keresgéltem, de nem sok mindent találtam.
Szeretném kérni hogy segítsetek.
(#) Medve válasza VrGakos hozzászólására (») Feb 4, 2008 /
 
Tedd fel hát a kérdést...
(Eddig mit találtál?)
(#) VrGakos válasza Medve hozzászólására (») Feb 4, 2008 /
 
Még semmit sem tudok róla. PIC-be égetendő programot hogy kell kiegészíteni? Meg hogy egyáltalán lehet-e ez a két PIC között ilyen kapcsolat?
(#) Medve válasza VrGakos hozzászólására (») Feb 4, 2008 /
 
Eddig mit találtál a NETen? (Csak miheztartás végett)
(#) VrGakos válasza Medve hozzászólására (») Feb 4, 2008 /
 
Link Mást nem nagyon. Ezért kértem segítséget.
(#) Medve válasza VrGakos hozzászólására (») Feb 4, 2008 /
 
Összefoglalja a lényeget...Ám ird be a Googléba is (vagy abba amid van) hogy: I2C...
(#) dawe válasza VrGakos hozzászólására (») Feb 4, 2008 /
 
Szia!

Szerintem olvasd el az ehhez tartozó részt az adatlapjukban, ott szépen le van írva.

16F877: Bővebben: Link

18F4550: Bővebben: Link

Ha assemblyben programozol, akkor szinte nyert ügyed van, mert példákat is mutatnak (ha jól emlékszem )
(#) dcsabi válasza VrGakos hozzászólására (») Feb 4, 2008 /
 
Bajlódtam egy keveset kb fél évvel ezelőtt, 16f877-ről i2c,
pcf8583 elérése. Amit kipróbáltam és azt hiszem müködött
csak még nem fejlesztettem ki amiért kipróbáltam, talán idevág. A pic-et nem tudtam szolgaként használni, a programozói tudásommal, ezért egy buszra felfüztem Egy16f877-t egy 16f876-ot és egy PCF8583-at. Amit nekem egy irány kellett a szolga felé, tehát csak íram a szolgát( 16f876-ot) a PCF..ramjába kipakoltam amit el akartam küldeni a másik pic-nek, a szolga onnét olvasta ki. A PCF interrup-ja vezérelte engedélyezte az egyik illetve a másik pic számára a busz használatát. Ez csak egy speciális alkalmazás. Megtelt a 877-es és nem tudtam
4digites szegm kijezőt egy halom kijelzendő maszk-kal
máshogy megoldani. A 18F-esekre még nem vagyok teljesen berendezkedve...Egy I2C ASM

PCF8583c.inc
    
(#) dcsabi válasza VrGakos hozzászólására (») Feb 4, 2008 /
 
Még ez hozzá: az II2 includ-ja a PCF-esnek. A másik kettő az init-be illetve a főprogiba, az előbbi subrutin.
(#) dcsabi válasza VrGakos hozzászólására (») Feb 5, 2008 /
 
I2C-s alapismeretekhez ez is jó lehet sőt a pic-hez általában...I2C+PIC
(#) gubko hozzászólása Márc 4, 2008 /
 
sziasztok!

Ne haragudjatok hogy itt érdeklődök ezzel kapcsolatban!
Egy kérdésem lenne! Ki vállalna i2c-s kommunikációs eszköz készítést!?
Az eszközön egy hőmérő egy RTC és egy kijelző lenne! A kommunikáció i2c-val valósulna meg! Lényeg hogy a kijelzőn jelenjen meg az egyik sorban a hőmérséklet a másik sorban az idő és a dátum!
Természetesen nem ingyen! Bérezés 15-20eft +felhasznált eszközök..Vagy megbeszélés szerint!
Várom a jelentkezőket!
üdv!
ui.:és bocsi hogy itt írtam.. :yes:
(#) alex077 hozzászólása Nov 16, 2008 /
 
Sziasztok!

I2C-t próbálok megvalósítani egy PIC18F4685 és egy PIC18F2520 között. Utóbbi a slave, egy tasztatúrát vezérel, előbbi a master. A lényeg az lenne h a slave átküldje i2c-n, h melyik gombot nyomták meg. Ha vki tudna vmi hiperprimitív, de általa kipróbált, működő progit adni nagyon megköszönném!
A probléma az h vmiért nem megy az i2c pedig már elég sokat próbálkoztam....
Persze gugli segített vmennyire: I2C between 2 pic
Nem tudom, h mit jelent ebben a sorban a legutolsó config:
  1. #use i2c(SLAVE, FAST, SCL=PIN_C3, SDA=PIN_C4, address=0x14, FORCE_HW)

A force_hw. Meg maga az adatforgalom sem világos.
SLAVE
  1. #INT_SSP                      //Interrupt for I2C activity
  2.  
  3. void sspinterupt()
  4.   {
  5. state = i2c_isr_state();   //Reading the type of transmission
  6.  
  7. if(state < 0x80)           //Master is sending data
  8.      {
  9.         data = i2c_read();      //An array will be needed to store data if more than one byte is transferred
  10.      }
  11. if(state == 0x80)          //Master is requesting data
  12.      {
  13.         i2c_write(data);
  14.      }
  15.      output_d(data);            //Output data to port D to visualize
  16.   }


MASTER
  1. i2c_start();               //begin transmission
  2.   i2c_write(0x14);           //select address of device to communicate with
  3.   i2c_write(data);           //send actual data
  4.   i2c_stop();                //terminate communication



Na most én küldhetek akármilyen adatot? Nem fogja bezavarni pl ha 0x80-at küldök?
A slave kódot esetleg ha vki részletezné nekem az nagyon jó lenne!
Előre is köszi!

U.i.: Nem tudom , mért tördeli ilyen hülyén a kódot, nem tudtam helyrehozni
(#) icserny válasza gubko hozzászólására (») Nov 16, 2008 /
 
Ennek így nem sok értelme van, ugyanis az általad leírtakat már megcsinálták. Itt
2400 Ft-ért megkapod.

(#) icserny válasza alex077 hozzászólására (») Nov 16, 2008 /
 
Idézet:
„Nem tudom, h mit jelent ebben a sorban a legutolsó config:
#use i2c(SLAVE, FAST, SCL=PIN_C3, SDA=PIN_C4, address=0x14, FORCE_HW)”


A CCS helpjét kellene fellapozni i2c ügyileg - már ha azt használod egyáltalán...

A FORCE_HW opció arra utasítja a fordítót, hogy a hardweres SPI/I2C egységet használja.
A FAST opció pedig a 400 kHz-es bitrátát írja elő.
(#) icserny válasza alex077 hozzászólására (») Nov 16, 2008 /
 
Idézet:
„Nem tudom , mért tördeli ilyen hülyén a kódot”


{code=c} ... {/code} közé rakd! (persze, szögletes zárójellel)
(#) Carlen hozzászólása Ápr 10, 2010 /
 
Sziasztok!
Én is próbálgatok két PIC között I2C kapcsolatot teremteni, de nem igazán sikerül. Az adatlapokon már átrágtam magam, és megcsináltam mindent, amit ott mond. Töröltem minden bit-et, amit kell, viszont, ha az SSPBUF-ból kiolvasnám az értéket, a BF (buffer full bit) nem törlődik, és a kiolvasott érték nem az lesz, mint kénem, hanem az Addres marad benne. Kihagytam valamit, vagy a programban van valami gikszer?

I2C.asm
    
(#) histu1985 hozzászólása Júl 26, 2010 /
 
Sziasztok

Van két panelom rajtuk 1-1 pic és i2c kapcsolatot próbálok teremteni közöttük. Egyelőre azt szeretném ha master elküldene egy 1byte-ot slave-nek. Szkóppal nézve látok valamit a vonalakon szóval feltételezem hogy a slave nem akar menni rendesen.
A slave megszakítás kódja:
  1. #pragma code InterruptVectorHigh = 0x08
  2. void InterruptVectorHigh (void)
  3. {
  4. _asm goto  i2c_isr _endasm
  5. }
  6. #pragma code
  7.  
  8. #pragma interrupt i2c_isr
  9. void i2c_isr(void)
  10. {
  11.  
  12.         //cím érkezett
  13.         if (SSPSTATbits.D_A == 0)
  14.         {
  15.                
  16.         }
  17.         else
  18.         {
  19.                 //adat érkezett
  20.                 value = SSPBUF;
  21.         }
  22.         PIR1bits.SSPIF = 0;  //reset interrupt flag bit
  23. }
  24. #pragma code

Végül az inicializáló rész:
  1. OpenI2C(SLAVE_7_STSP_INT, SLEW_OFF);
  2.         SSPADD = 9;                                     //Az eszköz címe
  3.         INTCON = 0b11000000;            //GIE = 1, PEIE = 1
  4.         PIE1bits.SSPIE = 1;                     //Enable ssp int
  5.         IPR1bits.SSPIP = 1;                     //SSP prior high
  6.         RCONbits.IPEN = 1;                      //Enable priority levels on interrupts


Annak ellenére hogy állandóan küldök adatot a vonalon az elején egyszer lefut a megszakítás és kész. Már egyáltalán nincs ötletem hogy mi lehet a baj, úgyhogy nyugodtan írjatok mindent ami eszetekbe jut, nagyon szívesen veszem.

Köszönöm
István
(#) histu1985 válasza histu1985 hozzászólására (») Júl 30, 2010 /
 
Sziasztok,

Néhány napos küszködés után sikerült megoldani az i2c kommunikációt, tehát a fenti kérdés már nem aktuális.
(#) ptiszai válasza histu1985 hozzászólására (») Jan 19, 2011 /
 
Nem írnád meg nekünk, mi volt a probléma?
Talán tanulunk a példádból.
(#) spepe válasza ptiszai hozzászólására (») Jan 19, 2011 /
 
Szerintem ha Július óta nem írt akkor nem valószínű, hogy most fog de hátha. Ha valamiben segítségre van szükséged akkor szerintem tedd fel a kérdést inkább vagy használd a keresőt a témán belül!
(#) bistvan196700 hozzászólása Máj 1, 2011 /
 
Sziasztok.
Már egy ideje két pic18f452 közötti I2C kapcsolattal szenvedek. A master az RE0 lábon lévő nyomógomb lenyomás hatására kiküldi az I2C sínre az adatokat, egyelőre annyit szeretnék, hogy gond nélkül átmenjen a cím és mondjuk 3 bájt a slave-re. Ezt PROTEUS-al szimulálom az SCL és SDA lábbakra egy i2c debugger is csatlakozik ami szerint a cím bájt és egy adat bájt kimegy annak ellenére, hogy cím+ 3 bájtot küldök. A slave-en a cím érték helyesen megjelenik viszont a 3 adat helyett 1 adat bájt és az is eltér a kiküldöttől. Hi-tech c-ét annak is I2C függvényeit alkalmazom. A net-en már sokat kutakodtam kipróbáltam az ott leírtakat, de sajnos nem jutottam kifogástalan eredményre. A segítséget előre is köszönöm.
(#) spepe válasza bistvan196700 hozzászólására (») Máj 2, 2011 /
 
Az áramkör érdekelne inkább nem a progi mert valószínűleg nem abban van a a gond, vagy legalább is legtöbbször nem.

A felhúzó ellenállások, a kábel hossza főleg ami fontos de sajnos bele szólhat a kábel maga is.
(#) bistvan196700 válasza spepe hozzászólására (») Máj 4, 2011 /
 
Szia elnézést, de nem jutottam ezidáig gép közelébe. Felrakom az egész programot a slave+master+proteus is.
Nem tudom gond-e mert én hi-tech c-ét használok, viszont a PIC beállítás I2C-re látható a program szövegben. A két PIC kapcsolás kész, először proteus szimulációval szerettem volna kipróbálni és utána élesben.
(#) spepe válasza bistvan196700 hozzászólására (») Máj 9, 2011 /
 
Tehát akkor még nem próbáltad élőben?

Ebben az esetben valami más a gond. Lehetséges, hogy az időzítéssel van gond. Az az igazság, hogy én is már egy ideje próbálom összehozni az I2C-t de nem túl sok sikerrel. :S

Nekem egy MPC23017-es IC-m van és az a fura, hogy van ACK tehát minden adatot megkap és választ is küld de mégsem megy. :S

A High-Tech C-t még nem igazán használtam ezért nem vagyok benne biztos, hogy mit is kéne keressek de azért kicsit bele olvasok hátha találok valamit. Addig is a teszteld le esetleg, hogy milyen frekvencián jönnek ki az adatok ha van rá lehetőség.

Plusz egy kérdés. A Nokia LCD-hez a fájlt merre találtad? Nekem is kéne egy 3220-as kijelzőjéhez.

Köszi a választ előre is!
(#) nemgyuri hozzászólása Máj 11, 2011 /
 
Sziasztok!
I2C buszos elvi probléma megoldásában kérem a segítségeteket. Van 1 PIC16F886-os mester és 3-4 PIC 16F690 slave, esetleg még 1 EEPROM a buszon. (A slave-k a bus-t nem használhatják megszakításból, mert a megszakítást a mérőrendszernek szabad csak használnia, különben elszámolhatná magát.)
Ha hiba van az adatátvitelnél a slave lefoghatja az egész rendszert.
Pillanatnyilag működik, de nincs tisztességes hibakezelésem. Fejlesztés közben tapasztaltam, hogy ha hiba volt, akkor csak táp ki-be segített. Master-nél nincs gondom, de slave problémája zavar. Megoldás?
(#) zolee1209 válasza icserny hozzászólására (») Máj 11, 2011 /
 
Én ennyiért azért megcsinálnám... Most úgy is egy ilyen projektben vagyok benne. Bár miért pont i2c-n?!
(#) dcsabi válasza nemgyuri hozzászólására (») Máj 11, 2011 /
 
Nem tudjuk pontosan milyen módszert akarsz mérésre használni, illetve milyen időközönként.
Továbbá a szolgák (vagy legalább egy) is kezdeményezhetnek-e kommunikációt?
Ezt mindenképpen kerülni kellene...
Ha működik már, akkor működni is fog. Van néhány I2C-s cuccom, évek óta megy még nem hibáztak.
Ha a programrészletek egyszer már lefutottak és nem hibáztak, akkor nem is fognak. Hardware-sen kell stabilan összeépíteni.
A slave, ha nem válaszol "azonnal" ne próbálkozzon feleslegesen a mester, hanem menjen tovább a főprogram, stb...
Ha jó az I2C rutin, akkor ilyen nem fordulhat elő.
Én software-s I2C használok általában, az még nem hibázott, ha igen annak hardware-s oka volt.
(#) nemgyuri válasza dcsabi hozzászólására (») Máj 11, 2011 /
 
A mérőrendszer egy forgójeladó, ezért teljesen bizonytalan, hogy mikor történik váltás az egyik bemeneten. Tehát a megszakításnak azonnal reagálnia kell. Az adatcsere durván: master küld azonosítót+8 byte-ot+1 ellenőrző byte-t, majd a slave vissza ugyanennyit. Ezekben méret és parancs infók vannak. A slave nem kezdeményezhet. Amire gondoltam: debuggoláskor az ACK jel nyugtázása környékén tudott elakadni. (csak a PIC16F886-ot tudtam debuggolni). hardware-s hiba is előfordulhat, mivel motor közelében lesz a cucc. Éppen ez a gondom, hogy ha hiba mégis előfordul, akkor ne akadjon ki. Hiba detektálása és feldolgozása már egy másik kérdés. A mastert gond nélkül továbblököm, de a slave-k a problémám.
(#) dcsabi válasza nemgyuri hozzászólására (») Máj 11, 2011 /
 
Ha a forgó jeladó viszonylag magas fordulaton jár, akkor a három szolgával nem lesz ideje a PIC-nek kommunikálni. Ez mekkora fordulatot jelent a valóságban?
20Mhz órajel minimum kell...
Esetleg újra kell fogalmazni a feladat strukturáját.
(#) nemgyuri válasza dcsabi hozzászólására (») Máj 11, 2011 /
 
A szolgákon van a forgójeladó és maximumon mennek. Éppen azzal tudtam kiakasztani, hogy megpörgettem a jeladót és közben ment a bus. Jelenleg a bus sebessége kissebbre van véve. Így látszólag nincs hiba, de tartok tőle, hogy lesz.
Következő: »»   1 / 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