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ěď
Mnoho i2c Slave
Re: Mnoho i2c Slave
Ne.
Ne.
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ší.
No ale cvok jseš, nebo snad ne?
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Re: Mnoho i2c Slave
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 :
Takže pokaždé - při změně daného HW posílám vše komplet... mě šlo spíš o to časování
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
Re: Mnoho i2c Slave
Není to pošle, ale nastaví: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 :
Takže pokaždé - při změně daného HW posílám vše komplet...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
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.
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.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Re: Mnoho i2c Slave
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
Co jak jsem pochopil je také blbost. Mě to totiž občas zamrzlo, tak jsem hledal kdo to způsobuje.
Díky
Re: Mnoho i2c Slave
Blbost to není, ale obvykle to není potřeba, protože
Ž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.
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.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.