cs:i2c
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verzeNásledující verzeObě strany příští revize | ||
cs:i2c [2014/05/16 10:14] – [Ostatní operační systémy] kaklik | cs:i2c [2014/12/21 10:29] – [Sběrnice I²C ve stavebnici MLAB] kaklik | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
====== Sběrnice I²C ve stavebnici MLAB ====== | ====== Sběrnice I²C ve stavebnici MLAB ====== | ||
- | [[http:// | + | [[http:// |
Avšak díky[[cs: | Avšak díky[[cs: | ||
- | ===== Konvertory pro připojení I²C k PC ===== | ||
- | I²C je velmi rozšířená sběrnice vhodná pro připojování nejrůznějších čidel na krátké vzdálenosti. Avšak není obvyklé, aby byla vyvedena na běžných počítačích a dostupná tak k přímému použití. (([[http:// | + | ===== Spojování |
- | * [[http://www.robot-electronics.co.uk/acatalog/USB_I2C.html|USB-I2C USB to I2C Communications Module]] | + | I2C je sbernice původně určená k propojování zařízení na malé vzdálenosti. (Původně na rozměru plošných spojů). Avšak s použitím vhodných technik je možné její rozsah zvětšit na řádově desítky metrů(( |
- | * [[http:// | + | |
- | * [[http:// | + | |
- | Mají společný problém s kvalitou driverů. Navíc i2c-tiny-usb nesplňuje úplně I²C specifikaci a už vůbec ne USB physical layer specifikaci a jeho nejvyšší komunikační rychlost | + | V MLABu je spojování I2C zařízení řešeno na několika úrovních podle zvoleného rozsahu sítě. Lokálně (v rozsahu několika metrů) jsou moduly spojovány přímo MLAB kablíky. A oddělovány modulem [[cs: |
- | ==== Integrované obvody ==== | + | Na rozsáhlejší vzdálenosti je sběrnice vedena stíněnými signálními kabely na koncích opatřenými dutinkami zapojenými do modulu [[cs: |
- | === FTDI === | + | Pro rozsáhlé sítě je I²C nahrazeno jinou fyzickou vrstvou (CAN, Ethernet), která propojuje jednotlivé I2C síťové segmenty. |
- | Firma FTDI navíc nevyrábí žádný obvod, který by umožňoval přímou komunikaci přes USB (jejich USB device obvody mají pouze I²C slave rozhraní) komunikace s I²C je u FTDI možná pouze za použití speciálního režimu (([[http:// | ||
+ | ==== Programový balík Pymlab ==== | ||
- | === Silicon Labs === | + | Jde o softwarový balík, který umožňuje vytvářet síť z I²C zařízení a modulů, které slouží jako routovací body. Princip funkce spočívá v definování struktury sítě a adres jednotlivých nódů ve zdrojovém souboru ovládacího programu, pak lze ke všem bodům v síti přistupovat pomocí jednoduchých příkazů jazyka Python. |
+ | |||
+ | Instalaci samotného softwarového balíku [[cs: | ||
- | Vyrábí celou sérii převodníků [[http:// | + | sudo pip install pymlab |
- | === NXP === | + | |
- | NXP vyrábí [[http:// | + | V případě, že již nějakou starší verzi pymlab máme nainstalovanou, |
+ | sudo pip install --upgrade pymlab | ||
- | ==== Možnosti řešení ==== | + | Oba příkazy jsou rovnocenné a využívají python balíčkovací systém ve kterém je [[https:// |
- | | + | Tím by se měly stáhnout i balíky se kterými pymlab pracuje, jako je například cython-hidapi v pythonu označovaný pouze jako modul hid. |
- | - Navržení nového modulu s některým z obvodů od Cypress | + | |
- | - Použití modulu [[cs: | + | |
- | - Konstrukce i2c-tiny-usb z modulů MLAB viz. [[cs:i2c_avr_usb|I2C AVR USB]] | + | |
+ | sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-smbus cython | ||
+ | ===== Konvertory pro připojení I²C k PC ===== | ||
+ | |||
+ | I²C je velmi rozšířená sběrnice vhodná pro připojování nejrůznějších čidel na krátké vzdálenosti. Avšak není obvyklé, aby byla vyvedena na běžných počítačích a dostupná tak k přímému použití. (([[http:// | ||
+ | |||
+ | ==== USB rozhraní ==== | ||
+ | |||
+ | Proprietární konstrukce jako: | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Mají společný problém s kvalitou driverů. Navíc i2c-tiny-usb nesplňuje úplně I²C specifikaci a už vůbec ne USB physical layer specifikaci a jeho nejvyšší komunikační rychlost je 50 Kbps. Nicméně v MLABu jsou tyto konstrukce nahrazeny zařízením [[cs: | ||
+ | |||
+ | ==== USB HID ==== | ||
+ | |||
+ | Pro připojení bez nutnosti použití driverů určených pro specifický hadrware je možné použít specifikaci [[http:// | ||
+ | |||
+ | ==== UART/RS232 na I2C ==== | ||
+ | |||
+ | NXP vyrábí [[http:// | ||
+ | |||
+ | ==== Ethernet na I2C ==== | ||
+ | |||
+ | Pomocí modulů [[cs: | ||
===== Použití I²C v systému Linux ===== | ===== Použití I²C v systému Linux ===== | ||
Řádek 46: | Řádek 68: | ||
Jádro však obvykle nemá instalovaný modul //i2c-dev// (([[https:// | Jádro však obvykle nemá instalovaný modul //i2c-dev// (([[https:// | ||
sudo modprobe i2c-dev | sudo modprobe i2c-dev | ||
- | | + | |
+ | <WRAP tip> | ||
+ | Příkaz modprobe přidá modul pouze do běžící instance jádra. Po rebootu nám tento modul pravděpodobně bude chybět. Pokud nechceme modprobe používat i po následujícím startu počítače, | ||
+ | i2c-dev | ||
+ | </ | ||
Nyní již můžeme vypsat dostupné I²C sběrnice v systému: | Nyní již můžeme vypsat dostupné I²C sběrnice v systému: | ||
Řádek 90: | Řádek 117: | ||
Zápis provedeme příkazem i2cset. Ukážeme zde příklad nastavení [[cs: | Zápis provedeme příkazem i2cset. Ukážeme zde příklad nastavení [[cs: | ||
- | ~$ sudo i2cset -y -r 1 0x70 0x05 | + | ~$ sudo i2cset -y -r 1 0x70 0xff |
- | Value 0x05 written, readback matched | + | Value 0xff written, readback matched |
Tímto provedeme aktivaci všech I2C kanálů na I2CHubu ((je potřeba si dat pozor aby na nekterych kanalech nebyla zařízení se stejnou adresou, v takovém případě dojde ke kolizi a k zablokování sběrnice. Následně je pak potřeba provést reset odpojením napájení nebo RESET pinem na I2CHUB modulu.)) | Tímto provedeme aktivaci všech I2C kanálů na I2CHubu ((je potřeba si dat pozor aby na nekterych kanalech nebyla zařízení se stejnou adresou, v takovém případě dojde ke kolizi a k zablokování sběrnice. Následně je pak potřeba provést reset odpojením napájení nebo RESET pinem na I2CHUB modulu.)) | ||
Řádek 100: | Řádek 127: | ||
:~$ sudo i2cget -y 1 0x70 | :~$ sudo i2cget -y 1 0x70 | ||
- | | + | |
+ | ==== Použití modulů jádra ==== | ||
- | ===== Ostatní operační systémy ===== | + | Některá I²C zařízení mají přímo ovladače v linuxovém jádře. Je tak možné k těmto zařízením přistupovat přímo prostřednictvím souborového systému. V případě MLABu se to týká těchto modulů: |
- | V jiných operačních systémech, jako Windows či MAC OS, kde nemůžeme nebo nechceme využít podporu I²C rozhraní v jádře, můžeme použít pro ovládaní I2C prostředí jazyka Python, který je multiplatformní a běží na všech známých OS. | + | * [[cs: |
- | ==== MLAB I²C Python framework ==== | + | * [[cs: |
+ | * [[cs: | ||
- | Jde o softwarový balík, který umožňuje vytvářet senzorovou síť z I²C čidel a modulů | + | Protože I²C není v principu |
- | Princip funkce spočívá v definování struktury sítě a adres jednotlivých nódů ve zdrojovém souboru ovládacího programu, pak lze ke všem bodům v síti přistupovat pomocí jednoduchých příkazů jazyka Python. | + | echo název_driveru i2c_adresa > /sys/bus/i2c/devices/i2c-X/new_device |
- | + | ||
- | Výsledkem je možnost testovat a demonstrovat všechna nová čidla a zařízení. Bez nutnosti udržovat aktuální všechny specifické zdrojové kódy pro používané MCU. Lze tak dosáhnout nezávislosti na aktuálně používaných mikrokontrolérech, | + | |
- | + | ||
- | Pokud však potřebujeme na sběrnici přistupovat přes rozhraní USB pomocí modulu [[cs: | + | |
- | ]]. | + | |
- | Instalaci samotného softwarového balíku pymlab pak provedeme snadno pomocí: | + | |
- | + | ||
- | sudo easy_install pymlab | + | |
- | + | ||
- | nebo | + | |
- | sudo pip install pymlab | + | |
- | + | ||
- | Oba příkazy jsou rovnocenné a využívají python balíčkovací systém ve kterém je [[https://pypi.python.org/pypi/pymlab/0.2|pymlab zařazen]]. | + | |
- | Tím by se měly stáhnout i balíky se kterými pymlab pracuje, jako je například cython-hidapi v pythonu označovaný pouze jako modul hid. Nenainstaluje se ale samo libusb. To stále musíme provést ručně pomocí: | + | |
- | + | ||
- | sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-smbus cython | + | |
- | + | ||
- | === Rozšíření iPython === | + | |
- | + | ||
- | Vhodným řešením pro testová použít interaktivní prostředí iPython, kde můžeme přímo interaktivně zkoušet jednotlivé části kódu a zpracovávat data. | + | |
- | + | ||
- | Jeho základní instalace se v Ubuntu provede instalací těchto balíků: | + | |
- | sudo apt-get install ipython-notebook scipy numpy | + | |
- | + | ||
- | Pak již můžeme iPython spustit z příkazového řádku | + | |
- | ipython notebook --pylab inline | + | |
- | + | ||
- | Pro přímý přístup ke sběrnici I²C bez sudo je třeba být ve skupině | + | |
- | sudo adduser kaklik i2c | + | |
- | + | ||
- | ---- | + | |
- | Poznámka: Pro seznámení se s jazykem [[http:// | + | |
- | + | ||
- | === Python interpreter pro ARM STM32 === | + | |
- | + | ||
- | Pro použití Python frameworku na vyčítání čidel by bylo potřeba na [[cs: | + | |
+ | Tím dojde k převzetí kontroly nad I²C zařízením jádrem Linuxu. Ve výpisu i2cdetect můžeme takový stav vidět označený jako UU. Podrobnosti o provedení a úspěšnosti inicializace můžeme pak obvykle najít v [[http:// | ||
+ | ===== Ostatní operační systémy ===== | ||
+ | V jiných operačních systémech, jako Windows či MAC OS, kde nemůžeme nebo nechceme využít podporu I²C rozhraní v jádře, můžeme použít pro ovládaní I2C prostředí jazyka Python, který je multiplatformní a běží na všech známých OS. | ||
===== Související stránky ===== | ===== Související stránky ===== | ||
- | * [[cs:usbi2c|USBI2C]] - rozplánovaný modul určený k přímému převodu I2C na USB | + | * [[cs: |
* [[cs: | * [[cs: | ||
* [[cs: | * [[cs: | ||
Řádek 158: | Řádek 154: | ||
* [[cs: | * [[cs: | ||
* [[cs: | * [[cs: | ||
+ | * [[cs: | ||
+ | * [[cs: | ||
+ | * [[cs: | ||
cs/i2c.txt · Poslední úprava: 2022/09/02 21:20 autor: kaklik