(Yamada Electronic Engineering Service)


@niftyのhomepage容量パンパンです。
で、すこしづつ削除していきます。

目次

2016年

(30)  カーソル&キャレット強調表示ソフト yCrossHairs V1.00 (free)

2015年

(29)  超音波帯域(ネコ、コウモリ)ピリオドグラム解析装置
(28)  ブリリアントカット3D表示ソフト BrilliantDiamondCut V0.01

2014年

(27)  ボード線図&ラプラス逆変換ソフト yLpWin V3.02
(26)  グラフ画像数値化ソフト FeverElephant V1.00
(25)  光線追跡プログラミング(解説書)Doc.Ver0.01b

2013年

(24)  ZEMAX ユーザ定義面DLL 確認ソフト usSurfaceViewer (ver1.19)
(23)  音声合成LSI AquesTalk pico ATP3011F4-PU 音声出力(PWM信号) 調査

2012年

(22)  シリアル通信ソフト SerialSequencer (Ver1.06)
(21)  マウス製作 STM32F103CBT6 + ADNS9500(Avago LaserStream gaming sensor)

~2011年

(20)  STM32F4 Discovery + ENC28J60 + LwIP-1.4.0
(19)  STM32F4 Discovery 単体 Text-to-Speech
(18)  PSoC 近接センサ (イルミネーション)
(17)  グラフィックLCD(秋月TG12864B-02WWBV)美咲フォント表示
(16)  uIP-0.6 uIP-0.9 uIP-1.0 H8 移植 (その3)
(15)  uIP-0.6 uIP-0.9 uIP-1.0 H8 移植 (その2)
(14)  uIP-0.6 uIP-0.9 uIP-1.0 H8 移植 (その1)
(13)  生花近接センサ (PSoC 静電センサ応用)
(12)  LD (レーザダイオード) ドライバ 800mA, 20MHzパルス変調
(11)  HITAC10 エミュレータ
(10)  グラフ画像数値化ソフト FigData (Free) 旧ソフト FeverElephant(26)に移行
(9)  C様電卓 yCalc (Free)
(8)  KPIT GNU SH ツール 最適化オプションによる不具合回避
(7)  AKI-3069F USBホストボードにUSBキーボードを接続
(6)  FATファイルシステム AKI-3694での使用
(5)  ノキアカラーLCDモジュール Nokia 6100  AKI-3694での使用
(4)  オクトパス回路 (Octopus)
(3)  yKensiro    2進 10進 16進 ⇔ ケンシロウ進数変換 (Free)
(2)  yLpWin    ボード線図  数値ラプラス逆変換 (Free)
(1)  GraphFit (Free) 旧ソフト 機能追加しFigData (10)に移行

戻る


(30)カーソル&キャレット強調表示ソフト yCrossHairs V1.00 (free)

概要
カーソル行方不明防止用、クロスヘア型のカーソル表示ソフトです。
視覚に問題無い場合、表示がウルサクなるだけです。
既存ソフトは視覚にあわなかったり、動作環境上の問題があったため作成したものです。
基本自家用ソフトです。
 説明書  yCrossHairs.pdf (173kB)
 実行ファイル(32bit版&64bit版を含みます)  yCrossHairsVer100.ZIP (420kB)
インストーラはありません。解凍後、適当な場所に置いてください。
不要となったら削除してください。レジストリは使用していません。
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージが必要です。

使用状態 (クリックで拡大)
    
設定ダイアログ (クリックで拡大)
    
履歴
    Ver1.00 2016/01/28 新規公開
開発環境
    Win7 (64bit) + VS2010SP1 (C++ & MFC)
動作確認環境
    Win7(64bit)

→目次

(29)超音波帯域(ネコ、コウモリ)ピリオドグラム解析装置

概要
何も聞こえないのに、壁や天井に向かって様子をうかがうネコには何か聞こえるらしい、
ということでネコ可聴周波数帯域のピリオドグラムを表示する装置を検討試作しました。
ピリオドグラムはパワースペクトル(密度関数)の推定量です。装置としてはFFTアナライザーの簡易版です。
ネコの他、コウモリの超音波帯域も似た感じです。
さらに、中年オヤジがツマヨウジを使う際、高音圧超音波を発生する事例も観測できる、、、
、、、観測したところで どうしようもないけど。

詳細はPDFで
説明書  PDFファイル  FFT_UltraSonicPeriodgramV101.pdf (3.89 MB)
回路図  PDFファイル  circuit_ultra_sonic.pdf (236 KB)

YouTube


試作装置 (クリックで拡大)
    
FFT自体は16bit、256ポイント計算で、実行時間は470usec程度(実行中ポートにH出力し実測)です。
オフセット減算、窓関数乗算、感度補正、各スペクトルの時間移動平均を含め、10ms毎にピリオドグラムを計算しています。
ピリオドグラムは、FFT結果のcos成分sin成分から直接計算しています。自己相関関数計算は行っていません。
また、ウェルチの手法による誤差低減も行っておりません。今回最小ハードウェアが目的で、採用すると表示更新周期が大きくなります。
そのかわり各スペクトルの時間移動平均を計算しています。(実際は、IIRデジタルフィルタ)

超音波センサは10kHz~60kHz対応の超音波マイクロホンで、音圧-周波数応答を補正して使用しています。
ノイズフロア 左:補正無し / 右:補正有り   (クリックで拡大)
           

履歴
    Ver1.00 2015/02/22 新規公開
    Ver1.01 2015/03/02 誤記訂正(32dot→16dot)

→目次

(28)ブリリアントカット3D表示ソフト BrilliantDiamondCut V0.01

ブリリアントカット(ダイヤモンド)の数値パラメータから3D表示を行うソフトです。

web上にブリリアントカット数値パラメータから3Dモデルを算出する例もありましたが
四角形切子面(ファセット)が平面でなく、鞍型となっているものもありました。
また、ガードル(上下中間の円柱部)厚がある3Dモデルはみつかりませんでした。
パラメータをいろいろ変えて外観変化のイメージを掴むためのソフトとします。
3DモデルをSTL形式で保存する機能は省略してあります。
(ガードル部の細分化の程度など、3Dモデルの使用用途に応じた最適化が必要で)
必要であれば連絡してください。

YouTube
 
 実行ファイル(32bit版&64bit版を含みます)  BrilliantDiamondCutV001.zip (1.97 MB)
インストーラはありません。解凍後、適当な場所に置いてください。
不要となったら削除してください。レジストリは使用していません。
VS2010ランタイムライブラリがなくても動作するはずですが、未確認です。
VS2010ランタイムライブラリが必要な場合は、
「Microsoft Visual C++ 2010 再頒布可能パッケージ」をインストールしてください。

使い方&例 (クリックで拡大)
         
履歴
    Ver0.01 2015/02/08 新規公開
開発環境
    Win7 (64bit) + VS2010 (C++ & MFC)
動作確認環境
    Win7(64bit)
    WinVista(32bit)

→目次

(27)ボード線図&ラプラス逆変換ソフト yLpWin V3.02

yLpWin V3.xxは、同V2.00の後継ソフトです。
急遽、フィルタ検討のためWin7向けに修正しました。使う用事が発生した時点でバージョンアップしています。
簡単な伝達関数でもブレークポイント周波数を計算するのが面倒で、ボード線図作成に使用しています。
旧Macintosh SymantecThinkC → SymantecC++ → Windows98 VC6 → VS20xx とコンパイル環境も変わっています。
自作ソフトのなかで最も長期使用しているものです。
yLpWin V3.02説明書  PDFファイル  yLpWinV302.pdf (381 KB)
    (セットアップファイルに含まれています)
 セットアップファイル(64bit版)  SetupyLpWin64V302.zip (3.18 MB)
 セットアップファイル(32bit版)  SetupyLpWin32V302.zip (2.92 MB)
解凍後、フォルダ内setup.exeを実行してください。
VS2010以降ランタイムライブラリがOSに含まれなくたったのでsetupファイルを作成することにしました。

使用例 (クリックで拡大)
    
Ver3.xx履歴
    Ver3.00 2014/08/04 Win7向け新規公開
    Ver3.01 2014/08/06 BODE設定内グラフ表示選択追加、メモリ管理変更
    Ver3.02 2014/08/07 グラフ画像保存サイズ変更追加
開発環境
    Win7 (64bit) + VS2010 (C++ & MFC)
動作確認環境
    Win7(64bit)
    WinVista(32bit)

→目次

(26)グラフ画像数値化ソフト FeverElephant Ver1.00

2014年現在世間では、論文捏造やらデータ捏造が流行っているようで ....
旧公開ソフトを少し改良しデータ捏造支援ソフトとします。 否、グラフ画像の数値データ化ソフトです。
FeverElephantは、FigDataの後継ソフトです。
FeverElephant説明書  PDFファイル  FeverElephant.pdf (1.14 MB)
    (セットアップファイルに含まれています)
 セットアップファイル(64bit版)  setupFeverElephant64.zip (6.37 MB)
 セットアップファイル(32bit版)  setupFeverElephant32.zip (5.80 MB)
解凍後、フォルダ内setup.exeを実行してください。
VS2010以降ランタイムライブラリがOSに含まれなくたったのでsetupファイルを作成することにしました。

YouTube
 
使用例 (クリックで拡大)
    
履歴
    Ver1.00 新規公開
開発環境
    Win7 (64bit) + VS2010 (C++ & MFC)
    OpenCV 2.49 (最終的に画像ファイルのオープン/セーブくらいしか使ってないです)
動作確認環境
    Win7(64bit)
    WinVista(32bit)

→目次

(25)光線追跡プログラミング(解説書)Doc.Ver0.01b

光線追跡プログラミングの基本解説です。
usSurfaceViewer内で行っている光線追跡の解説でもあります。
光線追跡プログラミング  PDFファイル  RayTraceVersion001b.pdf (773 KB)

文書は、W32TeXで作成し、説明図はすべてgnuplot4.6.3で作成しました。
非営利目的であれは、それらソース提供可能です。

概要
光線追跡のプログラミングついて基本部分の解説をします。おもにシーケンシャルな追跡を扱います。
「スネルの法則」以外の光学的な内容はありません。幾何計算、、、図形計算のみです。
なるべく式を省略せず記述しています。また、屈折計算のみで、反射については扱っていません。
ZEMAX ユーザー定義面DLL サンプルソースを例とします。ただしそれらはプログラム作成用であって実際の
評価用ではないと思われ、詳しい動作説明は省きます。また最新のZEMAX 機能についても承知しておらず
内容不適合かもしれません
いちから光線追跡をやりたいとか、光学シミュレータソフトへ独自形状面を追加して光線追跡をやりたいひと向けです。
3D グラフィックプログラミングであればOpenGL などを調査したほうがよいです。
光学シミュレータ全般を構築するのであればGNU Optical design and simulation library
(http://savannah.gnu.org/projects/goptical) などを調査したほうがよいです。

目次
1  シミュレーションの方法
    1.1  シーケンシャル
    1.2  ノンシーケンシャル
2  ベクトル演算
    2.1  内積
        2.1.1  内積定義
    2.2  外積
        2.2.1  外積定義
        2.2.2  外積の応用
3  スネルの法則
    3.1  光線屈折式
4  面定義関数例
    4.1  非球面(偶数次項を含まない場合)
    4.2 非球面(偶数次項を含む場合)
5  光線屈折計算
    5.0.1  Cプログラム例
6  入射光と面との交点計算
    6.1  ニュートン法
        6.1.1  ニュートン法概要
        6.1.2  ニュートン法(3次元)
    6.2  2分法
        6.2.1  2分法概要
        6.2.2  2分法(3次元)
        6.2.3  Cプログラム例
        6.2.4  使用例
7  法線ベクトル計算
    7.1  非球面の場合
    7.2  一般的な曲面の場合


→目次

(24)ZEMAX ユーザ定義面DLL 確認ソフト usSurfaceViewer(Ver1.19)

usSurfaceViewerは、ZEMAXユーザ定義面DLLの確認用に作成したものです。
usSurfaceViewerはZEMAXユーザ定義面DLLを扱いますが、ZEMAXとは無関係に動作します。
  ZEMAXには、ユーザ定義面DLLのデバッグ確認機能はありません。
例えば、ZEMAX光線追跡を確認する場合、確認したい位置に光線を通すのは困難です。
usSurfaceViewerは、マウス操作で光線入射位置を変えることができ、確認を容易にします。

YouTube
 
機能概要
ZEMAXユーザ定義面DLLを読み込み、
    (1) 関数 UserDefinedSurface (ZEMAXからコールされる唯一の関数) を呼び出し、
        呼び出し前後の引き数を比較できます。
    (2) 1光線について光線追跡を行います。
        入射光線の通過位置および方向余弦をマウス操作で変更できます。
    (3) 光線と面との交点での、サグ断面図を表示します。
        また、カーソルに沿ったサグ断面図を表示します。
        また、入射出射軌跡に沿ったサグ断面図を表示します。
    (4) 3Dモデルを生成し、シェーディング図を表示します。
        この3Dモデルは、STL形式でファイル保存できます。
    (5) ユーザ定義面DLLが gradient index の場合、
        カーソル x , y , z 各方向の n , dn/dx , dn/dx , dn/dx 変化を表示します。
    (6) C言語を真似たプログラム言語でsag関数 z = f(x , y) を定義できます。
        ユーザ定義面DLLが無くても、動作します。

 usSurfaceViewer使い方  usSurfaceViewerGuide.pdf (実行ファイル一式に含まれています)
 実行ファイル一式  usSurfaceViewerV1.19.zip

履歴
    Ver1.09 新規公開
    Ver1.10 光線追跡描画の表示/非表示チェックボックス追加
    Ver1.11 カーソル座標表示バグ修正
    Ver1.12 演算時間が長いDLLや、面積が大きい面を扱う場合、
               フリーズ状態回避のため、以下変更。
               2DシェーディングBitmap作成中にプログレスダイアログを表示し、
                 中断可能とした。
               3Dシェーディングモデル作成時、3角形面素数を最大1000000に制限.。
    Ver1.13 マウス操作変更
               光線入射方向変更  Cntrl+左ボタン → Shift+右ボタン
    ver1.14 2Dサグ図内に、n1, n2 を表示
               DLLが、面の光線入射側の屈折率を n1 、出射側の屈折率を n2 
               とすることを強調する目的
    ver1.15 3Dモデルを、ASCII形式STLで保存/読み込み → 
                ASCII形式STL BUN形式STL 両方に対応
    ver1.16  (旧)FIXED_DATAのみに対応 → 
                (新)FIXED_DATA FIXED_DATA2 FIXED_DATA3 FIXED_DATA4 に対応
    ver1.17  Interpreterウインドウを追加し、プログラムで面定義可能とした。
    ver1.18  Interpreterに比較演算、論理演算、if~else~ 追加。
                Interpreter実行時のエラー処理変更。
    ver1.19  FIXED_DATAのparam[] xdata[] 変数名称を取得表示を追加。
                高速化。

開発環境
WinXP (32bit) + VS2008 (C++ & MFC)
動作確認環境
WinXP (32bit) および Win7 (64bit) 
  Win7では、以下が必要かもしれません。
  Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)
  Microsoft Visual C++ 2008 再頒布可能パッケージ (x64)


使用例 (クリックで拡大)
 

   ・・・・・・ ユーザ定義面 DLL をいじって ・・・・・・
    ユーザ定義面 DLLのソースをコピーして、usSurfaceViewer のローカル関数を作り、
    VisualStudio デバッグ動作させると、いろいろ判ってきました。
    (大部分は内緒にします。でも、ちょっと光線追跡のこと)
    光線追跡の際、光線と面の交点座標を計算しますが、、、
    いろんな所で、光線追跡にニュートン法を使う解説とか見ましたが、実際、充分高精度に収束しないこともあった。
       2分法がいいかも。
    言うのは簡単で、実際これをプログラム化するのは相当大変です。
    光線の通過点がz=0の(x, y)で与えられること、曲率は +/- どっちもあること、アレイ形状の対応のこと、
    いろいろ考えると、やっぱり、遠方から面に向かって粗サーチしてから、
    交点を2分法計算したほうがいい。

   ・・・・・・ FIXED_DATA FIXED_DATA2 FIXED_DATA3 FIXED_DATA4 の対応 ・・・・・・
    ユーザ定義面 DLL 開いたとき、ZEMAX がどのようにFIXED_DATAのバージョンを判定しているのか?
    サポートフォーラムの古い記事
    http://www.prolinx.co.jp/zemaxforum/viewtopic.php?f=23&t=488&sid=994e5a9b29d8cef54d7fcebe92ea1d20
    では、関数名のエクポートについて書かれていない。
    ZEMAX側は、DLL 開いたとき、1番目の関数を UserDefinedSurface(USER_DATA *UD, FIXED_DATA *FD)
    として扱っている感じがする。
      (関数名のエクポートしないで、サンプルのus_array,cをコンパイルしてDLLつくり、ZEMAXで使うと問題なし)
    それだけでは、FIXED_DATA2 FIXED_DATA3 FIXED_DATA4 に対応できるのか?
    最近のus_stand. c を見ると、 us_stand.dll で定義されているのは、 UserDefinedSurface3(USER_DATA *UD, FIXED_DATA3 *FD)
    である。 もともとZEMAX添付のus_stand.dllをusSurfaceViewerで開くと、関数名UserDefinedSurface3がエクスポートされていた。
    ユーザ定義面DLLをコンパイルする際、defファイルで、
        EXPORTS
             UserDefinedSurface3 @1
    とかしないといけないのでは? どこかに説明があるのか、ZEMAXが他の特別なことをやっているのか?

   ・・・・・・ インタープリタの追加 ・・・・・・
   C言語を真似たプログラム言語でsag関数 z = f(x , y) を定義できるよにしました。
   ZEMAX DLLなくても動かせます。
   こんな、ソースを入力すると、
            x1 = abs(x/4);
            y1 = abs(y/4);
            z = x1 + y1;
            z = min(4, cos(z*pi*2));
   こんな、面ができます。(とうていレンズ面とは思えませんが)
  (クリックで拡大)


→目次

(23)音声合成LSI AquesTalk pico ATP3011F4-PU 音声出力(PWM信号) 調査

ATP3011F4は、低価格な音声合成LSIで、
音声品質もそれなりと思われる。
音声品質確認のため音声出力(PWM信号)を調査した。

  測定回路 (クリックで拡大)
 
  マイコンボード STBee-Mini に ATP3011F4-PU をSPI接続。
  音声出力(PWM信号)は、STBee-Miniの TIM2 CH2 に接続し、周波数&Dutyを観測する。
  TIM2は16bitカウンタで、カウントクロックはシステムクロック72MHzを使用。
  PWM信号の1波ごとに、周期&パルス幅を測定し、周波数&Dutyを算出している。
 
  また、STBee-Mini にはDACがないので、MCP4922 をSPI接続。
  MCP4922 は、2CH 12bit DAC で、SPIクロック20MHz、 DAC-setting-time 4.5us
  PWM信号の1波ごとに、Duty値をDAC出力する。

  PWM駆動周波数 = 31.8kHz (実測) 。
  ATP3011F4-PUのクロックが内蔵RCオシレータなので、変動は有り得る。

  波形観測 (クリックで拡大)
  ATP3011F4への発声コマンドは、taro- (太郎)
   (CH1:AOUT , CH2:/PLAY)
  音声出力ピンAOUTは、発声中のみPWM出力されている。
  /PLAYピンは発声ステータスで、発声中Lレベル。
  PWM出力電圧は 0 - VDD で,、
  発声していないときと、発声しているときでは、DCレベルが変動する。、
  
   (CH1:AOUT , CH2:DAC出力)
  実際、DutyをDA変換して観測すると、
  DCレベルが変動する。

   (CH1:AOUT , CH2:/PLAY)
  /PLAY H→L の発声開始直後から、PWM出力されている。
  ほぼ 0% Diuty から始まっている。

   (CH1:/PLAY , CH2:DAC出力)
  /PLAY H→L から、一旦Dutyを 0→50% まて変化させ、その後、音声信号のPWN駆動している。
  また、音声信号のPWN駆動終了後、/PLAY L→H 時点から、Dutyを 50%→0 まて変化させている。
  DCレベル変動時のノイズ音対策と思われる。

   (CH1:/PLAY , CH2:DAC出力)
  Duty  0→50% は、直線的に22ms (実測)で行われている。

   (CH1:/PLAY , CH2:DAC出力)
  Duty  50%→0 も、直線的に22ms (実測)で行われている。

   (CH1:/PLAY , CH2:DAC出力)
  これは、STbee-Mini のプログラム処理で、DCレベルの変動がないアナログ音声信号とした例。
  /PLAY がHレベルのときは、DA出力は、VDD/2 固定。
  /PLAY H→L 変化時から、PWM駆動波 800 サイクルは無視してDA出力は、VDD/2 固定。
  PWM駆動波 800 サイクル経過後から、/PLAY L→H となるまで、有効な音声信号として、DA出力している。
  800サイクルは、22ms / (1/31.8kHz) = 700 に余裕追加したもの。
 
<結果>
  DA出力を抵抗分圧してアンプに接続しした場合(ローパスフィルタ無し)と
  ATP3011F4データシートのスピーカ駆動回路で、
  試聴比較したところ、特にDA出力のメリットはありません。
 DA出力にして、ローパスフィルタを無くすことで多少聞き取り易くなるかと期待したがダメでした。
  ローパスフィルタは、
  5次、エリプティック、スイッチトキャパシタフィルタとか使って4kHz帯域やってみたけど、
  効果は無し。
  もともとの音声帯域が4kHzと狭いのが、、、.。

→目次

(22)シリアル通信ソフト SerialSequencer(Ver1.06)

SerialSequencer.exeは、シリアル通信ソフトで、
マイコンボードのprintfデバッグや調整用に作成したものです。
 複数のコマンドを登録し、選択したコマンドを順次送信します。
 受信データは、ターミナルウインドウに表示します。  順次送信が基本機能で、条件判定やジャンプはありません。
  「送信後の受信待ち」と「送信後の遅延」は可能です。
 受信待については、改行コードを指定して、
  1行の受信データ待ちを行うことができます。
 設定内容をファイル保存し、登録ボタンで読込&送信できます。

 SerialSequencer使い方  SerialSequencerGuide.pdf
 実行ファイル  SerialSequencerVer1.06.zip
    ソースが必要な場合は連絡ください。送ります。
変更
    Ver1.05 新規公開
    Ver1.06 
        (1) フロー制御がOFFの場合、また、ソフトフロー制御(Xon/Xoff)の場合
                DSR (Data Set Ready)をイネーブル状態固定
                RTS (Ready To Send)をイネーブル状態固定
                とした。 
        (2) シリアル設定をINIファイルに保存すよう変更。

開発環境
WinXP (32bit) + VS2008 (C++ & MFC)  WinXP(32bit)以外の環境で動作確認していません。
  Win7では、以下が必要かもしれません。
  Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)
  Microsoft Visual C++ 2008 再頒布可能パッケージ (x64)

使用例 Agilent 66312A ダイナミック測定DC電源
 メインウインドウ
 サブウインドウ

→目次

(21)マウス製作 STM32F103CBT6 + ADNS9500(Avago LaserStream gaming sensor)

頑丈なマウスが欲しい、唯それだけでマウス製作。
  CPUはマウスにしては贅沢だけど、手持ちのSTM32F103CBT6を採用。
  プログラムに不都合があれば修正して、DFUで直ちにFLASH書込みできるし。
  マウスセンサはゲーミングマウス用のADNS9500を採用。(これしか入手できなかった)
  マウスホイールは使わず、4方向スイッチ(センタープッシュスイッチ付)とした。
  ADNS9500については、
  Fingertip Laser Sensorページ http://toychest.in.tum.de/wiki/projects:fingertip を参考とした。
  ロボットの指にマウスセンサーを仕込み、物を掴んだときの滑り検出とは、おもしろい。

外観

表板アルミ t1.5、底板アルミ t2.0  スペーサと超低頭ネジによる構成。

回路
  STBeeMiniとほぼ同じ、但し、FLASH書込みがUSART, USB(DFU)どちらでも可能とした。
  一度、USARTでDFUプログラムを書込み、以降はUSBケーブルだけで書込みができるようにした。
  ADNS9500の取り付けは、本来基板角穴が必要、基板費用節約のため角穴はやめて、
  ADNS9500のピンを曲げて基板裏側に取り付けた。
  回路図 & パターン図 MOUSE.pdf

プログラム
  ・DFUプログラム ソース&HEXファイル _DFU_V001.zip
        左右ボタン同時押し状態でリセット(USBケーブル接続によるパワーONリセット)すればDFUモードとなる。
  ・マウスプログラム ソース&HEXファイル  _MOUSE_USART_V004.zip
   
機能
  只のマウス。
  マウスホイールの代わりに、4方向スイッチ(センタープッシュスイッチ付)なんで、
  4方向スイッチの前後でマウスホイール回転を模擬する。 ONし続けると回転が続くものとした。(加速あり)
  4方向スイッチの左右は、カーソル左右微動とした。
  センタープッシュスイッチは、そのままホイールボタン(マウスセンターボタン)。
    ・意外に良かったこと
       ホイール代わりの4方向スイッチ、テキストとかスクロールする分には、
       連続ONでゆっくり送りから加速、がホイールをガリガリ回し続ける手間がなく意外にいい。
    ・意外にダメなところ
       寸法、もうちょっと長くないと持ち難い。 左右ボタンの間隔もっと狭いほうがいい。

開発環境
  「STM32F4Discovery 単体 Text-to-Speech」 の開発環境と同じ。

→目次

(20)STM32F4 Discovery + ENC28J60 + LwIP-1.4.0

STM32F4Discoveryに TCP/IPスタックLwIPを移植しネットワークテスト。
CPUはEthernet機能を持つが、ボードはネットワーク非対応なので、ENC28J60ボードを利用。接続はSPI。
STMicroelectronicsSTM32F107VB DesignSupportページの
AN3102 lwIP TCPIP stack demonstration for STM32F107xxを参考に、LwIPを移植。

 機能
Web Server と TelnetPort:23接続。AN3102のFTP機能は実装していない。

 プログラムについて
MACアドレスは、lib/lwip-1.4.0-port/netif/ethernetif_enc28j60.h 内以下で指定。
#define    MAC_0    0x00
#define    MAC_1    0x0E
#define    MAC_2    0x6C
#define    MAC_3    0x5A
#define    MAC_4    0xA5
#define    MAC_5    0x00

テストはDHCP機能を使用。
lib/lwip-1.4.0-port/netif/lwipopts.h 内、以下をコメントアウトすれば固定IPアドレス。
#define    LWIP_DHCP    1

固定IPアドレスは、inc/netconf.h 内、以下で指定。
#define    IP_ADDDRESS()    IP4_ADDR(&ipaddr, 192, 168, 11, 55)
#define    IP_MASK()        IP4_ADDR(&netmask, 255, 255, 255, 0)
#define    IP_GATEWAY()    IP4_ADDR(&gw, 192, 168, 11, 1)

 ボードI/O
PC2/ADC123_IN13 → ADC3入力(0~3.3V)
PD8/USART3_TX → シリアル出力 (Baud:9600, Data:8bit, Parity:None, Stop:1bit) デバッグモニタ用
PD9/USART3_RX → シリアル入力 (Baud:9600, Data:8bit, Parity:None, Stop:1bit) デバッグモニタ用
PB11 → ENC28J60 RESET
PB12 → ENC28J60 CS
PB13/SPI2_SCLK → ENC28J60 SCK
PB14/SPI2_MISO → ENC28J60 SO
PB15/SPI2_MOSI → ENC28J60 SI

起動時モニタ出力(USART3)


Web Server テスト
 リロードでAD変換値更新。

TelnetPort:23接続テスト


 開発環境
  (↓)「STM32F4Discovery 単体 Text-to-Speech」 の開発環境と同じ。

 ソースファイル
  LwIP140_V000.zip

 注記
ENC28J60との接続はSPI2を使用している。そのためボード上のマイクロホンは使用できない。
マイクロホンを併用する場合、ENC28J60との接続はソフトウェアSPIとする必要がある。
lib/lwip-1.4.0-port/ENC28J60/spi_enc28j60.h 内の、
//#define    USE_SOFTWAEW_SPI
箇所、#defineを有効にすれば、ソフトウェアSPIとなる。

 追記
STM の STM32F407VE ページ http://www.st.com/internet/mcu/product/252149.jsp
Design support に、以下が追加されています。
STM32F4Discovery 上での LwIP の扱いについては、こちらを参考にしたほうがよいかもしれません。
APPLICATION NOTES
  AN3966: LwIP TCP/IP stack demonstration for STM32F407/STM32F417 microcontrollers
FIRMWARE
  LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers

→目次

(19)STM32F4 Discovery 単体 Text-to-Speech

STM32F4Discoveryボード単体での音声合成テスト。
機能は、AD変換値(ADC3)の読み上げを繰り返すもの。音声はボード搭載のオーディオDACから出力する。

 プログラムについて
テキスト→発音記号列変換 : english2phoneme を移植
         FLASHに、大容量な辞書データを載せることは不可で、古典的なenglish2phonemeを使用。
 発音記号列→音声波形データ変換 : rsynth-2.0 の一部を移植
         english2phonemeとrsynth-2.0の発音記号列は異なるので、
         lib/rsynth-2.0-port/phtoelm.def を変更して調整。

 ボードI/O
PC2/ADC123_IN13 → ADC3入力(0~3.3V)
PD8/USART3_TX → シリアル出力 (Baud:9600, Data:8bit, Parity:None, Stop:1bit) デバッグモニタ用
PD9/USART3_RX → シリアル入力 (Baud:9600, Data:8bit, Parity:None, Stop:1bit) デバッグモニタ用

動作時モニタ出力(USART3)

動作時音声出力   wav ファイル TTS_ADC_V002.wav
YouTube
 
開発環境
「ねむいさんのぶろぐ」ARMマイコンをGCCでビルドする環境を整える(2011年版)の説明どおり。
EclipseやTrueStudioは好きになれず、Sourcery G++ Liteを使用していたが、
発生していた問題を解決されており、大変有り難い。
  コンパイラ: Sourcery G++ Lite 2011.03-42 for ARM EABI
  make: WinAVR-20100110
  Programmer's Notepad
makefileは書き換えている。デバッグ環境には対応していない。

 ソースファイル
  TTS_ADC_V002.zip

→目次

(18)PSoC 近接センサ (イルミネーション)

生花近接センサのつづき、
機能は、手を近づけるとLEDの点燈個数が変化するもので、
点燈&消燈はPWM制御を行っている。点灯中はチラツキ動作を行う。
実験の目的
近接感度調整をVRで変化できないか調査。
VR調整値をAD変換で取り込み、静電センサ部(CSD)各パラメータを変化させている。
 結果、多少の感度調整は可能、期待した程ではなかった。
CSDの複数のパラメータをVR1個で適度に変化させるのは、困難な面がある。

  CPUボード

  回路図
ポート接続
P05   :  近接センサ電極 (R11 は0Ωを使用)
P03   :  シールドドライブ 出力
P07   :  感度調整VR接続 (0-5V)
P12   :  LED カソード (シンク ドライブ)
P14   :  LED カソード (シンク ドライブ)
P16   :  LED カソード (シンク ドライブ)
P20   :  LED カソード (シンク ドライブ)
P22   :  LED カソード (シンク ドライブ)
P24   :  LED カソード (シンク ドライブ)
P26   :  LED カソード (シンク ドライブ)
P00   :  LED カソード (シンク ドライブ)
           (LEDアノードは+5V接続、R2~R9は1kΩを使用)

開発環境 : PSoC Designer 5.0 (Service Pack 4.5 - Build 874 - May 07, 2009)
書き込みツール : PSoc MiniProg (文献 CQ出版 PSoCマイコン・スタートアップ に付いていたもの)
プロジェクトファイル  Illuminations_CY8C21534_V203.zip

  イルミネーション動画

その他
実験基板の余り無償配布します。 残 0 枚 (リアルタイムで更新してませんので、あしからず)
お一人1枚、基板のみです。 PSoC CY8C21534-24PVXI は秋月電子通商で購入できます。
メール受付後、返信用封筒(切手貼り付け必要)を送って下さい。
基板は、4cm x 4cm, t1.6 です。
基板品質はいまひとつなんで、ご了解の上。

→目次

(17)グラフィックLCD(秋月TG12864B-02WWBV)美咲フォント表示

美咲フォントは文字間のスペースを含め 8x8dot であり、8dot単位でデータを扱うグラフィックLCDには都合よい。
秋月TG12864B-02WWBVの場合、縦8dot単位で表示データを扱う、一方、FONTX形式フォントは横方向のdotデータである。
今回、フォントデータはそのままで、1文字表示するごとに、横→縦変換している。
CPUボード : AKI-SH7125
開発環境 : KPIT GNUSHv10.03-ELF + HEW-Version4.08
CPUとLCDの接続は、LCD128X64.H 内で定義している。
    LCD DB7-0 → CPU PE7-0
    LCD RS     → CPU PE8
    LCD RW    → CPU PE9
    LCD E      → CPU PE10
    LCD CS1  → CPU PE11
    LCD CS2  → CPU PE12
    LCD RST  → CPU PE13

 ソースファイル  MP3Prj.zip

 
美咲フォント表示には、秋月TG12864B-02WWBVの場合dotサイズが大きく、やや読み取り難い気がする。

→目次

(16)uIP-0.6 uIP-0.9 uIP-1.0 H8 移植 (その3)

AKI-H8/3069 LANボードを使った uIP 試用の続き。

uIP-0.9 Web Server 利用 パソコン(IE8使用) からのI/O制御
AKI-H8/3069 LANボード用IOボードには、ポート接続可能なDIP-SW(4P)とLED(2個) が搭載されている。
ブラウザにDIP-SWの状態を表示、またブラウザ側からのLED ON/OFF制御実験。

 Web-Server-I/O-control  uIP0.9_V006_net_httpd.zip
 uIP-0.9 Web Server は httpメソッド POST には対応していない。
送信ボタンに対応するため、POST処理を追加。(httpd.c 内)

fsdata.c の生成
オリジナル配布のuIP-0.9内には、ファイルシステムソースファイル fsdata.c の生成用に、
perlプログラムが含まれている。( makefsdata )
cygwin で perl makefsdata を実行して、fsdata.c を生成している。
フォルダ fs 内のファイル拡張子により、HEADER情報を追加するので、要注意。
fs 内のファイル拡張子を変更した場合(例えば、オリジナルcgiファイルに拡張子 .cgi を付ける等)
余計なHEADER情報が追加されるので、makefsdata を変更したほうが良い。



→目次

(15)uIP-0.6 uIP-0.9 uIP-1.0 H8 移植 (その2)

AKI-H8/3069 LANボードを使った uIP 試用の続き。

uIP-0.9 Web Server と Telnet の両立
 Web Server & Telnet  uIP0.9_V005_net.zip
 IP-Addressは固定で、net.c 内、以下で指定。
  u16_t default_hostaddr[2] = { HTONS(0xC0A8),HTONS(0x0B37) }; // 192.168.11.55
  u16_t default_netmask[2] = { HTONS(0xFFFF),HTONS(0xFF00) }; // 255.255.255.0
  u16_t default_router[2] = { HTONS(0xC0A8),HTONS(0x0B01) }; // 192.168.11.1

uIP-1.0 Web Server と Telnet の両立、および DHCP の利用
 Web Server & Telnet   & DHCP;uIP1.0_V005_net.zip
  IP-AddressはDHCPにより決定、取得できなかった場合 net.c 内以下を使用。
    u16_t default_hostaddr[2] = { HTONS(0xC0A8),HTONS(0x0B37) }; // 192.168.11.55
    u16_t default_netmask[2] = { HTONS(0xFFFF),HTONS(0xFF00) }; // 255.255.255.0
    u16_t default_router[2] = { HTONS(0xC0A8),HTONS(0x0B01) }; // 192.168.11.1
  DHCPを使用するかどうかは、net.c 内以下で指定。
    unsigned char dodhcp = 1; // =0:FIX-ADDRESS, =1;DHCP
  起動後、IP-Address情報を AKI-H8/3069 LANボード RS232Cから出力。(9600bps, 8bit, non-parity, 1stop)
    
→目次

(14)uIP-0.6 uIP-0.9 uIP-1.0 H8 移植 (その1)

H8/300H 終息とはいえ、秋月その他の手持ちマイコンボードを有効活用したい。
ネットワーク接続用に、uIP移植を試行。
  uIP-0.6 : H8/Tiny
  uIP-0.9 : H8/300H, SH/Tiny
  uIP-1.0 : H8/300H
のようにメモリ容量に応じuIP各バージョンを使い分けるため、各バージョンの移植を試行。
各バージョンの移植実験はAKI-H8/3069 LANボードで実施。
uIPは、AVR, H8 その他に移植は行われているので、それらを利用。
http://www.sics.se/~adam/uip/index.php/Ports の Downloadable Ports で紹介されているものを利用。
開発環境 : KPIT GNUH8v0902-ELF + HEW-Version4.04
 < プロジェクトファイル利用の注意点 >
 プロジェクト内にはリンクしていないファイルも存在。main.c は使用していない。main()は uIPprjct.c 内。
 変更を加えたuIP関連ファイルは、フォルダunix内に置いている。
 実際どのファイルをリンクしているのかは、HEWから確認して下さい。
 またInclude file directoriesもHEWから確認して下さい。
 ip address は 192.168.11.55 に設定してあります。(uIP-0.6 は uipopt.h内で設定。 uIP-0.9 uIP-1.0は main()内で設定。)
 AKI-H8/3069 LANボード RS232Cからは、デバッグ情報を出力します。(9600bps, 8bit, non-parity, 1stop)

uIP-0.6 Web Server
 Web Server   uIP0.6_httpd_V003.zip

uIP-0.6 Telnet
 Telnet   uIP0.6_telnetd_V004.zip
telnetd.c shell.c は uIP-1.0のものを利用、但し、telnetd.c は大変更。

uIP-0.9 Web Server
 Web Server   uIP0.9_httpd_V003.zip

uIP-0.9 Telnet
 Telnet   uIP0.9_telnetd_V004.zip
telnet.c は使用せず、uIP-1.0 の telnetd.c shell.c を利用、但し、telnetd.c は大変更。

uIP-1.0 Web Server
 Web Server   uIP1.0_webserver_V003.zip
H8S2472用に既に移植されたものを利用。
LED-ON/OFFデモ機能動作せず変更(httpd.c led.shtml 変更して httpd-fsdata.c 生成)
実際にLEDはON/OFFしませんが、AKI-H8/3069 LANボードのRS232Cがら情報表示します。

→目次

(13)生花近接センサ (PSoc 静電センサ応用)

花瓶に生けられた生花に手を近づけると反応するセンサ。
 実験使用の生花
 近接センサ電極を、シールドドライブした同軸ケーブルでPSoCに接続できないか実験を行った。 
PSoC CSD近接センサのシールド機能に関しては、アプリケーションノート AN42851があるが、
これは、センサ電極付近の金属に対する対処であり、あまり参考にならなかった。
 シールドドライブした同軸ケーブルを使って、近接センサ電極をPSoCから離した場合、
近接センサ電極は浮遊容量が増すよう大きくする必要があること
(タッチSWの場合、センサパッドを同軸ケーブルでただ接続するのはダメで何か...)
また、それなりの大きさのセンサ電極にしても検出感度が低かった。
 そこで、センサ電極を大きくするため、花瓶の水にセンサ電極(ワイヤ)を突っ込んだ。 花瓶内の水を電極利用するつもりで。
結果、花瓶が近接センサとして作用するだけでなく、花や葉部分まで近接センサとして働いた。(5~10cm程度で検出)
(回路&動作)
 CY8C21534-24PVXI にセンサ電極、LED 8個取り付けもの。
近接検出すると、LED 8個の点燈個数が徐々に増え、非検出となれば、点燈個数が徐々に減る。
点燈箇所は、近接検出する毎にランダム。 LED単体の点燈消燈もゆっくり行っている(ソフトによるPWM制御)。
 回路図
 センサ形状 → リード線部分を、適当にくしゃくしゃにして花瓶の水の中、茎の周りに入れた。
(PSoC プロジェクトファイル)
PSoC_Designer_5.0_Service_Pack_4.5 使用
Illuminations_CY8C21534_Chip_V104_proximity_random.zip
(LED点燈の様子)
手を近づけている様子も含め録画するとLEDが見えなかったので、LED部分拡大
Vased FlowersLED.wmv (1MB)

→目次

(12)LD (レーザダイオード) ドライバ 800mA, 20MHzパルス変調

大電流、高速スイッチング可能なレーザー駆動装置の開発検討。

目標, 条件
    ・ パルス変調 矩形波 20MHz 程度
    ・ 電流 800mA (無バイアスで変調可能とする)
    ・ LD動作電圧Vop(MAX):6Vに程度対応
    ・ ACC動作とする
    ・ LDの接続は、同軸ケーブルで行う。(LDマウントヘッドと分離)
    ・ LD駆動電流源はソース型とし、LDカソードはGND接続する。
    ・ LDマウントヘッドの冷却制御は含めない。

対象LD (例)
    日亜 NDV7112    400-405[nm]  Po:600[mW]  Ith:140[mA]  Iop:550[mA]  Vop:4.1[V]
    日亜 NDU7212E   370-380[nm]  Po:200[mW]  Ith:200[mA]  Iop:390[mA]  Vop:4.4[V]

予算が有る場合は信頼できるメーカ製に発注したほうがよいと思いますが、
自分で開発したい方はご参考にどうぞ
        → LD_DRIVE_YEES_secure_V011.pdf (各種LDドライブ回路検討)

通信用のレーザー駆動ICは電流が小さく、コンプライアンス電圧も低い。
ブルーレーザー用の駆動ICも、コンプライアンス電圧不足。
(LDの接続は、同軸ケーブルで行うことを考えているので、インピーダンスマッチングのため、高コンプライアンス電圧が必要)
バイポーラトランジスタやMOS-FETを使った差動スイッチ回路では、サージなど電流波形の異常を生じやすい。
 結論は、単純なV-I変換回路がサージ少なく電流をパルス変調可能で、
その代わり、成否はトランジスタ次第。
メーカ製ドライバの回路は不明ですが、トランジスタとかどうやって確保しているのか?(カスタム品じゃ採算疑問)
UHF帯の良さそうなスイッチングトランジスタは殆ど製造中止だし、電力増幅用はFETモジュール化されているし、
使えるものを探し当てるのが大変。
しかし疑問点も有り情報交換できる方、メールお待ちしております。
例えば...同軸ケーブルでLDヘッドに接続する場合、インピーダンスマッチング用終端抵抗の発熱が問題となりそう。
       メーカ製LDヘッドで、電流が数100mAのものでも小型のものがあり、どのように解決しているのか?
       (終端抵抗もLDと一緒にペルチェ冷却?)

 LDドライブ回路例
 実験基板

→目次

(11)HITAC10 エミュレータ

IPL(イニシャルプログラムローダ) → SL(セカンダリローダ) により、メモリ上にコードをロードする動作まで確認。
(IPL および SL は、文献-1 に記載されているもの)

命令動作すべて確認できていませんが、IPL および SL で使用している命令は動作している様子。
IPLは本来、データスイッチを操作してメモリに書き込みますが、IPLをメモリ上にセットするメニュー項目を作っています。
また、指定したメモリ範囲を、SL付テープイメージにするメニュー項目を作っています。

命令ステップ動作(ICSPスイッチON) を実現しています。
マシンステートステップ動作(SFSPスイッチON) は一応実現していますが、
伴うインジケータランプの点燈条件はテキトウです。(資料が無く)

雰囲気だけどうぞ → snapshot 2010/02/08 ver0.01a
                              (実行ファイルのみ、説明なし、レジストリは使用していません)

コンピュータのインジケータがランプで、GRES(リセット)スイッチがランプチェックを兼ねているところが、
時代を思わせてくれます。




日本初のミニコン ↓
コンピュータ博物館 http://museum.ipsj.or.jp/computer/mini/0001.html

手元にある資料は、以下2冊のみで、
ハードウェア詳細がわかりません。 -------- 情報募集中 --------

文献-1
システムプログラムの実際 (サイエンスライブラリ情報電算機 11)
    出版社: サイエンス社 (1972/01) 
    ISBN-10: 4781902553 
    ISBN-13: 978-4781902555 
    発売日: 1972/01

文献-2
FORTRANの実際 ― 文法からコンパイラまで (サイエンスライブラリ情報電算機 12)
    出版社: サイエンス社 (1973) 
    発売日: 1973 
    ISBN:9784781902562
    旧IS:(4781902561)

→目次

(10)グラフ画像数値化ソフト FigData 旧ソフト FeverElephant(26)に移行

FigData はグラフ画像を数値化する目的のソフトウェアです。
グラフ曲線の座標を直接数値化するもではなく、
最小自乗法による曲線のあてはめを行うものです。
GraphFit の後継ソフトで、基本動作は同じです。
大きな違いは、基底関数を任意に定義できるよう変更しました。
使用配布自由です。
 グラフ元画像
                                  ↓
 曲線あてはめ(最小自乗法)
                                  ↓
 グラフデータ計算 (グラフ画像 or データ保存)
ダウンロード  FigDataV100.lzh
操作説明      FigDataV100.pdf

→目次

(9)C様電卓 yCalc

C言語を参考としたインタープリタで、使用配布自由です。
windows標準電卓はマウス操作が面倒で、キー操作を覚えるのも嫌だったので、
自分用計算機として作成したものです。

ダウンロード yCalcV100.lzh

→目次

(8)KPIT GNU SH ツール 最適化オプションによる不具合回避(SH7125)

GCC でSHマイコン開発する場合、最適化オプションがOFFであれば、ほぼ問題なく使用できる。
割り込みを使用しなければ、最適化オプションON でも、volatile の付加など、一般的な配慮で使用可能。 SH7125 開発で、最適化オプションONでの大きな問題は、「割り込み関数から戻らなくなる」 である。
HEW + KPIT GNU ツールの場合、(GNUSHv0902-ELF で確認)
回避方法は、
    KPIT GNUSH[ELF]Toolchain の設定で、
    inthandler.c のみ [Optimize C/C++ Source Code]を OFF する。
   (プロジェクト全体の[Optimize C/C++ Source Code]を ON した後、inthandler.c のみ OFF する)
  inthandler.cのリストを生成して、最適化 ON/OFF の違いを確認できる。
inthandler.c 内の各割り込みハンドラで、他ファイルの関数を呼ぶようにすれば、
最適化の効果を期待しつつ、SH-GNU ツールを使うことができる。

→目次

(7)AKI-3069F USBホストボードにUSBキーボードを接続

H8/3069F USBホストボードキットに手っ取り早くUSBキーボードを接続する方法。
組み込み機器へのUSBホスト実装技法 (CQ出版 JAN9784789849944)
第1章 SL811を使った簡易ホストとUSBキーボードの接続実験
のサンプルプログラムを利用するのが簡単。
USBホストボードキット添付のサンプルを他の開発環境で利用するのは、結構大変。
以下、開発環境は、HEW + KPIT GNUツール GNUH8v0902-ELF
概略手順
(1)新規プロジェクト作成
(2)ハードウェアセットアップ、必要ならシリアル通信など追加。
(3)組み込み機器へのUSBホスト実装技法 第1章 SL811を使った簡易ホストとUSBキーボードの接続実験 の
 サンプルプログラムの HOSTCTL.C をプロジェクトに追加。
(4)HOSTCTL.Cの変更
  重要な変更点は、
  ・ SL811のレジスタリード / ライト 部
  ・ ディレイ関数
  ・ ストリングディスクリプタ読込み部
    サンプルプログラムの場合ストリングディスクリプタを#6まで読込んでいる。
    キーボードによっては、存在しないストリングディスクリプタを読込むことになる。
    存在しないストリングディスクリプタを読込むと、以降の処理が正常動作しなくなるので、注意。
  ・ printf関数をシリアル出力するなど変更。
具体的手順
前記(1)(2)が済んだプロジェクトは、V000_SCI_TMR.lzh 
(書籍添付のサンプルコードを利用するため最終結果は非公開、書籍持ってる人にはメールくれれば最終結果送ります)
以下、V000_SCI_TMR.lzh に HOSTCTL.C が追加された状態からの手順。

-------- HOSTCTL.Cの変更 --------

//#include <stdio.h> 削除
#include "monitor.h"  //追加

/* アドレス定義 追加 */
#define SL811ADDR (*((volatile unsigned char *)0x200001)) /* SL811Hアドレス */
#define SL811DATA (*((volatile unsigned char *)0x200003)) /* SL811Hデータ */

#define  NULL   0  //追加

// void wait_key()  削除
// {
//   if (kbhit())
//      getch();
//      while(!kbhit())
//      ;
//      getch();
// }

/* 1000Hz decrement timer 追加 */
extern volatile WORD dTimer;    //タイマ割り込みにより、1ms毎にデクリメント

void waitus(int us)    //追加
{
    volatile int a;
    for(a = 0;a < us*2;a++);
}

//
/*===============================*/
/*= SL811のレジスタリード    変更     =*/
/*===============================*/
BYTE RD_SL811(BYTE reg)
{
    //yama outp(SL811_ADRS,reg);
    //yama return(inp(SL811_DATA));

    SL811ADDR = reg;  /* アドレスセット */
    waitus(20);
    return SL811DATA;  /* データ読み出し */
}

/*===============================*/
/*= SL811のレジスタライト    変更     =*/
/*===============================*/
void WT_SL811(BYTE reg, BYTE data)
{
    //yama outp(SL811_ADRS,reg);
    //yama regbuf[reg] = data;
    //yama outp(SL811_DATA,data);

    SL811ADDR = reg;  /* アドレスセット */
    waitus(20);
    regbuf[reg] = data;
    SL811DATA = data;  /* データ書き込み */
}

/*===============================*/
/*= SL811のバッファリード    変更     =*/
/*===============================*/
void BRD_SL811(BYTE reg, BYTE *buf, WORD length)
{
    if (!length)
    return;
    xprintf("Read Data [%02XH]:- ",reg);
    //yama outp(SL811_ADRS, reg);
    SL811ADDR = reg; //yama
    while(length--) {
        waitus(20);  //yama
        //yama *buf = (BYTE)inp(SL811_DATA);
        *buf = (BYTE)SL811DATA; //yama
        xprintf("%02XH ",*buf);
        buf++;
    }
    xprintf("\n");
}

/*===============================*/
/*= SL811のバッファライト    変更     =*/
/*===============================*/
void BWT_SL811(BYTE reg, BYTE *buf, WORD length)
{
    if (!length)
    return;
    xprintf("Write Data [%02XH]:- ",reg);
    //yama outp(SL811_ADRS,reg);
    SL811ADDR = reg;  //yama
    while(length--) {
        waitus(20);  //yama
        xprintf("%02xH ",*buf);
        //yama outp(SL811_DATA,*buf++);
        SL811DATA = *buf++;  //yama
    }
    xprintf("\n");
}

(注記)レジスタリード / ライト各ルーチン内の
waitus(20);  は、開発環境によっては必要。
ルネサス純正コンパイラは不要。(古いVerでしか試していない)
HEW + KPIT GNUツール GNUH8v0902-ELF で
何らかの最適化をする場合必要。
(ディレイ時間は、適当)
(バッファリードとライトだけでいいかもしれない)

/*===============================*/
/*= msec単位のディレイ   変更         =*/
/*===============================*/
void Delayms(WORD times)

    // WORD i;
    // outp(0x61,0);
    // for (i=0; i<times; i++) {
    //  outp(0x43,0xb0);
    //  while(inp(0x61) & 0x20)
    //   ;
    //  outp(0x61,1);
    //  outp(0x42,0xa9);
    //  outp(0x42,0x04);
    //  while(!(inp(0x61) & 0x20))
    //   ;
    // }
 
    dTimer = times;
    while(dTimer);
}


ストリングディスクリプタ読込み部をコメントアウト
メーカ名、製品名の2つはストリングディスクリプタが存在するものとして、
それ以外のストリングディスクリプタの読込み部をコメントアウトする。
 /*===============================*/
 /*= GET_DESCRIPTOR(STRING #4)  =*/
 /*===============================*/
 /****
   (内容)
  ****/

 /*===============================*/
 /*= GET_DESCRIPTOR(STRING #5)  =*/
 /*===============================*/
 /****
   (内容)
 ****/
 /*===============================*/
 /*= GET_DESCRIPTOR(STRING #6)  =*/
 /*===============================*/
 /****
   (内容)
 ****/


hostctl関数内「キーボードデータの表示ループ 」部の 4行削除
 /*=======================================*/
 /*= キーボードデータの表示ループ        =*/
 /*=======================================*/
 while(1) {
    //削除   if(kbhit()){ /*キーボード入力チェック*/<br>  //削除   c= getch();<br> //削除  if((c=='Q')||(c=='q')) break;
    //削除   }


次に、
HOSTCTL.C 内の  printf関数を xprintf関数 に置換
xprintf は monitor.c 内で定義されている。

UsbHost.c 内の main関数 内に
    hostctl();
を記述して完了。

AKI-3069F USBホストボードのシリアルポートは、
9600bps, data-8, parity-non, stop-1 で接続。

USBキーボードから送られるキースキャンコードは
usageコードなので、アスキーコードに変換などする。

-----------------追記 -----------------
サンプルソフトには、セットリポートルーチンは無いので追加。
引数dataは LEDの ON/OFFデータで、
以下で、キーボードのLEDをON/OFFできる。
//yama  ----------------------------------------------------------------   BEGIN
/*===============================*/
/*= SET_REPORT     =*/
/*===============================*/
WORD set_report(BYTE data)
{
    BYTE brk;
    BYTE databuf[1];
 
    brk = FALSE;

    while(brk == FALSE) {
        /*= SETUPステージ =*/
        xprintf("SET_REPORT SETUP <09H> :-\n");
        setup_packet(0x02, 0x21, SET_CONFIG, (0x02 << 8), 0x00, 0x01);
        xprintf("GSTS:=%04xH [%s]\n",gsts,EMSG[(gsts >> 8)&0xf]);
        if ((gsts & E_MASK) == E_READY)
        break;
        if ((gsts & E_MASK) == E_NAK) {
            gsts = 0;
            continue;
        }
        brk = TRUE;
    }
    //usbbuf[0] = data;
    databuf[0] = data;
    while(brk == FALSE) {
        xprintf("DAT_OUT:-\n");
        usb_packet(0x02, 0, PID_OUT, 1, 1, databuf);
        xprintf("GSTS:=%04xH [%s]\n",gsts,EMSG[(gsts >> 8)&0xf]);
        if ((gsts & E_MASK) == E_READY)
        break;
        if ((gsts & E_MASK) == E_NAK) {
            gsts = 0;
            continue;
        }
        brk = TRUE;
    }
    while(brk == FALSE) {
        /*= Data_OUTステージがあったなら、INパケット(サイズ0で返ってくる)終了させる =*/
        usb_packet(0x02, 0, PID_IN, 1, 0, NULL);
        if ((gsts & E_MASK) == E_READY)
        break;
        if ((gsts & E_MASK) == E_NAK) {
            gsts = 0;
            continue;
        }
        brk = TRUE;
    }
 
    return(gsts);
}
//yama  ----------------------------------------------------------------   END

→目次

(6)FATファイルシステム AKI-3694での使用

えるむさんのFATファイルシステムモジュール http://elm-chan.org/fsw/ff/00index_j.html
をAKI-3694で使用。
ルネサス純正コンパイラを使用し、
サンプル・プロジェクトのh8用プロジェクトそのままで問題なく動作。
KPIT GNUツール GNUH8v0902-ELF プロジェクトに移植したところ、多少の変更が必要で、
以下そのメモ。
 
ハードウェア
SDカードとのロジックレベル変換が面倒なので、
AKI-3694は、外部電源を用意し、3.3V動作とした。
H8/3694Fは、3.3Vで20MHz動作保障されていないが、無視。
接続ポートは、基本的にえるむさんと同じ。
カード電源のON/OFFは省略。

SDカードコネクタは、サンハヤトの
メモリーカード変換用基板(コネクタ実装済み) CK-29 を使用。
<注意> CK-29搭載のコネクタの、カード挿入検出(10番ピン)とライトプロテクト検出(11番ピン)を
使用するためには、12番ピンをGND接続必要。
(12番ピンは、カード挿入検出&ライトプロテクト検出の共通端子)

ソフト
えるむさんのFATファイルシステムモジュールは、バージョン R0.07c を使用。 
基本的に、FATファイルシステム本体は何も変更なし。
(1)HEW + KPIT GNUツール GNUH8v0902-ELF 新規プロジェクト作成
   
   
    以下デフォルトのまま、作成を続ける。
    (16bit-intでOKだし, OptimizedライブラでOK)
    

(2) オリジナルファイルのコピー
    以下、オリジナルファイル8種類をコピーし、作成したプロジェクトに追加。
    ff.c
    main.c
    mmc.c
    monitor.c
    diskio.h
    ff.h
    integer.h
    monitor.h

(3)ファイル define.h を新規作成、define.h の内容は以下のとおり。
/********************************************
 *   File name : define.h                                       *
 ********************************************/
 
#define reset_imask_ccr()   asm volatile ("andc.b #0x7f,ccr")       //割込み許可
#define set_imask_ccr()   asm volatile ("orc.b #0x80,ccr")        //割込み禁止

(4) FAT.c の変更
    main関数をコメントアウト (新規作成した main 関数は使用しない)

(5) hwinit.c の変更
    オリジナルファイル resetprg.c の void HardwareSetup()の内容を
    void hw_initialise(void) 内にコピー

    void hw_initialise(void)
    {
        //yama
        TW.TCRW.BYTE = 0xB0; // Start Timer W with 100Hz OCA
        TW.GRA = 25000;
        TW.TIERW.BYTE = 0x01;
        TW.TIOR0.BYTE = 0x03;
        TW.TMRW.BYTE = 0x80;

        TA.TMA.BYTE = 0x08;
        IENR1.BIT.IENTA = 1;
         sci3_init();
    }

(6) inthandler.c の変更
     (6-1) 以下を追加
        #include "iodefine.h"
        #include "ff.h"
        #include "diskio.h"
        void int_SCI3();
        /* 100Hz increment timer */
        volatile WORD Timer;
        /* Real Time Clock */
        volatile BYTE rtcYear = 106, rtcMon = 6, rtcMday = 1, rtcHour, rtcMin, rtcSec;

    (6-2) Timer A 割り込みハンドラ追加 (オリジナルと同じ内容)
        // vector 19 Timer A Overflow
        void INT_TimerA(void)
        { 
        static const BYTE samurai[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        BYTE n;
        IRR1.BIT.IRRTA = 0;
        if (++rtcSec >= 60) {
           rtcSec = 0;
              if (++rtcMin >= 60) {
                 rtcMin = 0;
                    if (++rtcHour >= 24) {
                       rtcHour = 0;
                       n = samurai[rtcMon - 1];
                       if ((n == 28) && !(rtcYear & 3)) n++;
                          if (++rtcMday > n) {
                             rtcMday = 1;
                                if (++rtcMon > 12) {
                                   rtcMon = 1;
                                      rtcYear++;
                                }
                           }
                       }
                  }
             }
        }


    (6-3) Timer W 割り込みハンドラ追加 (オリジナルの内容に追加有り)
        // vector 21 Timer W
        void INT_TimerW(void)
        {
               unsigned short tsrw; //オリジナルの内容に追加
               tsrw = TW.TSRW.BYTE; //オリジナルの内容に追加

               TW.TSRW.BIT.IMFA = 0;

               Timer++;
               disk_timerproc();
        }

    (6-4) SCI3 割り込みハンドラ追加 (オリジナルと同じ内容)
        // vector 23 SCI3
        void INT_SCI3(void)
        {
            int_SCI3();
        }

(7) main.c の変更
    #include <machine.h> をコメントアウト
    #include "define.h" 追加
    
    DWORD get_fattime () 内
    set_imask_ccr(1); を set_imask_ccr() に変更
    set_imask_ccr(0); を reset_imask_ccr() に変更

(8)mmc.c の変更
    #include <machine.h> をコメントアウト

(9) monitor.h の変更
    void xitoa (long, char, char); を
    void xitoa (long, int, int); に変更

(10) monitor.c の変更
    #include <machine.h> をコメントアウト
    #include "define.h" 追加

    char xgetc () 内
    set_imask_ccr(1); を set_imask_ccr() に変更
    set_imask_ccr(0); を reset_imask_ccr() に変更

    void xputc (char d) 内
    set_imask_ccr(1); を set_imask_ccr() に変更
    set_imask_ccr(0); を reset_imask_ccr() に変更

    void xitoa (long val, char radix, char len) を
    void xitoa (long val, int radix, int len) に変更
    さらに、xitoa 内
    BYTE c, r, sgn = 0, pad = ' ';
    BYTE s[20], i = 0;
    DWORD value = val;
    を
    BYTE c, sgn = 0, pad = ' ';
    int r;
    BYTE s[20];
    int i = 0;
    DWORD value = val;
    に変更

    void xprintf (const char* str, ...)内
    char d, r, w, s, l;
    を
    char d, s, l;
    int r, w;
    に変更

以上、変更済みのプロジェクト
FatFs R0.07c サンプル・プロジェクト ->  HEW + KPIT GNUツール GNUH8v0902-ELF プロジェクト   FAT.lzh
(変更箇所は  //yama で検索できる)

→目次

(5)ノキアカラーLCDモジュール Nokia 6100 AKI-3694での使用

Sparkfunのページ  http://www.sparkfun.com/commerce/product_info.php?products_id=8600
5V動作のAKI-3694との接続

(参考)Sparkfunのロジックレベル変換モジュール
http://www.sparkfun.com/commerce/product_info.php?products_id=8745
で5V->3.3V(抵抗分圧)変換した場合、LCDのSCKがドライブできない。
このモジュールは3.3V->5V変換部(MOS使用)を5V->3.3Vに流用できそうで、SCKドライブできるはず。

ソフト開発は、フリーのKPIT GNUツール GNUH8v0902-ELFを使用。
Sparkfunのサイト http://www.sparkfun.com/commerce/product_info.php?products_id=569 のDocuments: の
Interface tutorial by Jim Lynch http://www.sparkfun.com/commerce/product_info.php?products_id=569
の Epson S1D15G00 対応部分を移植した。
Interface tutorial by Jim LynchのLCDの表示座標は、LCDボードに対し逆転しているので、以下に変更

また、Y>127では、表示できるが、指定位置に対し表示ずれが起きたので、
表示サイズは 132x128 とした。
移植した、プロジェクト ->  NOKIA_LCD_SCI.lzh
(未整理、試行錯誤の痕跡多)

実行すると、テストパターン表示、ネコ画像表示後、LCD画面がクリアされます。
その後、AKI-3694のシリアルポート(9600bps, data-8, parity-non, stop-1)から入力した文字(ASCII)を表示します。
スクロールは、LCDコントローラのスクロール機能がうまく動作しなかったので、
全画面の書き換えを行っています。


→目次

(4)オクトパス回路(Octopus)

一応、ASA(Analog Signature Analysis)回路なんでしょうが、実用性は低いです。
貧民カーブトレーサーです。
日本では大昔CQ ham radio誌で紹介されていました。

製作例  http://www.qsl.net/kd7rem/octopus.html
説明  octopus.pdf
製作例のように丸い空き缶に入れた外観が「タコ」感もあり、貧乏臭くてステキ。
X-Yオシロに接続しますが、上の説明(octopus.pdf)のように表示するにはオシロのINVERT機能でY軸を反転する必要があります。
LTspiceによるシュミレーション

Y出力は反転するため(-1)倍乗算器を挿入してあります。
結果は以下のとおり。


→目次

(3)yKensiro



いまさらのケンシロウ進数。
2進、10進、16進、ケンシロウ進数変換で、、、叫びます。
ダウンロード yKensiroV100.lzh

→目次

(2)yLpWin V2.00 旧ソフト Win7向け変更しyLpWin V3.00 (27)に移行

yLpWinは、ボード線図(ゲインvs.周波数)
の作成および、
数値ラプラス逆変換を行うものです。
 Cライクなインタプリタを持ち、
ラプラス変換式は数式で入力できます。

yLpWin Ver2.00 のダウンロード   Setup yLpWinV200.exe

→目次

(1)GraphFit 旧ソフト 機能追加しFigData (10)に移行

GraphFitは、グラフ画像の数値化を目的としますが、座標の読取りではなく、最小自乗法による
曲線のあてはめを行うものです。
 従って限界もあり、複雑な曲線のグラフには対応できません。
また、完全に元のグラフに一致させるのは困難かもしれません。
 逆に、手心を加えてのグラフ作成や平滑化には役立つかもしれません。

GraphFit Ver1.01 のダウンロード SetupGraphFit V101.exe

→目次

→戻る