趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • 部品を買ってきました

    投稿日 2015年 10月 27日 コメントはありません

    FusionPCBからTrackingできるようになったよ、という通知がとっくに来ているのですが、なかなか荷物状況の確認ができるようにならず・・・。で、ようやくSingapore Postのトップ画面左側にある「Track Item」で「Information Received」になりました。でも、物理的な荷物の引受とは関係ないんだそうで(^^;。

    まあ、焦ってもしょうがないですので、部品を買い集めました。

    PARTS

    基本的には秋月で手に入るものばかりで基板設計したので概ね揃いました。


  • いまさらH8-300開発環境を構築してみたけど・・・

    投稿日 2015年 3月 26日 1つのコメント

    いまさらですが、余っているH8/3664ボードを何かに使おうと思って、開発環境を調査してみました。

    1.環境

    VMware上の Lubuntu14.04.2をターゲットにします。
    OSをインストールしたら、build-essentialパッケージをインストールした後、VMware-Toolsをインストールします。

    2.Cコンパイラ

    いまさらアセンブラもないので、Cコンパイラを探します。
    synapticでh8を検索すると、binutils-h8300-hmsとgcc-h8300-hmsが見つかります。これらをインストールします。これらをインストール後、バージョンを確認すると以下のようになっていました。

    ~$ h8300-hitachi-coff-gcc -v
    Reading specs from /usr/lib/gcc/h8300-hitachi-coff/3.4.6/specs
    Configured with: ../configure coff
    Thread model: single
    gcc version 3.4.6
    ~$

    3.書き込みツール

    昔、三岩さんが作られたものと思われるツールが sourceforge にあがっていましたのでコンパイルしてみます。説明では先頭の4行を環境に合わせて修正してからコンパイル、と書いてありましたが、はじめからLinuxのみが#defineされていました。

    ~$ mkdir H8tools
    ~$ cd H8tools/
    ~/H8tools$ wget mes.sourceforge.jp/h8/h8write.c
    --2015-xx-xx xx:xx:xx--  http://mes.sourceforge.jp/h8/h8write.c
    mes.sourceforge.jp (mes.sourceforge.jp) をDNSに問いあわせています... 202.221.179.22
    mes.sourceforge.jp (mes.sourceforge.jp)|202.221.179.22|:80 に接続しています... 接続しました。
    HTTP による接続要求を送信しました、応答を待っています... 200 OK
    長さ: 70666 (69K) [text/x-csrc]
    `h8write.c' に保存中
    
    100%[======================================>] 70,666       128KB/s   時間 0.5s 
    
    2015-xx-xx xx:xx:xx (128 KB/s) - `h8write.c' へ保存完了 [70666/70666]
    
    ~/H8tools$ gcc h8write.c -o h8write
    h8write.c: In function ‘error_print’:
    h8write.c:732:4: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr,message[error_code]);
        ^
    h8write.c:733:4: warning: format not a string literal and no format arguments [-Wformat-security]
        if ( s_message != NULL ) fprintf(stderr,s_message);
        ^
    h8write.c:737:4: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr,message[error_code]);
        ^
    h8write.c:738:4: warning: format not a string literal and no format arguments [-Wformat-security]
        if ( s_message != NULL ) fprintf(stderr,s_message);
        ^
    h8write.c:742:4: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr,message[error_code]);
        ^
    h8write.c:743:4: warning: format not a string literal and no format arguments [-Wformat-security]
        if ( s_message != NULL ) fprintf(stderr,s_message);
        ^
    ~/H8tools$

    Warningがたくさん出ましたが、実行ファイルは生成されました。

    4.コンパイルテスト

    Strawberry LinuxのWebサイトからLED点滅サンプルを持ってきてコンパイルしてみました。

    $ wget strawberry-linux.com/h8/h8led-0.1-20020706.tar.gz
    $ tar xvfz h8led-0.1-20020706.tar.gz
    $ cd h8led
    $ make clean
    $ make

    ・・・が、-lc がないと言って怒られます。探してみると、どこにもH8用のlibc.aがありません。これは libc.a がないことを意味していますので、newlibをインストールすることにしました。

    5.newlibのインストール

    組み込み用のlibcであるnewlibをコンパイルします。
    その前に、まずgitからインストールです。

    ~$ mkdir newlib
    ~$ cd newlib/
    ~/newlib$ sudo apt-get install git
    ~/newlib$

    さらに、newlibのソースを取ってきます。

    ~/newlib$ git clone git://sourceware.org/git/newlib-cygwin.git

    このままコンパイルすると、「makeinfoがない」といって怒られますので、synapticでtexinfoパッケージをインストールして、別のターミナルを新規に開いてから configureスクリプトを走らせて、make、make install します。

    ~/newlib/newlib-cygwin$ ./configure --target h8300-hitachi-coff
    ~/newlib/newlib-cygwin$ make
    ~/newlib/newlib-cygwin$ sudo make install

    libc.a、libg.a、libm.a が /usr/local/h8300-hitachi-coff/lib の下にインストールされました。

    6.改めてコンパイルテスト

    よくみると、さらにはMakefileでライブラリパスが設定されていなかったので、これを修正してみたのですが、今度は互換性のないlibc.aをスキップしました、となってしまいました。

    ~/H8sample/h8led$ make
    h8300-hms-gcc -O -mh -g -mrelax -mint32 -DH8_3664 -T h8-3664.x -L /usr/local/h8300-hitachi-coff/lib -nostdlib 3664crt0.S  led.o -o h8led.exe  -lc -lgcc
    /usr/lib/gcc/h8300-hitachi-coff/3.4.6/../../../../h8300-hitachi-coff/bin/ld: 互換性のないを /usr/local/h8300-hitachi-coff/lib/libc.a スキップしました (-lc を探索している時)
    /usr/lib/gcc/h8300-hitachi-coff/3.4.6/../../../../h8300-hitachi-coff/bin/ld: cannot find -lc
    collect2: ld returned 1 exit status
    make: *** [h8led.exe] エラー 1

    確か、gccのクロスコンパイラをビルドするときにはライブラリ(libcなど)なしで一度コンパイラをビルドしてライブラリをビルド、その後再度コンパイラをビルドし直す手順になっていたかと思うのですが、そのへんがちゃんと行われていないのかもしれません。(ググってもnewlibのバイナリがなく、ソースからビルドするしかなさそうだ、という時点で嫌な予感はしたんですけどね)

    7.まとめ

    ・・・うーむ。ぐぐってみると、同じ問題がはるか昔に出ていたようです。
    https://bugs.launchpad.net/ubuntu/+source/gcc-h8300-hms/+bug/342667
    ここを見る限り、リポジトリにあってSynapticでインストールできても結局メンテナンスされてなくて使い物にならないようで、そのままずーっと放置されているようですね。

    コンパイラごとソースからビルドすれば動く組み合わせもあるかもしれませんが、そこまでして動かす元気はありません。今でも秋月ではH8/300のボードを売ってますが、みなさんどうやって使ってるのでしょう?(メンテナンス目的?教材用?)
    いまでもcygwin + gcc2.95.3ベースの環境をCD-Rで売ってるようですが、いまさらのような気がします。

    H8は比較的電子工作用途に受け入れられた数少ない日本製マイコンですが、この状況ではとても使う気にはなれません。かといって、いまさらR8Cとか78Kとかってのもないでしょうから、素直に諦めるほうが良さそうです。

    さて、余ってしまったボード、どうしよう・・・。


  • Raspberry Pi 2がやってきた

    投稿日 2015年 2月 10日 コメントはありません

    先週の月曜日(2月2日)深夜に速攻で「ぽちっ」としてしまったRaspberry Pi 2が届きました。

    上の2つが今回届いたRaspberry Pi 2、中段左が秋月で買ったRaspberry Pi model B+、中段右がRaspberry Pi Camera、左下かつて数ヶ月待ちで届いたRaspberry Pi Model B 512MBの残り1つです。

    IMG_0354s

    しかし、秋月価格のRaspberry Pi Model B+よりもRS価格のRaspberry Pi 2 Model Bの方が安い(ただし2個購入時)ってのがなんとも。

    IMG_0355s

    IMG_0359s


  • 大量のファイル名操作

    投稿日 2014年 5月 6日 コメントはありません

    Androidの本体側も不安でしたので、USBマスストレージとして認識する状態でディスクイメージを吸い上げ、ファイル抽出したところ、JPEGだけで1万個近いファイルがでてきました。(細々としたファイルも含めると10万個くらい?)

    PhotoRecが80近いディレクトリを作ってしまったので、一括して処理しないと面倒です。なので、JPEGのみを集めてくることにしました。

    #どうでもいいけど、本体もFATで処理できてしまった・・・。FATフォーマットなの?

    $ ./testdisk-7.0-WIP/photorec_static Copy-Of-HONTAI.IMG 
    $ cd OUTPUT-HONTAI/
    $ ls
    recup_dir.1 recup_dir.24 recup_dir.39 recup_dir.53 recup_dir.68
    recup_dir.10 recup_dir.25 recup_dir.4 recup_dir.54 recup_dir.69
    recup_dir.11 recup_dir.26 recup_dir.40 recup_dir.55 recup_dir.7
    recup_dir.12 recup_dir.27 recup_dir.41 recup_dir.56 recup_dir.70
    recup_dir.13 recup_dir.28 recup_dir.42 recup_dir.57 recup_dir.71
    recup_dir.14 recup_dir.29 recup_dir.43 recup_dir.58 recup_dir.72
    recup_dir.15 recup_dir.3 recup_dir.44 recup_dir.59 recup_dir.73
    recup_dir.16 recup_dir.30 recup_dir.45 recup_dir.6 recup_dir.74
    recup_dir.17 recup_dir.31 recup_dir.46 recup_dir.60 recup_dir.75
    recup_dir.18 recup_dir.32 recup_dir.47 recup_dir.61 recup_dir.76
    recup_dir.19 recup_dir.33 recup_dir.48 recup_dir.62 recup_dir.77
    recup_dir.2 recup_dir.34 recup_dir.49 recup_dir.63 recup_dir.8
    recup_dir.20 recup_dir.35 recup_dir.5 recup_dir.64 recup_dir.9
    recup_dir.21 recup_dir.36 recup_dir.50 recup_dir.65
    recup_dir.22 recup_dir.37 recup_dir.51 recup_dir.66
    recup_dir.23 recup_dir.38 recup_dir.52 recup_dir.67
    $ mkdir ALLJPG_F
    $ i=1; for f in recup_*/f*.jpg ; do g=00000$i.jpg; mv $f ALLJPG_F/JPGF_${g:(-10)}; i=$((i+1)); done
    $ mkdir ALLJPG_T
    $ i=1; for f in recup_*/t*.jpg ; do g=00000$i.jpg; mv $f ALLJPG_T/JPGT_${g:(-10)}; i=$((i+1)); done
    $ mkdir ALLJPG_E
    $ i=1; for f in recup_*/*.jpg ; do g=00000$i.jpg; mv $f ALLJPG_E/JPGE_${g:(-10)}; i=$((i+1)); done
     (この行はファイルがないのでエラーになるはず。もしファイルがある場合に回収するためのもの。)
    $ mkdir ALLPNG
    $ i=1; for f in recup_*/*.png ; do g=00000$i.png; mv $f ALLPNG/PNG_${g:(-10)}; i=$((i+1)); done

    冒頭のファイル抽出はSDカードの場合と何も変わらないので説明は省略します。
    最後の8行でファイルを6桁の連番を付けながら、各ディレクトリに集めてきます。この部分はこちらのサイトを参考にさせていただきました。


  • 全ファイルスキャンしてみた

    投稿日 2013年 12月 22日 コメントはありません

    年の瀬ということもあり、所有する全ファイル(すべてのファイルがFreeNASに入っている)をKasperskyでウイルススキャンをかけてみたところ、秋月で買ったGPSデータロガー GT-730FL-S に添付のCDROMのアプリケーションにトロイの木馬があるという警告が出た。とりあえず、このファイル(ImageSetup_Canmore.msi)を削除して再スキャン。

    ・・・その後、問題のあるファイルはこれだけだった。
    でも、このGPSロガー、結構あっちこっち出回ってたと思うんだけど、大丈夫なんだろうか?


  • TOCOS Wireless Engineを試してみた

    投稿日 2013年 12月 21日 コメントはありません

    秋月でTOCOS Wireless Engineを入手してみたので動かしてみました。

    入手したのはUSBドングルタイプのToCoStickを1つと、モジュールのTWE-Lite DIPの半完成品タイプ2つです。半完成品なので、マッチ棒アンテナとピンヘッダを半田付けしないといけないです。モジュールの端子とピンヘッダの端子がかなり近いので、ショートさせないように気をつける必要があります。

    アンテナとピンヘッダを取り付けたら、初めからモジュール内にはアプリケーションが書き込まれているということで、まずはTWE-Lite DIP使用方法(初級編)に沿って動かしてみました。当然かもしれませんが、無事に動きました。本当に「あっ」という間に動くようになります。これだけで簡単なリモコンが実現できそうな感じです。(実際にはIDがぶつからないように設定変更するべきですが)

    次に、TWE-Lite DIPを子機だけ1台に設定し、ToCoStickを親機にして制御してみることにしました。
    ・・・が、ToCoStick用のアプリケーションはLinux版は存在しません。ですので、Android版を試してみました。手持ちの中華Android4.0パッドでは動きませんでしたが、Xperia Aでは問題なく動作しました。こちらの画面では電波の強度も表示できるので、自室(鉄筋コンクリートのマンションで共用通路側です)に子機を置いて、Xperia + ToCoStickの組み合わせで歩き回って見たところ、奥のベランダ側の窓際で電波強度はギリギリ、共用通路側は自室前は問題ありませんが、隣家の前まで行ってしまうと電波強度はギリギリでした。まあ、WiFiの電波も飛び交っている所ですし、窓は防犯用の網入り窓ガラス + アルミ合金製ブラインドがついている(しかも閉めっぱなし)なのでしかたがないところだと思います。

    次にToCoStickをLinuxマシンにさしてターミナルプログラムで115.2kbpsにて /dev/ttyUSB0 をみてみると、子機から飛んでくるデータがすでに見えています。TWE-Lite DIP使用方法(上級編)をみると、UARTでの制御は簡単そうです。

    また、Raspberry Piに挿して、sshでRaspberryPiにログインした後、

    $ screen /dev/ttyUSB0 115200

    とすると子機からのデータが流れてくる様子をみることができます。(終了は CTRL-A + 大文字K)

    ちょっと動かしてみただけですが、TWE-Liteは非常に扱いやすくまとめられていて、いろいろ工作のネタがありそうです。特に初めから収められているアプリケーションはIDさえ変えて混信回避の策をとれば十分にいろんなことに使えそうです。それに何といっても『認証済みの無線モジュールが秋葉原で安価に手に入る』というのは夢のようです。
    欲を言えば、縦方向に場所を取るマッチ棒アンテナではなく、チップアンテナやパターンアンテナタイプがあればいろんなものに押し込むのに便利な所ですが・・・。


  • また気圧計の電池がなくなりました

    投稿日 2013年 11月 24日 コメントはありません

    前回10月30日に電池交換した気圧計ですが、今日電池がなくなって止まってました。
    今日の昼間は稼働していたので、ほぼ25日間の動作ということになります。単三で作れば2ヶ月くらい駆動できるかな?
    自作の電池駆動機器で簡単にこれだけの期間連続動作させられるようになるなんてしばらく前には予想できませんでしたね。


  • 秋月に新しいユニバーサル基板が登場

    投稿日 2013年 11月 24日 コメントはありません

    秋月電子のサイトを見ていたら、新しいユニバーサル基板が出ているのを発見。

    従来の2.54mmピッチの端子間に表と裏にそれぞれ異なる向きで電源バスを這わせて、交差点の部分にスルーホールを設けた構造みたい。
    単一電源の回路であれば電源・GND配線が格段に簡単になる上に、4層基板には届かなくても電源インピーダンスは確実に下がるはずので、いろいろ作りやすくなりそう。
    (かといって、沿面距離は何をしても大幅に小さくなってしまうので、高電圧がかかる回路は絶対に避けないといけないですが)

    プルアップやプルダウンの抵抗・パスコンも1005のチップ品を使えば電源グリッドのスルーホールから直接接続できそうな感じ。1608ではちょっと苦しいかな(いけたらうれしいのだけど)

    サイズはBタイプCタイプの2種類。今度見かけたら買ってみることにします。


  • DIP版18F14K50ボードを作ってみました

    投稿日 2013年 11月 6日 コメントはありません

    余っていたDIP版のPIC18F14K50とユニバーサル基板でテスト用のボードを作ってみました。

    OLYMPUS DIGITAL CAMERA

    このボードを作ってみたのは、部品が余っていたから・・・というのもありますが、秋月の800円PIC18F14K50ボードとブレッドボードの組み合わせでは不便な点があったからです。それは、

    • 秋月の800円PIC18F14K50ボードではRA3はPICkit3へ接続するようになっている。
      よって、ブレッドボードではこの端子は扱えない。
    • USBでいろいろなソフトウェアを作って試すには、ブレッドボードでは持ち運びには不便。

    というところからです。双方向でのデータのやりとりを試してみたいので、余っていた気圧センサとI2Cのキャラクタ液晶も載せてあります。気圧センサは液晶の下に置いてあります。(最初の写真は気圧センサから読み取った値を液晶に表示しています)

    OLYMPUS DIGITAL CAMERA

    裏面はこんな感じです。(自分用です。回路図を作っていないのでその代用(^^;。クリックすると特大画像が開きます。)

    OLYMPUS DIGITAL CAMERA

    各部分の説明(自分用です)

    • 基板裏面から見て右上の部分
      USBのBコネクタで、緑色の部品は100mAの保護用ポリスイッチです。
    • 基板裏面から見て真ん中やや上
      PIC18F14K50です。GND周りに付いている2個の小さな1608のコンデンサは1uFのチップコンです。VUSBのコンデンサは0.22~0.47uFが推奨だったと思いますが、半端な容量のコンデンサが手持ちになかったので1uFとしています。茶色の2012の大きなコンデンサ2個はクリスタル周りの22pFで、その左の4.7kΩはRA3のプルアップ抵抗、その左の1.2kΩ×2個はLEDの電流制限抵抗、その左の24kΩはタクトスイッチのプルアップ抵抗です。ポートCは内蔵プルアップがないので外付けせざるを得ませんでした。
    • 基板裏面から見て左の部分
      アナログジョイスティックと3.3VのCMOSレギュレータです。CMOSレギュレータIN/OUTには1uF16Vのチップコンがそれぞれついています。
    • 基板裏面から見て左下の部分
      2個のタクトスイッチです
    • 基板裏面から見て右下の部分
      LCDモジュールへのコネクタと気圧センサです。4.7kΩ×2個はI2Cバスのプルアップ抵抗です。

    ポートアサインは以下の通りとしています。

    • RA3 – ブートローダスイッチ(L:ブートローダ起動)
    • RB4 – I2CバスSDA
    • RB5 – not use
    • RB6 – I2CバスSCL
    • RB7 – not use
    • RC0 – 3.3Vリファレンス電圧入力
    • RC1 – アナログジョイスティックY軸入力
    • RC2 – アナログジョイスティックX軸入力
    • RC3 – LED GREEN(H:点灯)
    • RC4 – LED RED(H:点灯)
    • RC5 – not use
    • RC6 – スイッチ入力左(L:ON)
    • RC7 – スイッチ入力右(L:ON)

    I2Cバスのアドレスアサインは以下の通りです。

    ソフトウェアはとりあえず以下の通りです。

    • PIC18F14K50側ブートローダ
      タクトスイッチとLEDのポートアサインを修正
    • PIC18F14K50側アプリケーション
      カスタムHIDデバイスのデモプログラムをベースにして、先に作った気圧センサ用のPIC16F1823用のI2C/LPS331/LCDドライバを移植。
      さらにTimer0割り込みを使って時間管理(似非マルチタスク処理)ができるように割り込み処理を追加。
    • Linuxホスト側ブートローダ
      Microchipのサンプルプログラムのまま
    • Linuxホスト側アプリケーション
      昔作ったHIDRAWでデータをやりとりするプログラムを改造し、双方向で希望するデータのやりとりができることを確認

    これでLinux環境下でデータのやりとりをUSB経由で好きなようにできそうです。


  • RasPiに緊急地震速報を報告させてみました

    投稿日 2013年 10月 30日 5個のコメント

    連続稼働に向けてラックに吊り下げたRaspberryPiですが、こいつに緊急地震速報を報告させてみました。

    Pythonのスクリプトとして作ったのですが、処理としては以下のような感じです。表示および音声合成は別スクリプト&別スレッドにすることで、表示処理と音声読上げを同時に起動し、遅れをなるべく少なくするようにしています。

    1.RaspberryPiでEEWBOTを監視し、地震速報を取得する

    Twitterのアカウントでeewbotというbotアカウントを運営している方がいて、実験的に高度利用者向けの緊急地震速報をcsvで配信されています。
    こちらのtweetをストリーミングAPIで受けとります。

    2.受信した内容をデコードします。

    デコードと言っても、都合のいいように表示用と読上げ用のテキストを生成するだけです。

    3.USB接続のLCDに表示させます

    生成したテキストをUSB接続のLCDに表示させます。

    4.スピーカに音声出力します

    RaspberryPiに接続したスピーカに合成音声で出力します。音声合成にはAquesTalk Piを使っています。いわゆる「ゆっくり声」で読み上げます。(笑)
    (注:AquestTalk Piは商用利用では有償なので、真似する人はご注意を)

    いまのところ、RaspberryPiのスピーカ端子にダイソーの100円スピーカ(ケーブルなし)を挿しているので、音量が小さくて静かな状況でないと聞き取れません。なるべくシンプルかつ小さくアンプを仕込む方法を考えています。

    5.動かしてみて

    遠めの地震だと地震速報の読上げ&表示後に揺れがきます。比較的近くだと揺れが先か同時くらいですが。音声だけだと読み取れなくても同じ内容がLCDをみれば表示されているので、読上げ完了を待たなくても内容がわかりますし、聞き取れなくてもやはり内容はわかりますので、結構便利です。

    ちなみに、日本気象協会の地震情報(tenkijp_jishin)もフォローしていて、その内容もそのまま表示&読上げをしています。こちらは緊急地震速報が落ち着いてしばらくしてからTweetされます。

    6.メモ

    以降は自分用のメモです。

    動かすの使った追加パッケージは以下のとおり。

    $ sudo apt-get install python-gd
    $ sudo apt-get install ttf-kochi-gothic-naga10 ttf-kochi-mincho-naga10
    $ sudo pip install pyserial

    「TweetToVoiceLCD.py」を走らせれば動作開始。