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


Ignore:
Timestamp:
09/06/17 18:03:26 (8 years ago)
Author:
Tetsuya Michikawa
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