akita

11/12/23: Windows7のスタートメニューの実体

http://www.nishishi.com/blog/2010/07/windows7_start.html

11/12/21: Chromeでドラッグで範囲選択をしようとすると青い線が出て選べない

ビンゴ。Drag and Goというプラグインをはずす。 http://oshiete.goo.ne.jp/qa/5828551.html

11/12/20: PSoCのOneShotモジュール

いままで使ったことがなかったけど、OneShotというユーザモジュールがある。 ディジタルブロックをシフトレジスタとして使って、ブロック1個あたり8クロック分の時間幅のワンショットパルスを生成する(2個使えば16クロック分のパルス)。ちなみにワンショットパルスとは、単安定マルチとも呼ばれ、トリガ(入力パルスの立ち上がり)が入ると、そこから一定時間だけパルスを発生する、というもの。 パルスが終わる(立ち上がる)ときに割り込みを発生させることもできる。つまり、トリガをかけてから一定時間後に何かする、という処理を書きやすい。ソフトウエア的にトリガをかけられると、プログラムからも使いやすいんだけど、できるのかな?(未調査)。

11/12/20: PCBE ver0.53で便利になった点

  • Undoが使える
  • グループ化/解除が階層的にできる
  • DRCが使える(P板用のルールは近々作ろうと思う) 特に前者2点だけでも、ver0.53に乗り換える十分な理由のような気がする。 →(11/12/20追記)一応P板用のDRCルールを書いてみたが、けっこうあやしい。試しにつかってみると、明らかにエラーでないところでもエラーが出る。基本的には信用しない方がいいんだろうか。

11/12/20: PSoC + ImageCraftコンパイラの最適化のTips

AN60486 "PSoC1 M8C ImageCraft C Code Optimization"を読んでみて、PSoC Designer5.1でImageCraftコンパイラでの効率化のテクニックを拾い読みしたうち、役立ちそうなやつをメモ。

  • 割り込みルーチン(ISR)内では関数呼び出しを使わないと、レジスタのPush/Popがいらないので格段にRAM/ROM使用量が減る
  • switch文での値の比較は常に16bitで行われるので、比較対象の変数が8bit(BYTE)の場合はif-elseで書いた方がROM使用量が減る
  • グローバル変数は、指定しなくても実行開始時に0に初期化される。逆に、明示的に初期値=0と指定すると、その分のROM使用量が増える
  • 乗算・除算はROM使用量が増えるので、気になるならばシフト演算+加減算で行うとROM使用量が減る

11/12/19: DropboxにファイルをアップロードするWebフォーム

http://web-marketing.zako.org/web-tools/dropbox-form.html

11/12/18: PSoCのピンを常に1/0に保つ方法

普通のI/OピンとしてPRTxDRで1/0を出力しても、駆動モードがPull-up/downだと、外部からの0/1駆動に負けてPRTxDRの値が変わり、0/1に変わってしまう。そこでRowDigitalInterconnectからGlobalOutputBusへの接続のところで、RowDigitalInterconnectLogicTableで、TRUE/FALSEを設定でき、常に1/0にできるので、これをGlobalOutputBus経由で出力ピンにつなげば、そのピンを常に1/0にできる。ちなみにPRTxGSの当該ビットが1のときは、I/OピンはGlobalInputBus or GlobalOutBusにつながるが、どちらにつながるかは、そのピンの駆動方法がHighZか、それ以外か、で決まる。前者はGlobalInputBus、後者はGlobalOutputBusにつながる。したがってPull-up/Down駆動も、GlobalOutputBusにつながる。

11/12/18: 半田吸い取り器(特にENGINEER SS-02)のメンテナンス

http://www.engineer.jp/1852.html グリスを塗るのが重要、のようだ。

11/12/18: Win7でCapsLockとCtrlの入れ替え

http://d.hatena.ne.jp/kkomiyama/20091221/1261410409

11/12/17: PSoCのShadowRegs

uesaka氏の2011/8/1の作業日誌(内部向け)にあるShadowRegsについて、気になったので少し調べてみた。基本的にはOpenDrainHigh/LowやPull-up/downのピンが同じポート内にあるときに使う、ということのようだが、原理はどうなっているんだろう。このUserModuleのソース(lib/*.asm)を読んでみないとわからないな。というわけで保留。

→(2011/12/18追記)データシートをよく読んでみると、例として、P0[0]がPull-upでP0[0]=1としてあり、そこにつながっているスイッチ(GND間)がたまたまONで、P0[0]=0となっている状態で、P0[1]を1にしようとPRT0DR |= 0x02;とすると、いったんPRT0DRを読み出してから、P0[1]=1としてから書き込む、という動作になるため、もともと1だったP0[0]も0のままになってしまう(結果として0にクリアされた)、というのがあげられていて、これを回避する方法として紹介されている。で、ShadowRegsの実体は、単なる1バイトのRAMで、このメモリをPRTxDRだと思って書き込みして、それをあらためてPRTxDRに書き込む、という手順をとれば、書き込みの前のPRT0DRの読み出しが起こらないので、こういうことがおこらない、ということ。

11/12/15: PSoC E2PROMで使うRAM

PSoC Designer5.0でE2PROMを使うようなプログラムをコンパイルすると、E2PROMのデータシートどおり、64バイト単位での書き込みしかしない場合でも、RAM使用量が300Byteぐらいになって入らない(RAM利用率が130%とかになる)。

おかしいな、と思って、PSoC Deigner5.1でやってみると、RAMの使用量がぐっと落ちて、数バイト(スタックを除く)、となる。こっちのほうが順当っぽいが、バージョンの違い&コンパイラの違い、だけなのか?

11/12/15: PSoCで動的再構成するときのレジスタ

例えばDCB??をTX8とRX8を切り替えると、CR0レジスタの意味が変わるので、切り替える前に必要であればCR0レジスタなどの値を保存しておかないといけない。

11/12/14: PSoC書込みができなくなる

謎の現象に遭遇。さっきまで書き込めていたのに、PSoC(CY8C24123)が書込みできなくなる。書込み用ソケットをかえたり、直接ICのピンをつまんだり、MiniProgを抜き差ししたり交換したり、PCを再起動してみたが、書き込みできず。しかもエラーメッセージがいろいろ(PSoC3 Operationができない、とか、Can't acquire、とか)で再現性がない。結果として、USBハブを再起動したらなおった。そんなこと(接続しているUSBデバイスがおおむね動作するが、ときどきNG)もあるのか・・・

11/12/14: ModelaPlayerでSTLの取り込み

壊れたハサミの柄をiModelaで再生するプロジェクト(?)。

hasami_photo.jpg

↑なぞりたい部品を、モノサシとともに写真をとる→GoogleSketchupにインポートして、モノサシの部分が実寸になるように縮小→線などでなぞる→ポップアップで立体化→STLで保存

hasami.jpg

↑そのSTLデータをModelaPlayerで読み込み(まずはここまで)

11/12/13: 誤り訂正符号いろいろ(ソース)

http://www.eccpage.com/

11/12/12: GoogleSketchupで穴ぬき

http://yasu0055.blogspot.com/2011/11/pluginshole-on-solid.html

11/12/11: GoogleSketchupメモ

  • 表示→ツールパレット→ラージツールセット、を表示させておくと便利
  • 軸の色: 青=Z軸/赤=X軸/緑=Y軸
  • 表示単位の変更(mmとかにできる) http://sketchup-asoblog.blogspot.com/2009/07/blog-post_30.html
    • 「寸法」ツールで、指定箇所の寸法を表示できる
  • マウスホイールで拡大縮小
  • 主なショートカット
    • O : オービット(ぐりぐり回転)
    • H : パン(視点移動)
    • SPACE : 選択
    • M : 移動
    • S : 縮尺(比例拡大縮小)
    • M : 移動
    • R : 長方形
    • L : 線
    • C : 円
    • P : プッシュプル

11/12/10: iModela用のデータ形式

いわゆるSTLだが、いろいろと相互変換できるようだ。

11/12/10: Windowsヘルプ(*.chm)をMacで見る

http://d.hatena.ne.jp/akihito_s/20110801 (iModelaのマニュアルが*.chmなので)

11/12/09: 3線SPIの連続read

加速度センサMMA7455Lの3線SPI(CSb, CLK, MISO/MOSI切り替え)でのreadを2バイト以上行う手順は、データシートの書き方があいまいで、よくわからない。CSbをアサートしたあと、最初の1バイトでアドレスを送り、次の1バイトでデータを読み出す。つまり最低2バイト=16CLKのやりとりがあるわけだが、データシートによれば、read動作は、16CLKか8の整数倍CLKで行う、と書いてある。つまり、2バイト以上連続で読み出せるようだが、てっきり続く1バイト(通算で3バイト目)で、次のアドレスの1バイトが読み出せるのかと思ったら、そうはらなない。データ線(MISO/MOSI)をオシロで見ると、どうもこの1バイトは、MMA7455はデータを返さない、つまりMMA7455はこの線を入力にしているように見える。つまり、次の1バイトで、改めてアドレスを送り、さらに次の1バイトで読み出す、という動作のようだ。たしかにその動作だと、正しくデータを読める。でもこれだと、クロック数は16の倍数、ということになるはずなんだけどな。

11/12/09: PCBE ver0.53

いまさらながら、PCBE ver0.53では、拡張ガーバーでの出力ができることを知る。ガーバー出力時に「拡張」にチェックを入れておくだけでOK。同様にドリルデータのほうも、拡張ガーバー(っていうのかなな?アパーチャリストが入っている形式)で出力できる。つまり、ファイル名を変更するだけで、FusionPCBなどへ発注できる。

ちなみにガーバー形式は「ペンの移動」を記述する形式で、パターンの描画に使うペンの番号を指定する。しかしそれぞれのペンの太さ、は、ガーバー形式には書かれておらず、別途、ペン番号とペンの太さの対応表(アパーチャリスト)が必要となる。ガーバー形式にアパーチャリストを含むようにした形式が、拡張ガーバー形式。

11/12/09: Arduino/OpenLogのブーとローダの書き込み

komatsubara氏とkawakami氏に教えを請う。Arduinoのスケッチの書き込みはブートローダを経由して行う。ブートローダは、ArduinoのMPUであるATmegaのプログラムなので、AVRISPで書き込む。AVRISPのコネクタは6pで、信号名を見る限りSPIっぽい。OpenLogにも、コネクタJP2に信号は出ているようだ。

11/12/09: JSTの圧着工具の使い方

SH圧着金具用工具のチュートリアル http://www.digikey.com/PTM/IndividualPTM.page?site=us&lang=en&ptm=11135&WT.pn_sku=455-1376-ND&WT.z_ptm_source=Part_Detail

11/12/08: SDカードのフォーマット

純正(?)ツール→http://panasonic.jp/support/sd_w/download/index.html

11/12/07: SeeedStudioのSDloggerのファームウエア

  1. ArduinoIDE(0022)をDLする http://www.arduino.cc/en/Main/software
  2. ソース(ver1.6)をDLする https://github.com/nseidle/OpenLog
  3. AVR関係のツールにパスを通す。arduino\hardware\tools\avr\{bin,utils\bin}
  4. Makefileを編集(MCUをatmega644p,クロック周波数を14.7456MHzに)
  5. main.cとuart.hで、バッファサイズ(BUFF_LEN)を2048に変更
  6. sd_raw_config.hで、SDHCを使えるようにする(#define SD_RAW_SDHC 1)
  7. make all
  8. avrdudeで書込み ( https://github.com/nseidle/OpenLog/wiki/Flashing-Firmware の"Most general way:")

(11/12/08追記)ここに書いてあった→ https://github.com/magnuskarlsson/SDLogger/wiki/SDLogger-firmware-restore

11/12/06: PSoCの内蔵クロックの微調整

レジスタ(IMO_TR)の調整(手動)で、微調整がきくようだ。 http://www.etosetora.org/tips01.htm

11/12/06: PSoCのM8Cコアの命令実行サイクル数

PSoC Technical Reference Manual (TRM)の2.4に、M8Cコアの詳細がのっているが、命令によってかなりバラツキがある。 例えば「ADD A, expr」(即値)は4サイクルで、「ADD A, [expr]」(間接アドレッシング)は6サイクルで、「ADD A, [X+expr]](演算付き間接アドレッシング)は7サイクル。

11/12/06 : PSoCコンパイラ(HI-TECH)のバグ?

if (RX8_cGetChar() == 0xff) hogehoge();

をコンパイルしてみると、確かに0xffを受信しているのにhogehoge()が実行されない、というケースに遭遇。

d = RX8_cGetChar(); if (d == 0xff) hogehoge();

と書くと、たしかに実行される。 おかしいなと思い、output/*.lstにあるアセンブル結果を見てみると、前者の場合、この行がごっそり消えていた(コメントにCのソースはあるが、対応するアセンブル結果がない) ちなみに

if (RX8_cGetChar() == 0x50) hogehoge();

とすると、確かに0x55を受信するとhogehoge()が実行されるし、それに対応するアセンブル結果もある。 きっと、2番目の記述では、そのifの条件が絶対に成立しない(常にfalse)ので最適化で消されてしまったのではないかと思うが、なんでだろう。RX8_cGetChar()の戻り値はBYTEなんだけどな。

ちなみに、いったんdに代入してからifで比較すると、関数の戻り値がメモリに代入され、それを使って条件分岐が行われるが、dを介さずに関数の戻り値を直接ifで比較すると、関数の戻り値であるAレジスタをそのまま使って条件分岐をするので、その分速くなる。

11/12/06: PSoCのTX8の転送開始と転送終了

TX8のデータシートにあるタイミングによると、データレジスタに書き込むと、すぐに転送がはじまり、TX8_EMPTYフラグがたつ(が、ダブルバッファなので、すぐに転送がはじまり、TX8_EMPTYフラグはクリアされる)。また転送の最後にストップビットの転送が終わると、TX8_COMPLETEフラグがたつ。つまりデータ転送をはじめるためにデータレジスタに書き込む前には、TX8_EMPTYフラグがたっていないかを確認する必要があるが、実際に転送がはじまるタイミングはわからない。また転送が終わるのはTX8_COMPLETEフラグをpollingでチェックするか、TX8送信終了割り込みをかける、しかない。つまり、送信が終わったら「すぐ」(ポーリングの時間もおかずに)に次の処理をする、というのは、原理的にできない。最も近いのは、割り込みかポーリングでTX8_COMPLETEフラグをチェックするのが順当か。

11/12/06: PSoCのAPIと直接レジスタ書き込み

PSoCのユーザモジュールのAPI関数は、lib/*.asmに実体があるが、**_Start()などは、コントロールレジスタのフラグを立てるだけ。試しに、**_Start()と、それと同じようなレジスタ書き込み(DCB00CR0 |= 0x01;など)の実行時間を比べてみたら、前者が3us程度、後者が1us程度だった。(CPUCLK=12MHz)

11/12/05: Windows7でのドライバインストール時のWindowsUpdateを検索しない設定

Windows7でドライバを入れるとき、まずはWindowsUpdateを探しにいって、これがけっこう時間がかかる(くせにハードウエア依存ドライバはたいてい見つからない)ので、この検索をスキップさせるように設定するのが吉。 http://d.hatena.ne.jp/bogosorter/20111104/1320387920

11/12/05: SeeedStudioのSDLoggerの書き込み速度

Seeed StudioのSDLogger、シリアル通信速度は230400bpsまでいけるが、この速度で連続書き込みしても、ほとんどデータの落ちはないようだ。(たまにある)2ksps, 8byte/sample(=16KB/s)ぐらいならいけそうかも?

11/12/05: InkscapeとCraftROBO

http://jp.blog.reinforce-lab.com/2010/06/craftrobo.html

11/12/01: 録画されたustを保存する

http://kokumaijp.blog70.fc2.com/blog-entry-44.html →これも: http://www.douga-download.com/software/orbit.html

11/12/01: mbedでSDカードをつつく

http://www.eleki-jack.com/arm/2010/12/mbed-5.html

11/12/01: PCBEデータでFusionPCB

Fusion PCBにPCBEで設計したデータを発注する手順

  • FusionPCBで、PCBを発注(購入)する。
  • 確認メールが送られてくるので、それへの返信or pcb@seeedstudio.com へ、データを送付
    • ファイル名は、 「D(Order番号)_(PCB size).zip」とする。たとえばD14756_10X10.zip (10x10cmの場合)
    • ガーバーデータは、拡張ガーバーなので、PCBEで出力したガーバーデータ・ドリルデータから、grbtoolsで拡張ガーバーに変換する。 http://pyrite.jp/rwf/PCB/pcb.html
    • 各レイヤのファイルのファイル名(拡張子の前)はデータ名(Order番号など)、拡張子は、レイヤごとに部品面パターン(*.GTL)、半田面パターン(GBL)、部品面レジスト(*.GTS)、半田面レジスト(*.GBS)、部品面シルク(*.GTO)、半田面シルク(*.GB)、ドリル(*.TXT)とする。
    • ちなみに基板外形レイヤは、シルクなどから先方で判断してくれるので不要。
    • どこかに部品面シルクのレイヤで、Order番号を書いておくと、先方に親切で早く進む。
    • すべてのガーバー・ドリルデータをzipで固めて送付。翌日ぐらいに、データの確認が済んでOrder StatusがProcessedに変わるはず。

11/11/28: uALFATの書き込み時間

SPIでデータを送ってuSDカードに書き込むとき、DRDYが1になるまでの時間(=!00などのレスポンスが返ってくる前の時間)を計測。Wコマンドでデータを書き込むときは、書き込み完了後、ほぼすぐ(1us程度)にDRDY=1となる。そのあとのFコマンドでFlushするときのDRDY=1となる時間は、Wコマンドで送っていたデータ量にほぼ依存せずに25ms程度。

11/11/25: uALFAT-TFをSPIでつつく

けっこうハマったので、メモ。

  • 仕様では、0xffを送って0xffが帰ってきてら読むべきデータなし、となっているが、コマンドを送ってすぐには返ってくるべきデータがそろっていないので、すぐに読み出してもダメ。しばらく待ってから読む。または素直にDRDYの立ち上がりで割り込みをかけて一気に読み出す。ちなみにここでも0xffを送って0xff以外が返ってくるまで読み続ける、とあるが、タイミングが微妙。DRDY=1の間は読み続ける、としたほうが確実そう。
  • BLピンは、SDカードのCLKでもあるので、ホスト側では入力としておく。(そうしないとIコマンドでカード初期化でエラー(!06:タイムアウト)になる。 uALFAT: http://www.ghielectronics.com/catalog/category/32/

11/11/24: SPIのLeading/Trailing Edge

PSoCのSPIでは、ラッチのタイミングの表記にLeading Edge/Trailing Edgeと書かれているが、これは立ち上がり/立ち下がり、とは限らない。Leading Edge=前縁エッジ、つまり最初のほうのエッジのこと。 クロックの極性が正ならば、Leading Edge=立ち上がり、となるが、極性が逆ならば、Leading Edge=立ち下がり、となる。 http://d.hatena.ne.jp/ophthalmos/20091214/1260764661

11/11/22: DHCPでIPアドレス取得のタイムアウト

どうもDHCPの仕様として変更できないようだ。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1012102825 現実的には、DHCP用と固定IP用と2つつくって切り替えるか、プロファイル切り替えアプリを使うか。

11/11/22: PSoC I/Oピンの容量

CY8C29466だと、入出力の場合いずれも3.5pF(typ)〜10pF(max)。

11/11/22: PSoC割り込み関数の名前

割り込みがかからないなー?と思っていたら、割り込み関数の名前を間違えている、というオチもあり得る。本来あるべき***_ISR()という関数名と違う関数名になっていると、当然ながら割り込みベクタからのジャンプがかからないので割り込み処理は行われない。

11/11/22: PSoC RX8受信割り込みでの実際の受信

RX8受信割り込みへ飛ぶのは、割り込みがおこったとき、なので、実際の受信(受信完了フラグのクリア)は行われていない。したがって、割り込みルーチン内で実際の受信(RX8_cGetChar()など)をする必要がある。それをしないと、続く受信割り込みがかからない、と見える。

11/11/22: PSoC RX8受信割り込みにかかる時間

受信割り込み先でフラグを立てて、mainのループ内でその変数をチェックして何か処理、という構成にすると、受信が終わってから「何か処理」がはじまるまでの時間は30usぐらい(CY8C29466/CPUCLK=12MHz)。けっこう長い。ちなみに、受信が終わってから割り込み処理ルーチンへ飛ぶまでの時間は10usくらいでほぼ一定、とみなしてよさそう。

11/11/21: iMovieでフリーズフレームをFinderで開く

iMovie11だとできないようだ。。。 https://discussionsjapan.apple.com/thread/10093741?start=0&tstart=0

11/11/21: XBeeWiFiのnDTR

nDTR(11)=0としておかないとSleepに入っているぽく、動作しない。

11/11/20: XBeeWiFiの通信速度

けっこう実効速度はでるようだ。シリアル速度921600bps(上限)で連続して送っても、UDP/TCPともにデータ落ちはないようだ。つまり実効速度で921600bpsは大丈夫、ということになる。 →(2011/11/21追記)とはいいつつ、ときどきつまってデータが落ちることもあるようだ。データが落ちるときは,必ずしもCTSがアサートされている(=バッファがいっぱい)というわけでもなさそう。

11/11/20: MacのgccでUSB-Serial

FTDIドライバはMacOSX用もあるのでインストール。/dev/tty.usbserial-A900fu8r などが現れるので、これをopenしてread/writeすればよい。単体ターミナルならscreenコマンド。 http://www.ytsuboi.org/wp/archives/1219

11/11/19: XBeeWiFiのコマンド(主なもの)

  • IPアドレス・アクセスポイント接続
    • my : IPアドレス
    • mk : Netmask
    • gw : Gateway
    • id : SSID
    • ma : IP adressing mode (0=DHCP/1=static)
    • ee : encryption enable (0=no/1=WPA/2=WPA2)
    • pk : security key
    • as : active scan
    • nr : network reset
  • IP通信
    • dl : Destination Address
    • de : Destination Port
    • c0: Serial Communication Service Port
    • ip : IP protocol (0=UDP/=TCP)
  • シリアル通信
    • bd : baud rate (3=9600/8=230400/0x100-0xe1000=non-standard rate)
    • cn : exit commnad mode
    • ac : apply changes
    • wr : write parameters

11/11/18: GainSpan GS1011の転送速度

TCPだと50kbpsぐらいが限度のようだ。うーむ。こんなもんか。。。(それより速いとsend()エラーが出てコネクションが切れる) UDPでも似たようなぐらい。

11/11/15: UbuntuでApacheをたてる時のメモ

11/11/15: Macで起動時にWordなどが勝手に起動してしまう?

終了時に「ウインドウを再開しますか」をYesにしておくと、そのときに起動しているアプリ(ウインドウが開いていないものも含めて)が、次回起動時に起動する、ということらしい。 https://discussionsjapan.apple.com/thread/10096342?start=0&tstart=0

11/11/15: Mac BootCamp上のWindowsの半角キー

基本的には、ない、と考えたほうがよさそう。 http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-turn-on-ms-ime-in-macos-boot-camp.html

11/11/10: MacでEPS作成

いろんなアプリからEPSを作るのに、WindowsだとダミーのPostscriptプリンタをつくってファイルに保存、という方法がとれるんだけど、Macだともう少し簡単。適当なプリンタで印刷する直前に、Postscriptで保存(PDFで保存、のとなり)して、ps2epsで*.epsに変換できる。(ps2epsはMacPortで探してインストール)

11/11/09: iMovieで使う静止画のクロップ

もとの静止画と動画の縦横比(アスペクト比)が違うと、自動的にクロップされるようだが、どうも動画からフリーズフレームで切り出した静止画と、iPhotoから取り込んだ静止画は、同じ画素数・アスペクト比でも、クロップのされ方が異なるようだ。ImageMagickのconvertあたりで、手動で(そろえた位置で)クロップして動画のアスペクト比にあわせた静止画をつくってからiPhoto経由でiMovieで使うとよさそう。

11/11/08: iMovie(09)で静止画を扱う関連

  • 動画像の途中で画像を止める、という効果は、プロジェクトの動画中の指定か所で右クリックで出てくるメニュー中から「フリーズフレームを追加」
  • ↑で生成された静止画で右クリックメニュー中の「Finderに表示」すると、その静止画がFinderで表示されるので、この画像に対して修正(説明文の追加など)をして、iPhoto経由で取り込めば、iMovieで使える。

11/11/08: GainSpan GS1011のAd-Hocモード

  • AT+WM=1 でad-hocモード指定
  • AT+WA=??? で、ad-hocなSSIDを指定(これで接続され待ちになる)
  • AT+NSET= でIPアドレス(169.254.0.1等のZeroconf IPアドレスを指定しておく↓)
  • 必要であれば、AT+WAUTO, AT+NAUTO等で自動接続の指定をしておく(ad-hocの場合は、電源ON後に自動で接続され待ちまで行く)
  • PC側から、このad-hocネットワークに接続する→DHCPサーバがないので、しばらく待つとZeroconf IPが割り当てられる
  • ↑で指定したGS1011のZeroconfIPを相手に通信開始

11/11/07: Zeroconf

IPアドレスの割り当て方のうちの、いわゆる「自動IP」というやつ。 DHCPサーバないなどでIPが割り当てがされなかった場合、IPアドレス=169.254.0.1 〜 169.254.255.254、SubnetMask=255.255.0.0 がZeroconfという機構によって割り当てられる。 双方がZeroconfで割り当てられたIPアドレスであれば、相互通信できる。 (ちなみに偶然同じIPアドレスが割り当てられていた場合は、自動的にIPアドレスが変更される) 片方で、このZeroconfが効かなくて自動的にこの自動IPアドレスが割り当てられない場合は、この範囲の固定IPアドレスとすればよい。

11/11/07: CraftROBOで半田マスク

matsumur氏情報。100均のラミネートシートというのもアリ。 http://wenlock.web.officelive.com/elec/dac2.htm

11/10/31: 協和ハーモネットのジャケットルータHE-WR01のSIM設定

http://sg356s.appspot.com/dy5hbW50Yy5wbWJsd2YvZXIxMC50bHd3aHJvZS5vai9vaWVpaWh3MF8xaG0=

b-mobileU300のSIMを設定するときのメモ。 APNやユーザIDなど(http://www.bmobile.ne.jp/sim/setting.html)を、設定Web画面の3GS/HSPAの、ネットワーク接続設定でユーザIDとパスワードを入力、ServiceTypeは、次のPDP設定で指定する番号(#1など)を選ぶ。PDP設定では、IPを選ぶとAPNを入力する欄が現れるのでAPNを入力。

11/10/31: MacのWineでAltキーを効くようにする

MacのWineだと、デフォルトではAltキーが効かないようだ。X11の環境設定→入力→「OptionキーでAlt_Lと・・・」にチェックを入れておくと、Optionキーで効くようになる

11/10/29: MacOSX LionでIEEE802.1X (lounge等)接続

iPhone構成ユーティリティーを使ってプロファイルをつくる。 http://support.apple.com/kb/DL1081?viewlocale=ja_JP

プロファイルの作成はこんな感じ。 http://d.hatena.ne.jp/TAC/20081013/1223898647

つくった*.mobileconfigをダブルクリックしてインストールし、WiFi設定の802.1Xタブで選ぶ。 http://mac.camerino.jp/2011/08/macosx_107_lion.html

11/10/29: MacOSX LionのLauchPadの整理

http://chaosspace.de/launchpad-control/

11/10/29: 直動機構のねじ

ボールねじユニット、という部品。http://jp.misumi-ec.com/ec/CategorySearchView/103_20000000_20090000.html

11/10/27: GainSpan GS1011のファームウエアの更新

Sparkfunのフォーラム(というかGS1011のところのコメント)によると、GainSpanでアカウントを作ってNDAを結ぶと、なんとかなるようだ。

11/10/26: WineBottler

http://winebottler.softonic.jp/mac

(11/10/28追記)ただ*.exeをコピーするかインストーラを使うかで、Copy Only...をチェックするかどうかを変える。http://d.hatena.ne.jp/kanonji/20100301/1267426143 あと日本語フォントの文字化け解消→http://www.semerumamoru.com/wblog/?p=1909

11/10/25: PSoC Creator

PSoC3/5を使うためにはPSoC Creatorを使うことになるので、簡単なプロジェクトを試してみたときの備忘録。

  • ユーザモジュールは回路図に配置していく。配線は回路図の左側列のWiringツールボタンで。
  • ユーザモジュールの設定は、だいたい予想がつくとおり。
  • クロックも、Clockというユーザモジュールで周波数を指定すれば、適当に分周してくれる。
  • ピンモジュールと実際のピンとの対応は、一度Generateしたあとで使えるリソース割り当てウインドウ(チップのピン配置図みたいなのが現れる画面)で行う。右側に、回路図中に出てくるピンが並んでいるので、実際のピン番号を割り当てていく。
  • コンパイル、特にGenerateに相当するユーザモジュール割り当てのコンパイルは、CPLDの実際には論理合成をすることになるので、けっこう時間がかかる。
  • モノによっては、書き込み後にすぐに動作するわけではなく、Resetしたら実行開始。

11/10/25: Inskscape(Mac)で日本語入力&設定もろもろ

11/10/23: Panasonic G3のリモコン端子

http://blog.zaq.ne.jp/igarage/article/1157/

11/10/14: PSoCのSYSCLK*2

PSoCは、SYSCLKの2倍(SYSCLK*2)をデジタルブロック等のクロックとして使うことができる。が、データシートによれば、これもCPU_CLKと同じように電源電圧によって上限がきまる。5Vならば上限の48MHz(=24MHz*2)までOKだが、3.3Vだと24MHzまで(ちなみに3.3VではCPU_CLKも12MHzまで)。そもそもSYSCLK*2は、入力クロックに対する両エッジトリガの単安定マルチ(一定幅のパルス=21ns@5V)を出す、という方法のようで、PLLで2倍に逓倍しているわけではない。ちなみに3.3V・SYSCLK=24MHzでSYSCLK*2を使ってみると、24MHzとして動くようだ。きっと単安定マルチのパルス幅が少し長くなって、2逓倍されなくなるんだろう。

11/10/12: GainSpanWiFi通信

いろいろ試して、だいぶ勝手がわかってきた。以下は、アクセスポイント(AP)モードで通信するときの主な流れ。

  1. APの設定(WPAのPSKなど): AT+WPAPSK=SSID,PassPhrase、など
  2. 必要であればDHCPクライアントをON: AT+NDCHP=1
  3. APをScan: AT+WS→設定しているAPがみつかれば、自動的に接続される?
  4. APに接続: AT+WA=SSID→接続されれば、OKが返る
  5. 通信するためのCID (Connection ID)を設定。たとえばUDPクライアントなら、AT+NCUDP=(Target IP),(Target Port)→OKならば"CONNECT"とCID(0など)が返る
  6. CIDを使って通信。これはData Processingモード↓で行う。
    1. ESC(0x1b)+'S': Data Processingモードに入る
    2. CID(アスキー1文字): CID=0なら'0'(0x30)
    3. 送りたいデータ
    4. ESC(0x1b)+'E'(CIDを残して終了) or ESC+'C'(CIDを消して終了) or ESC+'S'(CIDの読み込みからに戻る)のいずれかで送信

11/10/11: WiFiのWPA

GainSpanのSerial-WiFiを試してみる。 http://strawberry-linux.com/catalog/items?code=18168 WPAの設定について、いまさらながら動作原理などを調べたので、メモ。WPA-PSK(WiFi Protected Access - Pre-Shared Key)では、まずあらかじめ決めたパスフレーズから、キー(PSK)を生成しておく。このPSKを、AP側と端末側の両方で使う。ただし端末側のGainSpanの場合、パスフレーズからPSKの生成がけっこう時間がかかる(&電力を食う)ので、AT+WPAPSKコマンドでキーを一度生成したらそれをprofileの一部として保存しておいて使う。

11/09/28: XBeeのスループット

↓このあたりの情報によると、フロー制御(ホスト側でのCTSのチェック)はほぼ必須で、それをやっても100kbpsというところか。 http://unos.biz/blog/archives/category/xbee http://cyberworks.cocolog-nifty.com/blog/2011/03/xbee-a0dc.html

11/09/28: XBeeのATコマンド設定とフロー制御の備忘録

  • XBeeのATコマンドへモードへの移行は「+++」→1秒後にOKが返ってATコマンドモードに移行。ATWRで設定をEEPROM保存、ATCNでコマンドモードを抜けて通信モードへ
  • フロー制御(ハードウエアフロー制御)の要点。基本的には、ホスト側が、デバイス側のCTSをチェックして、適宜データ送信を一時的に止める、ということ。
    • CTS=デバイスがデータ受け入れ可のときにアサートされる。ホスト側は、CTSがアサートされていないときはデータを送らず、CTSがアサートされるまで待つ。(Clear to Send)
    • RTS=ホスト側が、データを送り始めるときにアサートする=デバイス側はRTSがアサートされたらデータ受信準備を整える。 (Request to Send)

11/09/20: XBeeのファームウエア更新(失敗したあと)

XBeeのファームウエア書き込みに失敗して、X-CTUなどから通信ができなくなったときに、強制的にファームウエア書き込みをする方法についてのメモ。 http://blogs.yahoo.co.jp/carcon999/30557062.html http://blogs.yahoo.co.jp/nagusa_kei/51358793.html http://macstrict.wordpress.com/2010/06/28/xbee%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%99%E3%81%90%E3%81%AB%E5%A3%8A%E3%81%97%E3%81%9F%EF%BD%A5%EF%BD%A5%EF%BD%A5/ http://www.faludi.com/itp_coursework/meshnetworking/XBee/XBee_firmware_upgrade.html (11/09/26追記)いろいろ試行錯誤して、うまくいった方法のメモ。 基本的にはこちらの方法→http://macstrict.wordpress.com/2010/06/28/xbee%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%99%E3%81%90%E3%81%AB%E5%A3%8A%E3%81%97%E3%81%9F%EF%BD%A5%EF%BD%A5%EF%BD%A5/ と、こちらの方法→ http://forum.sparkfun.com/viewtopic.php?f=13&t=25955&p=118440&hilit=xbee+recovery#p118440

  1. X-CTUを起動し、COMポートを選択。FlowをHWとしておいたほうがよさそう。
  2. 適切なFWを選び、Defaultを読み込んで、Always Update Firmwareをチェックする
  3. XBeeはまだUSB Explorerにつながない
  4. Writeを押す→Action Required...というダイアログが出る
  5. Resetボタンを押しながらXBeeを差し込み、Resetボタンを離す
  6. 書込みがはじまる。
  7. 書込みが終わる。(うまくいかなかったら何回か試すとOKとなるっぽい)
  8. もう一度、Action Required...のダイアログが出るので、Resetボタンを押す
  9. 無事終了

11/09/20: 金属面どおしの接触と抵抗

M1.7のナベネジの頭どうしを接触させてみるが、どうも抵抗が大きい(数kΩ以上)。ぐりぐり押しつけると数Ωぐらいまで下がるが、安定しない。サラネジなら大丈夫そうだが、見た目、M1.7ナベの頭はかなり平べったいようだが、電気的接触は不安定のようだ。頭のところにステンレス用半田を少し盛ってみたら、接触圧が低くても数Ωで安定するようだ。

11/09/20: XBeeの使い方

http://www.techand.jp/Digital/Arduino/Sensor-Net/Sensor-net.html http://cyberworks.cocolog-nifty.com/blog/2010/12/xbee-ed74.html この辺りを参考に。1対1で通信させるときは、DH/DLアドレスに、相手のMACアドレス(SH/SL)を入力。ホスト側をCOORDINATOR AT、ターゲット側をEND DEVICE AT、にする。ただしFW/設定の書き込みは、CTS/RTS等のフロー制御をかけないと(つながないと)失敗するっぽい。一度失敗すると、X-CTUからTestできなくなるようだけど、強制的に書き込む方法はないのか?/XBeeの面実装コネクタ経由でいけそうな気もするが、未調査。

11/09/11: FT232RLで、未接続VCCIOに4Vぐらいの電圧が現れる

FT232RLで、I/Oピンの電圧を決めるために外部から電圧を与えるVCCIOピンが未接続の状態で、5Vぐらいの電圧が現れる。これを3.3V電源ピンに接続しても、4.2Vぐらいの電圧になって、3.3Vにならない。原因を探ってみたところ、どうもあやしいのは、RESET#ピンの扱いで、データシートでは、RESET#ピンは未使用の時には未接続またはVCC(=5V)につなげ、と書いてある。で、その通りVCC(=5V)につないでみたが、常識的に考えればRESET#ピンの電圧もVCCIOで決められるべきで、RESET#ピンとVCCIOピンの間には保護ダイオードが入っていると思われる。そのため、VCCIOが未接続の状態でも、RESET#ピンに5Vを加えているので、この保護ダイオードの順方向電圧降下で、VCCIOに4.2Vぐらいが現れるのは納得がいく。

というわけで、RESET#ピンは未接続のままにするか、つなぐとしてもVCCIOにつなぐべき、と思われる。

11/09/08: PSoCのHEXファイルとマイコンの種類

PSoC Programmerでの書き込みは、HEXファイルのサイズ=ROMのサイズと、実際につながっているPSoCのROMサイズがあっているか、をチェックしているが、逆に言うと、チェックはサイズだけ。

例えばCY8C21123とCY8C24123は、ROMサイズが同じなので、24123用のHEXファイルは21123に書き込める。 ただし実際に実行されるプログラムの最初の方でデジタル/アナログブロックを初期化する(レジスタを設定する)ところで、PSoC依存の部分があるので、意図した動作をしないこと、がある。 例えば21123と24123だとアナログ部が違うので、ADCのようにアナログ部を使うユーザモジュールを含むプログラム(プロジェクト)だと、意図した値が得られない、などとなる。ただしこの2つはデジタル部が同じなので、デジタル部だけのプログラム(プロジェクト)だと、そのまま動く。 →(11/09/11追記)もしかしてうそかも。ちゃんと試してない。

11/09/01: PSoCのSPIのモードの呼び方

一般的な呼称と異なるようなので、備忘録。Mode 1とMode 2が逆。

データラッチクロック極性PSoC SPIM一般的な名称
LeadingNormalMode 0Mode 0
LeadingInvertMode 1Mode 2
TrailingNormalMode 2Mode 1
TrailingInvertMode 3Mode 3

ちなみに「一般的な名称」の出典はこちら: http://elm-chan.org/docs/spi.html http://rugbysensor.com/~ohata/SPI_0.html

11/08/30: PSoCのSPIアクセスの時間

PSoCで、SPIのアクセスを以下のように行ったときにかかる時間を計測。

while(!(SPIM_bReadStatus() & SPIM_SPIM_TX_BUFFER_EMPTY)); // 送信バッファが空になるまで待つ
SPIM_SendTxData(0); // 送信
while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)); // 送信完了まで待つ
d = SPIM_bReadRxData(); // 受信したデータを読み出し

SPIのクロックを1MHzと2MHzの2種類で試した時間は以下の通り。

  • 1MHz : 25us = 8us(SPI 8 clock) + 17us
  • 2MHz : 18us = 4us(SPI 8 clock) + 14us SPIの1バイト分(8クロック)の時間を引くと、だいたい15usくらい、といったところか。(CPU_CLOCKは12MHz)

11/08/29: convertでグレースケール画像に変換

convert -colorspace gray ...でできる

11/08/26: Macが勝手にsleepから復帰する

sleepさせて帰宅して、翌朝sleepが解除していることがある。system.logをみると、夜中に勝手にwake-upしているようだ。ネットワーク経由でsleep解除、が原因のことも多いようだが、それはoffにしてある。↓このあたりをみると、Bluetoothキーボード/マウスが、なんかのひょうしにsleepを解除してしまうことがあるようだ。というわけでBluetoothの設定から、Bluetoothデバイスがsleepを解除できる、をoffにして様子をみることにする。

http://forums.macrumors.com/showthread.php?t=810975 http://mikado.at.webry.info/201010/article_2.html

しかしこれだと、当然ながら、翌朝にBluetoothキーボードからsleepを解除できないわけで、そのために有線でキーボードがマウスを接続してしかないのか。

11/08/23: Emacsでモードラインにカーソルのいる行番号を表示

(setq line-number-mode t)

http://d.hatena.ne.jp/Seitaro/20090214/1234603644

11/08/22: 網膜の視細胞の数

ヒトの網膜の大きさは、だいたい直径40mm。形状が円だとすると、面積は13cm^2程度。 http://ja.wikipedia.org/wiki/%E8%A6%96%E7%B4%B0%E8%83%9E#.E7.B6.B2.E8.86.9C.E3.81.AB.E3.81.8A.E3.81.91.E3.82.8B.E7.A5.9E.E7.B5.8C.E7.B4.B0.E8.83.9E

網膜上の視細胞の数は1億個程度。 http://ja.wikipedia.org/wiki/%E7%B6%B2%E8%86%9C%E7%A5%9E%E7%B5%8C%E7%AF%80%E7%B4%B0%E8%83%9E ただし網膜上の視細胞の分布は大きく偏っている(中心部(中心窩(か))が非常に高い)ため、単純な計算はあまり意味がないが、仮に均等に分布しているとすると、視細胞1個あたりの面積は13um^2程度=正方形として3.5um角。

ちなみに中心窩の直径1mm程度。 http://ja.wikipedia.org/wiki/%E4%B8%AD%E5%BF%83%E7%AA%A9 中心窩での錐体の密度は、1800個/0.0069mm^2程度(出典不明:2004/6/30ゼミ資料より)、つまり1個あたり3.8um^2程度。正方形として2um角程度。

11/08/19: 剥離してしまったSMDパターンの再形成

SMD(特にQFNのように横に端子が出ていないもの)部品用のパターンがとれてしまった場合、パターンがあったところに少し溝をほり、スズメッキ線の先をラジオペンチ等でつぶして平べったくしたものを、パターンがあったところに置き、他の残っているパターンと同じぐらいの高さにする(溝の深さを調整)。その後、通常通り、ホットエア等で半田付け。

11/08/18: ものづくり教室の実践的ノウハウ備忘録

  • 部品の足に対して基板の穴が大きすぎると、ハンダが部品面にまわって山盛りになるケース多し。特に細い足の部品がささる基板の穴の大きさに注意。
  • 子ども15人に対してアシスタント6名ぐらいだと、非常にスムーズに進む。
  • 心なしか、鉛フリーハンダのときより、鉛入りハンダのときのほうが、イモハンダが少ないような気がする
  • SMDのフットプリントに挿入実装のスルーホールがある(挿入実装部品をつける)ときは、それの取り外しの際にSMDフットプリントのパターンが引っ張られてはがれることがあるので、できるだけ距離を離すほうがいい。
  • 部品を事前に一人ずつ袋わけにするより、自分で部品を取らせたほうが、部品に対する理解が進んでスムーズに製作が進むような気がする。

11/08/10: パイプカッターで細いパイプを切る

市販のパイプカッターは、径3mmが下限のものが多いが、これは外形で、刃が届くのはφ1.5mmくらいまでのものが多いので、それより内径が細いパイプは切れないが、別のパイプなどを「ゲタ」としてはさめば、細いパイプも切れる。 http://www.geocities.co.jp/Playtown-King/5690/pipecutter.htm

11/07/22: microUSB充電ケーブルの結線

http://andoroseikatsu.blog115.fc2.com/blog-entry-83.html

11/07/21: 放電ワイヤーカッター

技術支援センターにある放電ワイヤーカッターという加工装置。φ0.2mmのワイヤーを動かしながら、材料の金属との間で放電させてカット。材料を移動させながらカットすることで任意形状にカットできる。当然ながら樹脂は不可。NC加工OK。

もう1個、CO2ガスレーザーカッター。基本的には切断用だがビーム径がφ0.2mmなので、ステンレス板にNC加工でメタルマスクも、なんとかできるが、ややバリが多い。吹き付けるガスが空気だとほとんどダメ、N2だと、流量を0.6MPaぐらいにすると、なんとかOKそう。バリを手動で切り取れば大丈夫か。加工はセットアップも含めて1時間程度。

11/07/13: ImageMagikのconvertで、aspectを保ったまま、縦or横のサイズを指定してリサイズ

convert -resize 1024x a.jpg b.jpg

とすると、a.jpgの横のサイズを1024画素にしてaspectを保ったままb.jpgに変換する。縦だけ指定するなら -resize x768 のようにする。

11/07/08: PCBE関連の小細工ツール

PCBEで細々とした作業をするツールをいろいろつくっていたけど、それらを1つに統合。

  • 左右反転
  • 部品面または半田面のみ抽出(検図用)
  • 部品面と半田面のレイヤ交換(範囲指定可)
  • 描いたパターンに対して、その少し外側にレジストをつける(範囲指定可)

11/07/07: TimeMachineのバックアップ間隔の変更

http://www.msng.info/archives/2009/03/how_to_change_time_machines_backup_interval.php

11/07/07: トースターでリフローのコツ

  • 部品を載せる位置あわせは、しっかり行った方がいい。平行移動なら、ある程度はハンダの表面張力で戻るが、少し回転していると、回転したままついてしまいがち。
  • 部品を載せたら、軽く押した方がいい。押さないとハンダがとけるときに、傾いたり流れたりしやすい。ただしあまり押しすぎると、パターン上のハンダがつぶされてひろがって、隣とブリッジしやすくなる。
  • ハンダが溶けてツヤになるときを見計らって、トースターを止める

11/07/05: PSoCのUART受信のタイミング

UART受信にタイムアウトを設定して、タイムアウトがあったら次の処理へ・・・ということをやるばあい、タイムアウトまでの待ち時間はパラメータだが、これは通信相手の応答速度次第。通信自体の時間を短くするためのBaudレートを高くすればよいのかといえば、必ずしもそうでもなく、UART受信割り込みで1バイトずつ処理をしようとすると、Baudレートが高いと、処理中に次のデータが来て取りこぼすことになるので、Baudレートはそこそこがいい。じゃあ受信リングバッファを構成して処理すればいいのか、というと、確かにデータの取りこぼしはなくなるが、バッファにデータがたまったかをチェックして処理する時間(周期)があまり長いと、そもそもタイムアウトまでに応答できないことになる。特にバッファのチェックをメインルーチンのループ内で行う場合は、そのチェックの周期が不定になるので、さらにやっかい。

結論として、Baudレートはそこそこにして、1バイトずつ受信割り込み内で処理する、というのが、応答も早くてデータの取りこぼしもしにくくて、よい、ということになりそう。

11/07/02: 2つのPWM波の和音

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1223340087 EXORをとるのが一番それっぽくなるようだ。PSoCならLUTでできるね。

11/07/01: PSoCのTimerのカウンタの初期化

Timer16等のカウンタは、WritePeriodで周期(Period)を書き換えると、カウンタもその値にセットさせるので、カウンタの初期化に使えるのだが、カウンタの値がそうセットされるのは、カウンタがStopしているときだけ。

11/07/01: PSoC HI-TECH Cで同名のGlobal変数とLocal変数

Globalで宣言している変数と同じ名前の変数をLocalで宣言して使うと、(エラーやワーニングは出ないが)関数を抜けるときに、Globalのつもりの変数の値が変わってしまうことがあるようだ。おそらくLocal変数が、他の関数のLocal変数と同じ領域に割り当てられていて、それがGlobal変数と同じ場所になっているのではないかな。

11/07/01: PSoC 多重割り込み

割り込み処理ルーチンでは、割り込みが禁止されているので、割り込みはかからない。(割り込みフラグは立っているので、実行中の割り込み処理ルーチンが終わってから、後の割り込みは実行される)そこで、割り込み処理ルーチン中で別の割り込みを使わないように注意。

11/06/29: PSoCでUART受信バッファ

いわゆるリングバッファを使って受信バッファリングする要点。

  • グローバル変数:バッファ(buf[N])、受信データポインタ(pRX)、送信データポインタ(pTX)
  • 受信割り込み内:
    • buf[pRX] = RX8_cGetChar();
    • pRX++; if (pRX == N) pRX = 0; // 最後までいったら最初へ=リングバッファを構成
  • メインルーチン内:
    • pTXとpRXが異なる=受信バッファにデータがたまったら、pTXとpRXがいっしょになる=受信バッファのデータをすべて送信し終わるまで:
      • TX8が送信readyになるまで待つ(TX8_TX_BUFFER_EMPTY)
      • TX8でbuf[pTX]を送信
      • pTX++; if (pTX == N) pTX = 0;

11/06/27: 大学に届いた荷物の仕分けの流れ

基本的に、とどいたら、調達係等で、学科ごとの棚に仕分けられ、1日2回(10時ごろと14時ごろ)の学内便で、学科事務室へ配達される。 が、期日指定の荷物など、一部の荷物は、いったん総務係にとどいたあと、学科ごとの棚に仕分けられる場合がある。(一瞬のタイムラグがある)

11/06/27: PSoCのI/Oピンのドライブモードと等価回路

PRTxDM?レジスタとの対応。ときどき必要になるけど探すのがめんどいので、貼り付け。ちなみにPSoC-TRFのp.105

PSoC-DM.png

11/06/22: マルツ電波での校費での買い物

電子伝票でマルツで買えるものの型番等を入れれば、そのまま直接発注される。店頭で掛売り(請求書をもらってくる)もOKだが、事前に調達係に一言。

11/06/22: dsPICもろもろ

dsPICでかなりハマる。いろいろ備忘録。

  • コンパイラC30でのUARTの設定: OpenUART1は、使うものだけでなくすべてのフラグを&でつなぐ(|ではない。デフォルトでないフラグだけ、でもだめ。これでかなりはまった)。UART設定:http://www.arakin.dyndns.org/ec_mplab.php
  • LATレジスタとPORTレジスタ PORTレジスタに値を書き込んでも、その瞬間(1クロック分?)だけ出力ピンの値が変わるだけ。いわゆる出力ピンへの出力のためには、LATレジスタを使う。

11/06/21: 板金加工の図面での穴のサイズの指定

「M3」とすると、タップ(ねじ穴)の寸法。「φ3」とすると、ふつうの穴(バカ穴)の寸法。

11/06/14: CraftROBOの用紙セット

用紙セット時に、Enterキーを押すと、用紙をフィードしてくれるが、液晶表示が「ヨウシセット:ダイシアリ」は、カッティング台紙があるとき(=送り量が多い)。クラフト台紙のようにカッティング台紙を使わないときは、「ヨウシセット:ダイシナシ」でフィードする。

11/06/04: IDEOS(=Android)の省電力設定(続)

結局いろいろ試したが、"Toggle Setting"で、無線(3G,WiFi)のON/OFFや同期のON/OFFなどを明示的に使う場面に応じて切り替えるのがよさそう。ふだんは無線OFFで、使うときだけ3GまたはWiFiをONにして、あわせて自動同期をONにする。スリープ時には"自動機内モード"を使えば、自動的にぜんぶの無線をOFFにできる。Auto Task Managerを使えば、スリープ時に不必要な(=勝手に通信する)アプリをkillできる。

11/06/03: IDEOS(=Android)の省電力設定

http://nonbiriserowde.naturum.ne.jp/e1104668.html このあたりを参考に。基本的にバックグラウンド通信をすると一気にバッテリが減るので、スリープ時に自動的に機内モードに入るようにして電波関係をすべて止め、使うときだけアプリを起動してデータを取得する、という使い方がよさそう。

11/05/31: CraftROBOでのマスク作成の設定&作成後の穴ぬき

厚さ0.3mmくらいのクリアファイルで半田マスクをつくるときの設定のメモ。

  • 用紙の選択:厚い素材
  • 品質:4くらい
  • 紙:33(スライダを一番右に)
  • 刃先キャップ:赤(0.3mm) なお用紙のセットは、CraftROBOの電源ON後に、本体液晶の表示が「ヨウシ(ダイシアリ)」になっている状態でENTERキーを押すと、用紙送りをしてセットしてくれる。 ちなみに「品質」は刃送りの速さ、「紙」は刃の圧力、に対応する模様。

なお作成後の穴ぬきは、顕微鏡でのぞきながらピンセットで「つまみ取る」のがよさそう。

11/05/23: PSoCのUART受信をI/O割り込みで開始する

PSoCで、I/Oピンの割り込み(立ち下がり)がかかったら、UART受信を開始する、というのは、タイミングさえ間に合えば大丈夫(割り込み処理ルーチンの最初のオーバーヘッドが5usぐらいかかる)だが、立ち下がりの割り込み処理ルーチンの中で、DCBをいったん止めて配線やクロックリソースなどをいじってから再度Startして、UART受信をしようとすると、すぐに受信がはじまらないようだ。つまり、RX8をStartしてから、受信ピンの「最初の立ち下がり」をスタートビットの開始ととらえるようで、Startした時点で受信ピンが0の場合は、受信がはじまらないようだ。(例えば0x02を受信させてみると、途中の1ビット目の1のデータのあとの立ち下がりをスタートビットとみなして受信を開始する)RX8のデータシートを読む限り、RX8のStart時に受信ピンが0であった場合の挙動は書いていないのだが、Start後の最初の立ち下がり、をスタートビットとみなして受信を開始する、ということのようだ。

11/05/22: gnuplotで散布図グラフ中に回帰直線などの線を引く

http://phys.hirosaki-u.ac.jp/wiki.cgi/gnuplot?page=%CC%F0%B0%F5%A1%A6%C0%FE%A1%CA%CC%F0%CC%B5%A4%B7%A4%CE%CC%F0%B0%F5%A1%CB%A4%F2%B0%FA%A4%AF set arrowで矢印を、no headで矢をつけずに描く

11/05/13: いろんな視力

http://homepage2.nifty.com/kaitsuka/vision.html

11/05/11: MacのTimeMachineをNASにとる

http://www.sky-s.net/sky-blog/archives/2010/04/25-230923.php

11/05/11: SpotlightでNASを検索

http://healingk.blog72.fc2.com/blog-entry-16.html これによると、smbでつながっているNASは検索対象にできないらしい。

11/04/28: Macにsshでログインしてスリープ/シャットダウンする

sshdは簡単に稼働させられる。 http://d.hatena.ne.jp/sugarball/20090316/1237134532

ターミナルからスリープもできる(ちょっとめんどい) http://evrythingonmac.blogspot.com/2009/03/blog-post.html

シャットダウンは、shutdownコマンドでいけそう。

11/04/27: 写真EPSを含むPDFのファイルサイズを小さくする

LaTeX2eで原稿を書くときなど、写真EPSを含むPDFをつくるとファイルサイズが異様に大きくなる。(ビットマップの画像をテキストのEPSで貼り付けているので当然)。

gsに付属のeps2epsで、EPSを半分ぐらいのサイズにできるっぽい。 http://macwiki.sourceforge.jp/wiki/index.php/EPS

これよりも、MacのプレビューでPDFをひらき、「名前を付けて保存」で QuartzフィルタをReduce File Size選んで保存すると、かなり小さくなる。

11/04/27: Macで拡張ごとにデフォルトアプリケーションを一斉に変更

意外と簡単だった。

http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-change-the-default-application-of-a-specific-file-in-macos.html

11/04/26: gnuplotの線の色や形などの一覧

gnuplotのグラフの線の色や形は、terminalによってバラバラだが、test、というコマンドで 一覧のテストパターンを表示できる。なんて便利。 http://www.ss.scphys.kyoto-u.ac.jp/person/yonezawa/contents/program/gnuplot/testterminal.html

11/04/25: MacのSpotlightでNASを検索対象にする

http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-rebuild-macos-spotlight-search-index-database.html 以前うまくいかなかったが、この方法(ターミナルからのコマンド)でうまくいった。 他にもtips多数。

11/04/20: MacPortでpTeX on Mac

MacPortの使い方 http://www.key-p.com/blog/ohnishi/article.php?id=112

MacPortでpTeXをインストール http://knmac.math.kyushu-u.ac.jp/konno/modules/xpwiki/?TeX%20for%20Mac#jc348ac2

libXaw(Athena Widget Libary)がない、というエラーが出る(ldの-lXawがエラー、みたいなメッセージ)→たしかに入っていなかったので、port search xawでそれっぽいパッケージを探し、port install xorg-libXaw でインストールしておく。→その後、port clean pTeXでクリーンしてから、installのやりなおし。

dviビューアはxdviが無難か。(コマンドラインから起動できる)

ついでにCarbonEmacsにyatexを入れておく http://macwiki.sourceforge.jp/wiki/index.php/CarbonEmacsAndYatex

11/04/19: VisualC#のtrackBarコントロール

見当たらないぞ?と思ったら、Sliderから名前が変わっていて、しかも「すべてのWindowsコントロール」の中にしかない。 http://blog1.aitacos.com/?p=1317

11/04/19: MacのFinderのサイドバーから項目を取り除く

作成に失敗したDVDなどが、サイドバーの「場所」などに残ることがあるが、Cmd+ドラッグでFinger外に持って行けば取り除ける。 https://discussionsjapan.apple.com/message/100587601

11/04/15: Mac X11(XQuarts)でカーソル移動でWindowのフォーカスを移す

いわゆるX-Mouseの機能は、X11の環境設定、のウインドウ、から設定できる。 http://xquartz.macosforge.org/trac/ticket/381

11/04/11: ExcelのVLOOKUP関数の4番目の引数

VLOOKUPの4番目の引数の意味は、「検索の型」を表し、FALSEならば完全一致のみ、TRUEならば近似検索、となるが、この近似検索がけっこうクセモノっぽくて、明らかに違う人名でも一致と拾ってしまうことがあるようだ。しかも省略時はTRUEっぽいので、本当に一致するものを探すならば、明示的にFALSEと書くべき。

http://www.excel.studio-kazu.jp/lib/e1tw/e1tw.html

11/04/07: Macでext3のファイル読み出し(ShiftJISの日本語ファイルを含む)

http://www.kanshin.com/keyword/2085583 ext3のディスクは、MacFUSE+ext2-fuseでマウントできる。 ftpdを動かして(環境設定→共有→ファイル共有、のオプションからftpをチェック)、日本語を使えるftpクライアント(Cyberduckなど)で、ファイル名のエンコーディングShiftJIS(Cyberduckだと環境設定→接続、の中)にして、自分にftpログインして転送。

11/04/07: MacのExcelでセル内改行

Cmd+Option+Return http://blog.monkey-works.com/archives/2008/04/09220432.php

11/04/07: CarbonEmacsで標準テキスト貼り付け

11/03/24のCiPTでうまくいかなかったが、FAQのようだ。 http://homepage.mac.com/zenitani/emacs-j.html

.emacsに、(setq yank-excluded-properties t)を追加すればよい。

11/04/05: MacのプレビューでPDFをいじる(結合やページ入れ替え)

http://wakabamac.blog95.fc2.com/blog-entry-866.html

11/04/05: タップ/ダイスの下穴径や加工方法のコツ

ダイスは旋盤を使ってセンターを出す、というやり方もある。 http://www.nmri.go.jp/eng/khirata/metalwork/basic/bolt/index_j.html

11/04/04: Chromeのキャッシュの吸い出し

サーバが落ちているとき、以前訪れたサイトで、Cacheに残っていれば、吸い出してhtmlで保存することができる。↓の方法がベースだが、要は、cacheをダンプ表示してあるページからバイナリデータ部分だけをawkなどで切り出して、Windows用のxeditに貼り付けて保存すればOK。 http://blog.livedoor.jp/r_c_3/archives/50694668.html

11/03/30: ISEのTiming制約つきの配置配線のEffort

まず、Place&Routeのプロパティで、-x(Ignore User Timing Constrains)がチェックされていないことを確認。(これがチェックされていると*.ucfでタイミング制約を書いていても無視される) Timingがぎりぎり、などの場合、各過程のプロパティで、Effortをがんばる、に設定すると、時間はかかるが、とりあえず通るようになる(こともある)。

  • Map : -xe (Extra Effort)をNormalにする。-global_opt (Global Optimization)を"Speed"にする
  • Place&Route: -xe (Extra Effort)をNormalにする。ついでにマルチスレッド対応のCPUのPC野場合は、-mt (Enable Multi-Threading)をOff以外にすると、処理時間が短くなるようだ。

11/03/29: Excelの「入力規則」

Excelのセルに入力する値を、リストから選べるようにするには、「データ」→「入力規則」から「リスト」を選べばよい。その選べる項目のリストが別シートにある場合は、「名前の定義」を使う。まぎらわしいが作るのは「リスト」ではなく、「名前の定義」で、その定義や変更は「挿入」→「名前」から行う。定義されている「名前の定義」は、「数式バー」の左端のボックス(「名前ボックス」)で確認できる(が変更はできないので、「挿入」→「名前」、から)。ちなみにExcel用語としての「リスト」は、あるグループに対して、ソートなどをできるデータのグループを作る、ことをいう。 (11/10/04追記:)対象セルで入力規則で「リスト」を選び、値のところは、「=名前」とする。(例えば「=グループA」)

http://www.eurus.dti.ne.jp/~yoneyama/Excel/n-kis_list.htm

11/03/28: ISEのWarning: Xst:1710

WARNING:Xst:1710 - FF/Latch <Q_9> (without init value) has a constant value of 0 in block <DFFXPB1>. This FF/Latch will be trimmed during the optimization process.

こんなワーニングが出るときのありがちな原因:

  • DFFの入力がつながっていない
  • DFFの入力が常に0
  • DFFのリセット条件が常に真

komamura氏のEYEGAZE6では、initialで初期値を与えているところがあるが、これが原因か? →(11/03/28補足)CLKとして与える信号を、komamura氏はDCMからの出力を、PLL_LOCK=1のときに分周して出力するようにしていたが、これをDCMを使わずに作ろうとしていた。この際に、DCMを使わないのにPLL_LOCKを、クロック分周の条件に残してあったため、結果としてクロックが常に0になる、という状態であったことが原因と判明。クロック分周にPLL_LOCKを条件からはずしたら、クロックが正しく作られる記述になるため、確かに↑のワーニングは出なくなった。

11/03/27: ISE Virtex4→Spartan6

komamura氏の力作EYEGAZEを、ほぼ同規模のFPGAのSpartan6に移植中、論理合成で以下のWarningが出た。

WARNING:Xst:3002 - This design contains one or more registers/latches that are directly
   incompatible with the Spartan6 architecture. The two primary causes of this is
   either a register or latch described with both an asynchronous set and
   asynchronous reset, or a register or latch described with an asynchronous
   set or reset which however has an initialization value of the opposite 
   polarity (i.e. asynchronous reset with an initialization value of 1).

レジスタ(FF)のセットとリセットに、同期と非同期が混じっている、ということらしい。まだソースを精査していないが、これはどちらかにそろえれば解決しそうな雰囲気。 →(11/03/28補足)ちゃんと読めば、非同期set/resetの両方を使っているか、そのどちらかを使っているが初期値が逆(非同期resetの初期値が1、など)、ということのようだ。同期リセットを使うか、非同期リセットの初期値(リセット時の値)が0となるようにreg変数の値を決める、ことでOKのようだ。always文でresetをかけているところを一通りチェックしたところ、初期値が0でないところが何カ所かあったが、同期リセットとするか、reg変数の初期値は0として、それの反転を使う、などの対処で解決できるっぽい。

11/03/26: Windowsでext3領域を読み出し

Ext2fsdだと日本語ファイル名もOKっぽい。 http://blog.so-net.ne.jp/top_2007/2007-07-15

11/03/24: Macでクリップボードのテキスト属性を削除する

WordやExcelからCarbonEmacsへテキストをクリップボード経由でコピーしたいとき、フォントや色などもいっしょに、リッチテキストとしてコピーされてしまう。そこで、↓こいつでクリップボード内データをプレーンテキスト化してペーストするとよい。 CiPT: http://homepage.mac.com/kaizawa/iblog/2/C1840517415/E1337206189/index.html

11/03/20: Xilinx ISEのCore Generatorの設定ファイルのパス

BlockMemoryなどをCoreGeneratorでIPとしてつくると、その設定情報は???.xcoというファイルに保存されるが、少なくともブロックメモリの初期値を指定する*.coeは、フルパスで保存されているようだ。そのため、プロジェクトごとフォルダを移動させると、ManageCore時に、*.coeが見つからん、というエラーが出る。とりあえず*.xcoの当該箇所を、"./???.coe"のように相対パスにすることで解決できる。*.xcoを編集することで、Manage時に、*.xcoが新しすぎるみたいだが大丈夫か?みたいな確認メッセージが出るが、OKとすればよい。

11/03/15: PSoC Sleep割り込み

M8C_EnableIntMask(INT_MSK0, INT_MSK0_SLEEP); でEnableにできて、これとM8C_EnableGInt;と組み合わせれば、とりあえずSleepTimerで割り込みはかかる(=Sleepから起きる)

11/03/15: Felicaリーダ(続)

http://1n60diary.blogspot.com/2011/02/felica-rc-s620s-idm.html http://hiro99ma.blogspot.com/search/label/nfc このあたりをいろいろ調べてみたが、特にArduino用ライブラリでやっていることとは別のことをやっているわけではなさそう。 もしかして、と思って、カードをRC-S620の基板側にかざしてみたところ、あっさり読み取れた。つまり、いままで勝手な思い込みで、金属板側にかざすものだとばかり思い込んでいたが、そちらはシールド側、ということだった。なんというオチ。

11/03/09: 非接触ICカードの規格

ごちゃごちゃになってきたので、少し整理。 現在、学生証/教職員証の読み取りに使っているのは、IOデータのUSB2-NFC http://www.iodata.jp/product/mobile/nfc/usb2-nfc/spec.htm こいつが対応している規格は、MIFAREとFelicaで、MIFAREは「ISO/IEC 14443 Type A」の一種。http://ja.wikipedia.org/wiki/MIFARE Felicaは通信速度が212kbpsと424kbpsの2種類がある。 で、肝心の学生証/教職員証を読み取っているwada氏のZSK_Clientのソース(http://merl.ec.t.kanazawa-u.ac.jp/diary_private/index.php?cmd=read&page=wada/201011#k8e6b2e0)をみてみるが、Polling時にカードの種類を指定している箇所、というのが、みあたらない。ということは、順番にMIFARE、Felica(212/424kbps)のカードが見つかるかを試す、ということなのだろうか。→RC-S620でも、これら3つの規格のPolling(InListPassiveTarget)を試みてみることにする。

11/03/09: Felicaリーダ(UART制御)(続)

↓についてもう少し詳しく読んでみる。 NXPの157830_PN533_um080103.pdfによれば、昨日のPollingができない、というのは、レスポンスコードを読むと、カードが見つかっていない、ということのようだ。で、コマンドの詳細も載っているので、InListPassiveTargetを調べてみると、カードを探す、というコマンドだが、そのときに送るべきコマンドはISO/IEC 18092を参照(11.2.2.5章らしい)、とある。幸いこの規格書はフリーで入手できるようだ。 http://www.iso.org/iso/catalogue_detail.htm?csnumber=38578 というわけで、これから読む。

11/03/08: Felicaリーダ(UART制御)

SONY RC-S620S http://www.switch-science.com/products/detail.php?product_id=353 仕様書は買うといただけるが、肝心のプロトコルについての記載がない。

公開されているArduino用のライブラリ&サンプルを読んで、初期化とPollingの方法はわかったんだけど、けっこうめんどいパケット構造。

で、PCとUARTで接続して手動でつついてみたが、初期化まではACKも返ってきてOKそうだが、Pollingがうまくいかない。そのArduino用ライブラリのPoll()のところには、"InListPassiveTarget"というコメントが書いてあるので、これをキーワードに検索してみると、けっこういろいろひっかかる。

http://hirokuma.typepad.jp/blog/2011/01/mifareinlistpassivetarget%E3%81%A8sens_req%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF.html

これによると、NXPのNFC(Near Field Communication)モジュール、と似ているようで、コマンド体系もこれが参考になる。似たところで↓ここなど。

http://project.microtechno.co.jp/attachments/download/27/MRM%E2%85%A1_%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB01%E7%89%88.pdf

11/03/08: PCBEでソルダーマスク(細かいこと)

  • pcbe2outline.cに微妙なバグがあったので差し替えた。
  • 半田面のマスクをつくるとき、裏返しにする、という作業が必要なので、pcbeflip.cをつくった。

11/03/06: 導電布のミシン加工

11/03/04: PCBのスルーホールの穴を少し広げる

PCBのスルーホールを、少し(0.1mmとか)広げるとき、その径のドリルで穴を開けると、両面を導通させている穴の中の導体も削れてしまうので、要注意。あたりまえといえばたりまえ。表か裏の片方にしかパターンがない場合には、特に要注意。

11/02/23: 小さいネジを買えるところ

http://item.rakuten.co.jp/nejiya/c/

11/02/18: いわゆるキャラクタ液晶を3.3Vで使う

http://airvariable.asablo.jp/blog/2009/07/06/4415959

11/02/18: 導電性接着剤の作り方

こんなものを使う作り方も。 http://www.hands-net.jp/goods/6072-001012001 この純銀パウダーと木工用ボンドをまぜるだけ。けっこうちゃんと導通する。

11/02/15: Macの「プレビュー」でPDFへの注釈記入

そんなことができる。Adobe Readerではなく、「プレビュー」で開けばよい。ハイライトとかもOK。

11/02/10: PSoCのTImer/PWMのカウンタレジスタ(DR0)

なぜかRead Onlyという仕様なのだが、Periodレジスタ(DR1)に書き込むと、同時にDR0もその値になる。つまり周期を変えると最初からカウントする、という仕様らしい。(ちなみにPSoCのTimerのカウンタはダウンカウンタなので、初期値はPeriodの値、となる)これを使うと、任意のタイミングでカウンタの値をPeriodの値に設定する(リセット)、ことはできる。ただ、UARTの動作タイミングとは微妙にずれるようだ。具体的には、UART(TX8やRX8も)は、与えるクロックを8分周して1ビット分のクロックを作っているが、この8分周の分周器のカウンタは外部から設定できないようで、しかもStart/Stopしてもリセットされないようだ。つまり、UARTの1ビット分の送信タイミングを細かく制御することはできない。またVC2を分周してVC3を作る場合などの分周器のカウンタも、外部から設定できないようだ。従って、PWM8とTX8を同期させて動かすためには、(1)両者に同じクロックを与え、(2)PWM8の周期を8(Period=7)として、(3)所望のタイミングで、必要ならばnopでディレイを与えて動作を開始する、という手順をふむのが最適のようだ。ただ1クロック分ぐらいのずれは、動作の開始ごとに生じるようだが、1ビット=8クロックなので、このずれを許容するようなPWM8のパルス幅にする、というのが現実的か。

11/02/10: PSoC ときどきIrDATX的な送信がズレる、の原因

11/02/08の謎な現象の原因がわかった。PWM8とTX8の動作タイミングが、動作させるタイミングによって一定しないため、TX8の1ビット分の幅の間にPWM8のパルスが入る場合はOKだが、TX8の1ビットの境界にPWM8のパルスがまたがるばあい、両者のORをとっているので、短いパルスが2つでることになる。だから、「ときどき」ビット0が続くように見える、ことになる。だから0x55→0x00や0xff→0xfe、となるわけだ。(この0xfeのLSBの0は、スタートビット(0)の境界にPWM8のパルスがまたがったため)したがって、TX8とPWM8の動作のタイミングを合わせる必要がある。というわけで↑へ

11/02/10: dsPICのExplore16ボードのGettingStarted

dsPICのPIM(ドーターボード)をさして、最初から書き込まれているはずのデモプログラムが動かない、と困っていたら、UserManualに書いてあるのと違うdsPIC(dsPIC33FJ32)のPIMじゃないか。なんじゃそら。しかもこのPIMは、例えばポートA[0](RPA0)のつながる場所が、PIC24FのPIMと違うので、一つ一つ追いかけないと行けない。Webページをみたが、このPIMのピン対応表、は存在しない(!)ようだ。なんちゅうボード・・・

また同梱されているICD3は、最新のMPLAB8.6を入れ直したら対応していた。たしかに同梱されている紙ぺらに、最新情報をWebでチェックしろ、と書いてあるが、ちょっとひどいんじゃないか。

というわけで、http://www.mars.dti.ne.jp/~m7030/index.html を参考に、スクラッチからプロジェクトを作るようにしてみる。ポイントは、リンカスクリプトを使っているdsPICにあわせることと、ライブラリをプロジェクトに追加すること(FIRやFFTなどのDSPっぽい演算を使う場合は、dspのライブラリも必要)。Build Allしたあと、ProgramメニューからProgramをすれば書き込みが行われる。なおDebugモードとProgramモードは、排他的で同時には使えない。Debugモードのためには、Debug用のリンカ設定(Enable ICD2、みたいなチェックボックス)を書かないといけないようだが、どうもそれが見つからなかったので断念。Programで書き込み後、すぐに実行が開始される。

11/02/09: PSoC HITECH-Cでのインラインアセンブラの書き方

↓↓のことをCのソースでやろうとするとインラインアセンブラが書きたいが、こうやればいいようだ。http://www.pastelmagic.com/psocbbs/index.cgi?m=look&bnum=1549

#asm 
...
#endasm

または、

asm("...");

11/02/09: PSoCのTimer/PWMのCounterの初期化

初期化というか書き込みができない、読み出しもいったん止めてPeriodレジスタに移して読む、という仕様になっている、とデータシートには書いてあるが、PSoC TRMのDigital Blockの詳細を読むと、DigitalBlockそのものの仕様のようだ。つまりCounterであるDR0レジスタはRead専用であり、しかも読み出しすると、その値がPeriodであるDR2にコピーされる、という仕様のようだ。ヘンな仕様だな。

11/02/09: PSoCのIrDATXのStart

PSoCのIrDATXでは、UARTの送信(TX8)とPWMをうまく同期させて、送信信号にあわせたパルスを出しているが、↑のとおり、PWMの動作(パルスが出る)タイミングを、カウンタを設定して途中で変えることができないので、どうやっているんだろう?とlib/IrDATX.asmを読んでみたら、IrDATX_Start()はこんなことになっていた。(一部略、適宜コメントを入れてある)

  mov   REG[IrDATX_1_TX_CONTROL_REG ], bfCONTROL_REG_START_BIT ; TX8のStart
  ; add user module configurable delay
  IF IrDATX_1_32_CLKS
  nop
  nop
  nop
  nop
  ENDIF
  or    REG[IrDATX_1_BitTimer_CONTROL_REG], bfCONTROL_REG_START_BIT ; PWMのStart

nopを入れて開始のタイミングをずらす、という荒業。

11/02/08: dsPICでフィルタ処理

断片的な情報だが、ある程度まとめておられる方: http://www.mars.dti.ne.jp/~m7030/index.html

11/02/08: PSoCのRowOutputバスのLUT

いろいろと小細工ができる(隣のRowOutputと論理演算をしたり)のだが、動的にLUTの設定をいじりながら使っていると、「ときどき」所望の出力が出ないことがある。具体的には、RowOutput1(RO[1])にTX8の出力、RowOutput2(RO[2])にPWM8(周期はTX8の1ビット分と同じ)の出力をつないで"~RO[1] & RO[2]"を出力するようにすると、TX8の0のビットのところだけパルスが出るような出力が得られるはずだが、10回に1回ぐらい、0x55を送ったときでも全ビット分パルスが出たり、0xffを送ると0xfeを送った時のようにLSBだけパルスが出たりする。再現性はある(これらのパルスが出るか、所望のパルスが出るか、のいずれか)が、その頻度がバラバラ。PSoC TRMを読んでも、LUTにはクロック同期っぽい機能はない。なんだ?

11/02/08: PSoCのVC1とVC2

VC1とVC2の分周比をともに1(default)の状態だと、VC1もVC2も24MHzとなるはずだが、それ(VC2)をPWM8に与えたところ(Vdd=3.3v)、パルスが出なかった。PWM8のデータシートには、input clockは3.3Vのときは24MHzまで、と書いてあるのだが、だめなんだろうか。CPU CLOCKはVdd=3.3Vのときは12MHzまで、という制約はあるのだが、それと同じ制約なんだろうか。ちなみにVC2の分周比を2にして12MHzをPWM8に与えたら、予定通りのパルスが出た。

11/02/07: Nd磁石のハンダ付けとコテの温度

Sn60%のハンダだと融点は200度ぐらいなので、コテの温度を低くしてもハンダがとける。Nd磁石は熱に弱く、300度ぐらいでハンダ付けするとかなり磁力が弱くなってしまうが、コテ温度を250度(使っているHOZANのやつで設定できる最低温度)にしてハンダ付けしてみると、磁力の弱まり度合いが小さいようだ。

11/02/03: OpenCV + VisualC#

http://tanakakohei.blog39.fc2.com/blog-entry-11.html

11/01/31: PSoC HITECh-CでのBYTE型変数と負の数の取り扱いと比較条件

ちょっと謎の挙動をみつけた。

BYTE a, b;
a = 0xff; // -1のつもり
b = 0xfe; // -2のつもり
if (a > b){...} // これは成立する
if ((a + 10) > (b + 10)){...} // これは成立しない

確かにa+10=9、b+10=8、となるのだが、2つ目のif文は成立しない、ということは、BYTE型といっても、単に符号なし8bit、とは違う、ということか?アセンブルしてもう少し詳しく見てみよう。

11/01/28: PSoC HITECH-CでのBYTE型の比較条件

当たり前と言えばあたりまえだが、ちょっとはまったので備忘録。

BYTE i;
for (i = 5; i >= 0; i--){...

というコードを書くと、i=5,4,3,2,1,0というところで終わってほしいところだが、i=5,4,3,2,1,0,255,254,...と永遠に続く。iはBYTE型なので、0の次は-1=255となり、やはり0以上、という条件を満たしてしまう。

11/01/26: PSoCの外付け水晶

しばらく前にもやっていたが、備忘録。Xtalの負荷Cは、GNDではなくVDDにつなぐ(TRM参照)ので注意。あとはP1[0]/P1[1]の機能をXtalIn/Xtal/Outに設定して、GlobalResourceで32K_SelectをExternalにすればOK。電源ON後、PLLの安定まで少し(1s程度)時間がかかる。またPLL_ModeをExtLockにすれば、SYSCLKが32.768kHzを逓倍して23.986MHz(TRM参照)になるはず。(が、そうならない?(VC1などからPWM派を外に出して確認)電源系がいいかげんだからか?)

http://bluefish.orz.hm/sdoc/psoc3.html#外部水晶発振

11/01/25: Inkscape等で.recently_used.xbelを作らない

http://mstssk.blogspot.com/2008/08/recently-used.html なるほど。

11/01/25: SleepTimer割り込みのISR

SleepTimerINT.asmに、_SleepTimer_ISRというラベルで割り込み処理ルーチンがあるので、Cソースのほうに#pragma interrupt_handler宣言をしたうえで、SleepTimer_ISR()という関数を書けばよさそうに思えるが、二重定義というエラーになる。(RX8_ISR()などはOKなのに)。とりあえずSleeiTimerINT.asmの_SleepTimer_ISRのところに、ljmp _SleepTImer_ISR_Cのように別関数名へのジャンプを書いて、SleepTimer_ISR_C()という関数を使えばよい。

11/01/25: PSoCの使っていないピンでのGPIO割り込み

あとで使うつもりでOpenやPull-Up等にしてあるI/Oピンの割り込みをEnableのままにしていると、意図していなくてもGPIO割り込みがかかるときがあるので、使わないI/Oピンの割り込みはDisableにしておいたほうがよい。

11/01/25: MiniProgのPowerモードの書き込み時の電源にレギュレータがついている場合

うまくリセットがかかるときとかからないときがある。といっても回路や使うレギュレータに依存するわけでもなく、NGなときは何回やってもNG、OKなときはいつもOK。再現性というかルールがよくわからない。

11/01/25: PSoCの割り込み処理までの時間

GPIOの場合、割り込みがかかってから割り込み処理が始まるまで、だいたい10usぐらい(CPU CLOCK=SYSCLK/2の場合)

11/01/25: RemoteDesktopClientでの全画面表示

Ctrl+Alt+Break

11/01/21: AdobeReaderのショートカットキー

  • H : 手のひらツール
  • V : 範囲選択ツール
  • G : 領域選択ツール ただしいずれも、環境設定で「単一キーのショートカットを有効にする」をチェックしていないと使えない。

11/01/21: ThinkPadのキーアサイン変更

http://miau.s9.xrea.com/blog/?itemid=720 ChangeKeyというフリーウエアで変更できる。Fnキーを含むものでもOK。たとえばFn+↑をPgUp、のように割り当てできる。

11/01/21: MacでDrag&Dropでファイルをコピー

Optionキーを押しながらDrag&Dropでコピー。

11/01/19: MATLABでフィルタをかける

MATLAB初心者(=自分)が、時系列データにフィルタをかけたときの備忘録

  • データ読み込み: load ファイル名 → 行列の変数(ファイル名が変数名; 例:A)がつくられる
  • データの切り出し
    • 1列目=時刻: t = A(:,1) ←「:」は範囲を表す演算子で、:のみだと全範囲。つまりこれは行列Aの「行(=カッコ内の1つめ)=すべて」、「列=1」のデータ、をtに代入することになる。なお行列内の行と列の番号は1からはじまる。
    • 2列目=データ: d = A(;,2)
  • グラフの描画: plot(t, d) で、横軸=t、縦軸=dのグラフが描かれる
  • フィルタをかける
  • 保存: save(ファイル名, オプション, 変数)
    • オプション: -ascii=アスキー形式で、-tabs=タブ区切り
    • 例: save('a.dat', '-ascii', '-tabs', 't', 'd') で、tとdをタブ区切りアスキー形式で保存
    • 2つ以上の変数をうまく保存できないことがあった→ds=[t, d] として保存したい変数からなる行列をつくって、それを保存すればOK

11/01/18: Inkscapeのカスタマイズ

常用ドローツールとしてInkscapeを試す。常用のためには使い慣れたショートカットキーが必須、ということで、カスタマイズを試みる。share\keys\default.xmlを編集する。 http://inkscape.paix.jp/manual/ Inkscape自体の設定は、Windows7ではc:\Users\???\AppData\Roaming\Inkscape\\preference.xmlに格納されている。 用紙設定のデフォルトを、templates\default.svgに書いても使われないのでおかしいな、と思ったら、default.ja.svgが使われるのであった。

11/01/18: FT2232HのVCPドライバの転送速度

上限に挑戦。FT2232H+VCPドライバ+Acknowrichで受信。WRnのサイクルタイムを変えて、正しく転送できるかを確認。(VCPのバッファ=4096B、Acknowrichのソフトウエアバッファ=256KB) 4MB/sはOKだが、4.8MB/sはだいたいOK(ときどき失敗)、6MB/sはNGっぽい(データ欠損がある)。もちろんPCの性能に依存しそう。しかし↓の方法でVC#でシリアル受信プログラムを書いてみたが、もっと低い転送レートでもデータ欠損が出てしまう。Acknowrichの中はプログラムになっているんだろう?

11/01/17: VisualC#のserialPortでの受信

高速に連続で送られてくるデータを落とさずに受信するのはけっこう難しい。このあたりで、マルチスレッドにして受信する方法が紹介されている。 http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200901/09010016.txt あと、serialPortのReceivedBytesThresholdプロパティの意味に注意。これは、受信バイトがこの値になったらDataReceivedイベントが発生する、わけではなく、受信バイト数がこの値「以上」になったらDataReceivedイベントが発生する、ということ。つまり、例えばReceivedBytesThreshold=2としておいたとき、DataReceivedイベントが発生するのは、2バイト受信時かもしれないし、3バイト受信時かもしれないし、4バイト以上受信したとき、かもしれない。したがって、DataReceivedイベントでは、バッファに入っている全データを読み出す、べき。

11/01/14: FTDI VCPドライバでのUART受信とデータ長

FTDIのFT245等で非同期FIFO送受信をVCPドライバで行うとき、PC側からはCOMポートとして見え、そのボーレート(通信速度)の設定は実際の通信速度と無関係、というのがあったが、COMポートの「データ長」は、受信(FT245→PC)にのみ関係あるようだ。具体的にはCOMポートのデータ長を7ビットに設定するの場合、PC→FT245は8ビット全部送られるが、FT245→PCは7ビットだけ、となる。

11/01/13: PSoCで使っていないUART受信機の入力ピン

意外と落とし穴。使っていないUART受信機(=RX8)の入力ピン(受信データ入力)をオープン(解放)にしていると、電位が定まらないが、UARTの特性上、値が0となるタイミングがあると、UART受信が始まってしまう。特に受信割り込みを設定している場合は、不特定のタイミングで、動かないつもりの受信割り込み処理が行われてしまうことがある。未使用UART受信ピンは1に固定しておくべき。

11/01/13: PSoCのPWMのPeriodとPulseWidthCompareType

いまいち混乱しがちだったので、あらためて整理。

11/01/13: PSoC HI-TECH Cでのconst型変数の取り扱い

コンパイル結果のアセンブリを見てみたが、基本的には初期値つき変数、としてRAM領域に確保されるっぽい。

11/01/13: PSoC Designer5でのm8c.hの場所

C:/Program Files/Cypress/Common/CypressSemiBuildMgr/tools/include/???/m8c.h (※???:PSoCのシリーズ名)

INT_MASK1のようなシンボルなどが定義されている。

11/01/11: MacでDVDをEjectする

Ejectキー(Option+イジェクト)を長めに押す。または、iTunesからCmd+E。

11/01/07: Windows7で、いわゆるX-Mouse

マウスカーソルがウインドウに入るだけでアクティブになる、いわゆるX-Mouseは、コントロールパネル→コンピュータの簡単設定→マウスの設定、から設定できる。 http://www.nikep.net/srdpty/index.php?/archives/30-Windows-7.html

11/01/06: Mac+VMwareFusionにUbuntuを入れる

http://d.hatena.ne.jp/wadap/20080720/1216541500 これを使ってDynabookAZにUbuntuを入れる予定(via 日経Linux2011.1)

11/01/06: 導電性の両面テープ

http://www.mmm.co.jp/electrical/emc/both_cdct/

11/01/06: Nd磁石の半田付け

半田ごてで予備半田をするときでも、2秒ぐらいコテ先にくっつくだけで、かなり磁力が落ちるようだ(コテ先にくっつく力がみるみる弱くなる)。相当手早く半田付けをしないといけない。または導電性エポキシを使うのが賢明か。

11/01/06: オーバーサンプルとΔ-Σ変調

北川先生に教えを請う。

  • オーバーサンプルすると、サンプリング周波数fs以下の帯域のノイズ電力が減る、ということは、周波数軸では理解できる(全体のノイズ電力は一定だが、N:オーバーサンプル比として、0〜Nfsまで均一に広がるため、fs以下の帯域ではノイズ電力が減る)が、これを時間軸でどう理解するか? →fsに対するエイリアスは、0, fs, 2fs, ...を中心に現れるが、2fsに対するエイリアスは、0, 2fs, 4fs, ...に現れる。すなわちfs中心の成分が消える。これは時間軸上でfsのサンプリングに対して可能な信号(正弦波)が0, fs, 2fs, ...と可能だが、2fsのサンプリングに対して可能な信号(正弦波)を書いてみると、0, 2fs, ...しかありえない、として理解できる。
  • Δ-Σ変調をかけると、なぜパルス密度変調されるのか? →例えば信号(正弦波)を1bit量子化する場合、fsでも2fsでも得られる信号は方形波となる。つまりオーバーサンプルする意味がない。Δ-Σ変調は、入力信号をΣ(=積分)し、それが閾値を超えたら入力信号から引く(=Δ=微分)。つまり入力信号が大きいほど早く閾値を超え、超えたら0から積分をやりなおし、になるので、パルス密度が高くなる(というか、正しくはパルスの周期が短くなる)。逆に入力信号が小さいほどパルス周期が長くなる。こうして、オーバーサンプル比に応じたパルス密度変調信号が得られる。

11/01/05: PSoC MiniProg書き込み時にSCL/SDAにつなぐ線

オシロのプローブや、UART受信端子などをつないでいると、負荷容量の関係か、書き込みに失敗することが多いようだ。

11/01/05: なんちゃってリフロー炉(=トースター)の中の温度分布

意外と温度分布が大きい。奥の方が、奥の板からの反射があるのか、温度上昇が早いようだ。手前は、ガラスの扉がある分、温度上昇が遅い。中央付近は、ヒーターの直下だが、奥の方よりは温度上昇が遅い。均一な温度分布とは言い難いので、全面でリフローをかけるのは、ちょっと無理がありそうだ。

11/01/05: Nd磁石の半田付け

Nd磁石(表面はたぶんNiメッキ)の半田付けのコツ。まずはコテをやや長めにあてて予備半田を盛る。竹のピンセットが使いやすい。

11/01/04: FTDIの245FIFOのVCPドライバでの転送速度(続)

↓の件をFT2232Hをつかって実測。10kHzの方形波をWRnに与えてみたところ、データ転送速度は、PC側のCOMポートの設定にかかわらず、たしかに10kB/sとなった。

10/12/31: FTDIの245FIFOのVCPドライバでの転送速度

FTDIのFT245をVCPドライバで使うと、PC側からはCOMポートとして見えて、そこでの1バイト単位での送受信を8ビットの入出力として扱うことができる。つまり一種のシリーパラ変換、なわけだが、その転送速度は、COMポートの転送速度にはよらず、245FIFO側の入出力(WRn/RDnで制御)の速度で決まる。(と、FTDIのサポートに問い合わせたら回答があった)