I2c
I2c
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.
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.
Re: I2c
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í)
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í)
Re: I2c
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ů..
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ů..
Re: I2c
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á.
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á.
Re: I2c
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 )
Re: I2c
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.
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: I2c
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
Re: I2c
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í.
Re: I2c
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.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host