I2c

Odpovědět
Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

I2c

Příspěvek od Patrik » 22 bře 2021, 06:48

Ahoj,

chtěl bych se zeptat, chtěl jsem si rozšířit sběrnici I2c na mém Arduinu z důvodu přidání FRAM paměti (nyní jsem měl na sběrnici pouze LCD displej). Na konec sběrnice jsem dal pull up rezistory 10 kohm... Sběrnice zdánlivě funguje, ale občas FRAM paměť nemačte a občas LCD displej začne zobrazovat čínské znaky... S tím LCD displejem a s čínskými znaky jsem měl dlouhodobě problém, I když byl displej napojeny do Arduina přímo (pomohlo až zvolení správné velikosti pull up rezistoru). Nějaké rady?
Děkuji.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: I2c

Příspěvek od AstroMiK » 22 bře 2021, 07:27

Málo informací.

Podle těch příznaků bych to odhadoval na rušení, nebo něco s napájením.

Doplňující otázky:

1) Jak dlouhá je ta I2C sběrnice?

2) Komunikuje displej, FRAM i Arduino na stejných napěťových úrovních? (Některá zařízení dokážou komunikovat jen na 3V úrovních, jiná jen na 5V úrovních - to se nesmí kombinovat. V případě nustnosti se používají převodníky úrovní.)

3) FRAM máš jako samostatný obvod, nebo jako nějaký hotový modulek? (Poblíž pouzdra paměti by měl být na napájení kondenzátor. Moduly už je obvykle mají, ale jestli používáš samostatný obvod, tak bys ho tam měl přidat.)

4) Ten samý dotaz jako 3) ale ohledně displeje - mimochodem, co je to vlastně za LCD displej? Takový ten běžný 2(4)x16 znaků, nebo nějaká specialita?

5) Když to nefunguje, neděje se něco zvláštního kolem co by mohlo způsobit rušení? (sepnutí relé, otáčení motorů, nějaké jiné jiskření)

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: I2c

Příspěvek od Patrik » 22 bře 2021, 08:23

1) z arduina mám vyvedeny vodič délky asi 8 CM do dps desky... A zde je jakoby ta sběrnice, pro FRAM a lcd.
2) ano, displej je na stejné napětí, jako FRAM. Používám paměťový modul FRAM I2C Breakout 32 KB a LCD klasický s prevodnikem (2 řádky o 16 znacích).
5) o rušení pochybuji.. Mám v obvodu elektromagnetické ventily, ale jsou celkem daleko a pokud mám starý kód v Arduinu a zapojeny pouze LCD displej, tak to jde bez problémů.. Navíc jsou galvanicky oddelené.
Pokud nahraji nový kód, tak dojde k problémům téměř ihned... Prostě začnu napájet arduino a někdy se na LCD nezobrazí ani to co má.. Nebo hned čínské znaky... Někdy se tak děje, až když přiložím čipovou kartu k rfid čtečce... No, ale pak jsem zkusil obvod zanechat, tak jak je.. Nahrát starý program, zapojit jen LCD displej přímo do Arduina + jeho pull up rezistory a frčí to úplně bez problémů..

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: I2c

Příspěvek od AstroMiK » 22 bře 2021, 09:01

Délka sběrnice je v pořádku.
Napěťové úrovně pro komunikaci také.

To rušení bych zatím úplně nezavrhoval - to se šíří vzduchem i přes galvanické oddělení.
A už jsem se v praxi setkal s tím, že stačilo aby někdo poblíž zařízení použil telefon nebo vysílačku a procesor se resetoval.


Tak asi nezbyde, než zkusit postupně přidávat jednu věc po druhé a zkoušet, kdy přesně se problém objeví.

Píšeš, že to může mít i souvislost se softwarem (nová a stará verze programu se chovají rozdílně) - takže se tam třeba můžou nějak navzájem ovlivňovat knihovny.

Jinak už mě nic nenapadá.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: I2c

Příspěvek od ondraN » 22 bře 2021, 09:39

Pro práci s I2C je důležité, jak je zpracováno ošetření chybových stavů sběrnice. To by měly řešit knihovny, ale většinou to vůbec neřeší. Pak skončí jedna operace chybovým stavem a už se to celé sype, hlavně pokud je na sběrnici více zařízení. Zkusil bych, za současného připojení obou zařízení, nejprve jen displej, potom jenom FRAM. Tím zjistím, jestli jednotlivé zařízení pracují jak mají. Pokud bude problém, zkusit druhé zařízení fyzicky odppojit od sběrnice a zase ověřit. Nejlepší by bylo, podívat se na to log. analyzátorem (400Kč snad není tak velká položka :mrgreen: )

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: I2c

Příspěvek od pavel1tu » 23 bře 2021, 07:32

Souhlasím s Ondrou, asi rušení,
nebo - píšeš o těch 10k odporech, některé I2C desky je už na sobě mají, a pak ty navíc jsou spíše na škodu než k užitku (jen nápad)
Scaner I2C to nenajde ? Já u dost pamětí byl trochu zaskočen, že byla na jiné adrese než dle popisu.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: I2c

Příspěvek od Patrik » 24 bře 2021, 09:42

Děkuji za rady kluci. Zkoušel jsem to i se starým programem, to mě napadlo (který fungoval bez problémů). Ale když je na sběrnici napojena FRAM I displej, tak to už bez problémů nejde... Já vůbec pochybuji, že jde o nějaké rušení, protože někdy kontroler zapojím do zásuvky a už to blbne.. A musím třeba arduino 4x restartovat, aby se na displeji zobrazilo to, co má.. Elektromagnetické ventily jsou stále uzavřené... Spsi si myslím, že to bude nějaká nesprávná hodnota pull up rezistoru, I když na netu jsem četl, že doporučuji 10 kohm.. Já měl dlouhodobě stejný problém s I2c displejem, který jsem měl zapojeny samostatně.. Taky mi pomohla až správná velikost odporu u pull up rezistoru... A teď když mám displej zapojeny samostatně, tak už nemám žádný problém ani třeba po 20 dnech... Tak zkusím zapojit tu sběrnici bez pull up rezistoru? Já jsem so uvědomil, že možná je chyba v tom, že jsem nechal zapojene I původní pull up rezistory k displeji.. Tzn.. Vytáhl jsem jen vodiče od displeje scl a SDA a zapojil paralelně kde je FRAM paměť a na té sběrnici jsou taky 2x pull up rezistory.. Možná dělá neplechu toto.. Zítra to zkusím a děkuji za rady

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: I2c

Příspěvek od ondraN » 24 bře 2021, 11:10

Na 5V I2C jsou doporučené rezistory 4k7. Ty mají být na modulu, který je na fyzickém konci sběrnice. Rychlost I2C musí být nastavena na rychlost nejpomalejšího prvku sběrnice. Pokud je sběrnice vedena vodiči, tak přímým plochým kabelem, rozhodně ne krouceným. To je kvůli vzájemné kapacitě vodičů, která musí být co nejmenší. Ideální je, pokud je mezi CLK a DATA vložený GND vodič. Takto provedená sběrnice funguje spolehlivě, pokud není vadné některé zařízení.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: I2c

Příspěvek od kiRRow » 24 bře 2021, 16:27

a pokud máš dva moduly, co každý má své pull up rezistory, jedná se o paralerní zapojení rezistorů a jejich hodnota bude poloviční ... je potřeba ty odpory odpájet a nechat je jen na modulu, který je fyzicky nejdál na sběrnici.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: I2c

Příspěvek od Patrik » 28 bře 2021, 21:24

Tak jsem nezapojil pull up rezistory co jsem měl na konci sběrnice a nechal jen ty od LCD displeje... A zatím to funguje, tak uvidíme a děkuji za rady.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů