USB -> I2C -> 1Wire

Keďže už mám HW,FW a aj I2C to 1wire švába bolo načase spraviť konečné riešenie.

Najprv par fotiek riešenia:

Čidlo

Ako na to  pod Linuxom:

Po zapnutí by sa malo zariadenie nájsť automaticky:

[182470.820375] usb 4-5: new low-speed USB device number 40 using ohci_hcd
[182470.855874] usb 4-5: New USB device found, idVendor=0403, idProduct=c631
[182470.855892] usb 4-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[182470.855903] usb 4-5: Product: i2c-tiny-usb
[182470.855910] usb 4-5: Manufacturer: Till Harbaum
[182470.858023] i2c-tiny-usb 4-5:1.0: version 1.05 found at bus 004 address 040
[182470.860535] i2c i2c-1: connected i2c-tiny-usb device

Ak nie treba skontrolovať či máme zavedený modul i2c_tiny_usb. Na  1Wire treba natiahnuť  moduly i2c_dev, ds2482, wire. DS2482 sa ale neinicializuje sám ale treba ho nakopnúť.

Najpr si nájdeme kde máme I2C zbernicu:

# i2cdetect -l
i2c-1    i2c           i2c-tiny-usb at bus 004 device 040    I2C adapter
i2c-0    smbus         SMBus PIIX4 adapter at 0b00         SMBus adapter

V mojom prípade je to i2c-1. Tak si pozrieme či vidíme aj konvertor:

# i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Konvertory majú adresu z rozsahu 0x18 až 0x1B Ja ho mám na adrese 0x18. Tak to linux-u povieme:

#echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-1/new_device

Teraz by sa nám mala objaviť 1Wire zbernica.

#ls /sys/bus/w1/devices/
w1_bus_master1

A teraz môžeme zistiť či nejaké zariadenia vidíme:

# cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
0
# cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
1

Ak sme nejaké zariadenia objavíme tak si môžeme pozrieť ich čísla

# cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
28-0000019d3c92

Keďže 28 znamená teplomery môžeme použiť driver ktorý nám zjednoduší prácu w1_therm tým získame súbor w1_slave:

# cat /sys/bus/w1/devices/28-0000019d3c92/w1_slave
60 01 4b 46 7f ff 10 10 b5 : crc=b5 YES
60 01 4b 46 7f ff 10 10 b5 t=22000

čo znemená že tu mám 22 stupňov presne.