Hatena::ブログ(Diary)

滴了庵日録 このページをアンテナに追加 RSSフィード

2016/12/08(Thu)

Xcodeでプロジェクトの名前を変更

メモ。

  • プロジェクトのフォルダを丸ごとコピーして名前を変更。
  • Xcodeで開く。
  • Project Navigatorでプロジェクト名を変更。
  • プロジェクトの[General]の[Bundle Identifier]を変更。
  • [Manage Schemes]でSchemeを変更。
  • ソースファイルのフォルダ名を変更。
  • プロジェクトの[Build Settings]の[info.plist File]のパスを修正。
  • Project Navigatorでソースフォルダ名とパスを修正。
  • プロジェクトの[Build Settings]の[Product Name]を変更。

【参考URL

2016/12/06(Tue)

Ogaki Mini Maker Faire

12/3(土)〜4(日)に、大垣ソフトピアジャパンで開催されたOgaki Mini Maker Faire出展してきました。


われわれ奈良キカイケンは、おもちゃをハックしてワイヤレスでスマホなどにつなげるというテーマで、いろいろ作品を展示しました。制御ボードのGPduino BLEとGPduino WiFiも5枚売れました。(まあ、出展料はなんとか回収できた。)


出展していると、あまり他の展示を見て回る時間が無いのが残念なのですが、ロボット系やメカ系を中心にいくつかご紹介。


プラモデルを1/1で作る会さんの実物大ヴィーゼル戦車。あえて内部が見えるように展示されてましたが、外見はまるでホンモノです。1500ccのエンジンを積んでて実際に走れます。


LOCUS FABERツクロカさんの歩く山車。テオヤンセン機構ですね。歩いてるところを見てみたい。


Pロボ204さんのExo-Wheel。SF感あるかっこいい車椅子型モビリティ。意外にも外装は、やわらか素材。


nullさんのパネル組み立て式ロボット。レゴブロックみたいに組み替えられるロボット。この足回りに使われてるモータと車輪、ちっちゃくて良いですね。


MPMさんのゴム動力で動くロボット。ゴム動力もさることながら、A4のMDF1枚からギアを含むパーツを切り出しているのが素晴らしい。左のものは紙製で、なんとケント紙8枚を貼り合わせているとのこと。

2016/12/05(Mon)

ESP8266でタイマ割り込み

Arduinoでタイマ割り込みを使おうとすると、CPUアーキテクチャごとにやり方が違って不便に感じる。もっとも、Arduonoでタイマ割り込みなど使おうというのは筋が悪いのかもしれないが。

ESP8266の場合

// ミリ秒をクロック数に換算 (@80MHz)
#define MSEC2CLOCK(ms)    (ms * 80000L)

// タイマ割り込みハンドラ
void timer0_ISR (void) {
  timer0_write(ESP.getCycleCount() + MSEC2CLOCK(10) ); // 10msec
  
  // TODO 割り込み処理をここに
}

void setup() {
  // タイマ割り込みの設定
  noInterrupts();
  timer0_isr_init();
  timer0_attachInterrupt(timer0_ISR);
  timer0_write(ESP.getCycleCount() + MSEC2CLOCK(10) ); // 10msec
  interrupts();
}

Arduino UNOなどAVR系Arduinoの場合

MsTimer2を使用する。

#include <MsTimer2.h>

// タイマ割り込みハンドラ
void timerHandler() {
  // TODO 割り込み処理をここに
}

void setup() {
  // タイマ割り込みの設定
  MsTimer2::set(10, timerHandler); // 10msec
  MsTimer2::start();
}

Arduino DUE

DueTimerを使用する。

#include <DueTimer.h>

// タイマハンドラ
void Timer3_handler(void){
  // TODO 割り込み処理をここに
}

void setup()
{
  // タイマ割り込みの設定
  Timer3.attachInterrupt(Timer3_handler);
  Timer3.start(10000); // 10msec (10,000usec)
}

2016/11/30(Wed)

PSoCでI2C読み出し

PSoCでセンサICなどからデータを読み出す場合を考える。


以下では、I2Cブロックを I2C_1 という名前にしたものとする。

(PSoC Creatorめ! なんでC++でクラス化しないの?)


まず、読み出し完了まで同期待ちしてもよいなら次のようになる。

// 複数バイト読み出し
// devAddr: スレーブアドレス
// regAddr: サブアドレス
// length: バイト長
// value: 値を格納する領域の先頭
void I2CReadBytes(uint8 devAddr, uint8 regAddr, uint8 length, uint8 *value)
{
    uint8 i=0;
    I2C_1_MasterSendStart(devAddr, I2C_1_WRITE_XFER_MODE);
    I2C_1_MasterWriteByte(regAddr);
    I2C_1_MasterSendRestart(devAddr, I2C_1_READ_XFER_MODE);
    while (i++ < (length-1)) {
        *value++ = I2C_1_MasterReadByte(I2C_1_ACK_DATA);
    }
    *value = I2C_1_MasterReadByte(I2C_1_NAK_DATA);
    I2C_1_MasterSendStop();
}

しかし、組込みソフトで通信完了まで同期待ちしてるようではこの先心配である。

(同期待ちが許されるのはArduinoまでだよね! キャハハ! キモーイ!)

アドレス書き込みはともかく、データ読み出しは非同期にしたい。

// 複数バイト読み出し開始 (非同期)
// devAddr: スレーブアドレス
// regAddr: サブアドレス
// length: バイト長
// value: 値を格納する領域の先頭
// 戻り値: エラー状態
uint8 I2CReadBytesAsync(uint8 devAddr, uint8 regAddr, uint8 length, uint8 *value)
{
    // アドレスを書く
    I2C_1_MasterSendStart(devAddr, I2C_1_WRITE_XFER_MODE);
    I2C_1_MasterWriteByte(regAddr);
    
    // データ読み出し開始
    uint8 ret = I2C_1_MasterReadBuf(
        devAddr, value, length,
        I2C_1_MODE_COMPLETE_XFER | I2C_1_MODE_REPEAT_START);
    return ret;
}

// 複数バイト読み出し状態チェック
// 戻り値: 読み出し状態
uint8 I2CReadBytesWait()
{
    uint8 status;
    
    // ステータスを取得する
    status = I2C_1_MasterStatus();
    
    // 転送中か
    if(status & I2C_1_MSTAT_XFER_INP){
        return status;
    }
    // 最終のステータスを取得し、ステータスをクリアする
    status = I2C_1_MasterClearStatus();
    return status
}

2016/11/28(Mon)

PSoC Creatorのプロジェクトのバージョン管理

PSoC Creatorのプロジェクトでバージョン管理すべきファイルと除外していいファイルは、以下の通り。(たぶん)

バージョン管理すべきファイル

  • ワークスペース名.cywrk
  • プロジェクト名.cydsn/TopDesign/
  • プロジェクト名.cydsn/プロジェクト名.cyprj
  • プロジェクト名.cydsn/プロジェクト名.cydwr
  • プロジェクト名.cydsn/*.c
  • プロジェクト名.cydsn/*.h

バージョン管理から除外していいファイル

  • ワークスペース名.cywrk.ユーザ名
  • プロジェクト名.cydsn/codegentemp/
  • プロジェクト名.cydsn/CortexM3/
  • プロジェクト名.cydsn/Export/
  • プロジェクト名.cydsn/Generated_Source/
  • プロジェクト名.cydsn/プロジェクト名.cyprj.ユーザ名
  • プロジェクト名.cydsn/プロジェクト名.cycdx
  • プロジェクト名.cydsn/プロジェクト名.cyfit
  • プロジェクト名.cydsn/プロジェクト名.rpt
  • プロジェクト名.cydsn/プロジェクト名.svd
  • プロジェクト名.cydsn/プロジェクト名_datasheet.pdf
  • プロジェクト名.cydsn/プロジェクト名_timing.html

参考