Mnoho i2c Slave

Odpovědět
Luděk
Příspěvky: 76
Registrován: 22 úno 2016, 08:47

Mnoho i2c Slave

Příspěvek od Luděk » 16 úno 2020, 08:05

Zdravím, mám dotaz.
Potřebuji k Picaxovi 20X2 připojit více modulů co visí na sběrnici i2c. Jde mi o toto :
Dám příkaz - hi2csetup i2cmaster, ... adresa... slow/fast... Byte/Word - dle daného zařízení
a hned za to hi2cin / hi2cout - čtu nebo zapisuju dle potřeby.
A teď ty dotazy :
musí být mezi tím Setupem a čtením či zápisem nějaká pauzička?
musí být mezi další komunikací s dalším modulem také pauzička?
Lze takto ovládat i směs zařízení, kde někdo má Slow a jiný Fast... či Byte nebo Word?
Potřebuji číst 2x PCF8574 a zapisovat do 2x PCF8575 a pak 2x paměti 24C32 a pak modul RTC a ještě chci přidat Arduino jako Slave....
Nechci info, že jsem cvok, ale kvalifikovanou odpověď :-)

DavidO
Příspěvky: 838
Registrován: 01 kvě 2013, 21:27

Re: Mnoho i2c Slave

Příspěvek od DavidO » 16 úno 2020, 13:46

Luděk píše:
16 úno 2020, 08:05
musí být mezi tím Setupem a čtením či zápisem nějaká pauzička?
Ne.
Luděk píše:
16 úno 2020, 08:05
musí být mezi další komunikací s dalším modulem také pauzička?
Ne.
Luděk píše:
16 úno 2020, 08:05
Lze takto ovládat i směs zařízení, kde někdo má Slow a jiný Fast... či Byte nebo Word?
Ano. (pokud se tomu ta zařízení aktivně nebrání)

Ono je to tak, že kdykoli se přes i2c posílají data (ať už tam nebo zpátky), tak první věc, co se posílá, je adresa slave, a komunikace jede tak rychle, jak se to nastaví. U Picaxe se tohle nastavení provede předem (to se ještě nic neposílá) a pak platí pro všechny přenosy, dokud to nezměníš. Při komunikaci pak už jen říkáš co a kam (a přitom se pošle i ta adresa). Takže komunikovat s víc různýma zařízeníma by mělo jen znamenat volat si ten setup podle té protistrany + zapsat/číst, pak zase setup atd. Zařízení se tomu může "bránit" leda tak, že poruší standard i2c a nějak to zmrší.
Luděk píše:
16 úno 2020, 08:05
Nechci info, že jsem cvok, ale kvalifikovanou odpověď :-)
No ale cvok jseš, nebo snad ne? ;)

Luděk
Příspěvky: 76
Registrován: 22 úno 2016, 08:47

Re: Mnoho i2c Slave

Příspěvek od Luděk » 16 úno 2020, 14:54

Davide díky :-)
jen upřesňující dotaz, nepochopil jsem jednu poznámku... jak jsi to myslel s tím, že se pošle předem vše a pak jen při komunikaci co a kam.
Já to neumím jinak, než vše komplet - koukni - třeba RTC a EEPROM :

Kód: Vybrat vše


hi2csetup i2cmaster,$D0, i2cslow_8, i2cbyte		;adresa RTC modulu
hi2cin 0,(secs,mins,hod,day,date,mes,rok)			;načtení proměnných
hi2csetup i2cmaster,$AE, i2cslow_8, i2cword		;nastaví  adresu i2c EEPROM
hi2cin 100,(b1)								;načte byte z adresy 100

Takže pokaždé - při změně daného HW posílám vše komplet... mě šlo spíš o to časování

DavidO
Příspěvky: 838
Registrován: 01 kvě 2013, 21:27

Re: Mnoho i2c Slave

Příspěvek od DavidO » 16 úno 2020, 17:04

Luděk píše:
16 úno 2020, 14:54
Davide díky :-)
jen upřesňující dotaz, nepochopil jsem jednu poznámku... jak jsi to myslel s tím, že se pošle předem vše a pak jen při komunikaci co a kam.
Já to neumím jinak, než vše komplet - koukni - třeba RTC a EEPROM :

Kód: Vybrat vše


hi2csetup i2cmaster,$D0, i2cslow_8, i2cbyte		;adresa RTC modulu
hi2cin 0,(secs,mins,hod,day,date,mes,rok)			;načtení proměnných
hi2csetup i2cmaster,$AE, i2cslow_8, i2cword		;nastaví  adresu i2c EEPROM
hi2cin 100,(b1)								;načte byte z adresy 100

Takže pokaždé - při změně daného HW posílám vše komplet...
Není to pošle, ale nastaví:
hi2csetup nastaví "komu jak" a pak teprv hi2cin skutečně "něco pošle a přečte" (hi2cout jen pošle). Takže zavoláš hi2csetup abys nastavil parametry komunikace a pak kolikrát chceš voláš hi2cin nebo hi2cout aby sis s tím už nastaveným zařízením popovídal (třeba když chceš ten čas, tak se každou chvíli ptej tím hi2cin 0,(sec...) ale už nemusíš pokaždé volat hi2csetup. A naopak, až budeš chtít s jiným, tak znova zavoláš hi2setup atd. atd.
Luděk píše:
16 úno 2020, 14:54
mě šlo spíš o to časování
Nevidím žádný problém v tom, jak to máš napsané.
Technicky by to mělo vypadat takhle:
hi2csetup i2cmaster,$D0, i2cslow_8, i2cbyte ;adresa RTC modulu
-- na sběrnici se nic neděje, jen tvůj Picaxe už ví, komu a jak má něco poslat (v tomto případě pomalu tvému RTC a že to RTC používá jednobytové adresování)
hi2cin 0,(secs,mins,hod,day,date,mes,rok) ;načtení proměnných
-- Picaxe nastartuje sběrnici ("start condition") a pošle tam správnou rychlostí adresu RTC modulu a příkaz, ze kterého RTC modul pochopí, že má poslat zpátky ty časové údaje, takže je pošle a Picaxe ti je uloží do těch 7 proměnných. Pak Picaxe sběrnici uvolní ("stop condition")
hi2csetup i2cmaster,$AE, i2cslow_8, i2cword ;nastaví adresu i2c EEPROM
-- na sběrnici se nic neděje, jen tvůj Picaxe už ví, komu a jak má něco poslat (pomalu do EEPROM a že EEPROM používá dvoubajtové adresování)
hi2cin 100,(b1) ;načte byte z adresy 100
-- sběrnice se "nastartuje" a pošle se tam správnou rychlostí adresa EEPROM a příkaz, že chceš číst z adresy 100 jeden bajt, takže EEPROM ti ty data pošle, Picaxe ti je uloží do b1 a uvolní sběrnici.

Vždycky, když se něco začíná posílat ("start condition"), tak všichni, kdo jsou fyzicky připojení ke sběrnici a jsou ochotní komunikovat, začnou poslouchat, co přijde jako první věc. To je totiž adresa slave, a ten konkrétní slave odpoví ACK že tam jako je, zatímco všichni ostatní od té chvíle až do ukončení tohoto jednoho přenosu dál neposlouchají. Hned po té adrese master může něco dalšího posílat nebo číst. Celá ta sekvence se někdy ukončí ("stop condition") a vše se vrací na začátek. Tam pak není žádný důvod na něco čekat nebo vkládat pauzu, předchozí přenos je ukončený a nový může začít.

Luděk
Příspěvky: 76
Registrován: 22 úno 2016, 08:47

Re: Mnoho i2c Slave

Příspěvek od Luděk » 16 úno 2020, 18:14

Davide super, už jsem v obraze a všechny pauzy, co jsem tam měl vyhodím a taky jsem tam dával Hi2csetup off.
Co jak jsem pochopil je také blbost. Mě to totiž občas zamrzlo, tak jsem hledal kdo to způsobuje.
Díky :-)

DavidO
Příspěvky: 838
Registrován: 01 kvě 2013, 21:27

Re: Mnoho i2c Slave

Příspěvek od DavidO » 16 úno 2020, 18:33

Blbost to není, ale obvykle to není potřeba, protože Hi2csetup off způsobí, že ty piny se přestanou používat pro i2c a můžeš je použít jinak, ale to obvykle nenastane, protože na ně máš fyzicky připojenou tu i2c sběrnici, tak nedává smysl použít je jinak.
Že to zamrzá může být ledasčím. Z popisu funkcí v dokumentaci Picaxe není jasné, co se stane, když se komunikace nějak zajímavěji rozbije. Jen tam je poznámka, že když je špatná slave adresa, že se vrátí FF (přičemž co to znamená špatná netušíme - možná korektní adresa ale neexistující slave a možná nesmyslná adresa per se). Ale když se při komunikaci slave nějak kousne, nebo když jedna či druhá strana komunikace neumí clock stretching a protistrana to použije, nebo když nastane některá ze 150 možností chyby, tak to tam jasné není (a umím si představit, že tím Picaxe zmrzne). Taky samozřejmě HW vlivy - kdyby to bylo nekulturně pospojované (třeba kdyby se ti nějak rozpojovaly, zkratovaly nebo přizemňovaly dráty nebo byly nedobře vyřešené pull-upy), tak to snadno komunikaci zblbne.

Odpovědět

Kdo je online

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