Více slaves na I2C - PCA9685 (PWM generator) neviditelný

arduino, teensy, atmega, pic a jine (software, hardware)
Odpovědět
lapa
medaile za lepsi forum
Příspěvky: 2895
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

20. 6. 2024, 10:50

Ahoj vespolek,
pár lidí si tady hraje s MCU a I2C periferiemi, snad budou vědět.
Na webu jsem odpověď nenašel - anglicky čtu v pohodě - kdyby někdo namítal, že mám hledat tam.

Mám na sběrnici I2C (master je PICAXE) zavěšena 4 zařízení (viz scan nize), všechna fungují jak mají (hodiny vrací čas, případně ho můžu měnit, expandery čtou všech 16 tlačítek, EEPROM zapisuje i čte).
Komunikace I2C je na 100 kHz.

Tohle je vypis ze scanneru I2C (hexa adresy)
Device found at 42 = Expander PCF8574
Device found at 44 = Expander PCF8574
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)

Pokud k nim přidám PCA9685 (16-channel, 12-bit PWM Fm+ I2C-bus LED controller), dál jako PWMgen, není vidět ani ve scanneru ani ve skutečné aplikaci.

Původně jsem myslel, že kvůli délce jeho I2C připojovacího kabelu (cca 60 cm).
Zkrátil jsem na cca 15 cm, nezabralo. Ostatní kabely mezi I2C zařízeními jsou tak 10 cm max.
Všechno plochý kabel - žádné zkroucené dvojice a ani vložený GND mezi datové vodiče.

Až když jsem začal postupně vypojovat z I2C jiná zařízení, PWMgen byl najednou vidět (na správné adrese 80) jak ve scanneru, tak fungovat v aplikaci - zatím testuji přes svit LED změnu PWM na jednotlivých portech.

PWMgen je fyzicky vždy až "konci" sběrnice - důvod je jen ten, že jeho oba I2C piny jsou 6-kolíkové a všechna ostatní zařízení mají jen 4-piny.
A zatím jsem nevyrobil druhý kabel 4/6 pin :) - to nechávám jako poslední pokus (ovšem tomu moc nevěřím).

Scan po odpojeni prvniho expanderu
Device found at 44 = Expander PCF8574
Device found at 80 = PWM generator PCA9685
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)

Scan po odpojeni druheho expanderu
Device found at 42 = Expander PCF8574
Device found at 80 = PWM generator PCA9685
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)

Scan po odpojeni obou expanderu
Device found at 80 = PWM generator PCA9685
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)


Přijde mi to, že pokud je PWMgen jako 5. přidaný, není detekován, resp. nekomunikuje.

Fyzicky je porad ten samy HW, jen do nej stridave nahravam scaner/puvodni aplikaci/novou aplikaci pro pouziti PWMgen a pripadne adekvatne pripojuji/odpojuji I2C kabliky.

Nemá s tím někdo zkušenost, kde může být zakopaný pes?
Tedy kromě toho zatím netestovaného, že PWMgen je pořád až na "fyzickém konci" I2C sběrnice.

Díky za případné náměty, či přímo řešení záhady :).
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
lubbez
Příspěvky: 3340
Registrován: 21. 6. 2012, 9:26
Bydliště: Praha

20. 6. 2024, 11:17

Takhle podobně jsem si naběhnul i já :-(
lapa
medaile za lepsi forum
Příspěvky: 2895
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

20. 6. 2024, 11:30

lubbez píše: 20. 6. 2024, 11:17 Takhle podobně jsem si naběhnul i já :-(
Soucit potěší :), ale pochopil jsem, že řešení ses asi nedobral.
Počkám, možná se někdo znalý/uspěšný vyskytne.

Díky.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
miv
Příspěvky: 1136
Registrován: 17. 9. 2019, 11:55

20. 6. 2024, 11:55

lapa píše: 20. 6. 2024, 10:50 Ahoj vespolek,
pár lidí si tady hraje s MCU a I2C periferiemi, snad budou vědět.
Na webu jsem odpověď nenašel - anglicky čtu v pohodě - kdyby někdo namítal, že mám hledat tam.

Mám na sběrnici I2C (master je PICAXE) zavěšena 4 zařízení (viz scan nize), všechna fungují jak mají (hodiny vrací čas, případně ho můžu měnit, expandery čtou všech 16 tlačítek, EEPROM zapisuje i čte).
Komunikace I2C je na 100 kHz.

Tohle je vypis ze scanneru I2C (hexa adresy)
Device found at 42 = Expander PCF8574
Device found at 44 = Expander PCF8574
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)

Pokud k nim přidám PCA9685 (16-channel, 12-bit PWM Fm+ I2C-bus LED controller), dál jako PWMgen, není vidět ani ve scanneru ani ve skutečné aplikaci.

Původně jsem myslel, že kvůli délce jeho I2C připojovacího kabelu (cca 60 cm).
Zkrátil jsem na cca 15 cm, nezabralo. Ostatní kabely mezi I2C zařízeními jsou tak 10 cm max.
Všechno plochý kabel - žádné zkroucené dvojice a ani vložený GND mezi datové vodiče.

Až když jsem začal postupně vypojovat z I2C jiná zařízení, PWMgen byl najednou vidět (na správné adrese 80) jak ve scanneru, tak fungovat v aplikaci - zatím testuji přes svit LED změnu PWM na jednotlivých portech.

PWMgen je fyzicky vždy až "konci" sběrnice - důvod je jen ten, že jeho oba I2C piny jsou 6-kolíkové a všechna ostatní zařízení mají jen 4-piny.
A zatím jsem nevyrobil druhý kabel 4/6 pin :) - to nechávám jako poslední pokus (ovšem tomu moc nevěřím).

Scan po odpojeni prvniho expanderu
Device found at 44 = Expander PCF8574
Device found at 80 = PWM generator PCA9685
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)

Scan po odpojeni druheho expanderu
Device found at 42 = Expander PCF8574
Device found at 80 = PWM generator PCA9685
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)

Scan po odpojeni obou expanderu
Device found at 80 = PWM generator PCA9685
Device found at AE = EEPROM 24LCxxx
Device found at D0 = RTC (Maxim)


Přijde mi to, že pokud je PWMgen jako 5. přidaný, není detekován, resp. nekomunikuje.

Fyzicky je porad ten samy HW, jen do nej stridave nahravam scaner/puvodni aplikaci/novou aplikaci pro pouziti PWMgen a pripadne adekvatne pripojuji/odpojuji I2C kabliky.

Nemá s tím někdo zkušenost, kde může být zakopaný pes?
Tedy kromě toho zatím netestovaného, že PWMgen je pořád až na "fyzickém konci" I2C sběrnice.

Díky za případné náměty, či přímo řešení záhady :).
Zkontroluj pullup odpory a katalogové údaje budičů jednotlivých čipů. Možná, že při 5-tici už je to moc.
lapa
medaile za lepsi forum
Příspěvky: 2895
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

20. 6. 2024, 12:14

miv píše: 20. 6. 2024, 11:55 ....
Zkontroluj pullup odpory a katalogové údaje budičů jednotlivých čipů. Možná, že při 5-tici už je to moc.
To mne nenapadlo, že z proklamovane teoreticke moznosti zavesit 127 (7bit) az 1024 (10bit) devices na jednu sbernici I2C to "hardwarove" mozna spadne na pouze jednotky ... :)

Jako obvykle: teorie je vzdy hezka, ale obvykle nasleduje realizacni vystrizliveni.
A obvykla cesta k expertstvi - neverit predpokladum a nutnost udelat vsechny mozne chyby ... :lol:

Diky, zkusim se tim probrat.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
miv
Příspěvky: 1136
Registrován: 17. 9. 2019, 11:55

20. 6. 2024, 4:30

lapa píše: 20. 6. 2024, 12:14
miv píše: 20. 6. 2024, 11:55 ....
Zkontroluj pullup odpory a katalogové údaje budičů jednotlivých čipů. Možná, že při 5-tici už je to moc.
To mne nenapadlo, že z proklamovane teoreticke moznosti zavesit 127 (7bit) az 1024 (10bit) devices na jednu sbernici I2C to "hardwarove" mozna spadne na pouze jednotky ... :)

Jako obvykle: teorie je vzdy hezka, ale obvykle nasleduje realizacni vystrizliveni.
A obvykla cesta k expertstvi - neverit predpokladum a nutnost udelat vsechny mozne chyby ... :lol:
Diky, zkusim se tim probrat.
A ještě bych doporučil se osciloskopem podívat na časové průběhy a hrany signálu (hlavně náběžné). To se kvůli těm otevřeným kolektorům může snadno pokazit. Občas pomůže i snížit pullup a tím ty hrany urychlit.
lapa
medaile za lepsi forum
Příspěvky: 2895
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

20. 6. 2024, 5:49

Tak jsem všechny spojovací I2C kabliky zatwistoval (správný datový proti správnému napajecimu), protože dokumentace I2C považuje 10 cm za hraniční délku. A já jsem těsně pod a přes 10 cm.
Ale další bádání až zítra - ty fotbaly, to je mor... :lol:

miv:
O oscilu jsem uvažoval, to si nechávám asi na víkend...

miv:
Tim snížením pullup jsi defacto myslel přidat další odpory na SCL/SDA, tím budou defacto paralelní vůči stávajícim a tim se celkový odpor na SCL/SDA sníží.
Chápu správně? Protože vyměňovat stávající SMD blechy není muj šálek čaje :lol:.

Zatim díky.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
miv
Příspěvky: 1136
Registrován: 17. 9. 2019, 11:55

20. 6. 2024, 8:19

lapa píše: 20. 6. 2024, 5:49 Tak jsem všechny spojovací I2C kabliky zatwistoval (správný datový proti správnému napajecimu), protože dokumentace I2C považuje 10 cm za hraniční délku. A já jsem těsně pod a přes 10 cm.
Ale další bádání až zítra - ty fotbaly, to je mor... :lol:

miv:
O oscilu jsem uvažoval, to si nechávám asi na víkend...

miv:
Tim snížením pullup jsi defacto myslel přidat další odpory na SCL/SDA, tím budou defacto paralelní vůči stávajícim a tim se celkový odpor na SCL/SDA sníží.
Chápu správně? Protože vyměňovat stávající SMD blechy není muj šálek čaje :lol:.

Zatim díky.
Ano i tak to lze řešit. Na SMD blechy to chce mikroskop. Nebo, pokud máš dobrý zrak, tak stačí lampička s lupou 10x zvětšení.
Standardně se dává na I2C signály cca 2K pullup (výsledný) odpor. Pozor je to pullup - tudíž proti plusu. Mně se občas osvědčilo jít až na asi K68 až 1K. Musí se to ale ověřit dle katalogových údajů jednotlivých čipů, aby to ty budiče zvládly. Obecně samozřejmě čím méně, tím lépe. Ona ta I2C sběrnice není nic moc a v zarušeném prostředí je to vůbec na draka. A určitě je třeba zapomenout na více než jednotky chipů na jedné sběrnici. Respektive by se to muselo naprogramovat s většími časovými okny. Z tohoto pohledu je např. SPI mnohem lepší, jen musíš řešit HW chip-select signály. Ale výsledek jsou megabitové rychlosti přenosu. Klidně třeba 16 MBitů není problém i s běžnými super lacinými 16-ti bitovými procesory.
lapa
medaile za lepsi forum
Příspěvky: 2895
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

20. 6. 2024, 8:37

miv:
Jo jo, proti Vcc (5V). Už jsem zkusil přidat 2x4k7 - bez změny, 2x2k7 - bez zmeny. Píšeš i nizsi hodnoty.
Už asi jen s osciloskopem, dám vědět výsledek...

BTW: Ani kroucene kabliky (vyrobene/testované mezi fotbaly :) ) nezabraly.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
miv
Příspěvky: 1136
Registrován: 17. 9. 2019, 11:55

20. 6. 2024, 9:45

lapa píše: 20. 6. 2024, 8:37 miv:
Jo jo, proti Vcc (5V). Už jsem zkusil přidat 2x4k7 - bez změny, 2x2k7 - bez zmeny. Píšeš i nizsi hodnoty.
Už asi jen s osciloskopem, dám vědět výsledek...

BTW: Ani kroucene kabliky (vyrobene/testované mezi fotbaly :) ) nezabraly.
Kroucené káble při 100 kHz prakticky nemají vliv. Spíše bych čuchal časové nekompatibility jednotlivých čipů (pokud tam jsou různé typy, jak jsem pochopil). Při takových problémech již jen osciloskop dvoukanál, aby byly vidět průběhy v čase a porovnávat s definicí I2C a katalogovými údaji. Pokud to kontroler umožňuje, zkusil bych také snížit přenosovou rychlost pod těch standardních 100 Kbit/sec.
A, jako obvykle, chyba bude nejspíše v softwaru. Alespoň dle mých zkušeností- kdykoliv něco takto zlobilo, bylo to mezi mou židlí a klávesnicí. Obvykle jsem nastavil špatně nějaký registr a tak podobně.
miv
Příspěvky: 1136
Registrován: 17. 9. 2019, 11:55

20. 6. 2024, 9:48

miv píše: 20. 6. 2024, 9:45
lapa píše: 20. 6. 2024, 8:37 miv:
Jo jo, proti Vcc (5V). Už jsem zkusil přidat 2x4k7 - bez změny, 2x2k7 - bez zmeny. Píšeš i nizsi hodnoty.
Už asi jen s osciloskopem, dám vědět výsledek...

BTW: Ani kroucene kabliky (vyrobene/testované mezi fotbaly :) ) nezabraly.
Kroucené káble při 100 kHz prakticky nemají vliv. Spíše bych čuchal časové nekompatibility jednotlivých čipů (pokud tam jsou různé typy, jak jsem pochopil). Při takových problémech již jen osciloskop dvoukanál, aby byly vidět průběhy v čase a porovnávat s definicí I2C a katalogovými údaji. Pokud to kontroler umožňuje, zkusil bych také snížit přenosovou rychlost pod těch standardních 100 Kbit/sec.
A, jako obvykle, chyba bude nejspíše v softwaru. Alespoň dle mých zkušeností- kdykoliv něco takto zlobilo, bylo to mezi mou židlí a klávesnicí. Obvykle jsem nastavil špatně nějaký registr a tak podobně.
Ještě bych zkontroloval napěťovou kompatibilitu čipů - původně bylo I2C na 5V, po novu již třeba i 3V3. To může také hrát roli.
Odpovědět

Zpět na „MCU“