I2C - přenos mezi procesory s různými takty.

Zdravim.
Měl bych dotaz ohledně přenosů dat mezi procesory s jinýmy takty. Řekněme že jeden procesor (Master na 8MHz) a druhý (Slave na 1MHz). Je možné že tato komunikace bude fungovat? V Materu se nastaví rychlost I2C a pak si Master generuje hodiny pro komunikaci, takže by Slave procesoru mělo být jedno jestli je nastavený na jiný takt, že?? nebo musim zajistit aby obě zařízení měly stejný takt?

Je úplně jedno, na kolik je taktován Master a Slave, PIC, co vím podporuje 100k, 400k a 1M rychlost I2C. Pokud nastavíš 100k, mělo by fungovat vše na I2C sběrnici. Modernější součástky I2C podporují 400k a 1M. Já osobně používám 400k. Je celkem 100% jistota, že pojede vše co je připojené na I2C.

výborně, velice jste mě potěšil, děkuju :smiley:

Nerobte unahlene zavery…
V datasheete daneho PIC je nepochybne uvedene, v akom vztahu je max. hodinova frekvencia IIC pre slave PIC ako funkcia taktovacieho kmitoctu. Je lepsie si to precitat a potom usudit, ci to bude bezat alebo nie.

Nevím sice, jak to myslíš, ale každej “normální” člověk ci přečte datasheet, než se do něčeho pustí a myslím si, že je každému jasné, že ne při všech frekvencích krystalu ty frekvence budou sedět, ale pokud nezvolíš nějakou hodnotu krystalu, která je už “od pohledu divná”, tak nevidím problém.
A pokud vemeš krystal 32,768kHz a budeš chtít 1Mhz I2C, tak bych se nedivil, že to nefunguje. :stuck_out_tongue: :smiley: :blush:

V datasheetu sem nic o tomto nenašel, proto sem napsal sem. A nemám v plánu tam dávat nějaké brutální rozdíly. Viděl bych to na Master 4MHz a Slave 1MHz pri 100kHz rychlosti I2C. Tam by to mělo funguvat, že?

Porovnej si to podle tabulky z datasheetu, konkretně pro 16F877A.

A z vlastní zkušenosti vím, že čím menší krystal, tím větší problémy s I2C. Při 20Mhz krystalu jede 100kHz, 400kHz tak 1MHz. Dokonce jsem zkoušel měnit rychlost za “provozu” a taky jde. Konkrétně 1Mhz pro EEPROM, 400kHz pro zbytek věcí na I2C (DS1337 a 4x DS75) :smiley:
I2Cspeed.jpg

Toto je přeci tabulka pro rychlost komunikace (nastavováno v Masteru). Jak si v tom mám porovnat, jestli mi poběží procesor 4MHz s 1MHz? Ale když si to vemu logicky, tak rychlost komunikace 100kHz je 10x menší než Slave, tak by v komunikaci neměl být probém.

Na tomto fore som len par dni, ale musim uznat, ze mnoho ludi nevie, na co je dobry datasheet.

Aka frekvencia krystalu je divna? Rad sa o tom dozviem viac.

To bol pomerne prehnany priklad. Okrem toho, ta tabulka, co ste sem zavesil, absolutne nic nehovori o tom, co chcel povodny tazatel.
Jemu islo oto, ze pokial master bude mat pomalsie hodiny ako slave, ci bude stihat komunikaciu na danej frekvencii.
Toto vsetko v datasheetoch samozrejme je, aj tom pre 16F877A.
Je tam aj to, ci moze slave, beziaci s 4MHz krystalom zvladat slave komunikaciu pri 100kHz alebo 400kHz, a ci to iste zvladne aj slave s 2MHz krystalom. Samozrejme nie je to tam takto explicitne napisane, ale to je vedlajsie.

Ano, to je pravda, na to som kolegu uz upozornil.

Vasa uvaha ide spravnou cestou, ale skusme ju rozvit dalej.
Po prve, treba vediet, o akom MCU sa bavime. Ale povedzme, ze je to PIC16F887, napriklad. Treba sa pozriet do datasheetu, v sekcii electrical characteristics (17) najst sekciu AC characteristics (17.8 ), preklikat sa az na IIC bus data requirements. Tam si najdite casy Tlow a Thigh - to su udaje hodinoveho “drotu” IIC zbernice, konkretne casy, kedy ma byt v urovni L a H. Su tam tri udaje - nas zaujima posledny - slave (SSP), zavisly od hodinovej frekvencie. Je to logicke, pretoze vnutorna logika je synchronizovana s hodinami.
U slave je to 1,5Tcy, spolu je to perioda 3Tcy. Teda minimalna perioda slave je 3Tcy. Ak Tcy = 4Tclk, tak minimalna perioda je 12Tcy, teda pre 100kHz slave potrebujete ist minimalne na frekvencii 1,2MHz.
No a sme doma. Pre tento konkretny pripad - bud musite pouzit rychlejsie hodiny alebo pomalsiu komunikaciu.

Tu tabulku jsem dal, aby se Pawalos kouknul, jestli ten slave pojede na 1Mhz a z tabulky je vidět, že ne, tedy spíš že na 1Mhz 400khz I2C není přesně dodržena. Z toho plyne to, co jsi psal

jaromir: v datasheetu pro PIC16F887 nemohu najít tabulku s těmito hodnotami. nahlíd jsem ale do jiného datasheetu (16F877A) a tam hodnota Tlow a Thigh je v řádku SSP 0,5 TCY. Znamená to tedy že u procesoru PIC16F877A je potřeba aby Slave měl takt procesoru minimálně 400kHz aby fungovala I2C komunikace na 100kHz?

Rad sa ucim nove veci a tiez by som sa rad dozvedel, ako ste z tej tabulky urcili, ze slave na 1MHz a 100kHz zbernici nebude fungovat.
Prosim, obetujte tu trosku casu na vysvetlenie.

Takze ten datasheet k 16F887 je tu
ww1.microchip.com/downloads/en/D … 41291F.pdf
a na strane 273 je to parameter 100 a 101.
Co sa tyka 0,5Tcy u 16F877A, je to nejake zvlastne. Prezeral som si tieto parametre u vsetkych PIC16F, ktore maju SSP alebo MSSP modul, dalej u PIC18F ktore maju MSSP modul a nasiel som vsade 1,5Tcy. Je mi preto divne, ze 16F877A by mal vynimku - mozno pojde o preklep v datasheete, neviem posudit.
Ak by ten udaj bol naozaj spravny, zvysok Vasej uvahy je spravny tiez.

ano ano, v tomto datasheetu to je. V datasheetu který mám stáhnutý tato tabulka chybí (chybí tam asi 50 stránek), proto sem tyto hodnoty nemohl najít :smiley:

ww1.microchip.com/downloads/en/D … 39582b.pdf
v tomto datasheetu pro 16F87XA je napsaná hodnota Thigh a Tlow 0,5 Tcy. Takže asi fakt překlep v datasheetu. nakoukl jsem také do jiných a všude jsou tyto hodnoty 1,5 Tcy

16F887 su pomerne nove MCU a je mozne, ze ten Vas datasheet je v nejakej starej verzii. Treba sledovat dostupnost novych DS, aby bol clovek stale v obraze :slight_smile:

Ten preklep sa mi prilis nezda, lebo naopak 877A su pomerne stare MCU… a tam by clovek cakal odchytane chyby. Skuste napisat na support.microchip.com - reaguju promptne a ochotne.

Bohužel na tom nejsem s angličtinou tak dobře abych jim mohl napsat, v angličtině mám trochu nedostatky :slight_smile: