weblog電子工作とか2013.12.31回転マウント開発2013年も今日で最後ですが、本年度最初のブログ更新です。いま、こんなもの作っています。カメラをリモコンで回転させることができるマウントです。友人からの依頼で開発を始めましたが、開発自体が面白く感じるようになり、試行錯誤のすえ3号機まで辿り着きました。回路はブレッドボードで動作確認をしています。ブレッドボードのお陰で試行錯誤はかなり楽になりました。上の写真が開発中のカメラマウントです。マイコンはAVR社のATMEGA328Pを使用しています。無線でコントローするためにXBeeモジュールを使っています。ソフト開発にはArduinoを使っています。Arduinoのお陰で開発はかなり楽になったと思います。Arduinoは様々な周辺回路の例や、動作を確認できるサンプルソフトがあり非常に参考になります。先人の方々には感謝です。(Make:PROJECTS)上の写真が開発中のコントローラです。マウントと同じくATMEGA328PにXBee無線モジュールが主な構成です。モータのようなメカ部品を使った工作は初めてなので、カメラを回転させる機構は単純ながら苦労しています。軸のブレないしっかりとした構造にするためアルミ板でステッピングモータとベアリングのホルダを作成しています。1号機、2号機は回転軸のブレが大きいため、振動による画像の乱れがかなり激しいものでした。三号機でかなり改善されましたが、いろんな方が車載動画の振動を軽減するために試行錯誤されているようで、まだまだ課題は多いです。回転軸はカメラ三脚で使用されている1/4インチネジを6mmΦのアルミ棒から作っています。マウントのケースはタカチ製のアルミケースを加工して作っています。マウンタ自体もカメラ三脚で固定できるようの1/4インチネジ穴を底面に開けています。コントローラも市販のタカチのアルミケースを加工して作っています。電子部品をすべて実装するにはギリギリの大きさで部品のレイアウトは苦労した部分です。テプラでスイッチの説明文字を貼り付けています。コントローラは単4電池二本で動作させています。マイコンで電離電圧を監視させてバッテリー容量不足を警告できるように考えていたのですが、ソフトの開発が間に合っておらず、とりあえず液晶表示には電池電圧を表示させています。その他、カメラの角度や動作モードが表示できます。これは回転マウントとしては三つ目の作品です。完成までおおよそ二ヶ月位かかっていると思います。下の動画は一番最初に作ったものです。これは、三日ほどで完成しました。そのうち1日は部品の購入に秋葉原や、ホームセンター巡りに費やした時間です。一号機はサーボーモータを使った簡単なものでした。ほとんどArduinoの参考回路とサンプルソフトをベースにしています。Arduinoがなければ3日で動作させることは不可能だったと思います。Arduinoは以前から多少は興味があったのですが、本格的に使ったのは初めてでした。予想を超えて使える環境でした。現在は4号機を開発中です。今度は電子コンパスと加速度センサを利用して面白い使い方を考えています。Comments2012.02.12GadgetSeed開発ページ半年以上放置状態だった「GadgetSeed開発ページ」に新ネタを書いてみました。Ver.0.90」として公開しました。お休みしていた電子工作ネタも、少しづつ公開していこうと思っています。h8monの詳細は今後、GadgetSeed開発ページでお知らせしようと思います。大雑把な概要をここに紹介しています。ついで?にブログのプラットホームもWordPressに変えてみました。Comments2010.12.30またまた放置してしまった本ブログ、すでに1年7ヶ月も放置状態でした。激務状態で、工作のモチベーションもいまいちあがらず、気がつけば1年以上。本ブログも2010年度初更新です(^^;これではイカンと思い、12月から電子工作を再開しています。中途半端だったGadgetSeedも、プラットホームを新たに再開しようと思っています。Comments2009.04.11オリジナルな汎用コンピュータ時々投稿していた電子工作ネタの専用サイトを作ってみました。「オリジナルな汎用コンピュータ」を作ろうという、無謀(^^;な試みですが、それなりに形になってきたので公開に踏み切りました。H8/300H用OS「GadgetSeed」とGadgetSeedのプラットホーム「GadgetBase」の開発ページで公開中です。Comments2008.11.30サーバの入れ替えまたまた、ご無沙汰です。本サイトのサーバマシンを入れ替えてみた。以前のスペックはこんな感じだったのだが、Vistaを入れて使っていたCore2Duoのマシンと入れ替えてみた。1にしてより安全に(^^;筐体もMicroATXからATXにして今時の静音電源にしてみた。おかげでかなり静かなサーバになった。今まで動かしていたサービスをすべて同じように動かすまで数日を要したが、使ってみるとUbuntuのデスクトップはかなり使える感じだ。何より新しいアプリケーションが非常に多く供給されているのが良い。マシンパワーも格段にアップしたせいかサイトの表示もかなり速くなった。今のところ問題なく動いているようだが、不具合を発見した人は教えて下さい。Comments2008.06.01h8monのマニュアルしばらく放置していましたが、h8monのマニュアルを書いてみました。gdbでの使い方も少し書いていますが、具体的な使い方は次回に解説しようと思います。Comments2008.05.11H8クロスコンパイラcygwin版h8monとgdb使ったデバッグ方法の解説を予定していましたが、やっぱりすべてWindowsで実行できるH8マイコンの開発環境もあった方がよいかな?と思い作ってみました。cygwin用のH8クロスコンパイラを公開します。cygwinはLinuxに比べるとかなり遅いのでクロスコンパイラのコンパイルもすごく時間がかかりました。2.2GHzでも5,6時間かかりました。)インストールは以下のように行います。以下を追加するのが良いと思います。PATH=$PATH:/usr/local/h8300-elf/bin追加直後は以下のようにして変更を反映させます。~/.bashrc次のログインからは自動的にPATHが設定されます。ホームディレクトリにダウンロードされている場合のコマンド例です。-v”と入力すると以下のようなメッセージが出力されます。4.2.1~$と、いう訳でgdbについては次回解説予定です。world!”を作ってみます。ここで紹介するのは、以前に公開したh8monが書き込まれているAKI-H8/3069Fマイコンボードで動作するものです。言ってもOSも無ければ標準出力も無い環境です。出力はh8monでもコンソール入出力に使っているRS232Cで行うこととします。方法としては直接SCI1(RS232C)を制御してアスキーコード文字列を出力することが考えられますが、以下のようなソース(hello.c)でも文字を出力することが出来ます。0;}このソースだけではまだ実行は出来ません。スタートアッププログラムが必要なのですが、まずはmain()を解説します。printf()のような標準入出力関数は(使う方法はあるのですが)使えません。printf()の代わりの文字列出力関数としてprint()を書きました。中は文字列の終わり(0)まで一文字づつputch()に引数として渡しているだけです。putch()の中身はインラインアセンブラで書かれています。#2」を実行しています。#2でSCI1から文字を入出力することが出来ます。er2を0にするとer0に書かれたデータが出力されます。er2を1にするとSCI1が受信したデータをer0に書き込みます。戻り値として参照できます。(このコードはあまり良い例ではありません。このコードは引数がer0で渡されて、他のレジスタが破壊されないことを期待しています。実際にそうなるのですが、本来は「拡張アセンブリ構文」を使うべきです。今回はソースの見易さを優先してこのようにしています。)以下はスタートアップルーチン(start.s)です。#3.end各セクションを初期化してmain()をコールしています。#3」はh8monに処理を戻すための物です。#3を使用しています。スタックポインタ(er7)の初期化も必要なのですが、上記ではコメントにしています。この場合、スタックポインタはh8monが設定する初期値(0xFFFF20:内蔵SRAM)で動作します。以下はリンクスクリプト(h83069.lds)です。ram}プログラムを0x400000番地に配置するようにしています。この番地にはAKI-H8/3069FマイコンボードではDRAMが実装されています。h8monでは起動後、DRAMが使用できるようにBSC(バスコントローラ)を初期化しています。最後にMakefileです。*~以前紹介したクロスコンパイラでコンパイルできます。makeコマンドでコンパイルすると「hello.mot」が出来るはずです。h8monでは「l」コマンドでhello.motをロードすることが出来ます。Pro」がおすすめです。h8monでlコマンド入力後、「ファイル送信」機能かhello.motファイルをドロップして転送します。h8monのgコマンドでロードしたプログラムを実行します。実際に動かした画面は以下のようになります。world!」の文字が出力されています。今回のソースはここに置いておきます。ここまで読んでくれた方、お疲れ様でした。次回はh8monの目玉?である、gdbを使ったソフトの実行、デバッグを予定しています。Comments2008.05.03H8のモニタを作ってみた以前紹介したH8マイコンボード「AKI-H8/3069Fマイコンボード」は数多くあるH8マイコンシリーズの中でもH8/3069と言われるCPUを使っています。H8/3069はフラッシュメモリを512Kバイト内蔵していて、RS232Cからソフトウエアを書き換えることが出来ます。フラッシュメモリは寿命があるため書き換え回数もメーカ保証は100回程度です。(実際はもっと書き換えても大丈夫なようです。)ソフトウェアを作るには、何度も試行錯誤が必要なので、ソフトを修正するたびにフラッシュメモリを書き換えているとすぐにフラッシュメモリの寿命が尽きてしまいます。そこで、モニタソフトを作ってみました。安直な名前ですが取り敢えず「h8mon」と命名し、以下に公開しました。h8monはS-Record形式のH8用プログラムのダウンロードと実行のほか、レジスタ、メモリの参照、編集や、ブレークポイントの設定、ステップ実行機能、逆アセンブル表示機能と、おおよそソフトウェア開発に必要な機能は網羅していると思います。その他、仮想割り込みベクタやgdbのstub機能も持ちます。(これらは後ほど解説しようと思います。)h8monは、以前公開したクロスコンパイラでコンパイルできます。以下はコンパイルの例です。make正常にコンパイルが終了すれば、ファイル「h83069mon-0.80.mot」が出来ます。これをAKI-H8/3069Fマイコンボードキット付属のフラッシュ書き込みツール等で、フラッシュメモリに書き込みます。正常に書き込みが完了すれば、AKI-H8/3069Fマイコンボードをモード5で動作させます。RS232Cは適当なターミナルソフトを下記の設定で接続してください。bpsデータ:8ビットパリティ:なしストップビット:1ビットうまく動けば、ターミナルソフトに下記のようなメッセージが出力されます。2008>「h」と入力すると簡単なヘルプメッセージが出ます。次回は、h8monを使ったプログラムの動かし方、デバッグ方法を解説する予定です。(っていうか全然工作の話出てない...。