Changes between Version 6 and Version 7 of epics/bbb/debian/thermometer/ft260


Ignore:
Timestamp:
09/06/17 18:03:26 (7 years ago)
Author:
michkawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/bbb/debian/thermometer/ft260

    v6 v7  
    359359 
    360360シリアル番号をunicodeで設定したら、オープンできたので、大丈夫そう。[[br]] 
     361 
     362== IOC == 
     363 
     364接続方法と使用するコマンドがわかったので、IOCを作成する。[[br]] 
     365作成するレコードは、ADT7410のADCを16bitに設定するコマンドと、温度を取得するコマンドのみ。[[br]] 
     366以前作った、[wiki:/epics/bbb/debian/USBHID/USB_SP4T drvAsynUSBHID]を使って、コマンドを実装。[[br]] 
     367 
     368ここで気付いたのだが、drvAsynUSBHIDはInput,Outputを使った制御には使えるが、USBHIDデバイス自体を制御するFeatureコマンドには対応していない。[[br]] 
     369今回もFeatureコマンドを使わなくても目的は達成できたが、今後Featureコマンドが必須の制御をする場合には、何らかの解決策を考える必要がありそう。[[br]] 
     370 
     371=== 使用コマンド(FT260) === 
     372 
     373今回使用するFT260上のコマンドは、 
     374 
     375 * I2C Write Request(0xD0~0xDE) 
     376 * I2C Read Request(0xC2) 
     377 * I2C Input Report(0xD0~0xDE) 
     378 
     379のみである。I2C Input ReportはReadで返ってくるフォーマットの定義なので、I2C Write RequestとI2C Read Requestだけを実装する。 
     380 
     381=== protocol ファイル === 
     382 
     383今回作成したプロトコルファイルがこれ。 
     384 
     385{{{ 
     386TERMINATOR=""; 
     387LockTimeout  = 500; 
     388ReplyTimeout = 100; 
     389ReadTimeout  = 100; 
     390WriteTimeout = 100; 
     391MaxInput=8; 
     392 
     393wr_4 = 0xD0; 
     394rd   = 0xC2; 
     395flg  = 0x06; 
     396len  = 0x04; 
     397 
     398##################### 
     399# $1:I2C slave device addr 
     400##################### 
     401 
     402# Set ADT7410 ADC Resolution(16bit) 
     403setADCRes { 
     404    out $wr_4 $1 $flg 0x02 0x03 0x80 0x00 0x00; 
     405} 
     406 
     407# Read ADT7410 templature value 
     408getTemp { 
     409    out $rd   $1   $flg    $len 0x00; 
     410    in  $wr_4 $len "%(\$2)01r" "%01r" "%*4r"; 
     411} 
     412 
     413}}} 
     414 
     415I2Cデバイスのアドレスをdbファイルから設定できるようにして、温度レジスタを別々に読み込んでCALCで計算するようにした。[[br]] 
     416 
     417=== DBファイル === 
     418 
     419{{{ 
     420record(bo, "$(user):ADT7410:init") 
     421{ 
     422    field(DESC, "Set ADT7410 ADC 16bit") 
     423    field(DTYP, "stream") 
     424    field(OUT,  "@FT260_ADT7410.proto setADCRes($(i2caddr)) $(dev)") 
     425} 
     426 
     427record(longin, "$(user):temp:reg:HSB") 
     428{ 
     429    field(DESC, "Get temperature registor HSB") 
     430} 
     431 
     432record(longin, "$(user):temp:reg:LSB") 
     433{ 
     434    field(DESC, "Get temperature registor LSB") 
     435    field(DTYP, "stream") 
     436    field(INP,  "@FT260_ADT7410.proto getTemp($(i2caddr),$(user):temp:reg:HSB) $(dev)") 
     437    field(SCAN, "$(scan)") 
     438    field(FLNK, "$(user):temp") 
     439} 
     440 
     441 
     442record(calc, "$(user):temp") 
     443{ 
     444    field(DESC, "Get temperature") 
     445    field(INPA, "$(user):temp:reg:LSB") 
     446    field(INPB, "$(user):temp:reg:HSB") 
     447    field(CALC,  "(B&0x80)=0x80?(((B<<8)|A)-65536)/128:((B<<8)|A)/128") 
     448    field(PREC,  "5") 
     449    field(EGU,   "degC") 
     450} 
     451}}} 
     452 
     453 
     454