12/12/21: AVRのクロック分周比の変更

CLKPSRレジスタで行うが、データシートにある通り、CCPレジスタにマジックナンバ0xd8を書いてから。つまりCCP=0xd8;→CLKMSR=0x00;(x1の場合)のように行う。

12/12/20: AVRマイコンのプログラム開発

WinAVRを使うのがよさそう。 http://akiba.geocities.jp/atmel_avr_atros/20070603.html

ただしATtiny10はCではコンパイルできない。 http://www-ice.yamagata-cit.ac.jp/forum/viewtopic.php?t=776

AVR Stuioならいけそう http://morecatlab.akiba.coocan.jp/lab/index.php/2011/10/attiny10/

またはアセンブラでいくか http://d.hatena.ne.jp/pcm1723/20111218/1324230430 http://s.webry.info/sp/sfukuda.at.webry.info/201205/article_12.html http://weepro.blogspot.jp/

12/12/14: Eagleのランド径や配線幅を手動で変える

上のほうのWidthやDiameter欄に手動で数値を入力してEnterを押すと、その寸法で描ける。

12/12/14: 認証つきページからwget

http://webos-goodies.jp/archives/51277893.html

12/12/14: PSoCのImageCraftコンパイラでROM領域に定数をおく

constをつければいい雰囲気。たしかに*.lstをみるとそうなっている。

const BYTE a[3] = {0, 1, 2};

http://1c3.world.coocan.jp/wiki/index.php?PSoC%2FPSoC%A4%CE%BC%C2%B8%B3%2FC%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9%BB%C8%CD%D1%A5%E1%A5%E2

12/12/13: Excellonドリルデータのフォーマット(というか制御コマンド)

冒頭のMコードでインチ/ミリを指定するなど。

http://www.excellon.com/manuals/program.htm

ちなみにEagleが吐くExcellonドリルデータはこんな感じ。

%
M48 ←ヘッダ
M72 ←インチ系(M71:ミリ系)
T01C0.300 ←ドリルリスト。この例ではT01が0.3[inch]
...
%
T01 ←T01を選択
X???Y??? ←穴を開ける位置
...
M30 ←おしまい

12/12/13: Eagleメモ

12/12/12: Gコード一覧

http://nonnno.hobby-web.net/GCORD/nc.html

12/12/09: 米粒AVR

ATtiny4/10シリーズ。AVRstudioでいけそう。AVRISPmkIIではTPIという接続方式で書き込み可。

http://stastaka.wordpress.com/2011/10/12/attiny10/ http://blog.toshnet.com/article/54058773.html http://blog.goo.ne.jp/toko0131/e/7f81080511571d7cf8765c4b7819fb77

12/12/06: 激安PCB製造

iMallというところを発見。FusionPCBと価格は同じくらい?こっちのほうがデータのやりとりなどが体系立っているっぽい印象。 http://imall.iteadstudio.com/open-pcb/pcb-prototyping.html

12/12/06: Eagleのショートカットキー

左手でショートカット、右手でマウス、というのが便利なので、左手でだいたい操作ができるショートカットをつくってみた。個人的にはこれで統一しようかと思う。 (2012/12/07: DisplayとLayerとSplitを追加。添付のdot.eaglercは未更新)

Ctrl+AFit基板全体を表示
Ctrl+BSplit配線を分割(曲げる)
Ctrl+DDelete削除
Ctrl+ERipupリップアップ(未配線に戻す)
Ctrl+FMirror左右反転(SMDは表裏切替)
Ctrl+GDisplay表示レイヤ設定
Ctrl+JGridGrid設定
Ctrl+LLayerレイヤ変更
Ctrl+QDRCDRCをかける
Ctrl+RRoute配線
Ctrl+SMove移動
Ctrl+TTextテキスト
Ctrl+WWireワイヤ(手動で配線をひく)
Ctrl+XSmashスマッシュ(部品のシルクなどを分解)
Alt+ZWindow x2x2倍に拡大
Ctrl+Alt+ZWindow x0.5x0.5に縮小
Ctrl+1Topレイヤに
Ctrl+2Bottomレイヤに

その定義ファイル(のBrd用ショートカットキー部分のみ)

12/12/06: Eagleで基板設計(アートワーク)もろもろ

グリッドは0.05inch、Altグリッドが0.025inchあたりが順当か。よく使うのは、Move, Route, Ripup, DRCなので、これらをショートカットにすると便利。あとはText。

Ripupは、選ぶ場所によって、折れ線の一部だけ戻ったり、折れ線全体が戻ったり、そのネットがすべて戻ったりするが、法則はあるけど場合分けで書きにくいのでなれるほうが早いか。

Routeで配線の途中で、左上のレイヤ選択で表/裏パターンを切り替えると、あとで変わるところにVIAが置かれる(その寸法は右上のほうで穴のサイズなどを指定)。※レイヤ切り替えを行うショートカットor操作はないのかな・・・ありそうな気がする。

12/12/05: EagleのDRCルールファイル

ルールファイル(*.dru)を直接いじってもいいが、Board→DRCで、個別にGUI的にルールを編集できる。 [#i84f68e7] http://gaussmarkov.net/eagle/padsize.html

12/12/05: 2次元CADのDWG形式

AutoCAD形式。Illustratorとかは対応しているしDXFとの変換も可能。Inkscapeでも扱える模様(書き出しだけ?)

http://ja.wikipedia.org/wiki/DWG http://helpx.adobe.com/jp/illustrator/kb/223949.html http://oshiete.goo.ne.jp/qa/1921974.html http://www.inkscapeforum.com/viewtopic.php?f=5&t=4059

12/12/03: 小型磁石の販売Magnet Japan

http://www.magfine.co.jp/magnetjapan/

12/12/01: Eagleのメモ

後閑さんのEagle本を一通り読んで、メモ。

  • 回路図では、name(R1, R2など)が自動でつくが、部品削除などで不連続となるし、回路図上で位置がバラバラになるので、手動で書き換え(付け替え)をしたほうがのちのちのため。
  • 直感的には「edit」でまとめられそうな操作が、Move/Name/Valueなどで分かれている感じ。
  • ライブラリ作成に関して:
    • とりあえず既存ライブラリからシンボルとパッケージをコピーして使い回すのが順当。
    • デバイス=シンボル+ライブラリ
    • シンボル(回路図記号)とパッケージ(基板上のフットプリント)は別に扱われる
    • シンボルで負論理はNameの先頭を!にすると上付きバーで表示される
    • シンボルでName/Valueはレイヤ95/96のテキストで>NAME/>VALUE
    • 74ac-logic.lbrはいろいろいなDIPが網羅されているので便利
    • 使い回しは、既存ライブラリを開いて、自分ライブラリで新規作成してコピペするのが便利
    • コピペは、対象をドラッグして選ぶ→Cutを選択→対象をクリック
    • デバイス編集では、Addでシンボル選択画面内のNewでパッケージ選択、Connectでピン番号対応付け、PrefixでIC##などの名前、ValueをOnに
    • 同一部品で別パッケージは、Variantとして追加
    • 同一シンボル&パッケージの部品は、名称をOP_*のようにワイルドカードをつけ、Technologies欄で追加する

※change→font→vector、とすると、印刷で作成したPDFが検索可能テキストになる?と思ったけどダメっぽい。

12/11/29: Eagleのシルク(になりうる)レイヤ

  • tPlace : デフォルトのシルク。
  • tName : 部品番号(IC1, R1等)。デフォルトではシルクになる。
  • tValue : 部品定数や名前(1k, OP07C等)。デフォルトではシルクにしない。

http://www.koka-in.org/~kensyu/handicraft/diary/20040630.html

12/11/29: AVRのICSPコネクタ

すぐ忘れるので備忘録。 http://www42.atwiki.jp/narec/pages/21.html

12/11/29: AerosPort-III C7600 (7Fの複合機)で手差し印刷の用紙の向き

いつも忘れるので備忘録。 印刷(プリンタとして)するときは、左側の手差しトレイに、用紙の上を手前、用紙の表面を表面にして差す。 (手差しコピーの時は上下が逆だったような気がする:未確認)

12/11/29: Eagleでネットリストの出力

http://ofnisiki.blog.fc2.com/blog-entry-40.html

まあ基本的に、Eagleはこまったらスクリプト(ulp)を探せ、という感じ?

12/11/29: awkのフィールドセパレータ(FS)を正規表現で

http://www.asahi-net.or.jp/~aa4t-nngk/awk.html#inputdelimiterfs

12/11/29: 2.54mmピッチコネクタ

よく使う、千石では「2550コネクタ」という名前のコネクタ。JSTでも「REコネクタ」という類似品(同じもの?)がある。 http://www.jst-mfg.com/product/detail.php?series=209

12/11/09: PSoC I2C通信途中のPOR

I2C通信中にバッテリ電源電圧が下がってPORがかかった場合、PSoCのほうはリセットがかかるが、当然ながらI2C Slave側はリセットがかからない(POR機能がなければ)。 つまりI2C通信中でI2Cトランザクションが止まって、マスタ側のPSoCは最初からやろうとするが、スレーブ側はトランザクションの途中、ということがありうる。この現象は、POR後にSDAがLに落ちている、という現象として現れる。 強制的にI2CモジュールではなくI/Oポートトグルでダミークロックを9発送る、という対策をうってみたが、どうもうまくいかない(SDAがHに戻ることも、戻らなずにLのままのこともある)。ちょっと怖いが、SDAとSCLをいずれもStrongモードの出力ピンにして一度Hを出力し、その後I2Cピン(駆動モードはOpenDrainLow)に戻してみたら、SDAもHにあがってI2Cバスがidle状態にできるようだ。再現性というか汎用性のほどは謎だけど備忘録。

12/11/08: PSoCのI2Cピンの機能

PSoC TRFのGlobal I/Oの項によると、P1.7/P1.5などのI2C信号ピンになりうるピンは、"I2C Enable=1"のときにI2C信号ピンになる(のでDrive ModeをOpenDrainLowにしないといけない)、と書いてあるが、その"I2C Enable"という信号(フラグ)がどこにあるか書いていない。

よーく読んでみると、I2Cの項で、I2C_CFGのEnableMaster/EnableSlave=0/0の場合はP1.7/P1.5等のI/OピンがI2CHWから切り離される、と書いてある。つまり、このどちらかのフラグを1にすると、"I2C Enable=1"という意味、ということになる。

わかりにくい。

12/11/08: PSoCのPORとLVDとWDT

  • PORの検知電圧は、VLT_CRで設定。ただしboot.asmで自動的に設定される。VDD=3.3Vならば01(MIDDLE)に設定される、ということらしい。
  • LVD (Low Voltage Detection)の検知電圧もVLT_CRで設定。Global Resourceからも設定できる。ただしLVDが起こった時に割り込みをかけるかどうかはINT_MSK0のVOLTAGE_MONITORフラグで設定するようだが、割り込みベクタの0x04には標準ではhaltが書かれている。またLVD検知時に自動的にSMP(昇圧回路)を動かす、ということもできるっぽい(けどよく読んでいない)。
  • WDT (Watchdog Timer)は、CPU_CR0のPORビットをクリアすると動作する(Global Resourceから設定するとboot.asm内でPORをクリアしている)。WDTの周期は、Sleepタイマの3周期分。プログラム内でそれより短い周期でM8C_ClearWDTするとWDTがクリアされる。がオーバーするとリセットがかかる。プログラム内でPORビットをセットしてもWDTは止まらない。つまりユーザープログラムからWDTを停止させる方法はない。 http://bluefish.orz.hm/sdoc/psoc.html http://blog.goo.ne.jp/toko0131/e/66bbadb3625280920558b96af5b8e5b5

12/11/05: PSoC Designer5.3でメモリ不足?

この現象がおこるケースをまだ多くは経験していないのだけど、そんなに大きくないプログラムなのに、text領域(プログラム本体)が足りない、というリンカーのエラーが出ることがある。

"{linker} area 'text' not large enough."

Project->Settings->Compilerの中で、Compressionをチェックすると、最適化をしてくれてこのエラーを回避できる(ことがある)。 http://microcontrollers.2385.n7.nabble.com/area-text-not-large-enough-td158733.html

12/10/31: VisualC#のシリアルポートの連続受信

VisualC#でシリアルポートで連続してやってくるデータを受信する際の注意点のメモ。 まずシリアル受信時のイベントでserialPort.DataReceived()が呼ばれるが、スレッドセーフではないので別スレッドにしないといけない。昔の.NET Frameworkではdelegateを使うようだが、最近のはこんな方法でできる模様。http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/e412787f-586b-40ea-aa60-e6857aa44d68

ちなみにserialPort.dataReceived()は、1バイト(Threshold設定値)以上の受信で呼ばれるが、実際に受信されたバイト数は1以上のバラバラの値なので、BytesToReadで実際に受信されたバイト数を確認してすべて読み出す。(akitaの作業日誌「11/01/17: VisualC#のserialPortでの受信」を参照)

// こっちは別スレッドの受信処理関数
private void ReceiveByte(byte[] buf, int n){
   char c;
   if (this.InvokeRequired == true){
       this.Invoke(new Action<byte[], int>(this.ReceiveByte), buf, n);
       return;
   }
   // 以下、受信データbuf[]に対する処理(nバイト分まとめて)
}
// シリアル受信イベント関数
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e){
   byte[] buf = new byte[4096]; // 受信バッファ(最大で4096バイト:serialPortのプロパティで設定した値
   int n = serialPort.BytesToRead; // 実際に受信されたバイト数
   serialPort.Read(buf, 0, n); // 受信バッファの内容をぜんぶ読み出し
   this.ReceiveByte(buf, n); // 受信データに対する処理(上記の関数)
}

ちなみに、最後の

   this.ReceiveByte(buf, n); // 受信データに対する処理(上記の関数)

のところを、次のように1バイトずつ処理すると、オーバーヘッドが大きいようで高速連続受信では間に合わない模様。

   for (int i = 0; i < n; i++) this.ReceiveByte(buf[i]);

12/10/26: PSoCのTX8のTX8_COMPLETEのタイミング

どうも動作がおかしいような気がしていたんだけど、やっと理解ができた。 TX8のTX8_COMPLETEフラグは、送信中のデータのStopビット送信後に立つが、この送信中データは、TX8_BUFFER_REGではなく、TX8_Shift_REGなので、連続して送信するときは、タイミングがけっこう理解しにくい。

TX8_BUFFER_REG----->TX8_Shift_REG

という構成になっていて、このTX8_BUFFER_REGに送信したいデータを書き込むわけだが、通常はその前にそれがFullでないかをTX8_BUFFER_EMPTYフラグでチェックする。つまり2バイト連続して送信するときのタイミングはこんな感じ。

TX8_BUFFER_REG    
TX8_Shift_REG      <1バイト目送信> <2バイト目送信>
TX8_BUFFER_EMPTY  ~_~~~____________~~~~~~~~~~~~~~~~~~
TX8_COMPLETE      ________________~_______________~~~
                  ↑1バイト目書き込み(*)
                      ↑2バイト目書き込み(**)
                                  ↑1バイト目送信おわり
                                                 ↑2バイト目送信おわり

つまり、

while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY));
TX8_PutChar(d);

のようにして、送信する(=TX8_BUFFER_REGに書き込む)前にTX8_BUFFER_EMPTYフラグをチェックするようにしても、このタイミングで実際の送信が始まる(TX8_Shift_REGに転送される)わけではないのがポイント。

上記の例では、(*)で1バイト目を書き込んだ直後に、BUFFER_EMPTYとなるので、(**)で2バイト目を書き込めるが、この時点ではまだ1バイト目が送信中なので、この後に立つTX8_COMPLETEフラグは、1バイト目の送信が終わったとき。 つまり

while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY));
TX8_PutChar(d1);
while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY));
TX8_PutChar(d2);
while(!(TX8_bReadTxStatus() & TX8_COMPLETE)); 

のように続けて2バイト送信して、2バイト目の送信が終わったかをチェックするつもりでも、2つ目のTX8_PutChar(d2)とそのあとのwhileの間に1バイト送信分ぐらいの時間の処理がない限りは、1バイト目の送信がおわったところで最後のwhileは抜けてしまう。(このタイミングでは実際には2バイト目の送信が始まったばかり) (※デバッグなどでTX8_PutChar(d2)のあとに観測用の処理を入れているとその間に1バイト目の送信が終わってしまって、2バイト目の送信が終わってから最後のwhileを抜ける、という現象も起こりうるので、なお見つけにくい)

したがって、このようなケースで確実に2バイト目の送信終了を検知したければ、1バイト目のTX8_PutChar(d1)のあとでTX8_COMPLETEフラグが立つまで待ってから2バイト目の転送をはじめる(=1バイト目の転送が終わってから2バイト目の送信をはじめる)ように、次のようなコードにするのがよいか。ただし(***)のwhileは省略できるはず。

while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY));
TX8_PutChar(d1);
while(!(TX8_bReadTxStatus() & TX8_COMPLETE)); 
while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY)); // (***)
TX8_PutChar(d2);
while(!(TX8_bReadTxStatus() & TX8_COMPLETE)); 

1バイト送信を次のように1つの関数にまとめるときは、上記のような方法が使えないので、悩ましい。

void PutChar(BYTE d){
  while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY));
  TX8_PutChar(d);
}

現時点では、効率は悪いが次のように1バイトごとに送信完了をチェックする方法しか思いつかない。

void PutChar(BYTE d){
  while(!(TX8_bReadTxStatus() & TX8_BUFFER_EMPTY));
  TX8_PutChar(d);
  while(!(TX8_bReadTxStatus() & TX8_COMPLETE)); 
}

12/10/26: PSoCの受信割り込みまでにかかる時間

RX8のデータシートによると、RX8受信割り込みがかかる(=RX_REG_FULL=1となる)のは、Stopビットの中央(=ビットクロックの立ち上がり)。 受信割り込みがかかってから実際に割り込み処理がはじまるまでの時間を計測してみた。

TN8emg1.png
TN8emg2.png

下の緑がRXDで、0x00を受信したところ。つまりその立ち上がりがStopビットのはじまり、ということになる。9600bpsなので、1bitの時間は約104usなので、ここから52usのところで受信割り込みが発生していることになる。上の黄色が受信割り込みルーチン内でI/OポートをLにしている波形なので、この立下りが割り込み処理がはじまったところ、と考えてよい。これをみると、割り込み発生→割り込み処理開始、までのレイテンシはほとんど無視できると考えてよさそう。ただし上の2つの波形のように、10us程度のばらつきがあるようだ。この緑の波形はRXD端子で、RX8内ではビットレートの8倍のクロック(この場合の周期は104us/8=13us)に同期して動作するため、RXD端子の信号とクロックとの同期のタイミングのばらつき、と考えると順当か。

12/10/17: iPhone(のMail)で返信したメールが文字化けする

Subjectと本文の文字コードが違う、というのが原因のことが多い模様。 「署名」にUnicodeの文字を書いておいて返信メールの本文を強制的にすべてUnicodeにする、という方法が一番簡単か。

http://mbp-osaka.com/seo-truth/column/9652/ http://blog.livedoor.jp/shby/archives/51840789.html

12/10/17: VisualC#でシリアル受信

シリアル受信割り込みを使うようにserialPort.DataReceived()を使っていると、当然ながらシリアル受信時はいつものその関数が呼ばれる。一時的に割り込みを使わずにserialPort.ReadByte()とかで読みたいときは、フラグなどを使って、DataReceived()内での受信処理をスキップさせないといけない。気づきにくいバグだった。

12/10/17: iPhoneのAPNが消えちゃう

iPhoneでいつのまにか(機内モードを設定→解除すると消えてることが多いような気がする)APNの設定が消えてることがある。 SIMロックフリー版ではよくある現象のようで、iPhone構成ユーティリティでAPNのプロファイルをつくって入れておくと大丈夫っぽい。 https://discussionsjapan.apple.com/thread/10111338?start=0&tstart=0 http://b-mobile.jugem.jp/?eid=35

12/10/11: iPhoneで共有カレンダも表示&Gmail関係設定

Exchangeでアカウントを作って、m.google.com からSyncを選んで、そこから設定できる。 http://sunny.tea-nifty.com/blog/2011/04/iphonegoogle-8a.html

ついでにここではGmail関係の設定もあって、"Send Mail As"と"Delete Email As Trash”も標準Mailアプリから使えるようになるらしい。(が、Send Mail Asがどうもうまくいかない=GmailアカウントがSenderになってしまう)

http://windswell-memo.blogspot.jp/2011/06/google-sync-for-iosmail-send-as.html

http://www.aivy.co.jp/BLOG_TEST/nagasawa/c/2011/06/google-sync.html

12/10/09: Pogoplugで使うポート

TCP/443とUDP/4365&3333あたり。

http://support.pogoplug.com/entries/20521316-pogoplug

12/10/06: FujiXerox ApeosPort-III C7600をWin7(64bit)で使う

http://www.fujixerox.co.jp/download/ こちらから機種・OSを選んでドライバ(インストーラ)をDL後、カスタム→IPアドレス(133.281.139.7)を指定して、検索しても見つからないが、そのまま次へ、を押すと、見つかって無事インストールできる模様。

12/10/06: iPhoneのプッシュ通知で使うポート

http://support.apple.com/kb/TS1629?viewlocale=ja_JP

TCP/5223(とTCP/2195&2196)を使うのでファイアウオールをあけておくこと。

12/10/05: FelicaでPCにログイン

Sony純正であった。 http://www.sony.co.jp/Products/felica/consumer/download/kazashitelogon.html

12/10/04: iPadなどでDropbox非対応だけどWebDAV対応アプリでDropboxを使うためのサービス

http://yagup.s337.xrea.com/2011/07/otixo/

12/10/03: お手軽NiCd/NiMH充電

NiCd/NiMHは定電流充電しないといけないわけだけど、定電流ダイオードを使えばとりあえず作れる。なるほど。ただし過充電などの制御は要注意。 http://since20080425.blog32.fc2.com/blog-entry-387.html

12/10/02: MATLABのコンカレントライセンスのライセンスサーバの設定

ライセンスサーバを立ち上げ(直す)るときに手順。

  1. MathWorksにログインし、Licensing Centerから新しい(サーバ用)ライセンスをactivateしてライセンスファイルを発行する。(必要ならば古いライセンスサーバ用のライセンスをdeactivateする)
  2. このあたりの手順を参考にライセンスサーバをインストールする(MATLABのDVDを使ったほうがよさそう)必要であればlmtools.exeで設定。 http://www.mathworks.co.jp/jp/help/install/ug/installing-the-license-manager-on-a-server.html
  3. 端末用ライセンスファイル(network.lic)ができていないときは、このあたりを参考に。 http://www.mathworks.co.jp/support/solutions/ja/data/1-9LC1WG/index.html?solution=1-9LC1WG

(12/10/11追記) flexlmが使うポート(27000とmlm用の指定ポート)はファイアウオールを通すように設定するのを忘れずに。また実際に使われているライセンスファイルがどれなのかも、ダイアログ等で要確認。 ちなみにmlmのポート変更(決めうち)はこちら→http://www.mathworks.co.jp/support/solutions/ja/data/1-9OM8ZP/index.html?solution=1-9OM8ZP

(15/01/21追記)mlmは27005あたりが順当。いずれもTCPをあける(たぶん双方向)。

12/10/02: USB接続サブディスプレイFTD-W71USB on Mac

このあたりを参考に、DisplayLinkドライバで、Macから認識はされるが、画面が真っ白になってしまう。 http://blog.saizo.net/?eid=827303

こちらによると、輝度が高すぎてUSB給電がぎりぎりっぽい、とのこと。たしかに輝度を落としたら問題なさそう。 http://www.amazon.co.jp/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%83%AD%E3%83%BC-7%E5%9E%8B%E3%83%AF%E3%82%A4%E3%83%89-USB2-0%E7%94%A8-%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-FTD-W71USB/dp/B001QVJ83C

12/10/01: Apple Magic Mouseのワイヤレス充電化アダプタと接触不良

これを愛用していたんだけど、しょっちゅうBluetooth接続が切れて困っていたら、バッテリの接触不良が起こりやすい、とのコメントが。接点の曲がり具合を調整してみる。

http://www.amazon.co.jp/The-Magic-Wireless-Charger-Mouse/dp/B004GCPJDQ

ついでに、Magic Trackpad用もあるようだ。

http://www.mobeetechnology.com/the-magic-bar.html

12/10/01: 着脱できるストラップ

こういうストラップを松葉紐、と呼ぶようで、着脱可能なものも製品としてあるもよう。 http://www.daioshop.jp/shopdetail/002008000002

12/09/30: WordPressでfavicon

http://the-fool.me/wordpress/customize/favicon.html

12/09/28: PDF to Keynote

iPadでプレゼン(講義を含む)とかするとき、PowerPointをiPadのKeynoteでインポートするとだいたいレイアウトがくずれる。そこでPowerPoint→PDFにしたあと、こちらのPDF2KeynoteでKeynote形式に変換すればいいか、と思ったら、説明にも書いてあるように、iPadで開けないようだ。いったんMacのKeynoteで開いてから保存しなおすとiPadのKeynoteでも開ける、とのこと。

http://www.cs.hmc.edu/~oneill/freesoftware/pdftokeynote.html

12/09/26: WMF→Inkscapeへ

基本機能でもインポートできるが、wmf2svgを使う方が確実っぽい。 http://inkscape.paix.jp/manual/basic-file.html

wmf2svgはこちらから。 http://code.google.com/p/wmf2svg/

使い方:

java -jar wmf2svg-0.9.2.jar [options...] [wmf filename] [svg filename]

12/09/25: 公開鍵の生成とか

何度やっても忘れるので・・・ http://web.kudpc.kyoto-u.ac.jp/manual/ja/login/pubkey#keygen_mac_linux

12/09/24: iPhoneでスクリーンショット

標準機能。ホーム+Sleepボタン。 http://www.iphone-quality.com/tips/screenshot/

12/09/21: MySQLのパスワードを忘れた

WordPressの設定(というか追加)に関して、MySQLのrootのパスワードを忘れてしまってどうしようと思ったが、再設定の方法があった→http://sasuke.main.jp/mysqlrootpass.html

ついでにMySQL関係をWebから設定できるphpMyAdminがなかなか便利。 http://www.dbonline.jp/phpmyadmin/

12/09/19: TimingAnalyzerでVerilogテストベンチを吐くスクリプト

TimingAnalyzerでつくった波形から、VerilogHDL形式のテストベンチをはくスクリプトを書いてみた。これをTimingAnalyzerのscript/ディレクトリに入れておき、波形をつくったあとでこのスクリプトを実行すると、script/ディレクトリ内にtest_vectors.vというファイルがつくられる。これをISEなどでつくったVerilogテストベンチ(Test Fixture)のひながたにはりつける。(もとからあるinitial文などは消してしまう)

12/09/18: 小型マグネットの会社

サンギョウサプライ。けっこういろいろある。 http://www.e-sangyo.jp/

12/09/18: XilinxISEでテストベンチ作成

昔のISE10のころはvbwという波形ファイルの生成ができたんだけど、最近はできなくなっているもよう。 http://marsee101.blog19.fc2.com/blog-entry-437.html http://marsee101.blog19.fc2.com/blog-entry-1108.html このあたりによると、慣れればVerilogHDLでテストベンチを書くのも苦ではなくむしろ便利、とのことだが、慣れるまではちょっと面倒そうな予感。

http://marsee101.blog19.fc2.com/blog-entry-1043.html こちらによると、TimingAnalyzerというアプリがあって、波形(タイミングチャート)の編集はできる模様。 http://www.timing-diagrams.com/dokuwiki/doku.php

値の入力/編集はPulseから。バス値の入力にちょっとクセがあって、Pulseで値を変えようとするとL/Hしか入らないが、Editで値を直接入力(16進数なら00、2進数なら0000、など)したあとは、PulseからIncreent/Decrementできる。

ScriptでVHDLテストベンチ形式での書き出しはできるが、スクリプトを読む限り、それほど面倒そうでもないのでVerilogHDLテストベンチ形式で書き出すのもそれほど面倒ではなさそうなので、時間ができたらやってみたいと思う。

12/09/18: SIMロックフリーiPhone4で電波強度表示

数値表示ならできる模様。 http://nanapi.jp/6319/

12/09/13: Xilinx ISEでVerilogHDLでメモリ

reg [7:0] dat[0:4];

みたいにRAMを書いて、ram[addr][b]みたいにアクセスしようとするが、どうも正しい値が返ってこない(常時0)。ram[0][b]みたいなアドレスが定数のアクセスはOKっぽい。いずれもBehaviorシミュレーションではOKだが、論理合成がうまくいかないようだ。RTLレベルの回路図をみようとしたが断念。CoreGeneratorでつくったRAMを使うのが吉か。

12/09/07: Xilinx ISEのucfが反映されない?

Xilinx ISE (14.1)で、ucfで指定しているピン配置等が、配置配線で反映されない、という現象に遭遇。いろいろ試してみた結果、ucfファイルの途中で行末コードが変わっているか制御コードが入っていたようで(ISEのエディタ画面では確認できない)、内容をEmacsにコピー→ISEで新規でつくってペースト、とすることで解消。「見えない文字」はやっかい。

12/09/07: 複数入力が同時に変化する?

FPGAに複数のタクトスイッチをつないで、コモンあり集合抵抗でまとめてプルダウン、という回路をつくったが、その動作が、1つのスイッチを押すと他のスイッチがつながっている入力ピンも同じように変化する、という現象に遭遇。オチとして、集合抵抗のコモンをGNDにつないでいなかった、というのが原因で、たしかにコモンがGNDにつながっていないと、各入力間が抵抗でつながっているだけ、ということになるので、1つの入力を変化させると他の入力も同じ電圧になる。

12/09/05: PSoCのSPIでデータが1ビットずれる?

PSoCのSPIで、MISOの受信データが、波形をみると0x40のはずなんだけど、受信したデータをみると0x20になっている(1ビットずれている)、という現象に遭遇。 SPI終了の判定をSPI_COMPLETEフラグで見ているのが早すぎるのか?とも思ったが、シフトレジスタ→受信レジスタに転送後にSPI_COMPLETEが立つので、受信レジスタの内容が受信途中なので1ビットずれている、ということはありえない。

結論として、SPIモジュールのClockSyncが空欄(たしかSYSCLK direct)になっていて、SPIのクロックが意図していたVC1とは違っていてタイミングがずれていたのが原因の模様。

12/08/30: VisuaC#でserialPortの受信をdelegateを使わずにやる

.NET Framework 3.5以降は、delegateを使わなくてもいいらしい。 http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/e412787f-586b-40ea-aa60-e6857aa44d68 (これの「2012年6月11日 13:56」のJittaさんの投稿)

→大量のデータを受信すると、受信終了時にハングっぽくなることがある(再現性低い)が、DataReceivedから受信したデータを1バイトずつInvokeしていたのが原因っぽい模様。

serialPort_DataReceived(...)
{
   ...
   n = serialPort.BytesToRead;
   serialPort.Read(buf, 0, n);
   for (int i = 0; i < n; i++) this.ReceiveByte((Int32)buf[i]);
}

これを//以下のようにbufごとまとめてInvokeして、ReceiveByte関数のほうで順番に処理する、とすると大丈夫そうな模様。

12/08/23: Macでクリップボード経由でEPSファイルをつくる

http://d.hatena.ne.jp/sxhxtxa/20090128/1233165255 こちらで紹介されている「スケッチ風ドロー」がなかなか便利そうな模様。

12/08/22: CraftROBOでペーパークラフトの折り目

いろいろやり方はあるが、「薄くカットする」というのが順当か。

http://333bankin.blog58.fc2.com/blog-entry-664.html

12/08/22: Inkscapeでベジエ曲線

どうも苦手だったけど、コツがわかった気がする。 最初の点から接線方向にドラッグし、その後マウスの移動で、その接線方向を保ったままで曲線を変えられる。 http://www.sturnus.net/inkscape/guide/line.html

12/08/22: Inkscape (Mac)でDXF出力ができない

"Fantastic LXML wrapper..."とでてDXF出力ができない件、どうもInksscape側のknown bugのようで、次のバージョンでは改善される見込み、とのこと。 https://answers.launchpad.net/inkscape/+question/146050

http://caih.org/open-source-software/fixing-inkscape-in-mac-os-x/

https://bugs.launchpad.net/inkscape/+bug/819209

12/08/20: Eagle基板データを3Dでみる

EagleUpでできる。基板そのものはけっこう簡単だけど、載っている部品まで、となると、個別に3Dモデルとつくらないといけないので、かなり面倒そうだ。

http://www.emergeplus.jp/?page_id=1318

12/08/20: WiXでインストーラ作成のエディタWiXEdit

WiX Editを使うと、インストーラの作成が楽ちん。 http://www.02.246.ne.jp/~torutk/windows/wixandwixedit.html ただし日本語の情報は少なめで、英語でもちゃんとしたマニュアルやチュートリアルはないようなので、MLなどの情報をあさるのが現実的か。

で、インストール時のUIで、Licence Agreementを出さないようにする方法がないかと調べてみたら、同じことを考えている人がやっぱりいた。 http://stackoverflow.com/questions/597025/how-to-build-a-minimal-wix-installer-ui-without-a-license-page

12/08/10: Video4Linuxでいろいろいじる

GStreamerというフレームワークが、いろいろできそう&クラスプラットフォームで便利そうな予感。 http://sourceforge.jp/magazine/03/06/16/1621207

12/08/08: Windows7で複数クライアントからリモートデスクトップ接続

termsrv.dllを直接書き換える、というのでできそうな模様。リモートデスクトップ接続中だとこのdllを書き換えできないので、コンソールから入ってxedit等で作業すべき。 http://walbrix.net/blog/2010/05/windows7.html

ついでに、コンソールでの作業だけでいいや、というとき便利なtelnet接続はこちら。http://axela5004.blog74.fc2.com/blog-entry-422.html

12/08/07: Bit Error RateをPSoCではかる

送受信したデータでのエラー率のBit Error Rate(BER)は、ビットごとのエラーを測るわけだけど、PCのUARTで送ったデータと受けたデータをバイト単位で比較するのでは、スタートビットが化けていたときに、バースト誤りになって、正しいBERは測れない。つまり、PCのUARTという1バイト単位という抽象化された(?)単位では、BERは測れない。

そこで、PSoCを使って、送信ビットと受信ビットのXNORをとって、それが1のときだけTX8のBitClockをカウントする、という手法をとってみる。TX8のBitClockは、送信データ(START/STOPビット以外)の8ビット分の間だけビットの中央で立ち上がるクロックなので、都合がよい。 こんな感じ。TX_DUTが測定したいデバイスへ送る送信ビット、RX_DUTが受信ビット、これらのXNORをとったのがCMPoutで、それを外部でCMPinにつないでCounter8の動作をコントロールする。GI/GO間の接続を使って、このCMPoutとCMPinをつなごうと考えたんだけど、どうやってもRX_DUTとCMPinが同じRIバスを使うことになってしまう(XNORのRIからの入力とXNORの出力からつながるRIが同じRIになってしまう。別の行に配置しようにも、Counter8のクロックがTX8DUTのData Clock Outとつながらないといけないので、同じ行に配置しないといけない。あれ、Counter8のクロックは、左隣のディジタルブロックからもとれるけど、これはTX8の場合はData Clock Outになるのかな?いや、そうだとしてもやっぱり同じ行に配置しないといけないので、さきほどの問題は解消されないから、CMPin/outか、DataClockOut/Counter8-ENのどちらかを外部でつながいといけないはずだ。 (12/08/07追記) PSoC TRFのp.343(17.1.13)のTX8の記述によると、ディジタルブロックで隣のブロックにつなげられる信号はPrimary Output F1なんだけど、TX8でのF1は、シリアル出力(送信データ)であって、DataClockではないようだ。残念。

PSoC_BER.png

(12/08/07追記) BitClockをいっかいGOに出して、をれをGIに戻す、という接続にすれば外部配線なしでできた。

PSoC_BER2.png

12/08/06: FacebookでつくったページにURLをつける

http://www.facebook.com/hogehoge みたいにアクセスできるようにする方法 http://www.facebook.com/notes/pawafanpeji-gou-zhu-jiang-zuo/fanpejinourlwo-bian-gengsuru/106386289435599

12/07/30: InkscapeからWord等にベクタ形式のままはりつける

http://d.hatena.ne.jp/jasmine_88/20120401/1333268128 これによると、少なくともWindowsならそのままコピー&ペーストでいけそうなんだけど、どうもうまくいかずにラスタ(ビットマップ)形式で貼り付けられてしまう。そこで、貼り付け時に「形式を指定して貼り付け」を選んで、"拡張メタファイル形式"で貼り付けしてみると、ベクタ形式のまま貼り付けられそうな模様。

12/07/27: MacのInkscapeのクリップボード

MacのInkscapeだと、Cut&Pasteでオブジェクトをコピペ(Inkscape内・他のWord等のアプリへ)するとBitmap画像になったりする。XQuartsの設定でなおる模様。ちなみにWindowsはもとから問題なし。

http://wiki.inkscape.org/wiki/index.php/FAQ_(Japanese) 「Inkscapeでコピーアンドペーストがいろいろおかしいです」

12/07/23: PCBE05がはくHoleデータの変換(補完)

PCBE05がはくドリルデータは、XやYが同じ値の穴は座標を省略する、というフォーマットになっているようだ。(例えばX0Y0のあとがX0Y10だと、Y10だけ) 基本的にはこれでも大丈夫なはずだけど、FusionPCBにこのドリルデータを送ると、ヘンなところに穴があるよ?と言われる。原因がよくわからないので、以前バージョンのPCBE04ではいたドリルデータを、Olimex向けに拡張ガーバーっぽいドリルデータに変換するプログラム(出典失念:buildx.batなど)を使って変換したドリルデータだったらOKだった。この両者を比べてみると、明らかな違いは、その同一座標の省略しかないっぽい。そこで、それを補完するawkスクリプトを書いてみた。

awk -f hole_conv.awk Hole.hol(PCBE05がはいたドリルデータ) > 変換後のドリルデータ

※(2012/09/26修正)X座標の値が6桁の行の取り扱いにミスがあったので差し替え。

ちなみに各データの例。

PCBE04のドリルデータ
↑をbuildxで変換したドリルデータ
PCBE05のドリルデータ

12/07/23: ガーバービューア

http://arms22.blog91.fc2.com/blog-entry-185.html ちょっと加工すればドリルも読める模様。

12/07/19: Macのターミナルでチルダ(〜)が入力できなくなる

なんでだ?と思ったらFAQのようだ。ターミナル内の文字コードをSJISにしていたからだった。 http://q.hatena.ne.jp/1227674929

12/07/18: Xilinx CPLD CoolRunnerIIのVauxピン

要は3.3Vを与えておけばよい。

12/07/18: WINSTAR PCB for iModelaで切削が始まらない

ガーバーを読み込んで「了解」ボタンで切削を始めようとしてもはじまらないときは、 「切り込み深さ」と「切り込みピッチ」が0になっていないか要確認。どちらかが0のときは、切削(ドリル加工も)が行われない。「切り込みピッチ」を使わない(=1回で穴をあける)ときも、切り込みピッチには切り込み深さと同じ値を入力しておく。

12/07/01: PSoC TX8の送信完了判定

TX8のデータシートによると、TX8_COMPLETE(送信完了)フラグをreadするとクリア(reset)される、とある。それじゃポーリングで送信完了を判定できないんじゃ?と思ったが、送信完了していない間はTX8_COMPLETEフラグは立っていない(0)が、送信完了したあとの最初のポーリングでの読み出しで立っている(1)のを読み出したら、そのときにフラグが0になるけど、送信完了の判定は済んでいるので大丈夫、ということになる。

12/07/17: PSoC受信割り込みにかかる時間

「11/11/22: PSoC RX8受信割り込みにかかる時間」で書いたことを忘れていた。だいたい10usぐらいかかる。500kbpsで連続受信しているときは、だいたい20us/byteなので、1倍と受信ごとに割り込みをかけるのはけっこうタイミング的にきびしい。実際、連続して受信すると、2バイト連続まではなんとかなるが、3バイト連続だと2or3バイト目を落としてしまう模様。4バイト連続だと、2or3バイト目が落ちるが、4バイト目は受信できる、といった調子。

12/07/13: Macでスクリプトと行末コード

Emacsで行末コードを、sjis-macでCRのみ、にしていたが、ターミナルは基本的にUnixなので、行末コードはLFのみ(CR+LFでも可)。したがって、Emacsで編集したスクリプト(シェルスクリプトとかawkとか)をnkf -Luで変換して実行、ということになるが、毎回それをするのは面倒なので、Emacsの行末コードをsjis-unix、またはsjis、としておくのが無難か。(スクリプトで1行目でエラー、みたいな一見謎のエラーは行末コードが原因のことがけっこうある)

12/07/13: EagleがはくガーバーをPCBEで読み込む

Eagleで設計したデータとPCBEで設計したデータを相乗りさせるときとか、相互に読み込みたいんだけど、標準機能ではどうもうまくいかない。Eagleでガーバー&ドリルをはいて、PCBEでガーバーを読み込むと微妙にアパーチャが変わっているのと、そもそもドリルを読み込む機能がない。 というわけで、変換スクリプトを自作。

  1. Eagleでガーバーとドリルデータを出力 http://www.piclist.com/images/www/hobby_elec/eagle44.htm
  2. ./e2p_conv.sh ????? で変換(????は設計データのファイル名)→????.pcbができる ※制限事項:八角形のアパーチャは円に変換。アパーチャのサイズは、1mm未満は0.05mmきざみ、1mm以上は0.1mmきざみに四捨五入。

ちなみに参考にしたガーバーのコマンドのリファレンス:http://www.gitc.pref.nagano.lg.jp/joho/kaisetsu/gbf_s.pdf

※(12/07/31追記)長方形アパーチャに対応していなかったのを修正して差し替え。 ※(12/08/01追記)D01コマンドの解釈を少し間違えていたので差し替え。(フラッシュ→描画、のときにフラッシュの座標から描画をはじめるのが正しい) ※(12/08/01追記)座標が4桁の場合の変換にミスがあったので差し替え。

12/07/13: PSoC MiniprogがMINIProg1/1となって書き込みができない

FAQのようだ。自動的にFWが更新されるので、少し待って抜き差しすればよい、とのこと。 http://www.facebook.com/note.php?note_id=61909342625

12/07/10: VMwareの仮想マシンをParallelsに移行する

一筋縄ではいなかなそう。 http://do-gugan.com/~furuta/archives/2010/12/vmware_fusion_3.html

12/07/10: Meadow(Emacs)の微調整

起動時にタイトル画面を表示させない、などなど。

http://d.hatena.ne.jp/SiyaF/20081226/1230272251

12/07/09: VisualC#でtextBoxでEnterを押したら処理

textBoxのKeyPressイベントで、e.KeyCode (or e.KeyChar)がKeys.Enterかどうかで判別できる

http://jeanne.wankuma.com/tips/csharp/form/cobolerform.html

12/07/07: SeeedStudio NFC ShiledでFelicaを読む

SeeedStudioのNFC ShieldでFelicaを読んでみた。 ライブラリPN532.cppが、ほとんどMiFARE決めうちの書き方をしているので、いろいろ書き換えないといけない。

具体的には、例えばカードを読むreadPassiveTargetID(uint8_t cardbaudrate)は、パケット構造がMiFARE決めうちに書いてあるので、例えばFelicaならば次のようなパケットにして、cardbaudrare=1 (Felica 212kbps)で、バイト数をあわせて書き込めばよい。

   pn532_packetbuffer[0] = PN532_INLISTPASSIVETARGET;
   pn532_packetbuffer[1] = 1;  // max 1 cards at once (we can set this to 2 later)
   pn532_packetbuffer[2] = cardbaudrate;
   pn532_packetbuffer[3] = 0x00;
   pn532_packetbuffer[4] = 0xff;
   pn532_packetbuffer[5] = 0xff;
   pn532_packetbuffer[6] = 0x00;
   pn532_packetbuffer[7] = 0x00;
   if (! sendCommandCheckAck(pn532_packetbuffer, 8)) // for Felica

12/07/06: Win7で"Who Locks Me"

WinXPまでだと、何かのアプリが使っていて削除などをできないファイルに対して、どのアプリがロックをしているのかを調べる"Who Locks Me"というのがあったけど、Vistaから使えない。 で、代替ソフト。 http://suiseidreaming.blog45.fc2.com/blog-entry-7.html

12/07/06: インストーラの作成

VisualStudioだと、作ったプログラムをインストールするためのインストーラ(*.msi)をプロジェクトとしてつくることができるが、VisualC# Expressなどではできない。

そこで、オープンソースのインストーラ作成ツールWiXを使うとよさそう。

http://takuan93.blog62.fc2.com/blog-entry-29.html

実行ファイル(*.exe)のインストールだけなら、これですぐに作れそう。 [#oeab06e3]

ただ、.NET Frameworkが必要なプログラムだと、再配布版.NET Frameworkをインストールするように促したり(or自動でインストールしたり)したいわけだけど、それでもできることはできそうだ。まだ詳しく読んでないけど、とりあえず。 http://www.softark.net/wix/lesson05.html#CH-5.1 http://cml.s10.xrea.com/ej/WiX/install_dotnet.htm

12/07/06: Winで開くプログラムを選べない

プログラムのインストール/アンインストールを繰り返していると、ファイルを開くプログラム、としてそれを選べなくなることがある模様。レジストリをいじることになる。 http://okwave.jp/qa/q1788671.html

12/07/06: 新PC(Win7/64bit)でUSBの挙動がおかしい

新PC(Win7/64bit)で、どうもUSBの挙動がおかしい。 FT232を挿しても、デバイスドライバではCOMポートがあるのに、TeraTerm等でリストに出てこない&開けない、ドライバを更新しようとするとハング、など。PCをリブートするとなおる。 で、マザーボードの型番+USB、あたりで検索してみると、似た症状の人がいて、PCがSleepから復帰するとUSBデバイスが使えなくなる、とあって、どうもビンゴっぽい。USB3.0対応のチップセットなので、そのあたりのドライバのバグっぽい雰囲気。

結論として、BIOSやUSBホストのドライバなどを最新のものに更新したら、大丈夫っぽい雰囲気。

教訓:初モノに注意&とりあえずもろもろ最新に更新すべし

12/07/04: レーザーカッター(LaserWorks VLS3.50)のパラメータ

2mm厚のアクリル板だと、出力100%・速度5.3%(標準)ぐらいがちょうどいい。 小さい穴をあけるときは、出力30%・速度30%〜5%ぐらいが順当か。

(12/08/08追記)PPI(パルス/インチ)は1000ぐらいがよさそう。ちなみにPPIは、レーザーを出す間隔。標準の2インチレンズだとレーザービーム径0.127mmなので、PPI=1000だと0.0254mmごとなのでかなり重なる。PPIが大きいほど素材に熱がたまりやすいことになる。普通の切断であれば、材料と厚さを選ぶと設定される標準パラメータでだいたい大丈夫そう。

12/07/04: Windows7でキーリピート間隔の変更

http://pc-kaden.net/log/eid130.html

12/07/04: Arduinoのdefine(__ATmega??__)

ATmega2560用のライブラリを書いていて、ところどころにdefine(__ATmega2560)を条件としてコードを書いていたんだけど、ピン互換のATmega640に書き込んでみたら(ArduinoIDEでATmega640ボードを使うように選択して)、動作がおかしい。と思ってよく考えたら、define(__ATmega640)を条件として加えておかなければいけないことに気づいた。あたりまえといえばあたりまえ。

12/07/03: PowerPoint (2010 Mac)で既定のテーマを設定する

PowerPointヘルプによると、テーマを「別名で保存」するときに「既定のテーマ.thmx」というファイル名で保存すると、それが既定となるらしい。ヘンな仕様。

12/07/03: VisualC#で画像を別ウインドウで開く(続)

昨日の続き。別ウインドウ上のコントロールを制御するのに、とりあえずで一番楽なのは、その別ウインドウのフォーム.Designer.csに書いてある、そのコントロールの属性をprivateからpublicにする方法か。

http://vsug.jp/tabid/63/forumid/45/threadid/9186/scope/posts/Default.aspx

あとpictureBoxに自分で作った画像を表示させる手順は、Bitmapクラスの実体をつくって、pictureBox.Imageをbmpにする http://homepage3.nifty.com/midori_no_bike/CS/graphics.html

ついでに、そのBitmapクラスの実体をいじるときは、BitmapDataReadWriteでUnlockして中身をいじり、最後にUnlockする。(Unlockした時点で、元のbmpに書き戻される)

http://xptn.dtiblog.com/blog-entry-99.html http://social.msdn.microsoft.com/Forums/ja/csharpexpressja/thread/cb586cbf-4c06-49af-8d6e-077466ee2b7a

(おまけ)VisualC# Expressで、Consoleで出力される「出力ウインドウ」の出し方(なぜかデフォルトで表示されないようになっている)は、「デバッグ」→「ウインドウ」→「出力」

http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/bb65e3a7-4f68-43db-8ee4-3fe677bfb9ea/

(おまけ)乱数のつくりかた http://dobon.net/vb/dotnet/programing/random.html

(おまけ)平方根の求め方。Math.Sqrt()を使う。(どうもこの書き方になかなか慣れられない) http://www.atmarkit.co.jp/fdotnet/dotnettips/691squareroot/squareroot.html

12/07/02: VisualC#で画像を別ウインドウで開く

画像読み込みはBitmap型変数をnewで作るときにファイル名を指定すればOK。 http://dobon.net/vb/dotnet/graphics/imagefromfile.html

で、開く別ウインドウは、元ウインドウとは独立に動いてほしい(別ウインドウを表示したあとも元ウインドウを操作したい)ので、いわゆる「モードレス・ダイアログ」として開けばよい。 要は、別のFormをWindowsフォームとして追加しておいて、そいつをnewでつくって。.Show()すればよい。 http://www.atmarkit.co.jp/fdotnet/dotnettips/139dialog/dialog.html

で、その別ウインドウへの画像の表示は、ちょっと一筋縄ではいかない。

まず読み込んだBitmap型変数の中の画素の値を参照するのは、GetPixelだと異様に遅いので、unsafeでポインタを使うのが、まだましか。 http://blog.moro-tyo.net/2006/10/post-6.html

これで取得した画素の値を別ウインドウに表示させるのは、このあたりの方法を使えばよさそうだけど、まだ理解しきれていないので、今度。

http://vsug.jp/tabid/63/forumid/-1/threadid/4495/scope/posts/Default.aspx http://dobon.net/vb/dotnet/form/accessanotherformdata.html

12/07/02: PSoCでロータリーエンコーダをカウント

PSoCでロータリーエンコーダ( http://elm-chan.org/docs/tec/te04.html )をカウントする方法を調べてみる。 定番としては、A相とB相のどちらかで割り込みをかけ、もう一方の0/1でカウントup/downする、という方法だけど、そもそもCPU性能が低いPSoCではあまり得策ではない。

で、こんな方法を発見。 http://bluefish.orz.hm/sdoc/bb_psoc.html#ロータリーエンコーダ

要はカウンタを2つ(up用とdown用)用意して、A相とB相を、ClockとEnableに接続(upとdownで逆に)することで、回転方向に応じてどちらかのカウンタの値が変化(PSoCのカウンタはダウンカウンタなので、値は減る)するので、その差をとろう、という方法。なるほど。あたまいー。

12/07/02: Windows7のタスクスケジューラでバッチファイルを実行

http://blogs.wankuma.com/rapt/archive/2010/04/22/188276.aspx ここを参考に、実行ディレクトリを指定した方がよさそう。 あと、2回目以降、なぜかcmdプロンプト画面が開かないことがあるようで、pauseでデバッグもできないことがあった。一度タスクを削除して、もう一度つくりなおしたらOK

12/07/02: Emacs/MeadowでSpaceで補完できるようにする

Emacs22からはTabで補完、がデフォルトらしいが、Spaceで補完、も設定できる。 http://blog.sociono.net/?cid=8845

12/07/02: Windows7でデバイスマネージャへのショートカットをつくる

http://windows7faq.net/2009/11/post_10.html

12/06/28: Excelで行/列の追加

行/列の全体を選択したあとで、Ctrl-"+"で追加できる。

12/06/27: Windowsのいろんな解凍DLLをまとめてインストール

http://www.kmonos.net/lib/caldix.ja.html

12/06/27: VisualC#で使用可能なCOMポートの羅列

こんな方法で可能。 http://rapislazuli.dyndns.org/d/20101225.html

ただしFTDIのVCPドライバは若干クセモノの模様。 http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2Favrdude36

12/06/26: Windows7をUSBメモリからインストールする

ISOイメージからインストール用USBメモリをつくるMicrosoft純正ツールがある、とのこと。 http://www.atmarkit.co.jp/fwin2k/win2ktips/1248win7usb/win7usb.html

ただし64bitOSのブートディスクは32bitOSからは作成できない。 http://wiki.livedoor.jp/kou1okada/d/Windows7%20%A5%D9%A1%BC%A5%BF%C8%C7

bootsect.exeさえあればブートローダを打ち込める。 http://wiki.livedoor.jp/kou1okada/d/Windows7%20%A5%D9%A1%BC%A5%BF%C8%C7

12/06/26: VisualC#等でToStringで型指定

s.ToString("X"); とすると16進数標記の文字列が得られる、などなど。

おまけ:byte型変数の値をASCIIコードとして対応文字への変換:char型にcastしてToString()する http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29500&forum=11

12/06/23: ArduinoLeonardとATmega32U4のピン配置

かなり変態的。

LeonardATmega32U(other function)
D0PD2RX
D1PD3TX
D2PD1SDA
D3PD0SCL
D4PD4ADC8
D5PC6
D6PD7ADC10
D7PE6
D8PB4ADC11
D9PB5ADC12
D10PB6ADC13
D11PB7
D12PD6ADC9
D13PC7
A0PF7ADC7
A1PF6ADC6
A2PF5ADC5
A3PF4ADC4
A4PF1ADC1
A5PF0ADC0

12/06/19: JAISTにあるレーザー加工機(LaserWorks VLS3.50)のメモ

  • CorelDrawで読み込み。カットしたい線の線幅を「極細線」に変更。色はRGB系で黒or青or赤に。(青と赤がベクトル形式(線を切る)にできる。黒はラスター(塗りつぶし)のみ?)※PostScriptなどを読み込んだ状態ではCMYK系になっているようなので、RGB系で新規にファイルをつくってコピペする。
  • CorelDrawから「印刷」を選ぶ。その後は、VLSの制御画面へ。
  • カットする素材を選ぶか、「手動設定」で、黒/青/赤の各線をどのような設定でカットするかを設定する。主な設定パラメータは、レーザー出力(0〜100%)を移動速度(0〜100%)。Z軸調整はOFFでよさそう。
  • 素材をセットしたら高さあわせ。付属の高さあわせ器の白色の切り欠き上部がレーザーのヘッドの赤い本体の下端にあうように。印刷制御画面で「基本図面」を選んだ状態で、本体の上下矢印ボタンでステージの上下を動かすのが便利。
  • 吸引器の電源をON(本体脇の電源をONにしてフットスイッチ(?)をONにする)
  • たまにレンズを掃除した方がよい。付属のクリーナー液と綿棒で。

12/06/19: Sony NEX-C3のシャッタースイッチ

分解してみたのでメモ。スイッチのすぐ横に半田が盛ってある端子があり、そこから線を引っ張り出しやすい。半押しで、コモン−半押し間が導通、長押しで、コモン-長押し間が導通。

NEX-C3_SW.jpg

12/06/15: MacOS(Lion)でUSB-RGB/D2

DisplayLinkのalpha版ドライバでいける、とのこと。 http://ameblo.jp/kurabeat/entry-11250448559.html

12/06/14: ハロゲンスポットヒーターでリフロー

http://www.inflidge.co.jp/products/lcb-50/index.html こちらのLCB-50で、印加電圧を6Vぐらいにすると、5秒くらいではんだがとける。だいたいとけたら印加電圧を下げておしまい。すごく早くできれいにできる。

12/06/14: ポリプロピレン紙+CraftROBOではんだマスク

スイッチサイエンスで売っているポリプロピレン紙( http://www.switch-science.com/products/detail.php?product_id=822 )をCraftROBOで切ってはんだマスクをつくってみる。 こちらを参考に、PCBE→pcbe2outlineで枠線化→2回なぞるようにコピー→ガーバー出力→NCコンバータでDXFへ、として、品質:1、紙:33の設定でカット。

カット自体はそこそこうまくいく。セロハンテープでおおむねはがせるが、残った部分はカッターやピンセットで抜く。 ところがクリームはんだをぬってみると、ヘラで少し強く押し付けると、ポピプロピレン紙のマスクが破れそうになってしまう。意外と弱い。あまり強く押し付けてはだめなようだ。

12/06/13: ATmega640のArduinoブートローダ(stk500)

ただdefined(__AVR_ATmega640__)を追加していけばいいんだろう、と思っていたら、そんなに甘くなかった。ATmega640を指定してmakeすると、アセンブル時に"illegal opcode elpm"というエラーが出る。なんじゃそりゃ?と思ってみたらら、ATmega640(ROM:64KB)とATmega1280(128KB)・ATmega2560(256KB)では大きく違っていて、ブートローダ関連のelpmという命令(!)が、ATmega640には存在しないらしい(ATmega640/1280/2560のデータシートに書いてある)。どうもROMサイズが64KBだとポインタが16bitに収まるで、128KB以上だと16bitを越えるのでページ切替がいるから、みたいな理由の模様。 http://www.societyofrobots.com/robotforum/index.php?topic=8448.0

というわけで、いろいろ調べた結果、Optibootのソースコードを参考に、

pgm_read_word_far(addr);

という関数を、

pgm_read_word_near(addr);

に書き換えることで、elpmという命令を使わないようにできるようだ。stk500boot.cを見ると、例えば

#if defined(RAMPZ)
  data = pgm_read_word_far(address);
#else
  data = pgm_read_word_near(address);
#endif

となっているので、 RAMPZというシンボルをdefineすることでこの切替をできそうなもんなんだけど、どうもうまくいかないので手動で書き換えて、コンパイル&書き込み&ArduinoIDEからの転送がうまくできた。

12/06/13: ディスポ電極の構造

http://www.nihonkohden.co.jp/iryo/point/dispo_electrode/type.html 基材もゲルも両方が粘着ゲル、というのが、はりなおしも効いていい、ということか。

ついでに、電極と皮膚との接触部分の話。 http://motor.geocities.jp/ysuga0731/robot/technique/codewarrior/emg_fft.htm

12/06/06: MacのInkscapeでdxf出力

lxmlがいる、というエラーが出るが、その対処方法: http://nanitsuku.blogspot.jp/2011/12/macinkscapedxf.html

12/06/06: Arduinoシールド+ブレッドボード

そういう製品がありそうだなあ、と思ったら、フツーにぴったりサイズがあうようだ。 http://d.hatena.ne.jp/OkibiWorksLabo/20100504/breadboard

12/06/05: AVR Studioの書き込みツール(Progamming)でヒューズビットの指定

BODとかCLK8とかの各フラグのチェック/アンチェックを個別に指定もできるが、Arduinoファームウエア書き込みの時のように、結果としてヒューズビットの値(HIGHとかEXTENDとかLOWとか)の値がわかっている場合は、下の方にある各ヒューズの値を16進数で直接入力できる。(それにあわせて各フラグの状態も変わる)

12/06/04: RDPで1つのサーバに複数クライアント接続

http://kitahei.cocolog-nifty.com/youyou/2007/07/windows_xp_ece3.html

似てるけどクライアント側で複数サーバを切り替えるのはこちら。 http://www.rep1.co.jp/staff/tech/windows/rdp_wt_-windows_tips-.htm

12/05/30: Canon EOS Utilityのダウンロード&インストール

付属CD-ROMからインストールしたあと、アップデートをかけられるが、 付属CD-ROMをなくしてしまうと、どうしようもない。 と思ったら、こんな方法で「インストールしてあること」にすればダウンロード後に新規インストールできるようだ http://www.dfguo.com/?p=24

12/05/27: Mac(Lion)でF5 FirePassでVPN

金沢大のVPNはF5 FirePassだが、MacOSX Lionでは動作しないようだ。 https://discussions.apple.com/thread/3192517?start=0&tstart=0 このあたりをたどっていくと、こんなスクリプトを発見。 https://fuhm.net/software/f5vpn-login/ これで無事VPS接続できた。

sudo make install

後、

f5vpn-login username@fp01.kanazawa-u.ac.jp

でいける。2回目からは引数は不要(前回のsessionのユーザ名・ホスト名が使われる)

sudo ln -s /usr/bin/f5vpn-login /usr/bin/vpn

のようにシンボリックリンク(ショートカット)を作っておくと起動が楽チン

12/05/23: Brother複合機のNetScanで使うポート

FW越しの場合に開けるべきポートはUDP/54925 http://solutions.brother.co.jp/support/html/mfc7820n_jp/doc/html/body/mfc-39-09a.html

12/05/08: レンズを使わない光学系

ファイバオプティクプレート(FOP)というのがある。原理はファイバースコープみたいなもの。 http://jp.hamamatsu.com/products/other/pd021/index_ja.html この延長で行けば、空間の1点からの等方的に発せられている光を、撮像素子上の1点にのみ集めることができるような気がするけど、どうなんだろう。とりあえずこのFOPを1個サンプルで買えないか問い合わせてみる。

12/05/07: PSoC1でArduinoもどき

PSoC1でなにかシステムを作るとき、プロトタイプを作りやすいように、外観がArduino互換のボードを作る、というのは、なかなかいい案のような気がしてきた。 ArduinoShieldでPSoC5が載っている、というのはやっている事例がある。 http://www.cypress.com/?app=forum&id=2233&rID=59733 http://www.egr.msu.edu/classes/ece480/capstone/fall11/group01/#about ArduinoShieldが載るPSoC5ボードは既にある、同じもののようだ。https://pachube.com/feeds/39657 名前もズバりPSoCduino。まんま。(ECE480というのは授業のチームの名前?)ただ、少なくともPSoC1はなさそうだ。

シリアル経由でPSoC1にプログラムを書き込むという事例はここにあった。 http://jm7muu.com/index.php?PSoC%2FBootloader

フリーのコンパイラを使えばArduinoIDEみたいなのを作れるかな?と思ったけど、周辺をいじらないといけないのでPSoC Designerを使うのがよさそう。setup()とloop()を使うArduinoソースの流儀に変換するラッパーだけつくればよさそう。(いらんか)

12/04/24: VisualC#で一定時間ウエイト

System.Threading.Thread.Sleep(x); でxミリ秒ウエイト。 http://d.hatena.ne.jp/shikaku/20080714/p3

12/04/24: Office2010などで「リボン」じゃなくて昔風の「メニュー」を使う

どうもリボンUIには慣れられないなあと思っていたら、やはり同じような向きは多いようだ。アドオンで昔風の「メニュー」を使えるようにするアドオンがあった。http://e-website.org/archives/2011/05/tips-office-201.html http://www.ka-net.org/ribbon/ri10.html

Mac用はないのか?と思ったが、よく考えたらMacのOfficeは、リボンとは別に、上に昔風のメニューが出ているんだった。

12/04/23: ホットエアでのQFN等実装の温度調整の方法

http://www.koetec.com/blog/?p=32 なるほど。熱電対に直接エアをあてて温度をキャリブレーションしている。

12/04/17: VisualC#のTrackBarコントロールの更新タイミング

ValueChangedイベントは、スライダを動かすたびに発生する。たしか昔のSliderBarコントロールでは、スライダの移動が止まって少したってから発生する、というイベントがあったような記憶があるんだけど(あいまい)、TrackBarでも、MouseUpイベントならば、スライダの移動が止まったとき≒マウスをはなしたとき、をとらえられる。

12/04/17: マグネットコネクタの接触

デバッグ用にUART通信をマグネットコネクタ経由でみていたのだが、ときどき、変わるはずのない変数の値の変化がおこり、原因をさぐってみたら、コネクタの接触がグラグラしていて、ときどき0x00とか0x80とかの値が送られて(送信されて)いて、その値をマイコン側で受信して変数の変化をさせている(そういうプログラムを組んであった)、というのが原因だった。てっきり、変わるはずのない変数が変わっているからコンパイラのバグかとうたがっていたが、もっと身近なところに原因があった、というオチ。

12/04/16: Macで作ったファイルをWindowsから見るとみえる「._」からはじまるファイル

「カタログファイル」というもの。開くアプリの関連付けとかの情報を記録している。基本的にはWindowsでは使わないので消しても大丈夫・・・ということのようだ。(またMacで作られる) http://q.hatena.ne.jp/1216437586

12/04/13: スイッチの極数の表記

なかなか覚えられないので備忘録。 http://en.wikipedia.org/wiki/Switch

  • SPDT = Single Pole Dual Throw : 1回路のトグルスイッチ。CがAかBのどちらかにつながる。
  • DPST = Dual Pole Single Throw: 2回路のON/OFFスイッチ。A-BとC-D間がONかOFF。

つまりPoleが回路(スイッチ)の数、Throwがスイッチあたりの接点の数、ということ。

12/04/13: ネジの小売りサイト

https://neji-speed.com/ns/start

12/04/11: PSoCの256バイト以上のRAM

PSoCにはRAMが256バイト以上あるものがあるが、標準のCコンパイラでは、配列でまとめて256バイト以上を扱えない。つまり、BYTE x[500];とかはできない。 ただし、以下の方法でRAM中の絶対アドレスを指定することで、いわゆるラージ・メモリ・モデルとなり、256バイト以上も扱えるようになる。

#pragma abs_address:0x100
BYTE d[1024];
#pragma end_abs_address

ちなみにRAMの0x100〜はバンク1。バンク0とバンク7(最終バンク)はそれぞれデータ用とスタック用だが、これら以外は配列などに使うことができる。バンクをまたがった256バイト以上の連続した配列などでも大丈夫。

12/03/29: PukiWikiでYoutube動画をはりつける

http://centromezzo.sakura.ne.jp/wiki/?PukiWiki%2FYouTube%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3

12/03/29: Windowsでネットワークドライブ(Samba)への別アカウント接続

1つのSambaサーバの別ボリュームに対して、それぞれ別のアカウントで接続、というのは、どうもできないようだ。(Sambaサーバ1つに対して1つのアカウント。2つ目以降は、1つ目と同じアカウントしか使えない)net useコマンドで接続しようとしても、そのようなエラーになる。(ちなみにMacでは↓の方法でできる)

12/03/28: Inkscapeで円弧/扇形を描く関連

Ctrl+ドラッグで、15度ごとに円弧/扇形の角度を設定。Shift+クリックで、円(楕円)に戻す。 http://inkscape.paix.jp/manual/drawshape-arc.html

ちなみに2つの円を描いてパス→差分、で真ん中が抜けたドーナツ型になる。 http://www.sturnus.net/inkscape/guide/bucket.html

12/03/27: PukiWkiの認証時のメッセージ

パスワードをページごとに保存できるように、認証時に出てくるメッセージ(デフォルトでは'PukiWikiAuth')を変更したほうがいい。 ja.lng.phpの「$_msg_auth」に、'PukiWikiAuth'のように書かれているので、これをページごとに変えればよい。

12/03/27: Apacheのユーザディレクトリ(~/public_html)でPukiWikiとかPHPを動かす

標準では、ユーザディレクトリではPHPを実行できないようになっているようなので、/etc/apache2/mods-enabled/php5.conf中のコメントに従って、指定箇所をコメントアウト(してapache2を再起動)すればOK http://blog.livedoor.jp/kimura_khs/archives/cat_50051532.html http://ohhappy.org/blog/linux/533.html

12/03/27: ATmega328とATmega328Pの違い

http://urasandesu.blogspot.jp/2010/02/eclipse-arduino-01.html によると、PがLow Power版(あとは違いはSignatureぐらい)、ということらしいが、何が違うんだろう。製造プロセス?データシートをみると、たしかに少しだけPのほうが消費電力が小さいようだが、動作速度vs電源電圧などは、同じようだ。

12/03/27: Mac(Lion)でsambaサーバに特定ユーザ名で接続する

Finger→サーバに接続、で、"smb://ユーザ名@サーバ名/共有フォルダ名"と書く。(初回はパスワード入力を求められる)

12/03/25: ArduinoUnoのブートローダ

ATmega328を使っているいろいろなArduinoで、boards.txtに書いてあるブートローダが arduinoのものとoptibootのものがあるようだが、optibootというのは arduino互換のコンパクトなブートローダ、ということらしい。 http://arms22.blog91.fc2.com/blog-entry-380.html

12/03/25: Eagleで基板設計するときに使うレイヤ

http://www.technoveins.co.jp/develop/eagle/layer.htm

主なものはこんな感じ。

  • Top : 部品面パターン(裏面実装SMDでもこのレイヤでひき、設計時にMirrorして裏面に配置する)
  • Bottom: 半田面パターン
  • Pads, Vias: パッドとビア
  • tPlace/bPlace: 部品面/半田面シルク(図形用)
  • tNames/bNames: 部品面/半田面シルク(部品番号)※出力時にtNameレイヤをシルクデータに出力した場合印刷
  • tStop/bStop: 部品面/半田面レジスト(レジスト禁止位置)
  • tCream/bCream: 部品面/半田面のSMD用クリーム半田
  • Drills: スルーホール用穴  
  • Holes: 非導通穴  
  • Milling: 基板外形

12/03/24: ATmegaの/RESETピンをIOピンとして使う

ATmega328Pなどでは、ヒューズビットのRSTDISBLを1にすることで、 /RESETピンをIOピン(PC6)として使うことができるが、 これをセットしてしまうと、いわゆるISPでは書込ができなくなる。 (ISPは、/RESETピンとSPIで書込をする方法)

で、ATmegaのデータシートを読むと、ATmegaの プログラム書込方法には、AVRISPmk2などを使うISPモード以外に、 「パラレルモード」と「高電圧シリアルモード(HVS)」というのがあり、 それぞれ専用の書込機や自作ハードで書込ができるが、 HSVはピン数の少ないAVRしか対応していないものが多い。 実際、ATmega328Pのデータシートを読むと、 パラレルモードでの書込と通常ISPモードでの書込、しかできない。

パラレルモードでは、PortB, PortC, PortDのピンを使って パラレルで書込をする方法で、16本近いピンを使う。

従って、ATmega328Pで/RESETをIOピン(PC6)として使うように RSTDISBLヒューズを書き込んでしまうと、シリアルで書込をする方法は なくなる。

http://www.geocities.jp/altshibabou/etc/avr_checkds.html

http://119.245.187.76/app-def/S-100/acchorike/index.php?ATmega

http://sfukuda.at.webry.info/201005/article_5.html

http://elm-chan.org/works/avrx/report.html

12/03/23: Creative Commonsライセンス

こんなの。 http://creativecommons.jp/licenses/

12/03/23: Eagleで回路図

基本的な使い方はこのあたり。 http://home.h08.itscom.net/albatros/webshop/eagle_f.html

ちなみによく使いそうな部品で、ぱっと見どこにあるかわからないもの:100milピンヘッダ=con-lstb、 半田ジャンパ=jumber

使いたい部品がライブラリにないと難儀をするわけだが、他の回路図/基板で使われているならば、その設計データの部品をライブラリに抜き出して、それを自分の設計から使う(Library->Use)、というテもある。 やり方は、このあたり(exp-project-lbr.ulpを使う)。http://pc.watanet.com/?p=621 例えば:

それか検索してみると、ちょくちょくひっかかる。 例えば:

似てるんだけどビンゴの部品がない場合は、似ているやつに微修正を加える。 微修正はこのあたりとか。 http://www.picfun.com/Eagle/Eagle33.html http://www.picfun.com/Eagle/Eagle34.html http://www.piclist.com/images/www/hobby_elec/eagle11.htm http://www.piclist.com/images/www/hobby_elec/eagle12.htm

12/03/21: Fritzingでカスタムパーツをつくる

http://www.geocities.jp/zattouka/GarageHouse/Tool/Fritzing/MakeParts/MakeParts.htm

12/03/21: Arduinoのピン番号とDDR/PORTレジスタとの対応

やっとつながって理解ができた。 http://garretlab.web.fc2.com/arduino/inside/arduino/Ardino.h/digitalPinToPort.html http://garretlab.web.fc2.com/arduino/inside/arduino/wiring_digital.c/pinMode.html

このあたりの情報を総合すると、 /(arduino)/hardware/arduino/core/arduino/Arduino.h /(arduino)/hardware/arduino/variants/pins_arduino.h あたりの情報でつながっている。Arduinoのピン番号とATmegaのポート/ピン番号の定義は、pins_arduino.hでのport_to_mode_PGM[]やdigital_pin_to_port_PGM[]などから決まる。

12/03/18: SeeedStudio SDLoggerの書き換え

元はOpenLog (https://github.com/nseidle/OpenLog/wiki )で、 https://github.com/nseidle/OpenLog/wiki/Flashing-Firmware からリンクのある https://github.com/nseidle/OpenLog/zipball/master から最新版FWをとってくると、OpenLog_v3というのがあって、ArduinoIDE1.0でコンパイルできるようだ。 というわけで、SDLogger用にMCUやF_CLK(ArduinoIDEからBoardをSDLoggerに)選んでを指定してコンパイルすればよさそうな模様。

SDLoggerの書込速度向上のために、水晶を上限の20MHzに交換してみたが、それにあわせてF_CLKを設定してコンパイルして書き込みたいところだが、ブートローダの転送速度も、標準の57600bpsから、この水晶の交換にあわせて変わっているので、boards.txtに書いてあるブートローダの転送速度を変えればよさそうなものだが、実行環境によってはシリアルの転送速度を半端な値(例えば水晶を14.7456MHzから20MHzに交換すると57600bps×(20MHz/14.7456MHz)=78125bpsとなる)に設定できない(転送時にIDEでシリアル設定に失敗する旨のエラーが出る)ので、ブートローダそのものを、F_CLKを変更して再コンパイルするべき。

SDLoggerのブートローダは https://github.com/magnuskarlsson/SDLogger のboot644から。 make sdloggerに、SDLogger用のブートローダの設定(MCUやF_CLKなど)が書いてあるので、これを書き換えてmakeする。 が、WinAVRを入れてあるのだがEEWEがundeclaredだ、というエラーが出る。 https://groups.google.com/group/nycresistormicrocontrollers/browse_thread/thread/bb42e0a52b8cea1c?pli=1 によると、EEWEビットはEEPEビットと同義、のようなので、とりあえずATmegaBOOT.cのEEWE(一カ所)をEEPEに書き換えればコンパイルは通る。これをAVRISPmk2で書き込めばいいのかな。

12/03/16: Arduinoの自作ライブラリ/自作ハード設定

/Arduino/libraries/ や~/Arduino/hardware/(ボード名)/boards.txt においておけば、ArduinoIDE起動時に読み込んでくれる。ちなみに、~/Arduino の場所は変更できるので、Dropbox内とかに置いておくといろんなところから共用できる。 (12/03/16追記)board.txtをこれらの場所に置いておくと、コンパイル時にArduino.hが見つからない、というエラーが出るようだ。なんで?ちなみに??.build.variantを=standardなどに指定しておかないと、pin_arduino.hが見つからん、というエラーが出るので、variantを指定しておくべき。

12/03/16: OpenCVSharpでグラフ描画

こんな感じでいけるっぽい。

  1. OpenCV(現時点では2.3が無難:2.3.1はDLLが読み込めないというエラーがでる?)をインストール http://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/
  2. OpenCVSharp(2.3用)を入手 http://code.google.com/p/opencvsharp/
  3. VisualStudioで新規のWindowsフォームアプリケーションをつくり、OpenCvSharp.dllとOpenCvSharp.UserInterface.dllを参照に追加
  4. ツールボックスに、PictureBoxIplを追加する http://d.hatena.ne.jp/Schima/20090903
  5. グラフ描画領域を、フォームに、PictureBoxIplを置く
  6. ソースの冒頭のusingで、using OpenCvSharp;を追加
  7. public変数でIplImage img;を宣言
  8. Initialize Componentのあとぐらいに、imgを生成
    img = new IplImage(320, 240, BitDepth.U8, 3);
  9. 図形を描画。例えばこんな感じ
    Cv.Line(img, new CvPoint(xs, ys), new CvPoint(xe, ye), new CvColor(0, 255, 0));
  10. Timerなどで、フォームのPictureBoxIplをimgで更新する。↑のチュートリアルにあるように、RefreshIplImageを使うと、初回のみImageインスタンスが生成され、2回目以降は内容の更新のみなので高速。
    pictureBoxIpl1.RefreshIplImage(img);

12/03/14: 半田マスク(ポリアセタールフィルム)

FPGA Cafeで分けていただいてJAISTで加工したPOM(ポリアセタール)フィルム(厚さ0.2mm)+千住金属クリーム半田でリフローしてみたが、0.65mmTSOPの足がちょくちょくブリッジしているようだ。またQFNも、半田が多すぎて裏側でショートしているのか、ちょくちょく動作しないものがある。やはりちょっと半田が多いようだ。もう少し薄い0.1mmぐらいがいいんだろうか。

12/03/14: Arduinoのブートローダの書込

それなりにいろいろあるようだ。 最も確実なのは、AtmelのAVRstudioから書込機AVRISPmk2でICSP(SPI)でプログラム(hex)→fuse→lockbitの順に書き込む、ということのようだ。

https://sites.google.com/site/hananekosugan/electro/arduino_burn_memo

http://yuki-lab.jp/hw/AVRISPmkII/index.html

http://robo.mydns.jp/Lecture/index.php?Arduino%2FArduino%20%A4%CE%BC%AB%BA%EE%2F%A5%D6%A1%BC%A5%C8%A5%ED%A1%BC%A5%C0%A4%F2%BB%C5%B9%FE%A4%E0

http://www.geocities.jp/arduino_diecimila/make/ae-atmega/index.html

http://www.geocities.jp/arduino_diecimila/use/attiny.html#AE-ATmega

12/03/14: Arduinoのブートローダstk500v2

ArduinoMegaはstk500v2というプロトコル(Atmel ApplicationNote AVR068)でプログラムの書き込みを行う。最初が0x1bから始まるバイナリ列だが、LED Tile互換のATmega2560Vボード(3.3Vなので8MHz)で、avrdudeでターミナルモードにしてみようとすると、応答が返ってこずにTimeoutとなる。

avrdude -p m2560 -P COM1 -c stk500v2 -b 115200 -v -v -v -t

Acknowrichで1バイトずつ転送すると正しい応答が返ってくるが、連続して転送すると応答が返ってこない。というわけで、通信速度が速すぎてブートローダでの処理が追いついていないっぽいので、stk500v2の上の方で定義されているビットレートを57600bpsに落としてみたら、連続転送でもavrdudeでもArduinoIDEからの書き込みでもOKとなった。

ちなみにbootloaderの書き込みモードへの移行は、main()の最初の方でタイムアウトが設定されていて(boot_timeout)、標準では約1秒になっている。つまりリセット後、約1秒待って書込みモードに移行しなければ、書き込んであるプログラムの実行が始まることになる。

12/03/13: WordPressでfaviconをおく

http://the-fool.me/wordpress/customize/favicon.html

12/03/10: Arduinoのブートローダのコンパイル(続)

特にArduinoMegaのブートローダは、stk500v2プロトコルに変更されているので、それまでのUnoとかのブートローダとは大きく異なる。ブートローダの入っているディレクトリも別。(hardware/arduino/bootloader/{atmega,stk500v2}/) で、stk500v2のほうのmakeがどうもうまくいかなくていろいろ調べたが、結論として、Makefileをちゃんと読むと、WinAVR用、と書いてあるので、http://sourceforge.net/projects/winavr/ からWinAVRをインストールすると、ProgrammerNotepadというエディタ(というか統合環境)のも一緒にインストールされて、こいつ用のプロジェクトファイル(*.pnproj)が使える。

で、ProgrammerNotepadでプロジェクトを開いてmakeするが、MCUとF_CPUとBOOTLOADER_ADDRESSをターゲットMCUにあわせて設定してmakeする。ただしmake mega2560のように、Makefileに書いてある情報もある。この場合は、コマンドプロンプトからmakeすればOK(WinAVRをインストールするとコンパイラ等へのパスは通っている)

ちなみにstk500v2ブートローダのソースはこちら→https://github.com/arduino/Arduino-stk500v2-bootloader/blob/master/Makefile

12/03/10: ArduinoでI2C/TWIをソフトウエア実装

誰かやってそうだなあ、と思ったが、まとまったライブラリとしてはないっぽい。 単品だとこちらぐらい→http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1266675196

12/03/09: Arduinoのブートローダのコンパイル

AVRISPmkIIとかで書き込むとき、AVRStudioから書き込む方法もある。 http://www.geocities.jp/jun930/ele/burn_bootloader.html

ただしヒューズビットとロックビットに注意。詳細はATmegaのデータシートにあるが、おおざっぱには、ヒューズビットはクロック源の設定とかBrown-outの設定とか。ロックビットは、ブートローダなどがフラッシュを書き換えられるようにするかどうか。 http://www.geocities.jp/arduino_diecimila/bootloader/index.html http://www.geocities.jp/bokunimowakaru/diy/arduino/ae-atmega.html

で、肝心のブートローダは、(arduino)/hardware/arduino/bootloader/atmega/にソースがあるが、標準でMakefileに書いてあるのは、328Pとか1280用など。つまり、すべての純正Arduinoボード用のブートローダが入っているわけではない。 メモリ領域とかをあわせてMakefileを書き換えてコンパイルしてもいいが、探すと見つかることもある。(っていうかあるはず)たとえばATmega2560用(というかArduinoMega2560用)はこちら→http://www.cbxdragbike.com/arduino/new/ (12/03/09追記)このページは古いようだ。ArduinoMegaは、stk500v2というブートローダを使う模様。だたしこれのmakeのしかたがイマイチわからない。*.pnprojってなんだ?これっぽいんだが、echo.exeを使うようで、WindowsのAVR Studioだとcmd.exeの組み込みechoとどう区別するんだ?http://nemuisan.blog.bai.ne.jp/?eid=188089

ちなみにコンパイルはコマンドプロンプトから行うが、AVRStudioをインストールすると、AVR Studio Command Prompt、というのがあるので、それを使うと、パスなどが通ったコマンドプロンプトが起動するので、ここでコンパイルする。

http://stastaka.wordpress.com/2010/11/25/%E3%83%96%E3%83%AC%E3%83%83%E3%83%89%E3%83%9C%E3%83%BC%E3%83%89%E3%81%A7arduino1/

http://isi.kicks-ass.net:8080/isi/bakilog-2.0/isiduino-mini

12/03/08: ケータイ/スマホのmicroUSB端子につなぐマイク・イヤホン

こういう理屈らしい。 http://plaza.rakuten.co.jp/jashi/diary/201107240000/

12/03/06: リモートデスクトップを全画面化する

Ctrl+Alt+Breakで切り替えられるが、Mac+Parallesだとうまく効かないようなので、そういうときは、Default.rdpを直接編集。 具体的にはscreen mode id:i: を2にする  http://news.mynavi.jp/articles/2010/02/25/w7/index.html

12/03/01: PSoC MiniProgの電源供給と負荷容量

ターゲット側に、パスコンなどのVDD-GND間の容量がある程度ついていると、電源供給そのものができなくなるようだ。(Power was nog toggled!...と出る) 以前、PowerCycleモードでの書き込みに失敗することはあって、電源の立ち上がり時間が問題なのかと思っていたんだけど、電源供給そのものができなくなる、ということは、ON時の突入電流が過大だと判断して制限がかかるんだろうか。 具体的には、MiniProgをつなぐ端子の直近に0.1uFを1個と、そこから離れて0.1uFを2個の合計0.3uFのときはNGで、端子直近の0.1uFをはずすとOKだった。 とりあえずPowerCycleモード書き込みを使うときは、パスコンは要注意、のようだ。

12/02/28: Arduinoのコンパイラ最適化

f = 0; while(f == 0);

みたいなプログラムで、他の割り込みルーチンでf=1;とすることでこのループを抜けさせるような場合、最適化がかかって、無限ループになってしまう。 Arduinoコンパイラの最適化の度合いは、どうも変えられないようで、その変数をvolatile修飾子をつけて最適化から外すとよさそうな模様。 http://d.hatena.ne.jp/propella/20081210/p1 http://plaza.rakuten.co.jp/CPU4Edu/20017

12/02/28: MacでArduino

ふだんプログラム書きに使っていないMacでArduinoを使って見ようとすると、シリアルポートが現れない。dmesgをみると、initDevice failedとなっている。いろいろ調べた結果、FTDIのドライバを新しくすればOKとなった。

12/02/28: Macでgcc

昔は、Xcodeをインストールしたら、ついでにgccも入っていたはずなんだけど、Xcode4.3は、手動で入れないといけないようだ。(Preferences→Downloads→Componentsから"Command Line Tools”) http://d.hatena.ne.jp/mujiryouhin/20120222/1329893707

12/02/23: ArduinoのSoftwareSerialの受信

ライブラリのソースを読んでみたところ、受信ピンの割り込みで受信開始、のようだ。ふむ。 ただし受信がはじまったらソフトウエアで1ビット分待ちながら受信、なので同時受信はできない。ふむ。 タイマ割り込みをうまく使えば複数受信もできそうな気がするが、なんとなくめんどいな。

12/02/22: Gmailの標準のテキストフォーマット

設定から変更するのではなく、最初に書いたとき(直前に書いたとき?)にplain textかHTMLかだったか、を引き継ぐようだ。 http://www.ajaxtower.jp/gmail/sent/index12.html

12/02/22: ArduinoのanalogReadなどの中身

基本的にはレジスタをごにょごにょしている。 http://gaje.jp/technotes/arduino-core/

12/02/22: Arduinoのシリアル端末の改行コード

ボーレートの横のListBoxで、no line endingを選べば、上のBOX入力時の最後のEnterは送られない。NewLineだと、Enter(0x0d)も送られる。

12/02/21: Arduino/ATmegaの品種と電源電圧と動作上限周波数

同じ品種で電源に応じて上限が変わる、というわけではないようだ。 例えばATmega2560(無印)-16は電源は5Vのみで16MHzまで。ATmega2560V-8は、電源は1.8V〜5Vで8MHzまで。つまりATmega2560Vを5Vで16MHzで動かすことはできない。製造プロセスが違うのかな。(PSoCは品種は同じで、電源電圧に応じてCPUCLKの上限が変わる)

12/02/21: Arduinoでライブラリをつくる手順というか作法

http://arduino.densikit.com/home/howtomakelibrary/kiso-hen

12/02/21: ArduinoのI/Oピンの細かい話

12/02/20: Arduinoで割り込み

http://pspunch.com/pd/article/arduino_is_c.html SIGNALかISRで書く。そのほか、setup()とloop()の仕掛けとか。

12/02/17: ArduinoでマトリクスLEDを、タイマ割り込みで駆動

ビンゴ。Dotuinoでやっている。 http://arms22.blog91.fc2.com/?tag=Dotsduino

12/02/17: Apache2で個人ページ(~/public_html)を使えるようにする

/etc/apache2/mods-enabled/ に、/etc/apache2/mods-avaiable/userdir*のリンクをつくる。 http://www.logos.ic.i.u-tokyo.ac.jp/~s1s5/pukiwiki/index.php?Linux%2FDebian%2Fapache

12/02/16: MacOS(Lion)で、ドラッグを、ダブルクリック→移動、でできるようにする

環境設定→ユニバーサルアクセス、から設定できる http://www.miuxmiu.com/archives/2011/09/17/mac_os_x_lion_double_tap_drag_setting_method.html

12/02/10: PukiWikiのattachで、大きなファイルが添付できなくなる

サーバを更新してから、大きなファイルが添付できなくなっていた。attach.ini.phpに指定しているファイルサイズの上限を設定しているのにおかしいな、と思ったら、php.iniのほうに、phpでアップロードできるファイルの上限、が書いてあって、これが、前のサーバ(のphp)と変わっているんだと思われる。ちなみにいまのUbuntu11のphpでは、8MBになっていた。

http://ml.php.gr.jp/pipermail/php-users/2004-November/024236.html

ちなみにエラーメッセージ(/var/log/apache2/error.log)はこんな感じ。

[Fri Feb 10 17:22:28 2012] [error] [client 133.28.96.227] PHP Warning:  POST Content-Length of 9796817 bytes exceeds the limit of 8388608 bytes in Unknown on line 0, referer: http://???

というわけで、/etc/php5/apache2/php.iniを変更してapache2を再起動してOK

12/02/10: Windows機(仮想マシンも含む)につないだプリンタでMacから印刷

Win側で仮想PSプリンタをつくって、そこを通して印刷、でできそうなんだけど、どうもうまくいかない。(Win側はテスト印刷までOK。MacからIP接続プリンタの追加で、Win側のIPアドレス/キュー名指定するが、印刷が通らない。プロトコルをLPDにしているから、だろうか) http://www.manabii.info/2006/02/mac-windows.html http://ejwt.eco.coocan.jp/pc/pc49.html http://www.1010uzu.com/boyaki/201002-15232426.html

12/02/08: GoogleAppsのカレンダーで、Private Adressが出てこない

FAQのようだ。まずはGoogleAppsのカレンダーの設定で、外部にも共有(をできるようにする)、をチェックすると、カレンダーの設定でPrivate Addressが出てくるようになる。 https://groups.google.com/a/googleproductforums.com/forum/#!category-topic/calendar/importing-and-exporting/Jp_TnIzaNFM

12/02/07: VALUE DOMAINで取得したドメインでGoogleAppsを運用するための設定

http://mage8.com/mymail.html

12/01/31: Arduino USB Host Shieldのデータ転送速度

載っているUSBホストコントローラのMAX3421Eのデータシートによれば、SPIのクロック周波数の上限は26MHz、とのこと。なので理論上の上限は26Mbps、ということになる。 実質1MB/sとして、1GBのデータだと1時間、というところか。

12/01/31: Arduino PTP Libでカメラを制御

Arduino PTP Library(w/ USB Host Library)の勝手がだいたいわかってきた。プログラムの書き方の定型がある。

  • setup()で、初期化
  • loop()で、Usb.Task()
  • CamStateHandlersクラスで、カメラの状態や接続等のときの呼び出し関数が定義されている。stateConnected変数で、カメラの現在の接続状態を保持。
  • 初期化時などの呼び出し関数の中で、PTPコマンドを実行。
    • PTPコマンド: PIMA15740-2000.pdfに記載されている。
    • 例:GetObjectHandles (p.65)の場合、以下のように3つの引数(Parameter)がある。
      • OperationCode: 0x1007
      • Operation Parameter1: StorageID
      • Operation Parameter2: [ObjectFormatCode]
      • Operation Parameter3: [ObjectHandle of Association for which a list of children is desired]]
      • 実際の関数呼び出しの例:
        HexDump          dmp;
        ptp->GetObjectHandles(0xFFFFFFFF, 0, 0, &dmp); // 生データdump(最初の3つがParameter)
        PTPObjHandleParser  prs;
        ptp->GetObjectHandles(0xFFFFFFFF, 0, 0, &prs); // Parseされたデータ(Parseは
  • ちなみにNotify()は、USB Host Lib.のmessage.cppで定義しているが、ほとんどただのSerial.println()と同じ。

ちなにcanoneos.hだと、EOS用に特化した関数がけっこうある。 EOSCaptureあたりを参考にしてみると、CanonEOS型のオブジェクト(!)Eosをつかうと、 Eos.Capture()で撮影ができたりする。

カメラから画像データを吸い出すのは、GetObjectを使うはずだが、そのときのデータの流れがいまいちよくわかっていないので、GetObjectHandlesのサンプル(PTPObjectHandles)で試してみることにする。HexDump *hexを引数にして呼び出せば、だーっと出てくるものなんだろうか。

12/01/31: ArduinoのWire(I2C)とRTC

http://nekosan0.bake-neko.net/connection_rtc.html ※Arduino1.0用は、Wireの関数名が少し変わっている(send→writeなど)ので微調整。 このRTC8564の仕様だと、読み出しは、I2CのSTART→Write(アドレス)→STOPを送らずに、次のSTART→読み出し→STOP、という手順のはずなのだが、1回目のWriteでendTransmissionしてSTOPを送ってしまっている。まあたしかにこれで読み出し対象のアドレスは設定できるので、たしかに所望のアドレスの読み出しはできる。

12/01/31: ArduinoのSPIピン

ArduinoUnoだとD10〜D13だが、ArduinoMegaだとD50〜D53だったりして、ピンの位置が違ってシールドがそのまま使えない。そこで最近は、ATmegaのICSPピン(2x3ピン)にもSPIの信号が出ていることを使って、ICSPピンにつながる2x3のソケットを備えて、どのArduinoでもSPIが使えるシールド、が増えているようだ。純正Ethernetシールドとか。http://arduino.cc/en/Main/ArduinoEthernetShield

12/01/31: Arduino+USB Hostでカメラ制御

こちらを参考に。 http://www.circuitsathome.com/?s=7d

  • Examples→PTP20→Canon_EOS→EOSCapture : 定期的(5秒ごとぐらい?)にシャッターを切る。あっさり動作。
  • Examples→PTP20→Canon_EOS→EOSCamController : カメラのパラメータを制御っぽい。Arduino側の液晶とかロータリーエンコーダなどをつけて動かす模様。
  • Examples→PTP20→Canon_EOS→EOSRemote : シリアルターミナルからカメラを制御

12/01/31: ArduinoMega + USB Host Shield (sparkfun)

SPIのピン配置がArduinoMegaArduinoUnoは異なるので、配線を変更。 具体的には、以下のピンを変更

  • SCK : D13→52
  • MOSI : D11→D51
  • MISO : D12→D50 ※ソース(USB Host Lib.2.0のusbhost.h)を見る限り、SSは、ArduinoMega2560ではPB0と定義されているので、ArduinoMegaのPB0=D53に変更しないといけないような気がするんだけど、それだと動かない(SS=D53=PB0が変わらない)。たしかにD10=PB4がSSとして働いている。なんでだ?

http://dev.tetrastyle.net/2012/01/arduino-mega-sparkfun-usb-host-shield.html (ついでに:GPIOもつかう http://dev.tetrastyle.net/2012/01/usb-host-shield-lcd.html

12/01/27: USB CDC(Communicatino Device Class)

なかなか頭に入らないので備忘録。 要は、いろんなOSで標準サポート(ドライバが標準でついている)の USB-シリアル、というところ。 http://www.recursion.jp/avrcdc/driverj.html

12/01/26: PSoC ExtClkの設定

PSoC Designer5.0のときは、問題なく動いていたんだけど、そのプロジェクトを5.1に移行して見ると、どうも動かない。boot.tplっぽいけど、とりあえず以下のように、まずは内蔵OSCで起動して、main()の最初の方で手動でExtClkを使うように変更する、というのが、手っ取り早そうではある。 http://d.hatena.ne.jp/harre_orz/mobile?sid=23&date=20110606&section=1307365914

12/01/24: Arduinoで0x00をwrite

Serial等のprintやwriteで、文字列中に"\x00"として0x00を出力しようとすると、当然ながら、文字列の終端記号として扱われるので、0x00とそこから先は出力されない。これはprintでも、バイナリ用のwriteでも同様。 で、write(0x00)とやっても、やっぱり0x00は出力されない。 write((int)0x00)とやってもだめで、int d = 0; write(d); とやるとOK。これしか方法がないんだろうか。

→(12/01/31追記)やはりFAQのようだ。CastすればOKのようだ。Serial.writeなら(int)、Wire.writeなら(byte)にCastする。

12/01/24: TouchPadShieldのタッチセンサIC MPR121のDebounce

TouchPadShieldのタッチセンサICのMPR121が、触ってなくてもけっこうノイズを拾うことが多い。とくにスイッチング電源などが近くにあると影響が大きいような気がする。

で、対策のうち、いちばん簡単なのは、設定レジスタでDebounceを設定すること。これは、値の変化が連続して○回起こったらTouch/Releaseと判定する、という回数。

12/01/24: XBee設定ツールX-CTUのボーレート

マニュアルには書いてないが、ボーレート設定のところに、リストから選ぶのではなくて直接数値を入れると、そのボーレートに設定できる。

12/01/23: Arduinoのbootloaderの書き込み

基本的にはICSP、つまりAVR-ISPmk2で書き込む https://sites.google.com/site/hananekosugan/electro/arduino_burn_memo

ちょっとトリッキーな方法として、FT232のBitBangモードを使って書き込む方法や、他のArduinoを使って書き込む、という方法もある模様。 http://d.hatena.ne.jp/LaclefYoshi/20110108/1294475337 http://www.geocities.jp/arduino_diecimila/bootloader/index.html

12/01/23: ArduinoのAnalogInをディジタル出力として使う

設定すればちゃんと使えるようだ。 http://nekosan0.bake-neko.net/structure_digital_port.html

12/01/23: Arduino USB Host ShieldとLibary

Sparkfunで売っているArduino USB Host SheildとArduinoADKは、↓のUSB Host Shield Libraryと微妙にバージョンが違うようだ。 http://www.circuitsathome.com/mcu/usb-host-shield-library-version-2-0-released ん?でもこれは、新バージョンのSparkfunのUSB Host ShieldならOKということ?(調査中) http://d.hatena.ne.jp/bs-android/20110920/1316469238

12/01/23: Arduinoを20MHzで動かす

原理的にはできるはず。 http://penguin.tantin.jp/hard/Arduino/home_made_board.html http://nekosan0.bake-neko.net/outline_composition.html

12/01/23: Eagleで作ったガーバーデータをPCBEへ

だいたいPCBEでガーバー入力できそうな雰囲気。(拡張ガーバー)

12/01/23: SDloggerのソース

いろいろ解読して、なんとなくわかってきた。 https://github.com/magnuskarlsson/SDLogger/wiki

基本的に、Arduino環境を使ってファームウエアを書き込むのは、ここの手順による。 https://github.com/magnuskarlsson/SDLogger/wiki/SDLogger-firmware-restore hardware\SDLogger\boards.txt をみると、

OpenLog.name=SDLogger firmware restore
..
OpenLog.build.core=Restore

とあるので、Restore/以下のソースが使われることになるので、必要であればこれらをいじってUploadすればよい。ちなみにここでbootloaderも指定しているので、MCUを変えることもできそうな気配。

ついでに、ATmega1284P用の設定はあるのかな?と思ったら、参考になりそうな情報を発見。 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1273415167/30 ちなみにArduino1.0あたりのhardware\tols\avr\etc\avrdude.confにはATmega1284P用の設定が書いてあるので、それをコピーしてくるのが早そうな気配。

12/01/21: ギター用コンタクトマイクの作り方

http://aleatorik.blog119.fc2.com/blog-entry-121.html

12/01/21: WordPressのメール投稿(添付つき) with php5-imap

添付ファイルつきメール投稿をできるようにするためにいろいろ調べて、結局Postieというプラグインにたどり着いた。これでできるが、メールサーバがPOP3Sだとphp5-imapを入れないといけない。で、apt-getで入れてもうまく動かず、phpinfo()でみても、imapが動いている形跡がない。

いろいろ調べた結果、php5-imapを入れた後、apache2-ctlでApacheを再起動しないといけなかった、というオチ。(apach2起動時にphpを組み込むので、phpの構成を変えたらapache2を再起動しないといけない)

12/01/20: WordPressのメール投稿

ssl://????でポートを995にすれば、POP3Sも使える。 また定期的に自動でチェックしてくれるわけではなく、 wp-mail.phpをたたくとチェックする。 http://wordpress.org/support/topic/post-to-wordpress-through-gmail http://futuremix.org/2009/01/wordpress-27-mail-post

ついでに、長すぎる本文を自動的に短くできないのかな?と思ったら、方法自体はあるようだけど、どうもうまくいかないので、とりあえずメモ。 http://www.managehp.com/blog/?p=48 (12/01/31追記)テーマごとに記事を表示しているところを探し、the_contentをthe_excerptに変える。その他、適宜記事全体へのリンクを出させたりする。例えばテーマ"the-go-green-theme"の場合なら、index.phpを以下のような感じに。  <div class="postentry"><?php the_excerpt(); ?>

 <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">(Read All Post Message)</a>	

12/01/20: ArduinoのStringクラス

泣けてくるくらい便利。s = "hoge"やs = "a" + "bc"みたいな代入や結合ができるところは、Stringクラスっぽいが、s[0]みたいな、char[]的な扱いもできる。 http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=1460

12/01/20: MacのWineでシリアルポート

ここを参考にやってみたら、できたっぽい。~/Library/Application Support/Wine/prefixes/(アプリケーション名)/dosdevice に、USBデバイス(/dev/tty.usbserial-???等)へのシンボリックリンクをcom1としてはればOK http://debugitos.main.jp/index.php?Ubuntu%2FTips#qd9206c8

12/01/18: Arduino + USB Hostでデジカメのシャッターを切る

OpenSourceHardwareコミュニティの力、おそるべし。 Arduino+USBホストシールドでデジカメのシャッターを切ったりしている。

12/01/18: 新規投稿の通知機能を持つBBS

要は研究室の掲示板を電子化して、投稿があったら通知があるようにしたいんだけど、 WordPressあたりがよさそうな雰囲気。というわけで情報のポインタの備忘録。

12/01/18: AruduinoEthernetでUDP

Arduino1.0から大きく仕様が変わっている。

12/01/18: Arduinoで圧電ブザーを鳴らす

=指定周波数のPWM波を出す関数tone(PIN, FREQ, TIME) http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/Melody/Melody.htm

12/01/18: Sparkfun Touch ShieldのGND配線

http://www.sparkfun.com/products/10508

Arduinoとピンヘッダでつなげ、と書いてあるが、回路図を見ると、3つのGNDがつながっているので、どれか1つでいいだろう、とGNDの1つだけArduinoとつないでみたら、動かない。まさかと思って導通チェックしてみると、3つのうちの1つしか回路のGNDとつながっていなかった。このGNDをArduinoのGNDとつないだら動いた。つまり、回路図が厳密には正確ではない。

12/01/17: ArduinoEthernetのメモ

12/01/17: Windowsのファイルを開くダイアログの、左側のフォルダ等のショートカット

TweakUIで変更できる。 http://www.atmarkit.co.jp/fwin2k/win2ktips/330placebar/placebar.html

12/01/15: クリーム半田用マスクの製作サービス

http://www.applied-electronics.com/category/prototyping-services/

12/01/12: ArduinoでWebサーバ

自室の行き先表示器のボタンスイッチの効きが悪くなってきたので、この際、Arduino Ethernetシールドでつくりなおしてみようかと考えてみる。 Webサーバ自体はけっこう簡単にできるようだ。http://kousaku-kousaku.blogspot.com/2008/11/arduinoethernet-shield.html

タッチセンサのほうは、こいつを使ってみる→http://www.sparkfun.com/products/10508

I2Cでとれるタッチセンサだが、Arduino用のライブラリはないようなので、サンプルソースを参考に書くことになりそう。

12/01/12: PSoC AnalogOutピンの駆動モード

ピンの機能をAnalogOutにするだけででは、そのピンの駆動モードは変わらないみたいだ。"High-Z Analog"になっているかを確認するようにしたほうがよい。

12/01/10: Sambaの設定・mount時のuser/group名

基本中の基本だけど忘れないうちに。http://www.jitaku-server.net/samba_setup.html

あとmountコマンドでmountするときのuser名・group名は、mountのオプションとして-o 'uid=???,gid=???'で設定。

12/01/07: Eagleのガーバー出力のファイル名

  • *.sol (半田面パターンデータ)
  • *.cmp (部品面パターン)
  • *.pls (半田面シルクデータ)
  • *.plc (部品面シルクデータ)
  • *.sts (半田面レジストデータ)
  • *.stc (部品面レジストデータ)
  • *.drd (ドリルデータ)
  • *.dri (ドリルリスト)

拡張子の付け方は、半田面=Solder、部品面=Component、という流儀。(ちなみに半田面=Bottom、部品面=Top、という流儀もある)

12/01/07: Eagleのショートカットキー

設定できるようだ。使ってみようかな。PCBEと同じようにあわせると結構便利なのかもしれない。 http://hsgw.blog10.fc2.com/blog-entry-24.html (12/01/07追記)修飾キー(Ctrl/Cmd等)を伴わない、例えば「A」キーだけ、というのは変えられないようだ。。。 (12/03/23追記)その設定は~/.eaglerc に書いてある。

12/01/05: NCピンの取り扱い

いわゆるNC(no connection)ピンといっても、本当に内部で何もつながっていないピンと、何もつないではいけないピン、というのがある。加速度センサMMA7455の場合だと、3,10番ピンは"No internal connection, Leave unconnected or connect to Ground"と注記があるので、本当に何もつながっていないピンと思われる。一方、11番ピンは、同じくNCだけど注記には"Leave unconnected or connect to Ground"と書いてあり、実際、GND以外の信号線をつないでみたら、動かなかった。こういうこともあるので注意。

12/01/05: PSoCのI2Cmのピン設定

I2Cm(I2Cマスタのソフトウエア実装モジュール)がうまく動かない、と思っていたら、ビンゴ。SCL/SDAに使うピンをOpenDrainLowに設定「してはいけない」。HighZのままに「しておかなければならない」。 http://bluefish.orz.hm/sdoc/psoc_memo.html#I2Cm%E3%81%8C%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84%EF%BC%88100112%EF%BC%89