HINの散財とゲームの日々

2017-02-16

[]テキストエディタで編集して表面に付けたシルクを裏面に

 タイトルそのままです。kicadの変更をGUI+マウスではなく、エディタなどでファイルを直接行うと楽な場合があるので簡単な例を。

 Pcbnewで表面のシルクを付けて、裏面にも同じ内容で同じ位置に置きたい場合。マウスで再度入力するのもありですが、エディタを使って編集すると短時間で作業を行えます。


 まず、kicadを全て閉じてプロジェクトを保存しているディレクトリを丸々コピーします。念のために。

 次にプロジェクトを保存しているディレクトリを見て、プロジェクト名+.kicad_pcbというファイルを探して適当なエディタで開きます。

 すでに入力した表面のシルク文字を探してみます。そうすると(gr_text ...)という記述で内容と場所などが記載されています。

f:id:HIN:20170215152638p:image

 裏面シルクにコピーしたい内容をすべてコピーし、F.SilkSをB.Silksに変更、さらに裏面の場合はミラー文字にしないと反転してしまうので(justify mirror)を追加します。

 vimだとcommand modeでshift+vで範囲選択して、:を押してs/F.SilkS/B.SilkS/で置換して、さらに同じように範囲選択して:を押してs/)))$/)) (justify mirror))/で置換出来ます。簡単。

f:id:HIN:20170215152639p:image

 上記変換を行ってからPcbnewで開くと表面のシルクが裏面にコピーされていたら変更完了です。


 kicadはテキストファイルで保存されるので編集が簡単です。ある部品を等間隔で並べたい、という時にはperlrubypythonなどで編集するようなスクリプトを書くとラク出来るかもしれません。

 で。そういうのはkicadで出来るのでは無いか、と思って調べたらpythonscriptを書くと色々と出来るようになっています。"kicad python scripting"とかでググるといろいろと出来ます。ので何か書こうかなと思ってます。

トラックバック - http://d.hatena.ne.jp/HIN/20170216

2017-02-11

[]cygwinruby + fiddleでFT232RLのBit-Bang modeを使う

 いろいろと作業をしていると、ある決まった変化をする信号を出力したくなることがあります。たぶん。そういうときにFTDIのFT232RLというチップを使うと便利です。

 Windowsの場合、C#ライブラリを使ってプログラム書いてもそれなりに簡単に書くことが出来ますが、cygwinrubyで動かせるようになるとよりお手軽かな、と思って試してみたところ問題無く動かせましたので、簡単にメモとして残しておきます。


 FT232RLの実装された基板は秋月電子で販売されているFT232RL USBシリアル変換モジュールキット: 半導体 秋月電子通商 電子部品 ネット通販を使用しています。実験で使用する場合、同じく秋月電子などで販売されているブレッドボードを使うと簡単に実験することが出来ます。


 ruby 2.0から、*.dllや*.soなどのダイナミックリンクライブラリを扱うためのライブラリとしてfiddleが使えるようになっています。こちらを使ってftd2xx.dllを使用するためのコードを作成します。

require 'fiddle/import'

module FiddleFTD2xx
  extend Fiddle::Importer
  dlload "ftd2xx.dll"

  extern "unsigned int FT_Open(int, void*)"
  extern "unsigned int FT_Close(void*)"
  extern "unsigned int FT_SetBaudRate(void*, unsigned int)"
  extern "unsigned int FT_SetBitMode(void*, unsigned char, unsigned char)"
  extern "unsigned int FT_GetBitMode(void*, unsigned char*)"
  extern "unsigned int FT_Write(void*, void*, unsigned int, void*)"
end

class FTD2xx
  attr_reader :handle, :write_length

  def initialize
    @handle = Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP)
    @write_length = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT)
  end

  def open(idevice)
    FiddleFTD2xx.FT_Open(idevice, @handle)
  end

  def close
    FiddleFTD2xx.FT_Close(@handle.ptr)
  end

  def baudrate=(rate)
    FiddleFTD2xx.FT_SetBaudRate(@handle.ptr, rate)
  end

  def setBitMode(ucmask, ucmode)
    FiddleFTD2xx.FT_SetBitMode(@handle.ptr, ucmask, ucmode)
  end

  def getBitMode
    mode = Fiddle::Pointer.malloc(Fiddle::SIZEOF_CHAR)
    FiddleFTD2xx.FT_GetBitMode(@handle.ptr, mode)
    return mode.to_i
  end

  def write(data)
    write_data = [data].pack("C*")
    FiddleFTD2xx.FT_Write(@handle.ptr, write_data, 1, @write_length)
  end
end

 とりあえず必要な関数だけしか書いていません。必要に応じてftd2xx.hを見て追加しています。

 こちらをftd2xx.rbとして保存し、以下のようなソースコードで呼び出してBit-Bang modeでI/Oを制御することが出来ます。

require 'ftd2xx'

ftd2xx = FTD2xx.new

ftd2xx.open(0)
ftd2xx.setBitMode(0xff, 0x0)
ftd2xx.setBitMode(0xff, 0x1)

wait_time = 0.1

1.upto(10) {
  0.upto(6) { |i|
    data = 1 << i
    ftd2xx.write(data)
    sleep wait_time
  }
  7.downto(1) { |i|
    data = 1 << i
    ftd2xx.write(data)
    sleep wait_time
  }
}

ftd2xx.write(0)
ftd2xx.close

 FT232RLのD0~D7に抵抗とLEDを付けて、上記プログラムを実行すると以下のようにLEDが点滅します。

 こんな感じで簡単に信号を変化させることができるので、ちょっと思い付いたことや簡単なICの制御などに使用すると便利です。

参考資料

FT232R USB UART IC Data Sheet

D2XX Programmer’s Guide

Bit Bang Modes for the FT232R and FT245R

トラックバック - http://d.hatena.ne.jp/HIN/20170211

2015-02-24

[]レイフォースで連射が不安定になる原因について

 NRS-1という連射基板を作ったのですが、その際にレイフォースの連射が不安定になるということを知り、なぜそうなるのかを調べて原因が分かりましたので簡単に記載しておきます。


 原因はレイフォースは入力を取り込むタイミングが処理内容により変わり、従来のシンクロ連射回路でボタンの更新をするタイミングと入力を取り込むタイミングがほぼ同じタイミングになり、安定してON->OFF->ON->OFF...と取り込めなくなるため、でした。


 簡単にタイミングチャートっぽいのを踏まえて書くと、デモ画面や普通に背景などの処理がある程度ある場合は

f:id:HIN:20150225001200p:image

 上記のようにボタンの更新タイミングと、入力を取り込むタイミングが異なるため問題無くON->OFF->ON->OFF...とボタン入力が変化します。


 3面冒頭の雑魚が出てくるシーンでは処理が軽くなり、ボタン入力が下記のようになります。

f:id:HIN:20150225001201p:image

 ボタンの更新タイミングはVSYNCの立ち上がりのため変わりませんが、入力を取り込むタイミングが前後するためON->OFF->ON->OFF...とならず、ON->ON->OFF->ON->OFF...などのようになってしまい、規則正しく入力を行うことが出来なくなります。

 そのためある特定の場面で連射が効かなくなるようになってしまいます。


 NRS-1ではその他基板に関しても調査を行い、問題が無いであろうタイミングで入力の更新を行っています。そのためレイフォースでも連射が途切れるようなことはありません。

 従来のシンクロ連射回路でもタイミングを変更することにより問題無く動作するようになるのではないかと思われます。

トラックバック - http://d.hatena.ne.jp/HIN/20150224

2014-08-30

[]起動しなくなったタイトーF3システムマザーボード

 以前から調子が悪く、起動したりしなかったりしていたF3基板が全く起動しなくなってしまいました。ROMを別のマザーボードに差し替えたところ動いたのでマザーボードの故障。

 詳しい方に聞いてみたところ、マザーボード側コネクタの半田が浮いて接触不良に良くなるよ、と教えてもらったので再半田したところ直りました。

 見た目全然問題無さそうでも接触していないようです。この手のコネクタは良く接触不良を起こしますが、見た目で分からないのが厳しい。


 再半田したのは下記画像の4つのコネクタ。念のために全部再半田してあります。かなりのピン数ですが、気長にやればいつかは終わります。

f:id:HIN:20140830212750j:image

トラックバック - http://d.hatena.ne.jp/HIN/20140830

2013-12-27

[]すごく安く買えるホットエアーステーションを使ってみたよ

 ebayなどでhot air stationなどで検索すると、どこかで見たことあるようなSMD等の半田付けに使う機材が売られています。メーカー名が違うので、いわゆるコピー品だと思われます。すごい種類売っていて安いです。

 どんなものなんだろうか、と思っていた物の買うことは無かったのですが、たまたま買ってしまった方がいて、使ってみることが出来たのでちょっとだけ書いておきます。


 とりあえず今回はなぜかamazonでも売っているWEP 858Dという機種を使ってみました。

 使ってみた結果を簡単に書くと、壊れても負けない強い心・使い捨てても全然おっけー、などと思えれば結構使えるんじゃないかな、と思いました。ちょっとしか使っていませんが、触った感触として。


 製品自体の評判はamazon.comの評価を読むのが良いのではないでしょうか。

Amazon.com: Customer Reviews: WEP 858D (110V) Hot Air Rework Soldering Station, Suitable For SMD, SOIC, CHIP, QFP, PLCC, BGA

 まー、買ってすぐに壊れたなどと書かれてます。その他検索するといろいろと出てきます。今回は開けて中を見てませんが、見るといろいろとツッコミ出来そうな中身のように思えます。


 今回は64pinのQFPや24pinぐらいのTSOPなどを外してみましたが、まんべんなく熱を加えるようにすると問題無く外すことが出来ました。ノズルが無いので大きな物を外す時にはコツが必要かもしれません。


 普段温度測定に使っている[HAKKO] | こて先温度計・テスター | HAKKO FG-100温度プローブホットエアー用を使って温度を測定したところ、設定温度300℃の状態で吹き出し口から5mmぐらいのところの温度が270℃ぐらいでした。どこを測って表示しているのか分かりませんが、結構な誤差があるようです。電源on時の液晶表示の温度の上がり方と、吹き出し口の実測値を見ると全然相関性が無いように思えましたが気のせいかもしれません。

 結構誤差があるようなので、天ぷら油の温度を測定する物が300℃まで測定出来るので、吹き出し口の温度を測定しながら使った方が良いかもしれません。300℃以上は…温度変化させてみて勘で…。

 誤差を補正するためにCALという箇所で調整すると思うのですが、マニュアルを見ても何も書いていないためよく分からず、分解すると分かるかなと思いつつも買ったばかりだしということで特に分解などはしていません。


 同じような製品をATTEN,YiHuaなどのメーカーも作っていますが微妙に中身が違うようです。上記メーカーも検索するといろいろと出てきます。youtubeに動画でレビューなども上がっています。いわゆるコピー品なので、オススメ出来ないですが、とりあえず割り切って使うのであれば良い…やっぱ良くないですかね…。

トラックバック - http://d.hatena.ne.jp/HIN/20131227