2012年8月17日金曜日

FusionPCBで基板を作ってみた。

SeeedStudioにFusionPCBを2件発注してみた。2件とも注文内容は以下のとおり。
  • Fusion PCB Service (PCB08511P) = $9.90
    • PCB Qty. 10
    • Layer 2
    • PCB Thickness 1.6mm
    • PCB Dimension 5cm Max*5cm Max
    • PCB Color Green
    • Surface Finish Hasl
    • E-Test 50% E-test
  • Registered Air Parcel (Weight: 0.08kg. Delivery Time: 0-30 days): $3.86
と基板製造費と送料合わせて、$13.76。PayPalで支払ったけど、発注のタイミングが2,3日ずれてて1件は1,107円、もう1件は1,105円となってた。

SeeedStudioからの情報

注文1注文2
8/3(金)発注、支払い、データ送信
8/6(月)ステータスが"In production"に発注、支払い、データ送信
8/7(火)ステータスが"In production"に
8/15(水)ステータスが"Shipped"にステータスが"Shipped"に
8/16(木)ステータスが"Traceable"にステータスが"Traceable"に

郵便局からの情報

SeeedStudioのサイトからはHK Postの追跡サービスに飛べるようになっているが、JPでも同様の追跡ができるので、JPで追跡するのが便利。
注文1注文2
8/16 18:27引受(HongKong)引受(HongKong)
8/18 15:31国際交換支店から発送(KOWLOON D)
8/18 15:32国際交換支店から発送(KOWLOON D)
8/19 17:13国際交換支店に到着(成田国際空港支店)
8/19 18:23国際交換支店に到着(成田国際空港支店)
8/20 09:00通関手続中(成田国際空港支店)通関手続中(成田国際空港支店)
8/20 13:23国際交換支店から発送(成田国際空港支店)国際交換支店から発送(成田国際空港支店)
8/21 6:55到着(XXX支店)到着(XXX支店)

2012年8月15日水曜日

debなところでEagle6

Eagle6をdebな環境(DebianとかUbuntuとか)で動かそうと(インストールしようと)すると、ライブラリ足らずでインストールできない。 ここにあるとおりで。パーミッションとかインストール先は、お好みででで。
$ wget ftp://ftp.cadsoft.de/eagle/program/6.0/eagle-lin-6.0.0.run
$ sed -e '1,/^__DATA__$/d' eagle-lin-6.0.0.run > eagle-lin-6.0.0.tar.bz2
$ tar xvjf eagle-lin-6.0.0.tar.bz2
$ cd eagle-6.0.0/bin
$ wget http://dl.dropbox.com/u/4295670/eagle_libs.tar.bz2
$ tar xvjf eagle_libs.tar.bz2
$ mv eagle eagle.orig
$ echo 'LD_LIBRARY_PATH="$(dirname "$0")" "$(dirname "$0")/eagle.orig" $@' > eagle
$ chmod a+x eagle

2012年8月11日土曜日

Damosが吐いたソース

ヘッダ

#ifndef CRUISECONTROL_H_
#define CRUISECONTROL_H_

#include 

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef struct {
<09>double desiredSpeed;
<09>double actualSpeed;
} CruiseControl_Input;

typedef struct {
<09>double power;
} CruiseControl_Output;

void CruiseControl_initialize(void);

void CruiseControl_execute(const CruiseControl_Input *input, CruiseControl_Output *output);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* CRUISECONTROL_H_ */

実装

#include 

#include "CruiseControl.h"

typedef struct {
  double sum[2];
  uint_fast8_t sum_index;
} CruiseControl_DiscreteIntegrator_Context;

typedef struct {
  CruiseControl_DiscreteIntegrator_Context CruiseControl_DiscreteIntegrator;
} CruiseControl_Context;

typedef struct { double data[2]; } CruiseControl_Vector;

static CruiseControl_Context CruiseControl_context;

void CruiseControl_initialize(void) {
  /* DiscreteIntegrator */
  {
    CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index = 0;
    {
      CruiseControl_context.CruiseControl_DiscreteIntegrator.sum[CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index] = 0.0;
    }
  }
}

void CruiseControl_execute(const CruiseControl_Input *input, CruiseControl_Output *output) {
  double CruiseControl_Sum_y;
  double CruiseControl_Gain_y;
  double CruiseControl_DiscreteIntegrator_y;
  int32_t CruiseControl_Constant_y;
  double CruiseControl_Sum2_y;
  double CruiseControl_Saturation_y;
  uint_fast8_t CruiseControl_Compare_y;
  double CruiseControl_Switch_y;

  /*
   * Compute outputs
   */

  /* Sum */
  {
    CruiseControl_Vector sum_input = { { input->desiredSpeed, input->actualSpeed } };
    {
      CruiseControl_Sum_y = (1.0 * sum_input.data[INT32_C(0)] + -1.0 * sum_input.data[INT32_C(1)]);
    }
  }

  /* Gain */
  {
    {
      CruiseControl_Gain_y = 0.1 * CruiseControl_Sum_y;
    }
  }

  /* DiscreteIntegrator */
  {
    {
      CruiseControl_DiscreteIntegrator_y = CruiseControl_context.CruiseControl_DiscreteIntegrator.sum[CruiseControl_context.CruiseControl_DiscreteIntegrator.s
    }
  }

  /* Constant */
  {
    {
      CruiseControl_Constant_y = INT32_C(0);
    }
  }

  /* Sum2 */
  {
    CruiseControl_Vector sum2_input = { { CruiseControl_Gain_y, CruiseControl_DiscreteIntegrator_y } };
    {
      CruiseControl_Sum2_y = (1.0 * sum2_input.data[INT32_C(0)] + 1.0 * sum2_input.data[INT32_C(1)]);
    }
  }

  /* Saturation */
  {
    {
      double ifresult;
      if (CruiseControl_Sum2_y > 1.0) {
        ifresult = 1.0;
      } else {
        double ifresult2;
        if (CruiseControl_Sum2_y < -1.0) {
          ifresult2 = -1.0;
        } else {
          ifresult2 = CruiseControl_Sum2_y;
        }
        ifresult = ifresult2;
      }
      CruiseControl_Saturation_y = ifresult;
    }
  }

  /* Compare */
  {
    {
      CruiseControl_Compare_y = CruiseControl_Sum2_y == CruiseControl_Saturation_y;
    }
  }

  /* Power */
  {
    output->power = CruiseControl_Saturation_y;
  }

  /* Switch */
  {
    {
      double ifresult;
      if (CruiseControl_Compare_y) {
        ifresult = CruiseControl_Sum_y;
      } else {
        ifresult = ((double) (CruiseControl_Constant_y));
      }
      CruiseControl_Switch_y = ifresult;
    }
  }

  /*
   * Update states
   */

  /* DiscreteIntegrator */
  {
    {
      CruiseControl_context.CruiseControl_DiscreteIntegrator.sum[(CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index + 1) % 2] = CruiseControl_c
    }
    CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index = (CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index + 1) % 2;
  }
}

Damosを動かしてみた。

MATLABは買えわけないし、Scilabとかもチョットねー。 そんなわけで、YAKINDUのDamosを使ってコード生成/シミュレーションまでを試してみた。お題は決めてないので、ひとまずチュートリアルからチョイス。
なにがビックリって、Eclipseの変わり様。。。