Uživatelské nástroje

Nástroje pro tento web


cs:usbi2c

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.


Předchozí verze
Poslední revize
cs:usbi2c [2018/03/07 18:18] – [Ubuntu 14.04] roman
Řádek 1: Řádek 1:
 +====== Převodník USB na I²C - USBI2C01A ======
 +
 +[[cs:i2c|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://www.paintyourdragon.com/?p=43|Kromě vyvedení DDC z volného portu pro display.]]))
 +
 +{{ :cs:modules:usbi2c01a_top_big.jpg?direct&300 |USBI2C01A}}
 +
 +Modul se proto snaží řešit tento problém použitím obvodu [[http://www.silabs.com/products/interface/usbtouart/Pages/HID-USB-to-SMBus-Bridge.aspx|Silicon Labs CP2112]], který je přímým převodníkem mezi USB a SMBus resp. I2C. 
 +
 +===== Použití modulu =====
 +
 +Modul se po připojení k USB chová, jako standardní HID zařízení. Tato vlastnost má výhodu, že teoreticky nepotřebuje žádné speciální ovladače. A s modulem lze komunikovat přímo přes standardní USB HID rozhraní. Některé operační systémy však obsahují programové vybavení pro přímé použití sběrnice I2C/SMBus. V takových případech je výhodné nahradit generický USB HID ovladač speciálním driverem, který tento modul zapojí do systémové sběrnice I2C. 
 +
 +==== HIDAPI ====
 +
 +HIDAPI je platforma, přes kterou se dá k převodníku přistupovat z Linuxu, Windows nebo MAC OS na různých procesorových platformách. Podmínkou je, že na dané platformě je nainstalováno libusb-1.0.
 +
 +
 +=== Ubuntu 14.04 ===
 +
 +Na počítač, ke kterému převodník připojíme, musíme nejdříve nainstalovat [[https://github.com/trezor/cython-hidapi|hidapi]] a některé další balíky. Od Ubuntu 14.04 to jde jednoduše pomocí: 
 +
 +  sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-pip python-smbus cython 
 +
 +Dále pak potřebujeme pouze balík [[cs:pymlab|Pymlab]], jak je zmíněno na stránce [[cs:i2c]].
 +
 +  sudo pip install pymlab
 +  
 +== Nastavení USBI2C v pymlabu s HIDAPI ==
 +Převodník USBI2C lze používat s [[cs:pymlab|]].
 +
 +Nastavení může vypadat takto:
 +  
 +  cfg = config.Config(
 +      i2c = {
 +          "device": 'hid',   # nazev ovladace pro USBI2C
 +          "serial": '00A59C5E',   #sériové číslo převodníku, není povinné, pokud používáte jediný převodník
 +          "led": True,    # nastavení LEDek, True - signalizace komunikace, False - signalizace vypnuta
 +      },
 +  
 +      bus = [
 +          { << Dalsi Pymlab zarizezi >>},
 +      ],
 +  )
 +  cfg.initialize()
 +  
 +
 +== Příklad blikání LEDkami na USBI2C01A pomocí Pythonu: ==
 +
 +  import hid
 +  import time
 +  
 +  try:
 +      print "Opening device"
 +      h = hid.device()
 +      h.open(0x10C4, 0xEA90)
 +  
 +      print "Manufacturer: %s" % h.get_manufacturer_string()
 +      print "Product: %s" % h.get_product_string()
 +      print "Serial No: %s" % h.get_serial_number_string()
 +  
 +      h.write([0x02, 0xFF, 0x00, 0x00, 0x00])  # nastaveni vystupu v rezimu open-drain
 +      time.sleep(0.1)
 +      for k in range(10):
 +          h.write([0x04, 0xFF, 0xFF])  # zapise 1 na vsech 8 vystupnich IO pinu
 +          time.sleep(0.1)
 +          h.write([0x04, 0x00, 0xFF])  # zapise 0 na vsech 8 vystupnich IO pinu
 +          time.sleep(0.1)
 +  
 +      print "Closing device"
 +      h.close()
 +  
 +  except IOError, ex:
 +      print ex
 +  
 +  print "Done"
 +
 +//Příklad je nutné spustit s oprávněním správce.//
 +
 +<WRAP info round>
 +Podrobnosti k ovládání IO portů přes HID API najdete v [[http://www.mlab.cz/WebSVN/filedetails.php?repname=MLAB&path=%2FModules%2FCommSerial%2FUSBI2C01A%2Fpdf%2FCP2112%2FAN495.pdf
 +|tomto dokumentu]]
 +</WRAP>
 +
 +== Nastavení přístupových práv k USB ==
 +
 +Aby se skript nemusel spouštět s právy roota, je třeba vytvořit v adresáři **/etc/udev/rules.d** soubor SiliconLabs.rules s obsahem:
 +
 +  SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", GROUP="i2c", MODE="0666"
 +  SUBSYSTEM=="usb_device", ATTRS{idVendor}=="10c4", GROUP="i2c", MODE="0666"
 +  
 +Aby se tato konfigurace stala aktivní, tak je potřeba USB zařízení odpojit a opět připojit. 
 +  
 +=== Windows 8 ===
 +
 +Pokud ve windows jeste nemame, tak stahneme a nainstalujeme [[https://www.python.org/downloads/|Pyhon2.7]].
 +Spolecne s nim potrebujeme mit nainstalovany i nastroj pip. V pripade, ze se nenainstaluje spolecne s pythonem (sel by spustit z prikazoveho radku), tak jej musime nainstalovat samostatne, podle navodu na teto strance: https://pip.pypa.io/en/latest/installing.html#install-pip
 +
 +Dale pak  stahneme a nainstalujeme [[http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython|Cython]]. To udelame jeho stanzenim a naslednou instalaci pomoci pip. Napriklad: 
 +  pip install C:\Users\kakona\Downloads\Cython-0.22.1-cp27-none-win32.whl
 +
 +Pri instalaci se muze stat, ze pip odmitne balik nainstalovat kvuli spatne zdetekovane architekture win32 viz. [[http://stackoverflow.com/questions/28107123/cannot-install-numpy-from-wheel-format|tato chyba]]. K odstraneni staci instalacni soubor prejmenovat. Ke spravne funkci Cython baliku je jeste potreba Microsof C++ compiler. Ten muzeme ziskat z teto stranky: http://www.microsoft.com/en-us/download/details.aspx?id=44266 
 +
 +Po uspesne instalaci vsech zavislosi muzeme nainstalovat hidapi.
 +
 +  H:\>pip install hidapi
 +  Collecting hidapi
 +    Using cached hidapi-0.7.99-6.tar.gz
 +  Building wheels for collected packages: hidapi 
 +    Running setup.py bdist_wheel for hidapi
 +    Stored in directory: C:\Users\kakona\AppData\Local\pip\Cache\wheels\2b\48\e3\2
 +  4967b124ee3c5de267640f1b6fd0da760d99cf4e81181aab7
 +  Successfully built hidapi
 +  Installing collected packages: hidapi
 +  Successfully installed hidapi-0.7.99.post6
 +  H:\>
 +==== Linux Kernel ====
 +
 +Linux je případem operačního systému, kde existuje systémové řešení komunikace se sběrnicí I2C, takže je výhodné generický HID ovladač vyměnit za modul v kernelu. Obvod CP2112 je podporován v linuxovém kernelu od verze jádra 3.16. K jeho funkci proto stačí zavést modul i2c-dev, jak je popsáno v [[cs:i2c#pouziti_i_c_v_systemu_linux|návoudu na použití I²C]]. Následně ověříme, že v systému vidíme novou sběrnici I²C. 
 +
 +  kaklik@UST-vyvoj:~$ sudo i2cdetect -l
 +  i2c-0 i2c        i915 gmbus ssc                  I2C adapter
 +  i2c-1 i2c        i915 gmbus vga                  I2C adapter
 +  i2c-2 i2c        i915 gmbus panel                I2C adapter
 +  i2c-3 i2c        i915 gmbus dpc                  I2C adapter
 +  i2c-4 i2c        i915 gmbus dpb                  I2C adapter
 +  i2c-5 i2c        i915 gmbus dpd                  I2C adapter
 +  i2c-6 i2c        DPDDC-B                          I2C adapter
 +  i2c-7 smbus      CP2112 SMBus Bridge on hiddev0  SMBus adapter
 +  i2c-8 smbus      CP2112 SMBus Bridge on hiddev0  SMBus adapter
 +  kaklik@UST-vyvoj:~$
 +
 +Pokud ano, tak rozhraním můžeme pracovat stejně jako s klasickou SMBus sběrnicí. S tím rozdílem, že modul neumí SMBus Quick Write, musíme proto použít parametr //-r//, jako je uvedeno v následujícím příkladu:
 +
 +  kaklik@UST-vyvoj:~$ sudo i2cdetect -y -r 8 
 +        1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 +  00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +  70: 70 -- -- -- -- -- -- --                         
 +  kaklik@UST-vyvoj:~$
 +
 +Vidíme, že je na sběrnici připojeno zařízení s adresou //0x70//, které je v tomto případě [[cs:i2chub|modul I²C Hubu]].
 +
 +==== Ukázky připojených I²C modulů ====
 +
 +=== CLKGEN01B ===
 +
 +[[cs:clkgen]]
 +
 +{{:cs:modules:clkgen01b_connection_big.jpg?300 |Ukázka použití modulu CLKGEN a USBI2C01A}}
 +
 +
 +
 +=== MAG01A ===
 +
 +[[cs:mag]]
 +
 +{{:cs:modules:usbi2c01a_mag01a_top_big.jpg?direct&300 |Modul USBI2C01A s připojeným magnetometrem MAG01A}}
 +
 +=== GPIO ===
 +
 +[[cs:i2cio]]
 +
 +{{youtube>5ZDLRfBRRL4?medium}}
 +===== Související stránky =====
 +
 +  * [[cs:i2c_avr_usb|I²C AVR USB]]
 +  * [[cs:i2c-pic-usb|I²C PIC USB]]
 +  * [[cs:i2c|Sběrnice I²C ve stavebnici MLAB]]
 +
 +
 +===== Reference =====
 +
 +  * [[http://www.acmesystems.it/i2c|I2C bus interface]]
 +  * [[http://wiki.erazor-zone.de/wiki:linux:python:smbus:doc|Python SMBus and I²C library]]
 +  * [[http://www.i2cdevlib.com/| I2C Device Library]]
 +  * [[http://askubuntu.com/questions/163298/whats-a-simple-way-to-recompile-the-kernel|Ubuntu stock kernel build]]
 +  * [[http://unix.stackexchange.com/questions/12005/how-to-use-linux-kernel-driver-bind-unbind-interface-for-usb-hid-devices|How to use Linux kernel driver bind/unbind interface for USB-HID devices]]
  
cs/usbi2c.txt · Poslední úprava: 2018/03/07 18:18 (upraveno mimo DokuWiki)