akita

10/12/27: Macのマウスカーソルの速さの変更

これを使えば、「環境設定」→「マウス」よりも速くに設定できる http://benh57.com/mousezoom.html

10/12/21: MacのSpotlightでNASを検索

手動で設定が必要。 http://bloggertouch.appspot.com/sherlock/post/5351516949600819203

10/12/21: BluetoothキーボードRBK-2100でのiPadでの日本語入力切り替え

Winキー+スペース、で切り替え。

10/12/20: 導電性エポキシ

先日のNd磁石を導電性エポキシで接着してみる。導電性エポキシは、当然ながら、塗るときにはけっこう柔らかいので、隣とショートしないように注意しないといけない。可能ならば、カベをたてておくのが無難。

10/12/20: CraftROBOでケント紙でマスク

用紙厚さ=20、刃出し量0.3mmで、実測厚さ0.2mmのケント紙を切ってみた。完全にあながあくわけではないので、カット後にカッターでの穴抜きはやはり必要。しかも基材のケント紙が柔らかいので、残りが細いところは切れてしまう。テープでまとめてすいつけて抜こうとしても、ケント紙の表面がやぶれてしまう。

10/12/18: PSoCのI2CでのSleepからの復帰

PSoCのTRFによれば、Sleepからの復帰は割り込みで可能、となっている。I2CHWは、明示的には書かないが、処理が割り込みルーチンで行われているようなので、I2C Slaveデバイスをふだんはsleepにしておいて、マスタからの転送要求があったときに起こす、という使い方はできるんだろうか。ちょっと試してみよう。→(10/12/27追記)ダメっぽい。I2C-WriteをしてもSleepから復帰しない。GPIO割り込みをEnableにしておけば間Sleepからは起きるのかもしれないが、Sleepからの復帰がまにあわないっぽい。

10/12/17: Nd磁石のリフローハンダ

やってみたが、磁石の磁力がかなり弱くなっていた。リフローの途中で、キュリー温度を超えてしまったんだろうか。リフローはあきらめて、半田ごてで手付けor導電性エポキシを使うほうがいいのかもしれない。

10/12/17: ハンダマスクの再利用

クリアファイルやOHPシートでつくったハンダマスクは、一度クリームハンダを塗ると、穴のところにクリームハンダが埋まって、再利用するときは、それをとらないといけない。古い歯ブラシでこすってみたが、うまくとれない。1個1個、とがったものでつつくのがよさそうだが、つつくところがズレると、切れてしまう。再利用はあきらめたほうがいいんだろうか。いっそのこと、トレーシングペーパーのようなものでマスクを作ったほうがいいのだろうか。

10/12/17: OHPシートの厚さ

だいたい0.15mmくらい。クリアファイルより薄いので、マスクに向いている(盛られるハンダが薄くなる)ような気がするので、テストしてみる。→どうもうまく切れない。刃出し量を0.3mmにしても、表面にキズはつくが、切れてない。やわらかすぎるんだろうか。 →刃出し量を0.3mmのまま、用紙設定を「厚めのシート」にして、カット速度を1(もっとも丁寧)から4ぐらい、用紙厚さを27ぐらいに変更してみたら、なんとかカットできた。カット速度は遅ければきれいに切れる、というものでもないのだろうか。あと「用紙厚さ」のパラメータの意味がよくわからない(マニュアルにも記載がない)。切れる深さは刃出し量で決まるような気がするんだけど、刃を下ろすときの圧力が変わるんだろうか。パターンが細かいので、顕微鏡をのぞきながらカッター等で抜くとやりやすい。

10/12/16: CraftROBOで半田マスク&リフロー

先日(10/12/07)の手順に従って半田マスクのDXFファイルをつくり、CraftROBOで、純正カッティングシートでカットしてみた。

mask_sheet.jpg

↑だいたい切れているが、シート自体がかなりやわらかいので、細いところが切れてしまう。

mask_file.jpg

↑適当なクリアファイル(厚さは実測で0.3mm)を、カッティング台紙に張り付けてカットしてみたところ、けっこうきれいにカットできる。ただし、やはり細いところは切れてしまう。しかも、この写真の左のほうのパターン(QFNパッケージの加速度センサ)は、ランドが太すぎるようで、はんだが隣にもれそう&マスクの残り部分が細すぎて切れたりゆがんだりしてしまう。そこで、元の基板データで、当該箇所のランドを少し細くして、さらに先日のpcbe2outline.cで生成されるランド外形を1段階細くするようにしたところ、このような切れやゆがみのないマスクを作ることができた。

./

↑そのマスクでクリーム半田を盛ったところ。マスクの厚さが0.3mmあるので、クリアファイルの切れっぱしのようなものをハケのようにして、マスク表面を均一にならす感じにすると、マスクの厚さ分のクリーム半田がランドのことろにのる。

mask_solder2.jpg

↑マスクをとりはずしたところ。だいたいきれいにクリーム半田がランドにのっている。

mask_solder3.jpg

↑部品をピンセットで載せ、リフローした結果。なかなかよい感じ。とりあえずの動作チェックはOKそうだったので、ちゃんと半田付けできている模様。部品の位置合わせは、ある程度そろっていれば、リフロー時に溶けた半田の表面張力でself-alignされる。またリフローは、予熱の160℃ぐらいのところでクリーム半田が溶けるので、目視で溶けたころを見計らって、すこしたったところで加熱を止めれば、特に問題はなさそう。

10/12/16: Nd磁石のキュリー温度

ネオジム磁石のキュリー温度(=磁力が永久的に消失する温度)は310℃ぐらいらしい。つまりリフローはんだ付けOK、ということだ。

10/12/15: D級アンプSM2301の消費電流

常時10mAぐらい(負荷=8Ωスピーカ)

10/12/15: トースターでリフロー

千住金属のクリームハンダが届いたので、早速、トースターを改造したリフロー炉でリフローしてみた。温度検出は、秋月のK型熱電対+AD595を14ビットADCで取得。

board0.jpg

↑まだCraftROBO用のカッティングシートが届いていないので、爪楊枝でクリームハンダを塗って(けっこういいかげん)、部品を固定。

burn.jpg

↑リフロー中。

board1.jpg

↑クリームハンダのプロファイルどおり、165℃80秒の予熱後、235℃40秒を行ってみたら、基板が焦げた。 P板.comの製造基準書だと、基板の材料FR4は、288℃20秒は耐えられるらしいんだが、この焦げ方は、実際の温度が高すぎたか、レジストだろうか。

board2.jpg

↑予熱の途中(30秒ぐらい)で、止めてみた。少し早かったような気もするが、だいたいついている感じ。クリームハンダがのっていなかったところはついていない。0.65mmピッチのMCUも、それなりについている。(少しクリームハンダが多かったところはブリッジしている)

で、どうも測定温度と実際の温度がズレているようなので、YOKOGAWA 7563+K型熱電対と校正。トースター内の金網の同じ箇所を、2つの熱電対に接触させて、温度をあげながら、測定。

温度[℃](7563)ADCの値(14bit)←の値÷33
95312395
100318696.5
1203839116
1404542137
1605286160
1806009182
2006690203

だいたいあっている。ただしこのときは、熱電対アンプをトースターから十分離していたが、上記のリフロー時はトースターのすぐ近くだったので、熱電対アンプの温度特性が効いたのかもしれない。熱電対アンプ(AD595)は0〜50℃、なので、ちょっと危険だったかも。→熱電対アンプは十分トースターから離そう。

10/12/14: グレイコード

とあるCCDの評価ボードをつついていたが、水平(H)方向のカウンタがグレイコードでカウントしている、という記述がデータシートにある。 CCDなので、与えるのは転送クロックだけなので、カウンタがどういうコードでカウントしているかは関係ないはずなのだが、同作ロックが結構高いから、グレイコードを使っているんだろうか。

10/12/14: 昔作ったソース(回路)の使い回し

しばらく前に、昔作ったソース(回路)を、少し修正して、それを使う回路を作っていた。で、それを動かす時間がとれずに、最近になって動かしてみて、挙動がおかしい、ということに気づくまでに半日使ってしまった。原因は、違う回路なのに同じ名前をつけていたこと、といえる。

教訓:違うものには違う名前をつけましょう

10/12/13: 非同期リセットの使い方の一つ

元クロックを分周したクロックを使って動く回路にリセットをかけるとき、同期リセットだと、分周回路のリセット時には分周クロック=0なので、対象回路のリセットがかからない。そこで、こういうときこそ、非同期リセットをつかえば、その対象回路も分周回路もまとめてリセットをかけられる。

10/12/10: Xilinx ISEシミュレータでの信号の追加と削除

HDLソースのシミュレーション用のテストベンチの波形(*.tbw)を新規でつくったあと、トップモジュールの入出力を変更(追加や削除)すると、波形からつくられるテストベンチのHDLソース(*.tfw)がすぐには更新されないようで、指定した信号がないor記述がない、というエラーが出る。波形ファイル(*.tbw)をいったん閉じて開き直すと、信号の追加や削除にあわせて、*.tfwをつくってくれるので、そのままシミュレーションできる。

10/12/09: PSoCのCでの関数の書き方

LED_Off();と書くところを、LED_Off;と書いてしまっていたが、コンパイルが通っていたものの、所望の動作はしない。関数名だけを書いた場合はどうなるんだっけ?ポインタ? →もう少し詳しく調べてみた。Cのソースと、アセンブル結果(*.lstから抜き出し)を並べてみる。

LED_Off;
     call _LED_Off
LED_Off();
     call _LED_Off

↑これは、どちらも正しい処理になっている。

else if (c == '0') LED_Off();
     cmp a, 48
     jnz l22
     call _LED_Off
     jmp l18    ; end of if()
l22: 

↑if文で、LED_Off()の場合。これも正しい処理になっている。

else if (c == '0') LED_Off;
      cmp a, 48
      jz l18    ; end of if()
l22:

↑if文で、LED_Offの場合。LED_Off;の部分が無視された形になっている。

結論:場合によってはLED_Off;でも正しい処理になることもあるが、正しい処理にならない場合もある。ErrorもWarningも出ないのでコンパイルは通ってしまうので、よく注意しないといけない。

10/12/09: Macでマウスカーソルを見失うのを避ける方法

これは便利。DoubleBoth http://homepage.mac.com/kyasu/soft/macx.html

10/12/09: VisualC#等で数値を書式をつけて出力

http://dobon.net/vb/dotnet/string/inttostring.html たとえば

  • "{0}"にString.Format("{D3}",x})とすると、xを3ケタにそろえて(足りないところは0が入る)、出力。
  • "{0,3}"にString.Format("{D}",x})とすると、xを3ケタにそろえて(足りないところはスペースが入る)、出力。

10/12/07: PSoC CSDのCentroid

PSoC CSDで、複数の電極(Slider)から、タッチ箇所の中心を求めるwGetCentroidPos(i)の具体的な使い方が、いろいろ文献を探してみたが、ちゃんと載っているものが少なかったので、備忘録。

  • 普通のCSDと同じ初期化と、センサデータの取得をする
  • wGetCentroidPos(i)で、Sliderのタッチ位置の重心が求められる。
    • iは、センサ群のグループ番号で、Sliderは1からはじまる。つまりSliderが1つだけであれば、i=1とする。
    • 戻り値は、タッチがないときは-1(0xffff)、タッチがあるときは、その相対位置を0〜99で返す。(CSDのDatasheetには、0から2^(Resolution)-1まで、と書いてあるが、間違いっぽい)

10/12/07: PCBE→クリームハンダ用マスク

以下のような手順でできるようにフローを整えてみた。

  1. PCBEでパターンを引く(クリームハンダ用マスクのレイヤを、仮に部品面レジスト、とする)
  2. pcbe2outline.c で、*.pcb中のマスク用レイヤの線/ランドの外形をレイヤ≡0、幅=最小の線でなぞった*.pcbを作成
  3. ↑をPCBEで開き、不要なところ(挿入実装部品のランドなど)を消去し、レイヤ0をガーバー出力
  4. 「NCコンバータ」で、↑のガーバーを読み込む http://hobbies.fild.org/k2_maej1.html
  5. NCコンバータで、以下の手順でDXFファイルをつくる
    1. 形式変換→データフォーマット→ガーバデータ、で、そのまま(1230/ABS)実行
    2. 形式変換→Gコード形式変換→GコードをDXFへ、で、そのまま実行
    3. ファイル→保存、で、*.dxfとして保存

これをCraftROBOのROBO MasterでDXF読み込み、で読み込めばOK

10/12/03: トースターでリフロー

ずいぶん詳しく解説を書かれている方がいた http://blog.indoor-airplane.shop-pro.jp/?cid=11022

10/11/30: AdobeReaderの「読み上げ準備」

そんなものいらないよ、というわけで回避する方法 http://harumasa.way-nifty.com/blog/2010/03/adobe-reader-9-.html

10/11/25: PSoC I2CHW Slave

Masterから読みだされるSlaveデバイスをPSoCのI2CHWでつくるときの手順が、まだいまだによくわからない。lib/にあるアセンブラソースも読んでみたが、いまいちよくわからない。 http://shokai.org/blog/archives/5230 ここによれば、バッファは別途updateしておいて、メインルーチンでI2CstatusをチェックしてMasterからのReadが起こったら(ISRが)勝手にバッファの内容を返す、という形態がよさそうなのだが、そうしているつもりでも、どうもうまくいかない。具体的には、Readするたびに、所望の値と、全部0xff、が交互に読みだされる。I2Cの制御に、USBeeAXのI2C Controllerを使っているのだが、こいつのI2C通信が実はあやしい、とかなんだろうか。

10/11/21: MacのSMBマウントを起動時に接続する

http://support.apple.com/kb/HT4011?viewlocale=ja_JP&locale=ja_JP

10/11/17: QFNの半田付け

パターンに薄く半田を盛り、QFNパッケージのICをピンセットで上からおさえながら位置合わせをして、ホットエア。ホットエア中にズレないように注意。パターンに盛る半田が多すぎても少なすぎてもまずい。

10/11/16: SMDの集合抵抗

たとえばこんなのを半田付けすることがあるわけだけど、どうもうまく半田付けできない。半田のノリが悪く、半田が部品側の端子を登っていきにくく、半田が多すぎると隣とブリッジしてしまう。フラックスをぬっても、あまり変わらない。なんかいい方法はないものか。

10/11/16: アナログテスタで導通/抵抗チェック

アナログのテスタだと、テスタが視野の端にあっても、針が動くことは、けっこうよくわかるので、目を測定対象から動かさなくても、導通チェックをしやすい。抵抗の値のチェックでも、「針の動き出す勢い」で、ある程度の抵抗の大小がわかる。ディジタルのテスタだと、抵抗の値を読むのはA/D変換で少し間があくのがもどかしく、またいちいち画面の数値を読むために、目を動かさないといけない。

10/11/16: C言語の論理演算子の優先度

if (a & (b | c) == (b | c)){

という論理演算を使ったif文を書いたところ、意図した動作をしなかった。 意図した動作は、

if ((a & (b | c)) == (b | c)){

ということで、つまり「bとcのOR」とaのANDをとり、それが「bとcのOR」と等しいか、の判断をする、というもの。 原因は単純で、演算子の優先度。 http://www.bohyoh.com/CandCPP/C/operator.html これによれば、比較(==)は、論理和(&)や論理積(|)より優先度が高い、ということ。

教訓:条件文のカッコは念のためちゃんとつけよう

10/11/15: 現場(特に屋外)での設営作業で便利な道具

  • ライトつきのルーペ
  • 懐中電灯(LEDライト)
  • ハンディオシロ
  • コードレスの半田ごて(やはりUSB半田ごてか)
  • SMD部品の足をつまむクリップとオシロプローブでつまむための金具、という冶具

10/11/15: 基板スルーホールと部品とりはずし

いったん基板の穴(スルーホール)取り付けた部品をとりはずすと、スルーホールで上下のパターンをつないている導体(これがスルーホール)がはずれてしまうことがある。そうすると、その穴に別の部品を半田付けしても、表と裏のパターンがつながっていないことになり、表面にパターン、裏面に半田付けのランド、という場合、つながらないことになってしまう。目視ではチェックできないので、スルーホールにとりつけた部品をとりはずしたあとは、導通チェックをしたほうがよい。

10/11/15: プッシュスイッチのNOとNC

プッシュスイッチには、押していないときOFF(Normaly Open=NO)と押していないときON(Normarly Close=NC)がある。ふつうのプッシュスイッチはNOだが、ときどきNCのやつがあるので注意。(実際間違えて買ってしまった・・・)

10/11/15: PSoC Pull-Up

たまによくわからなくなるが、そういうときは、PSoC TRM (Technical Reference Manual)のB.6節の入出力ドライバの等価回路を確認する。Pull-Upは、Hレベルの駆動が抵抗を通す、で、Lレベルの駆動は、実はStrong。つまり入力ピンとしてプルアップだけこれを使う、というのとは、厳密には違う。

10/11/08: Macの行末コード問題

10/10/28: Mac設定の備忘録

新しいMacをいろいろ設定するための情報の備忘録

10/10/28: 加速度センサとパスコン

加速度センサMMA7455を使ってみるが、得られる加速度の値が、かなりバラつく。パスコンをつけるのをサボっていたのが原因であった。パスコンをなめてはいけない。

10/10/28: Altera Quartusと学生実験ボード

FPGAを使う学生実験で、ある条件で、SWを押してからしばらくしてLEDがつく、という現象。しらべてみたら結構おくが深い話だった。

  • 外部バスに引き出さないA[11:8]の4本を、ピン配置指定をしていないので、配置配線時にどのピンに割り当たるかは不明
  • AlteraのQuartusの仕様(!)で、SW用のプルアップ指定ができない(プルアップ指定は全ピンに対してしかできないが、それを指定するとクロック端子はプルアップしちゃだめ、というエラーで配置配線ができない。なんちゅう仕様だ。)
  • ↑のため、SWがつながるピンを、近くの未使用ピンに基板上でつなぎ、かつ、未使用ピンはプルアップ処理する、という指定をしている
  • ところが、ある条件では、出力だがピンが指定されていないA[11:8]が、たまたまSWのつながっているピンの近くの未使用「だった」ピンに割り当てられる
  • そのため、SWがプルアップではなく、Hレベル駆動される。SWを押すと、本来はこのHレベル駆動がGNDにつながるので壊れそうなものだが、幸い使っているボードは保護抵抗が入っているので、壊れはしないが、SWをはなしたときに、その保護抵抗を通した放電がおこるので、少し遅れてSWが反応するように見える
  • 以上の対策として、A[11:8]を、本当に未使用のピンに明示的に割り当てるようにソース(ピン指定ファイル)を変更

10/10/12: Xilinx ISEの配置配線のバグ?

Xilinx ISEで、出るはずの信号が、なぜか出てこず、いったんその信号をassignしている部分以外をコメントアウトして論理合成・配置配線後、また戻して、再度論理合成・配置配線をしたら、なぜかうまく動いた。謎。

10/09/28: レールスプリッタ

  • 単電源の電圧を1/2に分圧してボルテージフォロアでバッファリングしたもの。ここを仮想的にGNDとみなせば、両電源回路のように使える。

10/09/18: RS-422とRS-485

  • 長距離向け差動伝送規格。RS-422は、1対1で、受信側だけ終端。RS-485は、1対NもOKで、ケーブルの両端を終端。終端抵抗は、当然ながら理想的にはケーブルの特性インピーダンスから決める。 http://www.ibsjapan.co.jp/news/47.html

10/09/15 : VerilogHDLでのPWMの記述方法の比較

HDLでPWMを記述する方法として、(1)カウンタの値を設定デューティー比とコンパレータで大小比較する方法と、(2)カウンタ値を状態変数とするステートマシンとして構成し、設定デューティー比で出力を0、カウンタ値が0に戻るときに出力を1にする、という2種類の構成が考えられるが、少なくともXilinxのCPLDに実装するときには、(2)のほうが、少しだけ使用リソースが少なくてすむようだ。大小比較のコンパレータがけっこうでかい、ということか。

10/09/14 : PSoC TX8SWモジュールと出力ピンの駆動モード

PSoCのTX8SWユーザモジュールは、UART送信をソフトウエアでやってくれる=ハードウエアリソースを使わないものだが、送信ピンは、ユーザモジュールの初期化(TX8SW_Start())時に、強制的に駆動モードがStrongに設定される。したがってOpenDrainなどで駆動したい場合は、初期化後に、手動でPRTxDMxレジスタを設定する必要がある。

10/09/03 - Xilinx ISEシミュレータのバグ?

  • Xilinx ISEで、とある回路のシミュレーション(ISEsim)をしようとすると、コンパイル後に、"ERROR: Signal EXCEPTION_ACCESS_VIOLATION received"というエラーがでてシミュレーションができない。このエラーメッセージでサポート等を調べてみるがどうも的を得ない(EMBASSYというアプリが入っていたらDLLがconflictしてるからアップデートしろ、とのことだが、そんなアプリは入っていない)。たぶんこれに関連してどれかのDLLっぽいのだが、原因を探るのが先が長そうなので、書いたHDLソースのうち、使わなさそうな回路をコメントアウトして、核心の部分だけ残してシミュレーションするようにしたら、シミュレーションできた。なんだったんだろう。

10/09/02: PSoC Designerのデータシートのサンプルソースのタブとインデント

PSoCのユーザモジュールのデータシートのサンプルコードをコピってくると、インデントが半角スペースになっている。PSoC Designerのエディタのインデントはタブが入るので、半角スペース4個→タブへの変換をしてあげないと、ソースコードの見栄えが悪くなる。

10/09/01 : PSoC E2PROMモジュールの作業用RAM

PSoCのE2PROMモジュールは、けっこうRAMを食う。ブロックサイズ(=64バイト)単位でない書き込みの場合は、100バイト以上のRAMを食う。これとは別に配列変数をとっていたりすると、あっというまにRAM容量を使い切るわけだが、↓のようにエラーがでないから大丈夫、と思っていると、E2ROM_Writeが返ってこない、という形で、書き込みに失敗することがあるので、RAM容量に注意。基本的にPSoCは内蔵RAMが少ない。

10/08/31 : PSoCコンパイラ(HI-TECH)とRAM used(使用RAM)

PSoCのコンパイラ(HI-TECH)で、コンパイル結果の最後に載っているRAM usedの値が、搭載されているRAMの容量(例えばCY8C24***だと256バイト)よりも大きくなっても、とりあえず気にしなくてよさそう。(auto型変数で、使われる領域サイズの和が出ているだけのようで、実際にそのサイズが使われるわけではない)配列が大きすぎるなどで本当にRAM容量が足りないときは、以下のようなエラー(サイズオーバー)が出る。

: 0: (498) psect "fnauto" exceeds address limit: 0143h > 0100h (error)

10/08/31: NTSCの水平同期とPLL

NTSCの水平同期(HSync)をPLLでてい倍したクロックでビデオ信号ADCなどをする場合、ちゃんとPLLをロックさせないと、「チラツキ」がかなり大きい。しっかりとロックさせるべき。

10/08/27: LTspice

LinearTechnologyのシミュレータであるLTspiceを使ってみた。 http://www.linear.com/designtools/software/ltspice.jsp LinearTechnologyの部品なら、だいたいモデルが入っている or DLできるので、回路設計・部品パラメータの決定には、非常に便利。ただし使い方に少しコツがいる、というか、少々クセがある。主な使い方は、回路図を描く。ショートカットキーはFnキーが多い。例えばFn3で配線描画、Fn8で部品移動、など。英字1文字で部品を置ける。Dでダイオード、Rで抵抗、GでGND、など。部品を置いたら、その部品を右クリックして値や部品名などを指定。その後、シミュレーションを実行する。回路図上で波形を見たいノードをクリック(マウスカーソルがプローブの形になる)して電圧波形、または部品をクリックして電流波形、を描画できる。

10/08/19: PSoC クロック用外部PLLの設定

PSoCでひさびさにはまる。32kHzクロックの設定をInternal→Externalに変え、PLLをDisable→Enableに変えたのを忘れていて、動かないと困っていた。具体的には、電源ON後、2秒ほど リセット状態が続き、その後、プログラムの実行が始まる。ただしクロックを使うモジュール(UARTなど)が動いていないように見える。外部32kHz水晶をつけていないので、32kHzが発振せず、従ってPLLがロックせずにタイムアウトするまでの時間がこの「2秒ほど」のようだ。当然、クロック信号がないので、クロックを使うモジュールは動かない。

10/08/19: PSoC MiniProg用XRES端子の引き出しと、それに関して0.65mmピンへからのジャンパの引き出し半田付け

  • システム全体の消費電流がMiniProgの供給能力を超えている場合に書き込み方法がResetしか使えない場合もあるので、PSoCのリセット端子(XRES)は、たとえ1mm角のパッドだけでもよいのでパターンを引いておいたほうが、ぜったいいい。
  • ↑をやっていなかった場合のように、0.65mmのような細かいピッチのICの足に1本だけたてたいことがあるが、細いスズメッキ線(抵抗の足など)の先に少し半田を盛り、ラジオペンチでつまみ、半田ごてを、線の先以外のところにあてて、線の全体を暖め、先に盛ってあった半田を溶かしてICの足(のパッケージの近くがやりやすい)につけると、比較的うまくつく。

10/08/19: PSoC MiniProgとUSB HUB

MiniProgが、ときどきPSoC ProgrammerのPortListで、MiniProg1/1、のように表示されるようになってしまって書き込みができないことがあるが、MiniProgをHUBを経由せずにPC本体に一度直接つなぐと、シリアル番号を含めた名前でPortListに表示されるはずで、その後は、再度HUB経由で接続しても大丈夫なことが多いようだ。

10/08/10: PSoC I2CHWの配置と使用ピン(P1.0&1->P1.5&7)の駆動モード

  • PSoCのI2CHWは、Placeした時点で、SCL/SDAで使うピンを自動的にSCL/SDAにしてしまう。標準では、P1.5/7を使うようになっている。したがって、自分でP1.5/7をStrong等のI/Oポートや、GlobalIn/Outにつなげてあっても、そのあとでI2CHWをPlaceした時点で、まずはこれらのポートがSCL/SDAになってしまう。その後、I2CHWのPropertyで、使用ピンをP1.0/1に変更できるが、その変更をすると、P1.5/7は、Default(StdCPU/HiZ Analog)になってしまうので、必要であれば再度、手動で設定する必要がある。

10/07/22: 筋刺激信号

低周波治療器の解析。筋肉の刺激用。絶縁DC/DCやフォトカプラによるACラインとの隔離は必須。人体の抵抗(皮膚とパッドとの接触抵抗を含む)は1kΩくらい。つまり10Vで10mAくらい流れる。電極パッド間が腕だけ、のように心臓を通らなければ、これくらいの電流を流してもピリピリぐらいですむ。 http://www2.hamajima.co.jp/~tenjin/labo/lowfreq.htm

10/07/20: iPhone Dockコネクタのピン配置

  • iPhoneのDockコネクタのピン配置のピン番号。Dockコネクタのプラグの端子側の、電極が並んでいつ方を上において正面からみて、右端が1番、左端が30番。で、USB充電充電するためには、↓の27番ピンのところにある説明の通り、27番ピンとVDD(23番)/GND(16番)の間にそれぞれ33k/22kをはさみ、また25番ピンとVDD/GNDの間にそれぞれ33k/47kをはさむ。 http://pinouts.ru/PortableDevices/ipod_pinout.shtml
  • というわけでmini-Bから充電できるコネクタを作ってみた。
    DockCharge.jpg

10/07/20: DIP部品だけを使ったLED Tile

LED TileのDIP部品だけを使った、マトリクスLEDぴったりバージョンを作ってみた。1箇所パターンミスがあったが、軽微なミスだったのでリューターでパターン修正して動作。

LT6kk.jpg

10/07/16: VHDLとcase文のdon't care

  • VHDLのcase文でデコーダ等を作るとき、少なくともXilinxISE(9.2i)では、すべての場合を羅列しないとエラー(Warningではなく)となるようだ。書かれていない場合に対してはdon't careで適当にやってくれればよさそうな気もするが、すべての場合を書かないといけない。必要な場合だけwhenで羅列して、それ以外はwhen othersで書いてもOK。(others、が書かれていない場合のすべて、という意味に解釈されるので、case文の中ですべての場合を羅列したことになる)

10/07/16: 制御信号と負論理に関する考察

10/07/14: blogへのTwitterタイムラインの貼り付け

10/07/14: Xilinx FPGAの電源端子の使い分け

  • Xilinxの3種類の電源の使い分け。Vint:コア電圧(Spartan3なら1.2V)。Vccio:I/Oポートの電圧。使う入出力ピンの電圧レベルによって変える。ピンが属するブロックごとに別々に設定可能。Vaux:JTAGまわりなど。JTAG以外にも使われる(主にM0〜M2等の制御ピン:データシートのピンの名前・機能の一覧に、どのピン(ブロック)がどの電源系かが載っている)ので、規定の電圧(Spartan3だと2.5V)を与える。要はI/Oが1.2Vor2.5Vでないかぎり、常に3電源いる、ということだ。意外とめんどい。
  • http://www.hdl.co.jp/のFPGAボードの回路図を参考に、XilinxのFPGAとコンフィグROMとの結線を確認。JTAGのTDI→SerialPROMのTDI/TDO→FPGAのTDI/TDO→JTAGのTDO、とチェーンでつなぎ、TMSとTCKは共通。そのほかにINIT_BやDONE、DI/DOなどのピンも接続しないといけない。つまりSerialPROMとFPGAの間は実はけっこう配線が多くなる。あとSerialPROMの電源が3種類ある(コア用とJTAG用とI/O用)ので、これまた注意。XCF01Sの場合、コアは規定(3.3V)、JTAG用は2.5V、I/O用は、FPGAのVauxが2.5Vなので、これも2.5V。

10/07/13: PSoC いろいろ変えてドツボにはまるの巻

今日はPSoCで久しぶりにドツボにはまった。終わってみれば、非常にあっけないほど簡単な理由。以下、経過。

  • PSoC + VS1011e(MP3デコーダチップ)の組み合わせを試す。PSoCをブレッドボードに載せて、PCとUARTでつなぎ、VS1011eをSPI(SCI)でつつく。無事動く。
  • PSoC側を表面実装(SOP8)のものに交換してそれにあわせて基板(ピッチ変換基板)をつくり、VS1011e側のコネクタもソケットに交換。PSoCとPCのインタフェースをI2Cに変更。→動かない。電源投入後、本来出ないはずの信号が出る(PSoC→VS1011eのCSbが30Hz程度周期のパルスになる)
  • しばらくたった後、再度電源を入れると、VS1011eがまったく動かなくなった。Xtalの端子を見ると、本来出ているはずの12.28MHzのクロックが出ていない。→VS1011eが壊れたと判断→熱風ブロアでVS1011eを、ピンコンパチブル(上位互換)のVS1053bに載せかえ、Xtalを面実装(裏側にしか電極がなく、半田付け不良の可能性があり)から挿入実装に交換したりするが、クロックが出てこない。(このクロック問題で2時間ほど浪費)
  • 結論:VS1053bはコア電圧に1.8Vが必要(当該ピンはVS1011eではN.C.(No Connection))だが、これが供給されていないのでクロックが出なかった。また、↑↑で交換したソケットが、コネクタをはずす際に基板のスルーホールがとれたためか、裏と表がつながっておらず、GNDラインがつながっていなかった。→VS1011eに戻し、ソケットの半田付けを補強(表と裏で接続)したところ、クロックが出てきた
  • しかし相変わらず、PSoCからSPIでつつこうとすると、出ないはずの信号が出る。→PSoCとPCの接続をUARTに変更するが、症状は同じ。→DCCブロックの数の関係で使えなかったデバッグ用のTX8を使えるように、ピン互換でDCCブロックが多いCY8C27143に交換し、TXD(UART送信)ラインを見ると、本来は普段はVDDにはりついているはずだが、ときどきGNDに落ちる。→リセットがかかっているっぽい→PSoC側にパスコン(100uF)を追加したところ、安定動作。PSoC-PCをI2Cに戻しても大丈夫。→ブレッドボードにPSoCを刺していたときは、電源ラインがジャンパ線だったので、パスコン的に働いて電源ラインが安定してリセットがかからなかったのだろうか。
  • 教訓:一気にいろいろ変えると、問題の切り分けがやりにくいので、徐々に変えていくべき。今回の例では、ブレッドボード+CY8C27143+UART→基板+CY8C21123+I2C、に一気に変えて、動作せずに問題の切り分けに手間取った。

10/07/13: PSoC I2CHWのスレーブモジュールの使い方

PSoCのI2Cスレーブデバイスの使い方。

  • (基本的な注意)I2CHWのAPIの関数名は、マスタの立場でついている。
  • スレーブでは、マスタからWriteされたデータや、マスタからのReadで返すデータの格納のためのバッファを最初に初期化しておく。なおこのバッファ変数はグローバル変数にする
    I2CHW_InitWrite(wbuf, WBUF_LEN);  // Writeされたデータが入るバッファの定義
    I2CHW_InitRamRead(rbuf, RBUF_LEN); // Readされたときに返すデータが入るバッファの定義
  • I2CHW_bReadI2CStatus()で、マスタからWrite/Readが起こったかをチェックできる。
  • マスタのWriteが起こると、I2CHW_bReadI2CStatus()のI2CHW_WR_COMPLETEフラグが立つ。その後の流れは以下の通り。
    I2CHW_ClrWrStatus(); // フラグのクリア
    I2CHW_InitWrite(wbuf, WBUF_LEN); // バッファのポインタの初期化(次のWriteの準備)
    // ここで、wbuf[]に、マスタからWriteされたデータが入っている
  • マスタからのReadが起こると、I2CHW_bReadI2CStatus()のI2CHW_RD_COMPLETEフラグが立つ。その際、I2CHW_InitRamRead()で定義したバッファ(rbuf)のデータが自動的にマスタへ返されている。
  • その後の流れは以下の通り。
    I2CHW_ClrRdStatus(); // フラグのクリア
    I2CHW_InitRamRead(rbuf, 2); // バッファのポインタの初期化(次のReadの準備)
  • つまり、マスタからのReadを検知して、その時点で返すべきデータをバッファに設定して、それを返す、という使い方は、できない(はず)。

10/07/12: FT2232をVisualC#からつつく

久しぶりにFT2232をつつく。以前、バッファ内のデータ数を調べようとするとハングるということがあったが、それとは別に、たまにPC側のWinアプリがハングすることがあって、ハング箇所をデバッガで調べてみると、Write関数のところのようで、なぜか1バイトのWriteをしようとすると、ハングる時がある模様。SetTimeOuts関数でRead/Writeのタイムアウトを設定して、一定時間たってもWriteから帰ってこない時には無視するようにすると、大丈夫そう(もともとこのWriteが空読み用のダミーWriteのため、Writeされるデータ自身は意味がないため)。

10/07/12: MotionJPG AVIへの変換

10/07/12: Microchip PICkit2でシリアルEEPROMへの書き込み

MicrochipのPICkit2でシリアルEEPROMに書き込む方法 http://www.ne.jp/asahi/air/variable/picmel/integration/write/pickit2/index.html

10/07/10: iPhone Dockコネクタの情報

http://pinouts.ru/PortableDevices/ipod_pinout.shtml

10/07/09: CEREVOの充電コネクタとUSB mini-Bコネクタ

先日のデジカメ(CEREVO)の充電コネクタの件、実は普通のmini-Bコネクタでも充電できるようだ。(先日充電できなかったのは、使ったケーブルが断線していたっぽい)つまり、普通のmini-Bケーブルでも、電極がついているのが逆の専用コネクタのケーブルでも、どちらでも充電できるということらしい。

10/07/09: Illustratorでブロック矢印などを描く&定規とガイド

  • Illustratorでブロック矢印のような、ちょっとした図形を描く方法。意外と一番早いのは、WordやPowerPointなどで描いて、コピ&ペする。
  • Illustratorで、定規(上と左の目盛り)を表示した状態で、目盛りの軸をドラッグすると「ガイド」がひけて、位置あわせの目安になる。上の水平目盛りをドラッグすると水平のガイドがひける。

10/07/09: プリンタC7600の手差し両面印刷と用紙の向き

C7600で手差し両面印刷するときの用紙の向き。表面が終わったら、その紙を、手差しトレイに、表面が印刷された面を下向き・用紙(印刷内容)の上側を手差しトレイに入る側において印刷。ただしあらかじめ「手差しトレイ」を指定しておかないとだめ(PCからの印刷時の用紙選択を「自動」にしておいて、いざ印刷する段階で「手差しトレイ」には変更できない)

10/07/09: アカンサスポータルの「時間割詳細」

  • アカンサスポータルで、「時間割詳細」は、講義名のすぐ下のアイコンのうちの、左端のテキストファイルみたいなアイコンをクリック。その講義を履修登録している全員のメールもここから送れる。

10/07/08: VerilogHDLのリセットとreg変数の初期値

VerilogHDL等でCPLD/FPGAの回路を作っていると、リセットでregを初期化する必要があり、シミュレーションのときには、もちろん初期化をする(しないと不定値Xのままなので)んだけど、実機だと、だいたいリセットをかけなくても初期値が0なので、リセットスイッチorリセットICをサボってしまうことがよくあるのだけど(ほんとうはよくない)、リセット時の値が1のregは、この方法は使えない。そこで初期値を0のregを仮に作ってそのregの否定を使うようにするか、素直にリセットスイッチを使うようにするか、どちらか。

10/07/08: ssh公開鍵認証の鍵のペアのつくりかた

  • まずサーバ側でssh-keygen -t rsaを実行。必要な場合はパスフレーズを入力する。
  • /.ssh/id_rsa.pub(公開鍵)を、authorized_keyにリネームor既にある場合は追加し、chmod 600でパーミッションを変更

  • id_rsa(秘密鍵)を、クライアント側の~/.ssh/id_rsa としておく(UNIX系クライアントでのSSHの場合)。これでsshでログインできる。
  • puttyのようなWindows系クライアントでも、id_rsaを、似たような方法でクライアント側に秘密鍵を(必要に応じて形式を変換して)置く。

10/07/08: SPI EEPROMのページライト

SPIのEEPROM(25AA1024)のページライトは256バイト単位で、ページをまたがると、ページ内(アドレスの下位8ビット)で上書きになる。つまり例えば0x002番地から256(0x100)バイトをページライトすると、0x002〜0x101ではなく、実際には0x002〜0x0ffの次は0x000〜0x001に書き込まれる。

10/07/08: LaTeX2eのminipage環境備忘録

10/07/08: PukiWikiとハッシュタグ?

そろそろ、書いている内容ごとにタグ(ハッシュタグ)をつけた方がいいような気がしてきた。Twitterみたいに最後に#でつけるようにするか?そういうPukiWikiのプラグインとかないのかな。

10/07/07: LaTeX2e figure*環境の図の位置指定

LaTeX2eで、figure*環境で2段抜きの図を載せるとき、標準だと、ページの上([t])か別ページ([p])しか使えないらしい。nidanfloat.styを、\usepackage{nidanfloat}として使うと、ページの下([b])にも配置できるようになる。 http://www.nsknet.or.jp/~tony/TeX/faq/macro.htm

10/07/07: ハンダづけ用フラックスとフラックス洗浄液

0.5mmピッチの半田付けをしていて、どうも半田のつきが悪いなあ、と思ったら、フラックスではなくてフラックス洗浄液を使っていた、というオチ。そりゃつかんわ。

10/07/03: CEREVOの充電コネクタ

  • 単体でustream配信ができるデジカメCEREVO LiveFAQに、USB miniBコネクタで充電できると書いてあるんだけど、どうもうまくいかない。付属のACアダプタだと充電できる。よく見てみると、USB miniコネクタの形状が微妙に違う(具体的には、電極がついているのが上下で逆)探してみると、サポートの記事によれば、USB miniAを使う、と書いてある。なんか書いてあることが違う。手持ちでたしかUSBminiAがついているケーブルがあったので試してみよう。

10/07/02: Xilinx FPGAのピンごとのロジック電圧レベルの設定とそのデフォルト値

XilinxのFPGAで、ucf(User Constrain File)ファイルでピン番号などを指定するついでに、LVTTLなどのI/Oの種類を指定できるが、存在するI/OピンでucfファイルにI/Oの種類を指定していないものとLVTTLなどをしていているものが混在していると、I/O standardがIOB sitesに割り当てられない、みたいなエラーがでる。これは、XilinxのFPGAではI/OピンはいくつかのBankに分かれていて、Bankごとに同じI/Oの種類でないといけない、という制約があるのだが、ucfファイルで指定しないと、defaultではLVCMOS25となるため、(明示的に指定している)LVTTLと、(明示的に指定していない=default)LVCMOS25が同一Bankに存在することになるために起こるエラー。したがって、すべてのI/Oピン(のうち、少なくとも同一Bank内のピン)は、明示的にLVTTLなどのI/Oの種類を指定する必要がある。

10/07/01: LEDのPWM駆動とγ補正

LEDをPWM駆動するとき、PWMのデューティー比と「見かけの明るさ」は比例しないような気がするが、いわゆるFechnerの法則、で関係付けられるようだ。ただ、似たような話として、γ補正というのがあって、入力xに対して、x^γ (γは定数)を出力すると比例関係に見える、というのがあって、簡単にPSoCでx=0〜15の値に対して、γ補正をかけたものをPWMデューティー比として出力してLEDを駆動してみたところでは、γ=4あたりにすると、だいたい見かけの明るさが線形になるっぽい。というわけで、こういうγ補正の対魚関係を離散化するためのExcel表をつくってみた。(ついでにVerilogでLook-up Table(LUT)を作るとき用のcase文の記述もあわせて自動生成する)

10/07/01: CPLDとLUT

↑に関係するが、LUTをCPLDに入れようとすると、意外と入らない。比較的小規模でも、FPGAだとあっさり入るようだ。FPGAにはブロックメモリがあるのが効いているんだろうか。

10/07/01: PSoC Cコンパイラ(HI-TECH)のシフト演算

PSoCのC(HITECH-C)で、左シフト演算をすると、空いた上位ビットには、元の最上位ビットの値が入るようだ。例えば0x80(8'b10000000)を1ビット右シフトすると、0xc0(8'b11000000)となる。

10/07/01: Xilinx FPGAのVaux端子

XilinxのFPGAのVccauxという電源端子は、LVDSなどの差動入力など、に使われる電源のようだ。auxという名前だが、必須。2.5Vを与えなければならない。

10/06/30: PukiWikiのfavicon

  • diary_publicのほうもfavicon.icoをつくってみた。前回と同じようにForbiddenが出るが、どうもタイムスタンプっぽい。favicon.icoをいったん別のファイル(f.icoなど)にcpして、それを再度favicon.icoにmvすると、無事使えた。

10/06/30: Excelで10進数を16進数などに変換するときの方法 http://www.relief.jp/itnote/archives/000925.php&aname(g306314a,super,full,nouserselect){†};

10/06/30: NTSCビデオ信号とディジタル系のスイッチングノイズ

NTSCビデオ信号を取り込んで、UARTで送信する、という回路をFPGAで作ってみたが、UARTのビットクロックに同期したスパイクがNTSC信号に乗ってしまう。電源(VDD)にLCのLPFを挟んだりしてみたが、どうもうまく消えない。そこで、NTSC信号の特性をうまく使って、偶数フィールド(Even)でADC変換で取り込み(その間は送信しない)、奇数フィールド(Odd)でUART送信する(その間はADCで取り込まない)という構成で、かなりきれいになる模様。フレームレートは30fpsで変わらない。

10/06/30: LEDのPWM駆動のデューティー比と「見た目の明るさ」

LEDをPWM駆動するとき、どうもデューティー比と(感じる)明るさが比例しないような気がするんだけど、そういう文献はあるんだろうか。試しにLEDの光を照度計にあてて、PWMのデューティー比と得られた照度との関係を調べてみたら、非常にきれいな比例関係になった。ということは、感覚的な明るさとの兼ね合いなんだろうか?

10/06/30 LTC1799の設定抵抗と発振周波数

  • CPLDに与えるクロックをLTC1799というICで作っている(抵抗1個で発振周波数を決められる)が、所望のクロック周波数を得るためにR(と、CPLD内での分周比)をどう選べばよいかは、(自由度が多いので)けっこう難しい問題。抵抗はE24系列から選ぶとして、試行錯誤的にRに対するクロック周波数の誤差を求めるExcelシートをつくってみた。CKrに所望のクロック周波数を与えて、Rsetに周波数設定抵抗を与えると、整数での最適な分周比(DIV)を求め、そのとき得られる周波数とCKrとの誤差を求めるだけ。

10/06/29: VerilogHDL UART受信機とビットあたりのサンプリング回数

  • 以前作った、VerilogHDLで書いたUART受信機を改造。基準クロックを通信ビットレートの4倍にして、1ビットあたりの値のサンプルを3回にした。劇的に通信エラーが減った。

10/06/29: iPhoneSDKのReference備忘録

https://developer.apple.com/iphone/library/navigation/index.html こんなところにもある(こんなところにも福井高専) http://profo.jp/wiki/index.php?UITextView

10/06/28 PukiWikiのfaviconの設定/更新

先日のfavicon.icoの話。ファイル名をいろいろ変えたり別のfavicon.icoを持ってきたりしたら、使えるようになった。原因はなんだったんだろう?favicon.icoのタイムスタンプ?

10/06/25: FR4基板の端を削る

ガラスエポキシ(FR4)の基板を端から1mmぐらい削るのに、グラインダーは砥石が詰まるのでNG。ベルトサンダーという工具(技術支援センターにある)で削るとよいが、削りカスが加熱されると焦げることがある。まずは両端を中心部に向けて少し斜めに削り、その後、徐々に左右に揺らしながら徐々に削っていくとうまく削れる。

10/06/25: HumanDataのFPGAボードのSMD実装コネクタの向き(逆挿し注意)

HumanDataのFPGAボードを1個壊してしまった・・・XCB-101なのだが、表面実装(SMD)コネクタが逆に挿せてしまう。てっきり逆挿し防止ピンがあるのかと思っていた。

10/06/25: Python 2.6

Webサーバ上のPythonをver2.6に上げようかとおもったんだけど、Pythonはけっこうシステムで使われているので、あまり勝手にバージョンをあげないほうがいいっぽい。そこで、別パスにインストールする方法。http://lowlife.jp/yasusii/wiki/InstallingAnotherVersionOfPython.html

10/06/25: facivonのつくりかたとPukiWikiでの設定のしかた

  • このページのfaviconをつくってみた。使ったアプリ:IcoFX
  • PukiWikiでのfaviconの設定は、skin/pukiwiki.skin.phpに、faviconのファイル名を書くところがあるので、そこに書く。
  • が、なぜかimage/favicon.icoがアクセスできない(forbiddenになる:ブラウザで直打ちでもそうだし、/var/log/httpd/error_logにもそう残っている)。なんじぇ?・・・前も同じところでハマった記憶があるんだけど解決方法の記録がみつからない。これの解決策が見つかったら、未来への自分への備忘録になる。

10/06/24: iPhoneでEC/loungeに接続するプロファイルのつくりかた

10/06/23: PLL (74HC4046)のループフィルタの設計

74HC4046でPLLをつくってロックさせた。ループフィルタをしっかり設計しなおした。 インダクタの値の表記は、コンデンサと同じだが、単位が[uH](102、なら10×10^2=1000[uH])。