Copyright © 2010-2019,2023,2024 てきーらサンドム
■■■■ 電子工作(その2) ■■■■
電子工作関係の雑多なトピックスが集まったページです。将来的には部品の基礎知識や回路設計の学習ができるページを目指しています。
最近の更新(以前の更新)
2024/10/23 [KiCadの使い方(備忘録)] の2.に寸法線の入れ方を追記。
2023/11/06 [KiCadの使い方(備忘録)] にネットリスト更新時の選択項目を追記。
2023/10/20 [KiCadの使い方(備忘録)]にマウントデータ出力方法を追記。
2023/10/19 [KiCadの使い方(備忘録)]にビア打ちを追記。
2023/10/17 [KiCadの使い方(備忘録)]を追加。
〜〜〜 目次 〜〜〜
Version 5.1.12-1でPWB設計する場合の備忘録です。最小線幅6mils, 0.5ptQFP対応を念頭に置いてます。
なお回路図は他のCADで書いて, D2CADtoKiCadで変換するものとします。
- 【1.インストールからフットプリント・ライブラリ登録まで】
- @kicad-5.1.12_1-x86_64.exeを実行すると、標準的にはC:\Program Files\KiCadにインストールされるはずです。
AKiCad.exeを起動し、フットプリント・エディタのアイコン押すか、「ツール」→「PCBフットプリント編集」を選択します。
BKiCadライブラリを登録します(最初に自動的に出てきたはずです。とりあえずライブラリ全部をグローバル登録。ただし時間がかかります)
その他に追加でダウンロードしたライブラリを登録するには、「ファイル」→「ライブラリ追加」で、拡張子.prettyのフォルダを選択します。
- 【2.プロジェクト作成から設計ルール入力、外形入力、取付穴配置、寸法線まで】
- @kicad.exeを起動し、メニューの「ファイル」→「新規」→「プロジェクト」で新たにプロジェクトを作成します。
A「PCBレイアウトエディタ」アイコンを押すか、メニューの「ツール」→「PCBを編集」を選択してPCBエディタ(PCBnew)を開きます。
B「基板セットアップ」アイコンを押すか、メニューの「ファイル」→「基板セットアップ」を選択します。
a. 左のツリーの「レイヤー」を選択し、「カスタムレイヤーセット」のプルダウンメニューから層数、実装面に応じて適したものを選びます。
b. 左のツリーの「デザインルール」→「ネットクラス」を選択し、Defaultのクリアランス=0.2、配線幅=0.16、ビアサイズ=0.6、ビアドリル=0.3に設定します。ここの設定が後で行うDRCでルールとして使われます。
クロストーク対策でクリアランスを0.2より大きくすると0.5ptQFP(パッド幅0.3)でDRCエラーが出ます。しかしあえてクリアランス=0.24(0.5ptQFP電源線0.26の場合)とかで配線しておいて、最後にQFPパッドだけエラーが出る状態でクリアランスを0.2に変更してエラーがすべて消えるのを確認するのでも良いでしょう。
クロストークを気にしないから(低速信号だけだから)配線密度を高くしたいという人は、0.3175mm(12.5mil)グリッドで配線できるようにクリアランス=0.1524〜0.1651、配線幅=0.1524とします。
0.5pt以上のグリッド配線で、クロストークは一応気にするけど、斜線並走は少ないから0.5pt斜線を許容する場合は、クリアランス=0.19とします(0.5/√2 - 0.16 = 0.194)。
ただし、べた領域と信号線の間隔は0.2032以上必要なので、最終チェックの時に念のためクリアランスを0.2032に設定してDRCをかけて、べたと配線間に指摘箇所が無いか確認します。
c. 左のツリーの「デザインルール」→「配線とビア」を選択し、電源用の太線や大きめのビアを設定します。上述bの「ネットクラス」は例えばGNDに対して1つのルールしか登録できないので結局最小値しか登録できません。引き回し状況により線幅を随時変更する場合はこちらで登録したほうが良いです。なお後述のべた領域作成でクリアランス0.508がデフォルトなので0.7mm以上の電源用配線もクリアランス0.508を前提に線幅を決めています(安全規格上は0.508mmギャップで25Vまでとなるようです。これより電圧が高い場合は間隔をさらに広げる必要があります。なおべた作成の画面は設定値を覚えてくれないので0.508を毎回変更するのが面倒です)。
以下線幅の設定例です。
0.26:0.5ptQFPの電源端子の引き出し用。パッドサイズ0.3なので、0.3まで増やしても問題ない気がします(それ以上はクリアランス0.2が守れない)。
0.45:1.27pt45度斜線用。ピッチは0.898 (= 1.27/√2) なので、0.39(クリアランス0.508)〜0.5(〃0.398)の範囲で決めてよいと思います。アナログ信号の配線にも適しています。
0.75:1.27pt平行線用(1.27 - 0.508 = 0.762)。0.7〜0.76範囲で決めてよいと思います。
1.25:DIPなどのICの電源ピンへの接続。2.54pt45度斜線の上限は1.288 (= 2.54/√2 - 0.508) なので、1.0〜1.28の範囲で適当に決めてよいと思います。
1.60:(暫定値)。φ1.8ランドよりちょっと小さい線用(適当)。
2.00:2.54pt平行線用(2.54 - 0.508 = 2.032)。300mil幅DIPに2本の電源線通す場合にも使用します。
3.00:5.08pt45度斜線用(5.08/√2 - 0.508 = 3.084)。
4.80:300mil幅DIP(φ1.8ランド)に1本の電源線通す場合用(7.62 - 1.8 - 0.508x2 = 4.804)。
なお線を何本も並べて太くする方法もあります。この場合、メニューの「設定」→「設定」→「PCBnew」の中の「古い配線を自動削除」のチェックを外しておかないと最初に引いた線が消えることがあります。
電源用ビアとしては例えばビア径1.6/穴径0.8を追加します。ジャンパ抵抗で補強したり、ビアを半田で埋めて補強したりできます。
d 上部アイコンの下に表示されている「グリッド XXXmm(YYYmils)」のプルダウンから「ユーザーグリッドを編集」 を選択し、0.3175(12.5mils)を追加します。2.54pt系の部品(C,R類)が2.54ptで並べられない(DRCでオーバーコート重なりエラーが出た)ときに、ちょっとずらすのに使用します。また0.635ptの45度斜線はL/S=1:1.8とやや隙間が狭いので0.3175pt分ずらして隙間を確保するのにも使えます(後述の配線方法参照)。
C外形の引き方
a. 右のレイヤーマネージャの層表示の中からEdge.Cutsを選択するか、上部アイコン列のレイヤープルダウンからEdge.Cutsを選択します。
b. 上部アイコンの下に表示されている「グリッド XXXmm(YYYmils)」のプルダウンから1mmなどの粗いグリッドを選んで、原点位置(x=0,
y=0)を探し表示しておきます(画面下に表示されるカーソル座標を参照して)。
c. 右の「図形ラインを追加」アイコンを押すか、「配置」→「線」を選択します。
d. 原点位置から外形を引きます(四角形の場合)。カーソル座標が画面下に表示されるので、それを見て引けばよいでしょう。
外形は後からでも変更可能です。既存線を選択して削除し、新しい線を引くだけです。なお、パターン図を図面枠なしで印刷する場合は原点(0,0)から基板外形を書いても問題ありませんが、図枠(画面にうっすらと表示されている)付で表示するには原点をずらすか図枠をずらす必要があります(方法は不詳です)。原点ずらさずに図枠の中に外形を書くこともできますが、画面下に表示される座標にオフセットがかかるので配置とか面倒になる可能性があります
D取付穴配置
a. 右の「フットプリントを追加」アイコンを押すか、メニューの「配置」→「フットプリント」を選択します。
b. 適当に画面をクリックするとライブラリ一覧が表示されます。登録ライブラリが多い場合は最初に時間がかかる場合があります。
c. 「MountingHole」の中から配置したい穴を選んで配置します(例:MountingHole_3.2mm_M3を配置)。
E寸法線
a.右の「寸法線を追加」アイコンを押すか、メニューの「配置」→「寸法線」を選択します。
b.基板内の寸法の起点となる位置と終点位置をクリックすると寸法線が現れるので、基板外の見やすい位置へ移動します。
垂直の寸法を入れる場合、下を起点として上を終点とすれば数字が下から上へ読める方向になります(寸法の一般的書き方)。上を起点とすると文字の方向が逆になります。
なお、寸法線はDwgs.Userというレイヤーに入力されます。起点・終点をクリックした時点で自動的にこのレイヤーに切替わるはずですが、もし切替わってなければ(その場合寸法線が現れない)手動で切り替えます。
- 【3.ネットリスト読み込みから配置、配線(ビア含む)まで】
- @D2CADtoKiCadを使って、プロジェクト内にネットリストを生成します。これは基板設計途中で回路図変更を反映させる場合も同じです。
A上部の「ネットリストをロード」アイコンを押すか、メニューの「ツール」→「ネットリストをロード」を選択します。
B初回はネットリストファイルが選択されてないので選択します。2回目からは自動で当該ファイルを読込みます。
2回目以降は「リファレンスでフットプリントを再関連付け」のラジオボタンを選択します。特に部品や配線の追加/削除を行って自動生成ネット名が変更になった場合は必須です。
Cエラーが表示されてなければ「基板を更新」ボタンを押します。
該当するライブラリが無い場合や、ライブラリがあってもネットリストのピン名とライブラリのピン名が不一致の場合など、エラーがある場合はネットリストもしくはライブラリを作り直してネットリストのロードを再実行します。
D初回は全部品、2回目以降は追加部品が選択された状態になるので、基板の外側に仮配置します(対象が1個だけならそのまま基板内の所定場所に配置しても良いです)。
E仮置きした部品を順次基板内に配置します。特に位置指定のない2.54pt部品はまずは2.54ptグリッドもしくは1.27ptグリッドでざっくり配置し、全体の配置を見て調整するのが良いでしょう。0.5ptQFPは、電極が0.5ptグリッドに載るように配置します(たぶん0.25ptグリッドで移動させないと載らない)。
F配線は幅の広い電源系から行いますが、信号配線が混みそうで配置変更が出そうなところは先に配線して配置を確定させるのが良いでしょう。
まず上部アイコン下の線幅指定のプルダウンリストから該当する電源線幅を選択し、右の「配線」アイコンを押すか、メニューの「配線」→「単線」を選択し、配線します。
ただし、後述のべた塗りでサーマルリリーフにしたいランドやパッドは、わざと未配線で残すか、あるいは0.16の信号線で配線しておきます。
複数の電源系がある場合(デジタル電源/アナログ電源とか電圧種別とか)は、ある程度電源領域を切り分けられるようにしておきます(例えばデジタルGNDとアナログGNDが入り組まないように)。
デジタル信号線の配線は80mA(rms)以下なら0.16で問題ないでしょう(18μm銅箔でも)。
クロストークが気になる並走線、特に斜線の並走部はスペース確保に注意します。0.5pt配線の場合、少なくともその1/2ピッチ屈折点をずらして斜線部のピッチを確保します(図参照)。
0.635ptの場合は、45度斜線間が0.45ptとなり、線幅0.16に対してスペースは1.8倍となります。2倍は欲しいところですが、じゃ1.8倍はダメなのと言われると微妙です。まぁ基板スペースに余裕があれば上記のようにずらして、余裕なければ許容してみると言う感じでしょうか。0.5ptの斜線間0.354ptでも製造上は問題ないのですが、線幅0.16に対してスペースは1.2倍となり高速の信号の場合はクロストークが気になります。でも斜線部の並走長が長くないなら許容しても良いような気もしています。
またKiCadは自動的に最小クリアランスをとってグリッドから外れたところを配線をすることがあります。配線がデコボコしたりスペースが不均等になる原因になるため、オングリッドになるように引き回しに注意します。
Gビア打ち
配線中にビアを打つ場合は右クリックの「貫通ビアを配置」を選択します。配線済みの部分に打つとビアができた後に配線終了になります。配線を伸ばした場所に打つと配線層が表裏入れ替わって配線を継続できます。ビア径を変更する場合は、あらかじめ上部のビア選択プルダウンメニューで選んでおきます。
ビア径0.6だと0.5pt並走線上には配置できません(隙間が0.12しかなく製造NG)。0.635ptまたは0.75pt(0.25x3)に載せ替えてからビアを打ちます。
配線後やべた塗り後にビアを追加するには、右の「ビアを追加」アイコンを押すか、メニューの「配置」→「ビア」を選択して対象信号の線あるいはべた領域に打ちます。導体外などネット名の無い部分に打つとネット名無しのビアができ、そのままではネット名のある信号との配線ができなくなります。無名のビアにネット名を引き当てるには、ビアを選択して右クリック「プロパティ」を開き、「ネット」のプルダウンリストから該当するネット名を選択します。
- 【4.DRCとべた塗り、シルク編集】
- @べた塗り前に1回DRCを行います。上部の「デザインルールチェックを実行」アイコン(てんとう虫)を押すか、メニューの「検査」→「デザインルールチェッカー」を押します。
最小線幅0.16、最小ビアサイズ0.6を指定します。「配線のエラーを全てリポート」にチェックを付けて「DRCを実行」を押します。「問題/マーカー(0)」かつ「未配線アイテム(0)」なら問題ありません。
この時点ですでにべた領域設定(ゾーン設定)がされている場合、「DRC実行前にすべてのゾーンを塗りつぶす」と「塗りつぶした導体の・・・」もチェックしておけば、べた塗りが実施された上でべたも含めて検査されます。
Aべた塗りを電源やGNDに対して行います。
a. まず右の「塗りつぶしゾーンの追加」アイコンを押すか、メニューの「配置」→「ゾーン」を選択します。
b. 領域の開始点をクリックするとプロパティが表示されるので、対象の層を選択し(デフォルトは事前に選択していた層にチェックが付いています)、対象のネット名を選択します。
c. クリアランス(0.508)と最小幅(0.254)を変更可能ですが、変更した値を覚えてくれないので、差し支えなければそのままにして置くのが面倒無くて良いです。パッド接続欄の指定もデフォルトのサーマルリリーフで良いでしょう。
d. 「OK」を押し、対象領域の外形を書いていきます。もし片面に付き1種類のネットしかべた塗りしないのであれば、基板外形線に沿って四角を書くだけで済みます。複数(電源とGNDとか、デジタルGNDとアナログGNDなど)の領域を設定する場合は、それぞれの領域が重ならないように外形を書きます。重ねてしまった場合はショートします(信号線とはショートしませんが、塗りつぶし領域はネット名が異なっても繋がってしまいます)。書き終わると(始点まで戻ってくると)塗りつぶしが実行されます。
ただし、ゾーンの外形線で囲んだ中に指定したネット名の端子が存在しない場合は塗りつぶしが実行されません。またサーマルリリーフはゾーン設定で塗りつぶした領域に対して行うので、たとえば電源線で全周を囲んだランドには行いません。
e. ゾーンの削除や変更を行う場合は、まずメニューの「編集」→「全ゾーンの塗りつぶしを削除」を選択します。この時点で塗りつぶしは消えますが、ゾーン設定は残ったままです。この状態で、ゾーンの外形線を選択して削除キーを押すか、右クリックメニューの「削除」を選択するとゾーン設定が削除されます。削除ではなく、形状の修正であれば、ゾーン外形線をつかんで移動したり、ゾーンの頂点(■表示)をつかんで変形させることができます。多分変形させたりするより、削除して書き直したほうが楽だと思います。ゾーンの塗りつぶしが削除されているけどゾーン設定が残っている状態で、新たにゾーン設定すると二つのゾーンが重なって思わぬトラブルの原因になるので、メニューの「編集」→「全ゾーンを塗りつぶし」を選択して塗りつぶされないことを確認してから新たなゾーン設定を行うようにします。
f. ゾーンは変更しないが、部品や信号線の位置変更を行う場合は、メニューの「編集」→「全ゾーンの塗りつぶしを削除」を選択して塗りつぶしが削除されている状態で、部品移動や配線変更を行います。その後、DRCを実行するかメニューの「編集」→「全ゾーンを塗りつぶし」を選択すれば塗りつぶしが実行されます。
B最終的なDRCで「問題/マーカー(0)」かつ「未配線アイテム(0)」になれば導体層に問題ありません。目に見えないような微小な配線や導体が残ってエラーになる場合があり、その場合は範囲選択などで該当箇所を削除してから本来の配線やべた塗りを再度行います。
Cシルクの移動・編集を行います。
a. 右のレイヤー表示からF.SilkSを選択するか、上部アイコン列のレイヤープルダウンからF.SilkSを選択します。
b. シルクの移動や追加を行います。配線層を非表示にした方が作業しやすいですが、ビア被りを見落としやすいので注意が必要です。ガーバー出力してドリルとシルクの状態をガーバーピュアで表示して作業するという手もあります。
コネクタ実装後に1ピン表示がわかりにくくなるものは、△マークを付けておきます。0.5ptグリッドで幅1mm、高さ1mmのサイズで良いでしょう。
- 【5.ガーバー、ドリル、マウントデータ出力、印刷】
- @ガーバー、ドリル出力
a. 上部の「プロット」アイコンを押すか、メニューの「ファイル」→「プロット」を選択します。
b. オプション設定を行ってから「製造ファイル出力」を押します。メタルマスクを作らない場合はF.Paste, B.Pasteは必要ありませんが、チェックが付いたままでも問題ありません。
c. 「ドリルファイルを生成」を押し、オプション設定を行ってから「ドリルファイルを生成」を押します。
Fusion(Seed)向けオプション設定例:
Aマウントデータ出力
a. メニューの「ファイル」→「各種製造用ファイル出力」→「フットプリントと位置情報のファイル」を選択します。
b. 出力先およびフォーマット等を選択します(実装屋さんから要望聞くのが良いでしょう)。
c. 「座標ファイルを生成」を押せばファイルができます。対象となる部品は、部品のプロパティ(部品選択して右クリックメニューで「プロパティ」を選択)の右下に表示される「基板製造用の属性」で「表面実装」となっているものだけです。自動実装非対応のSMD品や自動実装可能なリード部品があればあらかじめ変更しておきます。
B印刷
a. まずプロジェクトの保存を行います。2回目の「用紙設定」でKiCadが落ちてしまう(何のメッセージもなく消えてしまう)確率が高いようです。
b. 上部の「基板を印刷」アイコンを押すか、メニューの「ファイル」→「印刷」を選択します。
c. 横向き印刷がデフォルトです。縦向きに印刷にする場合は「用紙設定」で変更します。変更は1回だけにします。2回目の変更でKiCadが落ちる確率が高いです。
d. 層別のパターン図を印刷する場合は、必要な層を選択の上、「レイヤー毎に1ページ」をチェックし、「印刷」を押します。
表側の実装図画が必要な場合はF.SilkS, F.Mask, Edge.Cutsの3つだけ選択し、「シングルページに全レイヤー」にチェックして「印刷」を押します。
裏側の実装図画が必要な場合はB.SilkS, B.Mask, Edge.Cutsの3つだけ選択し、「ミラーして印刷」と「シングルページに全レイヤー」にチェックして「印刷」を押します。
●要求仕様書の書き方(組込み制御ソフト用) 2013/8/6 更新
制御ソフトを外注したいが、何をかけば良いか、どのように書けば良いか、どこまで書けば十分か、が分からない方に贈ります。
対象デバイスはMCU(マイクロコントローラ)です。
- 【要求仕様書の目的を理解すること】
- 目的を理解してないとトラブルや手戻りの多い仕様書になってしまいます。
- 意図したものが納品されること(=意図しない納品物の修正・変更費をあなたが払うのか)
「美味しいご飯が炊ける制御プログラムであること」という一行だけでも仕様書になります。でも、あなたが美味しくないと感じた場合や保温機能が無かった場合、その修正・変更費はあなた(の会社)が払うことになるでしょう。もし、曖昧な点の修正・変更費をすべて外注先責任と言ったら、断られるか、目ん玉が飛び出る見積書が出てくるか、悪質業者に引っ掛かることになるでしょう。
- 発注承認者、重要な関係者を説得できること(=説得できなければ発注できない、あるいは仕様変更の手戻りになる)
あなた(担当者)と外注先が完全に整合が取れたとしても、それが問題ない仕様であることを承認者が理解できなかったら、トラブル時に責任問題になるので容易に印を貰えないでしょう。仮にめくら印を貰えても「え?そんな仕様だったのか」と後で手戻りが出たりします。曖昧な書き方だけでなく、厳密な記述であっても上司や関係者(営業や品管など)が理解できない図表や記述形式を使ったらめくら印を貰ったのと同じです。もちろん自責だけで決める部分があっても構いませんが、関係者と意識合わせする部分とは項番を分けて、「ここは問答無用」と言い切ります。
- 会計監査、品質監査で指摘されないこと(=裏金作りを疑われたり、指摘事項修正の手間が出る)
ある程度大きな会社では監査によって適正価格や適正品質を維持します。ただ一般的には監査者は形式と量(ページ数)でしか判断できないので、下記例を参考に標準仕様書形式を暫定でも良いので登録(発行)しておけばよいでしょう。
- 【外注先の業態を知り、己の業態を知らば百戦危うからず】
- 組み込み制御ソフトの外注先は、
多くはハードの知識やシステムの知識を持っていて、ある程度粗い仕様でも受けてくれます。
しかし、どこまで書けば受けられるかは、外注先によって千差万別です。だから、どこまで書けばよいかの一般解はなく、最低限の仕様書をたたき台として、見積依頼時に相手に何を書く必要があるかをよく聞いておく必要があります。
- あなたの要求仕様に、回路設計者やシステム設計者に対する要求が含まれてないか
「Aスイッチを1回押す毎に表示モードが切り替わる」という仕様の場合、スイッチを押したときに電気的に”H”になるのか”L”になるのか、チャタリング(接点が接触する瞬間機械的振動によりオン/オフを繰り返す)をソフト側で対策するのか、どのようなアルゴリズムで対策するのかを決めないと、プログラマは誤動作しないプログラムを書けません。
「そんなのそっちで決めてよ」の”そんな”の中身が回路仕様やシステム仕様(プロトコル、アルゴリズム)であることが多々あり、それは純粋なソフト屋さんでは決められないと認識すべきです。その上で、自分で決められないのならば、そこを含めて受けてくれる外注先を”調査”しなければならないのです。相手の業態や得意分野を調べもせずに、「決められないのはレベルが低い」と思うのは間違いであると認識すべきです。
- 外注先に仕様を決めてもらうことが出来ても、責任まで負ってくれない
チャタリング除去程度ならば、実際には多くの外注先で仕様を考えてもらうことができます。しかし、どんなスイッチ構造や配置/配線でも問題なく動くことを保証してくれるところはまずありません。もちろんお金を積めば保証してくれるかもしれませんが、問題が出るかどうか分からないのに最初から金を積むのは無駄です。
仕様を決めてもらう場合は、むしろ上司に「この部分に問題が出た場合に修正・変更費が発生します」と言って了解を貰っておくことです。
- 逆に自分で決められるからと言って直接プログラム可能な書き方をすると、上司や関係者に理解されない
「室温が10℃以下になったらヒ−タをオンすること」という仕様を、「室温センサ出力電圧が1.2V(あるいはA/D変換値100)以下になったら、ポートA出力を”L”にすること」などと書いたら、たしかにプログラミングは可能になりますが、上司や関係者が何を意味しているのか理解できず、後で仕様変更の手戻りが発生する危険性が高くなります。
ではどう書くかというと、「室温が10℃以下になったらヒ−タをオンすること」と書いた上で、さらに「室温とセンサ出力電圧の関係は別表参照」というように、まず関係者が理解できる記述をして、次にプログラム可能なように補足を付けます。
- 【基本的書き方】 2013/7/31 更新
- 良い仕様書とは、目的とする項目や変更箇所を瞬時に探せて、見つけた内容を瞬時に理解できるものです。
地味ですが、下記のような心がけだけでもずいぶんとそれに近づきます。
- 用紙はA4縦にこだわること(仕様書は、検索性が重用)
図や表をA4横の用紙で書きたくなることがあるかも知れませんが、検索性(パラパラめくりながら情報を探す)にはA4縦が一番です。仕様書は物語のようにストーリーを追って順に読むものではありません。目的事項を素早く探せることが意外と重用なのです。
ただ、A4縦にするために不自然に縦・横を入れ換えてはいけません。例えば、グラフの時間軸は水平軸とするのが自然で、時間軸を長く取りたいからと言って垂直軸にするのは好ましくありません。
A4縦にすると、表が間延びして空白が目立つようになる場合があるかもしれませんが、それは悪いことではありません。むしろ、ぎっしり隙間無く文章が並んでいる方が見ずらいでしょうし、次に述べるように保守性も悪くなります。
- 1ページに詰め込みすぎないこと(仕様書は、頻繁に改訂する)
仕様書は頻繁に改訂するものなので(もししてないと言う人がいたら、それは改訂をさぼっているだけ)、変更・修正箇所を見つけやすくするということも重用です。1ページの記述量が多くなると、その中から変更箇所を探すのが大変になったり、1ページ内に変更・修正箇所が多く出て目的の箇所が見つけにくくなったりしがちです。
- 図は一瞬で理解できるものであること(仕様書は、厳密性より、意図が正しく伝わることを重視する)
仕様を正しく厳密に書こうとして、複雑で理解しにくい図を書くのは労力の無駄遣いです。かえって読み手が間違って解釈する危険性が高くなり、最悪の場合は読み飛ばされてしまいます(後で読もうと思っているうちに納期が迫ってじっくり読めなくなる)。
図は理解を助けるための解説的役割と割り切って、正確を要する仕様部分は表など別の手段で記載します。
- 【基本的構成】 2013/7/31 更新
- 仕様書表紙、改訂履歴、目次ページ、の次に下記本文を記載します。
ただし最近は、ドキュメント検索性の向上のため、タイトルだけの表紙を無しくして1ページ目で概要が分かるようにしている会社が増えています。会社に規定や慣例があればそれに従います。
- 構成は、「1.概要」、「2.入出力仕様」、「3.動作仕様(あるいは機能仕様、制御仕様)」
概要として、その仕様書の理解に必要な関連仕様書や解説資料を示し、用語の定義や仕様理解を助けるシステム構成図などを記載します。必要に応じて、ツールの種類や言語、プログラムの書式指定といった作業条件を記載します。
入出力仕様として、マイコン(MCU)に何が接続されて、それらがどのような入出力信号であるかを記載します。
動作仕様(あるいは機能仕様、制御仕様)として、システムの状態がどのように変化するか、それぞれの状態においてどの入力信号に基づいて出力信号をどのように制御するかを記載します。
- 仕様は、表形式で書くのが望ましい
入出力仕様、動作仕様とも、細かい要求事項ごとに番号をつけて表形式で記載します。大きな図や表が必要であれば、別紙、別表を参照と記載します。
文章形式が望ましくないのは、@1行に複数の要求事項を記載したり、A複数行で1つの要求事項を記載したり、B1行に要求事項と理解を助けるための解説を混在して記載したり、ということが多くあり、要求事項数が把握しずらくなるからです(定量的な進捗管理や検査網羅性管理がしずらくなる)。
会社の他の仕様書との兼ね合いで、どうしても文章形式しか認められない場合は、つぎの例のようなルールを決めて、要求事項を明確に数えられるようにします。
・要求事項は必ず箇条書きにする(1要求事項単位)。
・要求事項の先頭には必ず一意の項番を付ける(1.2.1とか、1.2.1(3)Aとか)
・解説は箇条書き部分から明確に分離するか、頭に”【解説】”を付ける。
- 仕様表の欄は、項番、項目名、要求事項、[具体仕様]、[検査方法]に分ける([ ]はオプション)
- 項番
2.、2.3、2.3.1のようにドットで階層化した番号を付けます。
階層毎に項番欄を分けて、同じ項番を”結合”するのは、項目の削除、追加に手間がかかるので止めた方が良いです。
項番の使い廻し(削除項目の番号を追加項目で使う)は、厳禁です。
同様に項番の打ち直し(番号変更)も厳禁です。ただし下書き中で、まだ外注先に提示してない場合は構いません。
どうしても項番を分割したい場合は、下の階層を作るか、2.3-1、2.3-2のように−番号で分割します。
- 項目名
一意で識別できる項目名にします。違う項番だからと言って、同じ項目名にすると間違う原因となります。
- 要求事項
何をして欲しいか、どうあって欲しいかを端的に書きます。
欄内は言葉だけでなく、図や表を入れ込んでも構いません。当然大きな図や表は入らないので、別表参照などとしても構いません。
- [具体仕様]
外注先に詳細仕様を決めてもらう項目が多い場合は、この欄を設けます。決めてもらう項目数が少ない場合は、要求事項欄に[]でくくって記載するのでも良いでしょう(例:パソコンのCOM
ポート接続とする。[RTS/CTS信号を使ったハードフロー制御方式とする])。
なお、この欄は外注先で仕様を決めるが、責任は負えないという意味の欄です。責任を持って要求事項を実現してくれるなら、具体的な実現手段を”要求仕様書”に書く必要はありません。会社によってはこの欄のタイトルを”設計仕様”、”承認仕様”などと書くかもしれませんので、社内規定・慣例がある場合はそれに従います。
一般的には奇異なことですが、要求仕様書を出す相手である外注先に要求仕様書作ってもらうことも珍しくありません。大昔は、このようにして外注で作成した文書に”承認印”を押していた時代もありましたが、相手の作成文書を承認することは契約文書と見なされて印紙税がかかるようになってからは、”受領印”とするようになりました。これは印紙税対策の業界慣行なので、「受領したけど承認はしてない」などと言って責任を外注先に押しつけてはいけません。
- [検査方法]
後で検査仕様書を作る、と言って作らない(時間が無くなったと言訳する)人が多いと思いますが、後でバグに悩まされるだけです。要求仕様どうりのものが納品されることを期待するなら、一緒に記載する方が良いです。実態としては外注先に書かせる場合が多いかもしれません。後日作成だとしても、別のドキュメントが出てくるのを待つより、”空欄を早く埋めてくれ”と言った方が確実ですし、埋まり具合の進捗を管理することも出来ます。
入出力仕様については、動作仕様の検査でカバーできる場合がほとんどなので、この欄を省略しても構いません。
「Aコマンドの応答メッセージがBであること」という仕様に対しては、「Aコマンドを入力して応答がBであることを確認」という検査方法になりますが、システムをコマンド入力できる状態にするのに手順が必要であれば、別紙で示すか、その状態を生み出せる別の検査の後に行うよう記載します。同様の検査手順が多い場合は、”別表xxのコマンド応答検査参照”のように記載します。
- 【1.概要】 2013/7/31 更新
- この要求仕様書を正しく理解するための参照資料、定義、解説等を記載します。
必要に応じて、開発ツールの種類や言語など、作業条件を記載します(本来は作業仕様書/指示書に書くべきだが1つにまとめる場合)。
- 【1.1 適用】
- この仕様書がどの製品/機種に適用されるものであるか、開発済みの類似製品との主たる違いは何かを記載します。
特に既存類似品(他社品でも可)がある場合は、現物を見せて仕様のイメージをより正確に伝えられるので、できるだけイメージに近いものを引き合いに出します。
- 【1.2 関連文書】
- 参照すべき情報が載った図面・仕様書等や、仕様を理解する上で知っておいた方が良い情報が記載された参考書・解説書等があれば記載します。
- 【1.3 システム構成図】
- システムの全体構成や機能概要を直感的に理解などできる図を記載します。このシステムを理解するのに必要な参照資料が無い場合は、必要に応じて細かい解説を追記します。
解説をどこまで書けば良いか悩む人がいるかも知れませんが、仕様(要求事項)の記載よりも優先順序が低いと認識すべきです。確かに正しい理解を得るために詳細な解説がある方が望ましいですが、大抵は時間や工数の制約を受けるので割り切る必要があります。
- 【1.4 用語の定義、表記規則】
- この仕様書で用いる独特の用語の定義や、表記方法を記載します。
普通名詞的な用語(例えば”夜”)に対して特殊な定義(例えば深夜電力料金時間帯と定義)をするのは、誤解を招きやすいので避けます。ただし、営業・品管・社長までもが”夜”と言えば”深夜電力料金時間帯”と認識できる会社の場合は、特殊用語として定義した方がかえって良いですが、誤解がないように””や「」でくくるなどの工夫をするのが良いでしょう。
- 【1.5 その他(作業条件、等)】
- 作業条件はプログラム仕様そのものではありませんが、外注先への要求事項の一つです。内容が少なく、別文書として発行するのが面倒になることが多いため、一緒に書いてしまうことが良くあります。必ず書くように規定している会社も見たことがあります。
・日程(支給、承認、中間納品、立会等)
・作業の進め方(仕様確認や変更の手順、支給品の提供方法、レビュー方法、など)
・開発環境(ツール、言語)
・ドキュメントやソースの記述形式に関する要求事項
- 【2.入出力仕様】 2013/8/6 大幅更新
- マイコン(MCU)に何が接続されて、それらがどのような入出力信号であるかを記載します。
マイコンの端子から見た電気的信号を直接記述すると、プログラマに理解できても上司や関係者が理解できなくなるので、
@操作(押す)、反応(光る、文字表示、音がでる)、物理量(距離、温度、圧力)、通信パケットを入出力信号と規定し、
Aそれらと、直接端子から見た電気信号(”H”/”L”、電圧レベル、パルス波形)との対比を記載し、
Bマイコンのどのポート(端子)へ接続するか割り付けます。
電気的信号やポート名が現れるのは極力入出力仕様の中だけに留めて、動作仕様では操作、反応、物理量、等で動作を規定します。
- タクト・スイッチ
操作としては、押す(またはオン)、離す(またはオフ)が基本ですが、”押す”だけで離す動作も含める場合がしばしばあります。混同されると困る場合は、用語の定義・用法を明確にしておきます。”長押し”は、数秒以上押してから離す行為を指し、電源オフのように致命的誤操作を回避するのに用います。長押しに対して一般の操作を”短押し”と定義した仕様書も見たことがあります。
電気的な対応として、”押す(オン)”が”H”になるか”L”になるかは、回路設計者あるいは外注先に決めてもらいます。回路上必要なプルアップ抵抗がマイコンに内蔵されている場合多いため、”L”を「押す(オン)」にする場合が多いですが、緊急の割り込みや待機休眠中の叩き起こしのために”H”が都合がよい場合もあります。
メカ・スイッチには、チャタリング(接点が接触する瞬間機械的振動によりオン/オフを繰り返す)があり、タクト・スイッチのチャタリング時間は一般に10ms未満なので、10ms間隔でポートを調べてn回(n=2〜3)連続で一致すれば確定とする仕様をよく見かけます。スイッチまでの配線が長かったり、静電気・その他のノイズが入りやすい構造だとnを多くする必要があるかもしれません。実績上はn=2で問題ないことが多く、n=2で作り込むソフト屋さんもいますので、心配な場合はn指定が可能なことと記載します。
まれにハードウエアのフィルタを付けたスイッチもありますが、信号がなまりすぎた場合も電気レベルが”H”か”L”かの中間に長く留まって誤動作するので、やはりチャタリング対策が必要になります。ただしマイコンによっては中間レベルで誤動作しないようにしたシュミット入力端子が付いたものもありますので、絶対必要とは限りません。
スイッチ数個なら、1つづつポートに接続しますが、数が多い場合はマトリクス配線を行います(「キー・マトリクス」参照)。
- DIPスイッチ、スライド・スイッチ
これらのスイッチは、一度動かすとその状態(オンかオフか)を維持するスイッチです。操作としては”オン(ON)にする”、”オフ(OFF)にする”という言い方が多いです。動かす頻度が少ない場合は、”する”を”設定する”と書いた方がイメージが伝わりやすいかもしれません。
電気的な対応はタクト・スイッチの場合と同様です。
仮に電源オンの状態では動かさない仕様だとしてもデバッグや検査の時は動かす可能性が高くなるので、チャタリング対策はやはり必要です。接点が比較的ゆっくり動くので、nはタクト・スイッチより長めの方が安心できます。
- キー・マトリクス
操作およびチャタリング対策は前述までのスイッチと同じです。
電気的には、複数の出力信号線と、複数の入力信号線を格子状に組み、その交点で出力線、入力線間をオンするようにスイッチを配置します。出力線を1つづつ”オン”し、入力線の中で”オン”しているものがあれば、その交点のスイッチがオンしていることになります。これにより少ない信号線数(ポート数)でより多くのスイッチを検出できます。例えば8ポートで、4x4=16個のスイッチ入力が可能です。
ただし3個以上を同時に押すと誤検出するので、原則として同時押しはしない用途に使います。各スイッチにダイオードをつけると同時押しも可能にはなりますが、コストを上げてでも同時押ししたいという用途は余り見かけません(キーボードのように両手打ちでシフトキー同時押しがある場合は使っています)。
後述のLEDダイナミック点灯を使う場合は、数字LEDの桁信号線とキー・マトリクスの片側の線を共用化してポートを減らすことも可能です(キー検出タイミングに制約が出るので、あくまでもポート不足時の対応)。
- ランプ、LED
表示(反応)としては、点灯(またはオン)、消灯(またはオフ)、点滅(ブリンク)があります。点滅の場合は点灯時間と消灯時間を指定します。時間の単位をソフト屋さんに決めさせるとハードウエア依存の単位となってプログラムの保守性や移植性が悪くなる場合があるので、10ms単位と決めてしまった方が良いです。
明るさ固定なら、これらの反応はマイコンのどの出力ポートでも制御できます。電気的には、”H”でも”L”でも点灯させることができる場合が多いので、回路設計者または外注先に決めてもらいます。一般的には”L”出力時の駆動能力の方が大きいマイコンが多いため、直接駆動の場合は”L”で点灯します。LED駆動用のインバータ・バッファ回路を入れた場合は極性が逆になります。
通常のポートは電源投入直後は入力端子になるのでプログラムで出力に変更しない限り点灯しませんが、まれに電源投入直後に”L”が自動的に出るポートをもったマイコンもあるので、それでも仕様上問題ないか考慮して割り付けします。
明るさを変える場合は、PWM出力ポート(ある周波数で自動的にオン/オフするポートで、オンの時間比率を変えられるもの)を使います。PWM出力ポートはどのマイコンにでもあると言うものではなく、PWM付きのマイコンであっても割当可能な端子が限られているので、最初に優先的に割り付けます。
PWM制御の場合、オンの時間比率(0%〜100%)をそのまま明るさの指標として使う仕様書を良く見かけますが、人間の感覚は対数的なので、人間の感じる明るさの度合いと時間比率は必ずしも直線的な対応になりません。人間が感じる0〜100%に対して、PWM時間比率を何%にするかの対比表を作り、動作仕様は人間感覚の%で示した方が仕様トラブルが少なくなります。良く聞くトラブルは、ゆっくり消えるという要求をしたのにすぐ消えるように感じられて、外注先と消え方の定義でもめるケースです。
- LEDや蛍光表示管のダイナミック点灯
LEDや蛍光表示管で多桁の数字表示を行う場合は、ポート数を減らすために桁信号と数字信号によるマトリクス配線を行って1桁毎に順番に点灯するダイナミック点灯方式を使います。全桁の表示が完了する時間を1フレーム時間といい、その逆数のフレーム周波数はチラツキを押さえるには70Hz以上が望ましいです。ただし振動の多い環境(車載など)では、最低でも210Hz以上が望ましいです。
表示(反応)は数値が基本ですが、マイコンでは日の字型のセグメントのどれを光らせるか自由に決められるため、英字(A〜F,H,Yなど)や記号(−、=など)も表示可能です。この場合、表示内容とコードの対応表を定めておきます。ランプのように数字を点滅させる仕様の他、数字をわざと流れるように見せる仕様も考えられます。流れるように制御するには、フレーム周波数を落すのではなく、表示のオンオフを1桁単位で時間管理するようにします。フレーム周波数はハードウエア依存になる場合が多いため、点滅などの時間管理は独立させて10ms単位としたほうが保守性、移植性が良くなります。
桁信号を切り替えるときには、数字側の信号をいったんオフにしないと、隣の桁の表示がうっすらと出てしまいます。昔はこんなことは大抵のマイコンのソフト屋さんが知っていたのですが、最近はLCDが主流になってダイナミック点灯が少なくなったため、知らない(仕様で指定が必要な)人がいるかもしれません。
性能の高いマイコンであれば、1桁あたりの点灯時間を調整して輝度調整を行うことも可能です(ディマー機能という)。
- LCD(液晶表示)
特殊なLCDを除き、LCD表示を行うには、LCDコントローラ内蔵のマイコンを使うか、LCDコントローラ(LSI)を接続します。LCDコントローラ入りのLCDモジュールもあります。
カスタムでLCDパネルを起こす(数十万円以上の初期費必要)場合は、日の字型の数値表示の他に、インジケータ(アイコンや一連の文字列)をオン、オフできます。初期費を掛けられない場合でアイコン表示が必要であれば、ドット・グラフィックLCDを使用して表示内容とコードとの対比表を定めます。漢字フォントを内蔵してないドット・グラフィックLCDコントローラが多くあるので、漢字表示にはフォント・データが必要になります。
表示プログラムを組むには内蔵または外付けのLCDコントローラの仕様書を読む必要があります。仕様書だけでは分からず、アプリケーション・ノートやサンプル・ソースを必要とする場合もあるので、内容を把握せずに「表示方法はxx仕様書参照」などと安易に書かないことです。
- ブザー
反応(発音)としては、”鳴る”、”止める”、という書き方の他に、”ピッと鳴る”、”ピピッと鳴る”、”n回鳴る”などと書きます。”ピピッ”や”n回”の場合は、鳴る(発音)時間と止まる(休止)時間を指定します。
電気的な対応としては、単純にオン/オフでブザーを鳴らしたり止めたり出来るものもありますが、もっとも良く使われているのは他励式圧電ブザーで、鳴らす周波数のクロックを与える必要があります。つまり”鳴らす”という動作仕様に対して、指定周波数のクロックを出すようプログラムしてもらうようにします。ハードウエア的には、マイコン内蔵のタイマ回路出力またはブザー専用のクロック出力を用いることがほとんどのため、割り付け可能なポートは限定されます。
メロディを出す場合は、周期数を変更できるタイマ回路を使用します。音階コードに対応した周波数テーブルを用意して、楽譜に会わせて音階コードと発音時間、休止時間を指定します。
- 非同期シリアル通信(UART通信、RS-232C通信、COMポート通信)
パソコンと通信する場合に良く使います。機器間でも使います。COMポート通信と書くと通信相手がパソコンだと解釈され、RS-232Cと書くとパソコンを含む情報機器一般が通信相手と解釈されます。UART通信と書くと、おなじ非同期シリアル通信であっても電気レベルがRS-232と異なったり、通信速度(ビットレート)やビットの先頭方向(MSB/LSB)がパソコンとは異なることがあると解釈されます。
動作仕様としては通信メッセージ(パケット)を入出力信号と考えて、入出力仕様として具体的なメッセージ(パケット)構成や、メッセージの種類(何を要求して何を応答するか)、プロトコル(要求と応答の手順)を定めます。メッセージ構成としては、メッセージの開始符号、本文構成、終了符号など定めます。仕様を外注任せにしてもよいですが、開始符号や終了符号をパソコン画面で直接表示不能なバイナリ符号にすることが多く(本格的な通信規格はそのように定められている)、検査がしにくくなることがあります。それが困る場合は、表示可能な文字コードでメッセージを構成するように指定した上で仕様を作らせます。タブや改行を示すバイナリ符号はそれ自体は見えなくても、結果として空白が開いたり改行したりするので使っても問題ありません。
電気的には、一般的にマイコンに内蔵されているUART回路の入出力端子を使うため、割り付け可能なポートは限定されます。通常のポートをソフトでオン/オフして通信することも可能ですが、プログラムのタイミング制約条件が厳しくなるので、UART回路を内蔵してない安物のマイコンでどうしても通信したい場合にしかそのようなことはしません。
通信は、送信線/受信線を別々にする全二重方式と、1本にまとめて交互に送信/受信を行う半2重方式があります。1線の半2重方式で、片方の機器から自発的送信がない(相手からの要求に対する応答しかしない)場合はプログラムは簡単ですが、双方共自発的送信がある場合はコリジョン(衝突)が起きるので、自分の送信データを受信ポートで監視して、一致しているか確認が必要になります。
また、データを一方的にどんどん送ると相手が受け取れなくなる場合は、通信量を押さえ込むフロー制御を行います。フロー制御には専用の制御線を使うハードウエア・フロー制御方式と、制御コマンドで抑制するソフトウエア方式があります。パソコンや一部の高価格マイコンには自動でハードウエア・フロー制御を行う機構が付いているため、これらが通信相手の場合はハードウエア・フロー制御方式が選択されることが多くあります。通信量が少ない場合は、送信間隔や応答時間を仕様で限定してフロー制御を省くこともあります。
- シリアル通信(RS-422、RS-485)
RS-422はRS-232と電気的仕様が異なるだけで、ソフト上の違いはありません。RS-485もRS-232の半2重通信と同様です。
- DCブラシ・モータ
動作(反応)として”回す(オン)”、”止める(オフ)”、”正転”、”逆転”だけで指定する場合と、PWM(「ランプ、LED」参照)のオン比率(0〜100%)で指定する場合があります。
電気的には、”H”でも”L”でもオンできますので、回路設計者あるいは外注先に決めてもらいます。一般的にはマイコンで直接駆動できず、外部に安いNPN型やNch型トランジスタを付けるので”H”でオンにする場合が多いです。PWMの場合は、インダクタンスに応じてPWM周期を決定する必要があるため、回路設計者にPWM周期を指定してもらいます。PWMのオン比率をフィードバック制御する場合は、制御工学の理論が分かっている人(あるいは外注先)にアルゴリズムと処理周期を指定してもらわないと純粋なソフト屋さんでは対応できません。
- ステッピング・モータ、パルス・モータ
動作仕様としては最終的な物理量(距離、速度、弁の開度、アーム角度、など)で規定して、入出力仕様で駆動波形やステップ数(パルス数)を指定します。
駆動波形は、モータ自体を直接制御する場合は、2相もしくは多相の駆動波形となります。モータの教科書読めば自分で仕様を書くことも難しくないでしょう。ステッピング・モータ用ドライブ・ユニットを使用する場合は、2本の信号線で駆動します。方式としては2種類あり、ステップ数に応じた前進パルス列1本+後退用パルス列1本で制御するタイプと、パルス列1本+前進/後退の方向信号1本で制御するタイプがあります。マイコンの場合、パルス列はタイマ回路出力を使う場合が多く、専用の端子割り当てが必要なため、パルス列出力1本(タイマ出力端子を割り当て)+方向制御1本(どの出力ポートでも制御可)とすることが多いと思います。
電気的な制御がステップ単位の整数となるのに対し、対応する物理量が1.3214mmとか0.0375%といった切りの悪い数字になることから、動作仕様をステップ単位の整数で書いたものをよく見かけますが、結局最終的に何mm動いたか、何%弁が開いたかが分かりにくくなるため、やはり物理量で書くのが望ましいです。±0.5ステップ分の誤差を前提として例えば「15mm前進」と書き、計算もしくは表によって実際のステップ数(上記例では11ステップ)に変換して出力します。これならばモータ仕様が変更になっても入出力仕様に記載した変換式・表のみ書き換えればよく、動作仕様を書き換えずに済みます。
また物理量も極力最終目的とする物理量で書くのが望ましいです。例えば弁の開度は直線的に%を変化させることが出来ますが、弁を通過する流量は開度に比例するとは限りません。流量制御が最終目的なら、非直線的な流量とステップ数の変換表を作成して、動作仕様を流量で規定するのが望ましいです。場合によっては、目的とする流量を得るのに圧力センサ値を加味して計算しなければならないかも知れれません。このような場合、入出力仕様でそれを加味した計算式まで書くのか、入出力仕様は開度(%)までで留めて動作仕様で計算式を指定するのかは、個々の事情(式の複雑度や誰が式を保守するのか、保守の頻度など)によります。
- 温度センサ
動作仕様は温度[ ℃]を物理量として記載します。
入出力仕様としては、温度センサ出力電圧値(をA/D変換した値)と温度との対比表を記載します。センサICを使う場合は、温度と出力電圧の関係が直線的なので計算は容易です。サーミスタなど非直線性素子を使う場合は、電圧→温度の変換表を記載します。指数関数を使えば計算式でも仕様は書けるので、四捨五入する桁まで丁寧に書けば、外注先に変換表を任せても良いでしょう。よほど性能が有り余っているマイコンで無い限り、指数関数を使った計算をその都度やらせるのは時間の無駄になります。MCUで指数計算を行うには浮動小数点ライブラリが必要になるため、他でも浮動小数点を使わない限りプログラム容量も無駄になります。
判定温度が2〜3箇所に限定される用途では、判定温度→電圧の変換表にしてROM容量を減らすことも可能ですが、あくまでROM容量対策です。動作仕様で「室温<23℃」と書かれている部分を「室温センサ出力値<変換表[23℃]」とプログラムしなければならなくなり、仕様書とプログラムの対比性が悪くなるので望ましくありません(A/D変換値を直接温度と比較する間違いが起きやすい)。
- 電流センサ
物理量としてはアンペア[A]が単位になります。
産業用のモータ制御では専用の電流センサを使うこともありますが、だいたいにおいては簡易なシャント抵抗による両端電圧をアナログポートでA/D変換する方法が多いと思います。充電制御用マイコンのようにクーロンカウンタと呼ばれる電流積算用の微小電圧測定用ポートを持った特殊なマイコンもあります。
入出力仕様は、シャント抵抗方式なら直線的に電圧と電流が決まるので、計算式で済まします。ただしゼロ点が嵩上げされている場合があるので、嵩上げの有無を回路設計者に聞いておく必要があります。精密な測定では温度補正をする場合があるかもしれません。電流の自乗に比例して抵抗体が発熱するので、厳密には電圧と電流の関係が必ずしも直線にはなりません。
- SDカード
動作仕様は、ファイル単位あるいはファイル内のレコード単位、文字単位で規定します。
電気的には、一部の高価なマイコンではSDカード・コントローラが付いていますが、一般的には3線式同期シリアル・インタフェース回路が内蔵されたMCUを使って、シリアル接続を行います。
ファイル管理システムは入出力仕様で規定します。パソコンとメディア交換したい場合はFATシステムとします。ただしFATシステムはそれなりのプログラム容量を必要とし、処理速度にも影響するので、メディア交換が必要なければ(蓄えたデータを通信で送るなどの場合)、簡易なファイル管理システムを規定します。ファイル位置とサイズが固定できるならとても簡易なもので済みます。
- 音声ガイダンス出力
動作仕様としては、ガイダンス番号(または略号)に対応したメッセージを出すという書き方になります。ガイダンス用の音声データは内蔵ROMあるいは外付けEEPROM、SDカードに記録します。
電気的には、内蔵D/Aコンバータ出力、内蔵PWM出力、外付け音声コーデックICへの送信の3種類があります(他にも音声録再を行う他のICを制御する場合がありますが割愛)。D/Aコンバータ出力、PWM出力の場合は外付けのフィルタ回路やアンプ回路が必要になります。音声コーデックICならばそれらが内蔵された品種が多くあり、1個ICを付ければ済みます。ただし音声コーデックICへのデータ転送のタイミングはやや厳しい条件が付きます。
入出力仕様で格納データの解凍アルゴリズムを指定します。メーカがライブラリ提供しているMCUもあるので、その場合は単にライブラリを使うよう指示するだけで済みます。格納データが非圧縮の場合は単にデータを転送するだけですが、速度や格納容量の制限が大きいので、ごく短いメッセージだけ出す場合にしか用いられません。最近のMCUは能力が上がってきているので、ADPCM圧縮方式に対応できるMCUが多くなって来ています。
サンプリング・レートは電話回線用の8kHzが基本です。再生周波数帯域としては3.5kHz前後ぐらいまでですので高音質の音楽再生には向きません。サンプリング・レートを上げたり、演算量の多いMPEG圧縮を行う場合は対応可能なMCUが限られてきます。ガイダンスがメイン機能ならばMCUよりDSP(信号処理プロセッサ)の方が適しています。
- 【3.動作仕様(あるいは機能仕様、制御仕様)】
- 後日
**
1998年ごろにPICよりAVRのアーキティクチャがいいと判断,以来AVRマイコンを時々使っています。当時は開発環境も大差なかったのですが,今では日本語のサポートに差がついているので,初心者に勧めるのは躊躇します。(あるでぃーのは別として)
さらにAtmelStudioのCコンパイラ(avr-gcc)は移植性が悪い書き方をしなければならない場合があり(ROM領域に変数を割り当てる場合や文字列リテラルを使う場合)、C言語でプログラム開発する場合はAVRは避けたほうが良いかもしれません。アセンブラでの開発ならAVRの方が断然良いと思いますがね。ま、私は書き込みツールに投資してるし、コンパイラの出力をアセンブル・リストで確認しないと気がすまないので、まだしばらくAVRを使い続けると思います。
ともかく陥りやすい点をメモしておきます。
- 【入力ポートはPINA,PINB,・・・】
- AVR初心者が必ずと言っていいほど陥るのが入力端子の読み込み間違い。AVRはポートの入力と出力のアドレスが分かれていて,出力はPORTA,PORTB, ・・・に設定し,入力はPINA,PINB,・・・から読みます。
- 【割り込みフラグは”1”を書き込んでクリア】
- ついつい”0”を書き込んでしまいがち。
- 【A/D変換結果は,ADCL→ADCHの順に読む】
- 逆にするとレジスタがロックされて更新されず,最初の変換結果が常に読み出されるようになります。
- 【アトメルスタジオ(AtmelStudio)は日本語フォルダ不可(Ver6.0)】
- プロジェクトを日本語フォルダ内に作ると,ビルドは出来ますがデバッグが出来ません(.elfが見つけられない)。
- 【アトメルスタジオ(AtmelStudio)のビルドでメモリチェック間違い(Ver6.0)】
- EEPROMのサイズ(EEMEM属性で指定したC言語変数のサイズ)がRAMに配置されるdataセクションのサイズに加算されます。加算結果がRAMサイズを超えていると,実際にはRAMが空いているにもかかわらずエラーが出てビルドが失敗します。
- 【アトメルスタジオ(AtmelStudio)のビルド。コンパイル・オプションに注意】 2012/9/9 微更新
- charをunsigned charと見なすというオプションがデフォルト設定されています。負数に関する記述をしてもオブジェクトが正常に出ません(.lssファイルで確認)。一般的なgccオプションをWeb検索で調べて,makeファイルの設定がそうなっていると確認しました。→「Project」→「○○○properties」→「Toolchain」→「AVR/GNU
Compoler」→「General」→ここにcharをunsignedと見なすというチェックボックスがあり,デフォルトでチェックされています。
また最適化のオプションもなんらかのレベルで設定されており, ループ内に不変の変数があるとループ外に追いだされたりします。割り込みで変更する変数はきちんとvolatileを付ける必要があります。
ともかく日本語のまとまったフリー情報が少なく,一般的なgccやWinAVRの資料を拾い読みしたり,何か不信な動作をしたら.lss(アセンブル・リスト)を確認しているありさま。
- 【アトメルスタジオ(AtmelStudio)のテキスト・エディタは変換中の日本語フォントが崩れる(Ver6.0)】 2014/9/28 更新
- 確定したらちゃんと日本語で表示されますが,選択候補とか選べないので, 外部のテキスト・エディタで書いて貼り付けしています。日本語FEPとしてVJE使っているせいかもしれません(MSIME未確認)。昔使っていたAVRスタジオ4では,そんな現象は出ませんでした。起動も遅いし,やっぱ6にしたのは失敗だったかも?
6.2(β)とMicrosoftIMEの組合せでは、そのような現象は出ていません。
- 【アトメルスタジオ(AtmelStudio)でdebugWIRE(1-Wire)をISPに戻す方法(Ver6.0)】 2012/11/4 追加
- 「Debug」→「Disable debugWIRE and close」で戻せます。再度debugWIREにするには,AVRDRAGONを外してターゲットの電源を入れ直し,AVRDRAGONつなげば「Start
debugging and break」でdebugWIREになります。
- 【avr-gcc用記述の移植性の悪さ】 2014/10/14 微更新
- avr-gccでは、ROM上に定義した変数を読み出すのに専用の関数を記述する必要があります。ルネサスRL78用コンパイラやPIC用XC8コンパイラだとそんな必要はありません。avr-gccでは文字列リテラル(文字列定数)のテーブルにいたっては、二次元配列で直接記述することができず、個々の文字列リテラルを定義して、さらにそこへのポインタをROMに格納する記述が必要です。ストリング系関数やprintf関数内で文字列リテラルを使う場合も、関数名に_Pが付いた専用関数を使う必要があります。
PIC用XC8コンパイラはコンパイラががんばって(内部的には専用のROMアクセスルーチン組み込んで)普通の変数と同じ書き方ができます。RL78とかはハーバード・アーキテクチャ(ROMとRAMのアドレス空間が完全分離したハードウエア構造)と言いながら実はROM領域もRAMと同じアドレス空間内で読めるので、元々苦も無く普通の変数と同じ書き方ができるコンパイラが作れています。
avr-gccががんばれない理由は、結局は大元のgccの構造を変えられないからということのようです。だったらgccじゃなくてXC8のように専用コンパイラ作れよと言いたくなります。ま、モータ制御のように文字列リテラルを使わないアプリケーションでは、それほど大きな移植障害は無いので、不満に思っている人は少ないのかもしれませんが(私は不満だ)。
(1)数値のROM格納と読み出し
ヘッダーpgmspace.hをインクルードし、変数定義にconst修飾およびPROGMEM修飾を付加する。読み出し関数は型に応じてpgm_read_byte,pgm_read_word,pgm_read_dword,pgm_read_float,pgm_read_ptrを使う。ただし、64Kバイトを超えるROM領域の読み出しには、関数名に_farを付加する。
(例)
#include <avr/pgmspace.h>
:
const char data[10] PROGMEM ={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
:
i = pgm_read_byte(&(data[j]));
(2)文字列リテラル・テーブルのROM格納と文字列操作関数
ヘッダーpgmspace.hをインクルードし、個々の文字列リテラル定義にconst修飾およびPROGMEM修飾を付加する。文字列リテラル・テーブルは、個々に定義した文字列リテラルへのポインタ配列として定義する。ポインタの型としてPGM_Pを使用する。文字列リテラル(へのポインタ)を引数とする文字列操作関数は、標準の関数名に_Pを付ける。ただし64Kバイト超のROM領域に配置されている場合は_PFを付ける。
(例)
#include <avr/pgmspace.h>
:
const char s1[ ] PROGMEM = "ABCD";
const char s2[ ] PROGMEM = "JKLM";
const char s3[ ] PROGMEM = "UVWX";
const PGM_P table[ ] PROGMEM = { s1, s2, s3};
:
strcpy_P(buffer, table[i]);
strcat_P(buffer, "PQRS");
- 【スタートアップ・ルーチン】 2014/9/28 追加
- C言語用のスタートアップ・ルーチンは自動で組み込まれます。したがってユーザーはmain関数から記述すればよいです。ただし、ポートの初期設定などをmain関数の起動前に実行しておきたい場合は、初期化セクション(.init0〜.init9)の中のユーザー定義用セクション(.init1,3,5,7,8)に記述します。.init0〜9セクションの役割と推奨用途は次の通り。
.init0:リセット後、最初に実行するセクション。(実体は特にないような?)
.init1:ユーザー定義用。アセンブラ記述用。ポートやクロック系統の設定に適する。
.init2:自動組み込み。レジスタr1のクリアと、スタックポインタの設定。どちらもC言語記述の前に必須の処理。
.init3:ユーザー定義用。C言語記述可能。ポートやクロック系統の設定に適する。★変数の初期化がされてないので注意。
.init4:自動組み込み。初期値付き静的変数領域(.dataセクション)に初期値をコピー、初期値無し静的変数領域(.bssセクション)を0クリア。
.init5:ユーザー定義用。C言語記述可能(制約無し)。
.init6:自動組み込み(?)。Cでは使用しない。C++用で使用する。
.init7〜8:ユーザー定義用。C言語記述可能(制約無し)。main関数実行前に処理したいことがあれば、.init8に記述すれば良い。
.init9:自動組み込み。main関数の呼び出し。
初期化セクションのC言語記述方法
ヘッダーio.hをインクルードし、プロトタイプ宣言でセクション指定のアトリビュートを付ける。関数記述で最後のreturnは不要(各初期化セクションは関数呼び出しではなく、中身を直接実行できるように並べているため)。
(例)
#include <avr/io.h>
:
void Init_init3(void) __attribute__ ((naked)) __attribute__ ((section (".init3")));
:
void Init_init3(void){
PORTB = 0xff;
DDRB = 0xff;
}
- 【Cコンパイラ(avr-gcc)で使用されるレジスタ】 2014/9/28 追加
- C言語から呼び出す関数をアセンブラで書く場合は、以下の点を注意します。
■r18-r27,r30-r31:アセンブラ関数内では保護不要(呼び出し側で保護している)。一部のレジスタに引数が格納される場合があるが、自由に使用でき、復元の必要もない。戻り値の必要な関数の場合は、最終的に一部のレジスタを戻り値の格納に使用する。
■r0-r17,r28-r29:アセンブラ関数内で保護が必要。使用しないかリターン前に元の値に復元する。なおr1には0が格納されており、定数0の代わりに使用できる(アセンブラではゼロ格納レジスタをしばしば重宝する。しかしr1は乗算命令を使うと書き換えられてしまうため、r2あたりに格納して欲しかった)。
■関数の引数:r24-25,22-21,・・・8-9の順に使用する。charは偶数側に配置し,奇数側は空ける。奇数バイト数の構造体の場合も奇数側はあける。レジスタで渡しきれないものはスタックで渡す。fprintfなどで使う引数リストはスタックで渡す。
■戻り値:charはintに拡張し、unsigned charはunsigned intに拡張してr24-25に格納、2バイト変数はr24-25に格納、4バイトまでの変数はr22-25に格納、8バイトまでの変数はr18-25に格納。
★注:以下は以前PICを使った時の内容です。SAMマイコンでX IDEを使う場合については、SAMマイコンのページを参照ください。
長いものには巻かれろ、ということでXIDEはじめました。旧AtmelのAVRのサポートも開始されているようで、長く付き合えそうな感じです。
- 【ウオッチが同名のstatic変数を区別できない】 2018/11/4 追加
- static属性の同名の変数(今回はcountと言う名称)を2つのCソースで定義していますが、デバッガでウオッチすると片方しか見えませんでした。cソース上で右クリックしても同じです。
他のデバッガでは今まで試したことが無かったので、X IDE特有の問題なのか、一般的によくある話しなのかは不明です。
ウオッチができないだけで、オブジェクト自体はそれぞれのstatic変数が別々の領域に確保され、問題なく動作しているようです。
とりあえず表示されない方の変数名を変更して対処しましたが、もしかしたらどこかの設定で区別できるようになるんでしょうかね。
- 【PICkit4でデバッグがスタートしない】 2018/10/23 追加
- いよいよデバッグ開始です。PICkit4をターゲットに接続して、おそるおそるデバッグ・アイコンを押してみると、なんと次のメッセージが出て中断してしまいました。
「The configuration is set for the target board to supply its own power but no voltage has been detected on VDD. Please ensure you have your target powered up and try again. Connection Failed.」
つまりターゲット基板の電源が入ってないということです。そんなはずは無いと再確認しましたが、チップにもPICkit4へのコネクタにもちゃんと給電されていました。何か特別な手順とか設定が必要かなと、PICkit4のクイックスタートガイドを見ましたが詳しい説明がありません。PICkit4はまだ詳細な日本語ガイドが無いようなので、しょうがなくPICkit3の日本語ガイドを開いたら・・・、あぁぁ1番ピンはこっちだと丁寧に書いてある・・・。
はぁぁ、PICkit4のクイックスタートガイドにコネクタのピン配置と製品写真が並べて掲載されていて、てっきりその写真の向きと表のピン順序が合致していると思い込んでいました。よく見ると”さりげなく”1番ピンを意味する三角マークが下側に表示されていました。PICkit3のガイドのように丁寧に書いてあればすぐ気が付いたのでしょうが1時間も悩んでしまいました。
ともかく、PICkit4をひっくり返して接続し、無事デバッグを開始できました。いやはやマイコン歴40年以上でこんな間違いをしでかすとは・・・、って言うか最近ぼけが進行してきたのかもしれせんね。
- 【日本語コメントをつける場合の注意】 2018/9/16 追加
- TIのCCSでやったちょんぼをまたやっちまいました。
海外製ツールでシフトJISを選択した場合、//コメントの最後の文字の2バイト目が\(0x5C)だと行継続と判断されて、次の1行がコメントアウトされてしまいます。例えば、"可能"の能の字。/**/形式なら問題ありませんが、//使う場合は最後に常に”.”(。、.,どれでも可)を付けるくせをつけないといけないようです。
どうせ現在は文字列内で2バイト文字コードを使えないのでシフトJIS以外を選択するという手もありますが、将来使えるようになることを期待して・・・。
TIのマイコンは日本語資料が揃ってないので避けたいというか、ずっと避けていたのですが、ついに避けきれずにつかまってしまいました。
嘆いていてもしょうがないので、はまった点をぽつぽつメモしていきます。CCSのバージョンは6.2です。
- 【ソースファイル位置の修正方法】 2016/12/5 追加
- ×やってはいけない方法(皆がはまる罠): 左側のProect Exploer欄で、サブフォルダをクリックするとソースやヘッダのファイル名が表示されます。その中のどれかを選択して右クリックのプロパティを表示すると、LocationのところにEditボタンが表示されますが、そこで修正してはいけません。そこでの変更はプロジェクト情報へ反映されないため不整合が出て後々悩むことになります。
○正しい修正方法: プロジェクト名を選択して、右クリックし、プロパティを開きます。一番上に表示されている「Resouce」の下位階層を開くと(+記号あるいは》記号をクリックして開くと)、「Linked
Resouces」が表示されるので、それをクリックし、さらに右側に開いた画面の上の「Linked Resouces」タブを開きます。これで開いた画面で修正したいファイルを選択してEditボタンを押し、修正します。修正後、okボタンを押しますが、この時点で表示されるLinked
Resouces画面では修正されてないように見えます。あせらずokを押して再度この画面を開くと、ちゃんと修正されているのが確認できます。この方法で修正すればサブフォルダ下のファイル情報にも自動的に反映されます。
- 【プロジェクト位置移動時の注意】 2016/12/5 追加
- @cleanしないとオブジェクトに以前の位置情報が残ってしまいます。「Project」→「Clean」で対象プロジェクトを選択し、「□Start a build immediately」のチェックを外してokボタンを押します。
A「Linked Resouces」画面を開いて(【ソースファイル位置の修正方法】参照)、Locationの起点が"ORG_PROJ_DIR"のものは"SRC_EX"などを起点とした情報へ変更しておく方が良いでしょう。細かい状況は忘れましたが、プロジェクト位置移動に伴って"ORG_PROJ_DIR"より下の記述が勝手に書き換えられて、移動後にソースファイル位置修正が必要になりました。
- 【関数ヘルプ、説明書】 2016/12/5 追加
- @PIN, UART, ADなどのペリフェラルドライバについては、下記htmlを直接開いたほうが早いし、見やすいです。
C:\ti\tirtos_cc13xx_cc26xx_2_20_01_08\products\tidrivers_cc13xx_cc26xx_2_20_01_10\docs\tidriversAPIs.html
またサンプルソースが下記フォルダの下にあります。
C:\ti\tirtos_cc13xx_cc26xx_2_20_01_08\examples\ti\CC2650DK_7ID
AセマフォやクロックなどのOS機能は、ccsのヘルプから開いて探します。
「Help」→「Help Contents」→「TI-RTOS for ...」→「Kernel Runtime API ...」→「ti」→「sysbios」
ここで、左側のツリーの「sysbios」の下位階層表示(+記号または》記号)を押し、さらにその中の「knl」の下位階層表示を行うと、Clock、
Queue、Semaphoreなどの項目が表示されます。
- 【日本語の情報は・・・】
- 悲しいほど見つかりません。TIの日本語フォーラム(E2Eコミュニティ)も多少参考になりますが、他に情報が豊富な場所をご存知の方教えてください。
- 【CCSで日本語コメントをつける場合の注意】
- E2EのMSP430フォーラムにも簡単に書いてありますが、//コメントの最後の文字の2バイト目が\(0x5C)だと行継続と判断されて、次の1行がコメントアウトされてしまいます。いろいろ調べて見るとCCS以外では、|(0x7c)などもだめなケースがあるようです。下記の4文字ならどのツールでも安全かつコメントの最後の文字として違和感がないでしょう。まあテンキーにある”.”が一番使いやすい気がします。
。、.,
- 【CCSライセンス、デバッガ】
- デバッガとしてXDS100または開発キットCC2650DK(のSmartRF06ボード)上のXDS100v3を使う場合、FREEライセンス(デフォルト選択)で良いです。XDS200だったらどうなるか調べようとしてTIの該当ページをクリックしたら、リンク切れていました(2016年11現在)。
FREEライセンス選択されていてもライセンス管理画面によってライセンス種別を変更することが可能らしいです。
SmartRF06ボードからはJTAGピンヘッダも出ているので、単独でXDS100の代わりとしてFREEライセンスで使い続けることも可能らしいです。
- 【サンプル・ソフトのプロジェクト流用】
- インポートプロジェクトで、□Copy projects into workspaceにチェックをつけてもソース本体はコピーされません。したがって、オリジナルソースはバックアップしておいた方が良いです(マニュアルにも記載あります)。
ソースを自分の好みの場所におきたいのであればプロジェクト立ち上げ後に入れ替えするか、以下のプロジェクトファイルで、
¥ti¥simplelink¥ble_sdk_xxx¥examples¥cc2650¥所望のサンプル¥ccs¥app¥.project
<locationURI>SRC_EX/の下のソースファイル位置を変更すればよいです。(ただし.projectに直接記載無く、includeで呼ばれるものは結局別途場所の入れ替えが必要)。
- 【サンプルのビルド、デバッグ】
- 1.プロジェクト・インポートすると、xxx_appとxxx_stuckの2つのプロジェクト・フォルダーが生成されるはずです。
2.xxx_stackをクリックして(Activeと表示される)、「Project」→「Build All」
3.xxx_appをクリックして(Activeと表示される)、「Project」→「Build All」、
4.xxx_stackをクリックして(Activeと表示される)、「Run」→「Debug」。ここでデバッグ画面が表示されるが、あせらずじっくり待つ。ポップアップ・ウインドウが2回ほど開いてダウンロードの進行が表示される。終わったら(エントリーが無いとかのメッセージがでてたような?)、「Run」→「Terminate」。これ以外の操作を行うとNG。
5.xxx_appをクリックして(Activeと表示される)、「Run」→「Debug」。ここでデバッグ画面が表示されるので、あせらずじっくり待つ。ポップアップ・ウインドウが2回ほど開いてダウンロードの進行が表示される。終わったら(main関数に入った直後で停止しているような画面になるはず)、「Run」→「Resume」。これでサンプルプログラムが動作します。
6.プログラムを走行したまま編集画面に戻るには、画面右上「CCS Edit」をクリックすればよいです。デバッグ画面にするには「CCS Debug」をクリックします。デバッグを終了するには、「Run」→「Terminate」。ただしボードは動き続けます。
7.プログラム修正は、通常_app側しか修正しないはず。修正したら、上記3.および5.のみ実行すればよいです。
- 【BToolのマニュアル】
- BLEスタックをインストールするとBToolというホスト側のツールも一緒にインストールされます。しかしマニュアルはいっしょにインストールされないです。CC2541
ミニ開発キットの「CC2540 and CC2541 Mini Development Kit User's Guide」に操作方法が記載されています(別途ダウンロード必要)。
SmartRF06ボードでBToolを使うには、host_testサンプル・プロジェクトをビルドして書き込めば動くはずです。
通常の使用方法:
@[Discover/connectタブページ] 上の方のscanボタン押して、scan終了したら下の方のEstablishでコネクトする(複数デバイス見つかった場合は選択必要)。
A[Read/Writeタブページ] 「Read Characteristic value/Discriptor」でハンドル番号(0x0001〜)を入力して「Read」ボタンを押せば読めるます。Discriptorをテキストで見たければ「ASCII」ラジオボタンを選択します。
B値を書き込みたい場合は、下のほうの画面でハンドルと値を入力して「Write」ボタンを押せばよいです。書き込み可能で、正常に書ければSUCCESSが表示されます。
- 【BLEスタックのインストール】
- ダウンロード画面で複数のバージョンが表示されますので、自分が使うチップに対応したバージョンを選択します(今回はCC2650用を選択)。
これのインストールで、BLEスタック、TI-RTOS、XDCデバッグツール、BToolがインストールされます。
WindowsUpdateを長らく怠ったマシンではインストールが途中で止まりました。WindowsUpdate実施後に再度インストールして問題なかったです。
- 【CCSのインストール】
- インストール対象の選択画面で、CC26xxDevice support と TI ARM Compikerの2つしか選択しませんでしたが、けっこう時間がかかります。ネット環境に依存しているのかもしれません。
- 【CC2650EM-7ID(CC2650DK同梱)の技適認証】
- 取れてないようです(2016/11現在)。したがってデバッグは、電波暗室内で行うか、CC2650EM-71D上にSMAコネクタパターンがあるので、そこにコネクタを付けて、ケーブル接続で行う必要があります。
最近はRL78を使うようになったので、78K0は本当に思い出ぐらいの話題しか有りません。まぁ,裏技っぽい情報とか落とし穴とか思い出して書いておきますね。
- 【(雑談)秋月でuPD78P083まだ売っていた】 2013/11/16 更新
- 以前(2010年11月ごろ),秋月電子通商で古い78K0を投げ売りしていました(uPD78P083CU特価品)。その後しばらく消えて2013年10月ごろ一度広告が復活したのですが、また消えていました。ROM24K,42ピン(シュリンクDIP)で,12個300円。1個当り25円。ワンタイムなので書き換え出来ませんが、仲間内で同じような物をつくるときなんか良さそうです。
- 【フリー・ツールの32K制限】 2010/12/24 更新
- バンクは使えないと書いてありますが,バンク0とバンク1の各先頭8KBは使えるようです。従って,32K+8K+8Kの48KBまでフリー・ツールでオブジェクトが作れるようです。実際私は,アセンブラで関数やデータを格納して使用したことがあります。C言語でバンクを使ったことは無いので,もしC言語で使えなかったら悪しからず。
2010年11月に久しぶりにツール(コンパイラ/アセンブラ)がバージョンアップしてますね。この版でも48KBまで使えるかは未確認です。
- 【割り込みの永久ロック】
- うる覚えですが,アセンブラで,LOOP:
BF TMIF00, $LOOP と書くと割り込みが立たなくなってハングアップ(永久ループ)するはずです。C言語で
while(!TMIF00); と書くのはokです(上記を回避するコードが出ます)。
- 【SET1/CLR1 sfr.bit 命令のクロック数が合わない】
- sfrのアドレスがFF00h〜FF20hの範囲の場合は,実行クロック数が8では無く6になります。アセンブラがそのアドレス範囲を
saddr.bit
と見なすためです。クロック数をきっちり数えて波形を出力するような用途の場合は,この点に注意します。どうしても8でなければ困る場合は(そんなの無いと思うけど^^;),直接3バイトのオブジェクトを挿入します(C言語なら#pragma
opc,アセンブラならDB疑似命令で)。
- 【資料室】マニュアル,ツールなどへのリンク
- 最新資料についてはメーカのサイトで確認願います。 (注)下記のPDF表示は「PDFダウンロード画面へのリンク」の意味です。IE11以上でないと当該ページが出ません
〜〜〜 デバイスのマニュアル類 〜〜〜
- 78K0 ユーザーズ・マニュアル命令編(PDF)
- 78K0/Kx2 ユーザーズ・マニュアル(78K0/KB2,78K0/KC2,78K0/KD2,78K0/KE2,78K0/KF2)(PDF)
- 78K0/Kx2-L ユーザーズ・マニュアル(78K0/KY2-L,78K0/KA2-L,78K0/KB2-L,78K0/KCB2-L)(PDF)
- UPD78F0730 ユーザーズ・マニュアル[USB内蔵品](PDF)
- ユーザーズ・マニュアル(uPD78P083含む)(PDF)
- データ・シート(uPD78P083)(PDF)
〜〜〜 ツールのマニュアル類 〜〜〜
- 統合開発環境(PM+ Ver6.3)ユーザーズ・マニュアル(PDF)
- Cコンパイラ(CC78K0 Ver3.7)言語編(PDF)
- Cコンパイラ(CC78K0 Ver3.7)操作編(PDF)
- アセンブラ・パッケージ(RA78K0 Ver3.8)言語編(PDF)
- アセンブラ・パッケージ(RA78K0 Ver3.8)操作編(PDF)
- 統合デバッガ(ID78K0-QB Ver3.0) 操作編(PDF)
- MiniCube2(QB-MINI2)ユーザーズ・マニュアル(PDF)
- QB-Programmer 操作編(PDF)
〜〜〜 関連ページへのリンク 〜〜〜
- 78K ラインナップのページ
- 開発ツールのページ(78K0) 2016/10/30 更新
- PM+版フリーツール(78K0用Cコンパイラ[CC78K0],アセンブラ・リンカ・PM+[RA78K0])のダウンロード・ページ 2016/10/30 更新
インストールに必要なプロダクトIDは以前はメールで配信されていましたが、現在は上記ページのRA78K0_readme_j.txt, CC78K0_readme_j.txtで公開されています
(RA78K0:00001472M,CC78K0:00001147L,SM78K0:00001796M)。
- CS+版フリーツールのダウンロード・ページ 2016/10/30 更新
- デバッガ(MiniCube2関連ソフト) ID78K0-QB 2016/10/30 更新
- デバイス・ファイルのダウンロード・ページ (
K0/Kx2,
K0/Kx2-L,
78F073x,) 2016/10/30 更新
- パラメータ・ファイル(MiniCube2用)のダウンロード・ページ (
K0/Kx2,
K0/Kx2-L,
78F073x,) 2016/10/30 更新
- 簡易書き込み回路・ソフト(ダウンロード・ページ) 2012/1/25 更新
- ソリューション(LED照明・蛍光灯関係) 2012/3/11 追加
(1)AMラジオ(高1,トランスレス・スピーカ式)
2010.7.31
電子工作マガジンの2010 SUMMER号に2石レフレックス・ラジオの回路が載っていますが,トランス式なんですよね。低周波トランスは意外とお高いので,それを二個も使うのは勘弁してってことで,アンプをICに変えた物を作ってみました。それと,秋葉原まではちょっと遠いので,手近なパーツ屋さん(サトー電気)で揃う部品でまとめてみました。
製作結果:
アンテナなしだとボリューム最大でやっと聞こえる程度でした(家の中で使用)。アンテナとして30cm程度のリード線を付けると結構良く受かります。リード線を2mにするとガンガン入る感じです。高域ノイズがちょっと多いです。やっぱ検波部がいい加減でしたかね。電源は3V〜9Vくらいで動きます。RF感度は電圧低い方が良いみたいです。
回路図CADファイル(D2CAD)
部品リスト(2010.7.31時点でサトー電気にありました)
記号 |
値,型番 |
備考 |
ANT1 |
電線(30cm以上が望ましい) |
使用場所での電波の状況で長さを決めてください。長いほど良いです。 |
L1 |
SL-55GT (ストレートラジオ用アンテナコイル, 330μH) |
端子5は使いませんが,切ったりしないでください。巻きつけるなり,なんなり適当に処置します。間違ってSL-55GX(スーパーヘテロダイン用)を買わないように注意します。 |
L2 |
4mH (縦型TR用チョークコイル) |
|
C1 |
270pF単連ポリバリコン (ストレートラジオ用) |
別売のダイヤルと取付けネジも購入した方が良いでしょう。 |
Q1 |
2SC1815 (トランジスタ) |
2SC1815-Y,-GRどちらでも良いでしょう。私は手持ちの2SC945を使いました。 |
D1 |
1N60 (ゲルマダイオード) |
|
U1 |
LM386N-1 or NJM386D (アンプIC) |
|
C2,C3,C6 |
0.022 (セラミック・コンデンサ円板型) |
|
C8 |
0.047 (セラミック・コンデンサ円板型) |
|
C5, C7 |
10/25V (電解コンデンサ縦型) |
耐圧の高いもの(35V品, 50V品)でも良いです。 |
C4, C9 |
47/25V (電解コンデンサ縦型) |
耐圧の高いもの(35V品, 50V品)でも良いです。 |
C10 |
220/25V (電解コンデンサ縦型) |
耐圧の高いもの(35V品)でも良いです。 |
R6 |
10 (1/4W 炭素皮膜抵抗) |
|
R4 |
220 (1/4W 炭素皮膜抵抗) |
|
R3 |
1k (1/4W 炭素皮膜抵抗) |
|
R2, R5 |
22k (1/4W 炭素皮膜抵抗) |
|
R1 |
47k (1/4W 炭素皮膜抵抗) |
|
VR1 |
5kΩ(Aカーブ) |
写真はツマミとセットで安く売っていた18φ一般ボリューム(10kBカーブ)です。 |
SP1 |
8Ωスピーカ (0.5W以上) |
|
SW1 |
プッシュSWまたはトグルSW |
展示する場合,スイッチを押している間だけONになるプッシュSWの方が良いかもしれません。 |
B1 |
電池4.5V〜9V |
展示するなら乾電池3本(4.5V)当たりが適当でしょう。 |
- (1)抵抗の常備品
- 私のお勧めは,E3系列(1.0, 2.2, 4.7)です。マイコン系の回路ならE3系列でほとんどカバーできるし,E12が欲しければ,E3系列2本だけで作れます。もちろん,めったに工作しない人ならE1系列(系列というのか?^^;)でokです。
E12系列 |
E3系列 2本での作り方 (+は直列, //は並列) |
E1系列 4本以内での作り方 |
1.0 |
1.0 |
1.0 |
1.2 |
1.22 (1.0 + 0.22) |
1.20 (1.0 + 0.1 + 0.1) |
1.5 |
1.50 (2.2 // 4.7) または 1.47 (1.0 + 0.47) |
1.50 (1.0 + (1.0 // 1.0) ) |
1.8 |
1.80 (2.2 // 10) |
1.67 ( (1.0 + 1.0) // 10) |
2.2 |
2.2 |
2.00 (1.0 + 1.0) |
2.7 |
2.67 (2.2 + 0.47) |
2.50 (10 // 10 // 10 // 10) |
3.3 |
3.20 (2.2 + 1.0) または 3.20 (4.7 // 10) |
3.33 (10 // 10 // 10) |
3.9 |
3.87 (4.7 // 22) |
4.00 (1.0 + 1.0 + 1.0 + 1.0) |
4.7 |
4.7 |
5.00 (10 // 10) |
5.6 |
5.70 (4.7 + 1.0) |
6.00 ( (10 // 10) + 1.0) |
6.8 |
6.90 (4.7 + 2.2) または 6.88 (10 // 22) |
6.67 (10 // (10 + 10) ) |
8.2 |
8.25 (10 // 47) |
8.33 (10 // 100 // 100) |
100kΩを越える抵抗はデジタル系ではあまり使わないかも。タイマーIC(NE555)で使う,発振用帰還抵抗で使う,とか。
定格電力は,1kΩ以下は1/4W推奨,2.2kΩ以上は1/6Wでもokです(電源15V以下の場合)。
100Ω以下では1/4Wでも足りなくなる場合がありますが,値段の高い1/2W以上を買うより1/4Wを数本組合せたほうが良いでしょう。
- 【電即納(つまみの探し方)】 2017/1/8 追加
- 電即納ではボリュームやスイッチのつまみも扱っています。型番がわかっている場合は、電即納のページの「その他」カテゴリから探せます。
特定のボリュームやスイッチに適合するものを探す場合は、ボリューム、スイッチの型番一覧の右端に「オプション」欄があるので、”つまみ”をクリックすれば該当するつまみが表示されます。オプション欄が無かったり、オプションの内容が”−”の場合は該当するものがありません。
- 【鈴商】 2016/8/10 更新
- 店舗は昨年閉鎖されていますが通販はやっています。事前に何を買いたいか連絡すれば直販もしてくれます。ただし事務所(というより倉庫)はaitendoよりさらに若干遠いです。しかもエレベータ無しの地下室です。地上から地下室へのドアを開けたとき真っ暗なのでびくびくしましたが、入ると自動で電灯がつきました。地下室のドアを開けると、おっさんばっかり3人が地下室の倉庫で作業していました。愛想は良い方です。
今回は軸が細くて(φ3.5)長いスイッチが急遽必要になったので直接行きました。秋月に置いてあるのはφ5のカバーで延長するタイプで、今回の目的には合わなかったので。まぁ、こんな特別なことでも無い限り直接行くことはもう無いと思います。
- 【aitendo】 2016/8/9 追加
- 店員が若い女子ばかりと聞いていましたが、本当でしたね。平日の夕方、お客さんは数人なのに女店員さんは3〜4人ぐらい。大雑把にはどこに何があるかは把握しているようで、コネクタ売り場へ案内してもらいました。さすがに型番を聞いてぴたりと棚を指すところまではいってなく、一緒に探しました。言葉は若干たどたどしいところがあって、都内ではコンビニやファストフードで珍しく無い近国出身の方のようでした。
今回は秋月、千石に無いものがあったので行きましたが、いつも御茶ノ水駅で降りて部品を買いに行くので、そこからだとやっぱちょっと遠いです。最初はちょっともやもや感を期待したのですが、まぁ、結局コンビニのレジのおねーさんと変わりないので、行く機会はそんなにないでしょう・・・、たぶん。
- 【デジキー】 2010/12/24 更新
- 多めに買うものがある時はここですね。品種多くて値段もリーズナブル。海外からの発送ですが到着まで数日と早いです。購入額7500円未満だと送料2000円かかるので,小口の買い物には適しません。
ようやく78K0,V850の在庫品が徐々に増えてきました。2010/12/24時点ではまだ78K0Rは非在庫です(MINICUBE2付きボードならある)。
MINICUBE2(QB-MINI2)は最安値(2010.11.28時点で¥8,109英語版)だったのですが,現在在庫ぎれで,値段も¥9,336に上がっています。さらにQB-MINI2に78K0R/KG3-LあるいはV850ES/JG3-Lのボードが付いたキットも若干値段が上がっています(¥11,472→¥11,900)。でも英語が苦にならない人にはお勧めかも。
- 【チップワンストップ】 2010/12/14 更新
- 1〜2個とか少量買うときに割高な気がしますが,他で探しても見つからないものがあったりして頼りになります。wolfson製音声コーデック WM8510 もここで買えます。
- 【秋月電子通商】
- 部品探すときは,やっぱ最初はここ見ることが多いですね。ここに無くて他を探すこともしばしば。
- 【千石電商】
- 一番のお気に入りは,ACアダプタのプラグ変換ケーブル(WK-J2)です。安いACアダプタ(φ2.1プラグ品)をEIAJ#2(統一極性,電圧区分2)の機器で使えます。通販のページに掲載されてないですが,たぶん問い合わせれば通販してくれると思います。
- 【サトー電気】
- 近場にあるので重宝します。拙宅からだと町田店が近いです。川崎,横浜にもあります。昔の品種もあるので,古いエレクトロニクス工作資料を見て作る場合も役立ちます。新しいものだと思って買ったら,製造年月が20年以上前の新品(未使用品と言った方が良いのか(^^;
)で,驚くことがあるかも(最近1度経験しました)。
- 【共立電子産業】
- 他にない部品があるので最近見るようになりました。圧着端子は豊富ですね。
- 【RSコンポーネンツ】
- 78K0RとかV850ESの在庫あるので,ここは外せません。翌日到着,送料460円。MINICUBE2(QB-MINI2)も扱っています。
- 【若松通商】
- 以前はそこそこ買ってました。ブラックゲート(超高性能電界コンデンサ)の在庫品がまだあります。年中無休で20:30まで営業ですので,いざというときに助かります。駅からはちょっと遠いかも。
- 【マルツ電波】
- MINICUBE2(QB-MINI2)を扱っています。近年トラ技と連動して目立つようになりましたよね。まだ行ったことないですが,秋葉原店は20時まで営業しているようです。
主にLED駆動の場合の増強方法を解説します。
(0)ポートを束ねる
ポートのオン/オフでLED駆動している場合は,ポートを数本使うことで駆動電流を増やせる場合があります。
出力能力の異なるポートを束ねる場合はややこしいので,ここでは同一種類のポートを束ねる計算例を示します。
計算式: 抵抗値 = ( VDD - LED順電圧 - VOL ) / LED順電流
ここでVOLは,”ポート当たりの電流 = LED順電流/束ねるポート本数”におけるマイコンのVOLを出力特性図から求めた値です。
出力特性図はデータシートに記載されている場合もありますが,メーカによっては別資料になっています。
流す電流は,データシートの”1ポート当たりの絶対最大定格”および”ポート合計の絶対最大定格”を越えないようにします。絶対最大定格を越えると瞬時に破壊される可能性が高くなるので厳守します。
なお一部のマイコンでは絶対最大定格の他に”動作保証電流”が決められています。動作保証電流は,「これを越えてもポートは壊れないけど誤動作する可能性がある」と言うタイプと,「これを越えてもポートは瞬時に壊れないけど寿命がかなり縮まる」と言うタイプがあります。誤動作の場合は単に該当ポートだけでなく,最悪マイコン全体が暴走する可能性も含みます。(専門的に言うと,前者はマイコン内のVDDが下がったりGNDが上ったりしてロジック・レベルが規格割れを起こすもので,後者はエレクトロマイグレーションという腐食現象の進行が通常よりかなり加速されるというものです)。データシート上では前者か後者かは判断不能です。まぁ,趣味で使う場合は,この規格を守るかどうかは各自で判断(もしくは実験)すれば良いでしょう。
(1)エミッタ・フォロワ(コレクタ接地)駆動
トランジスタ1個を外付けして電流を増やす場合,私はエミッタ・フォロワ形式を良く使います。
・メリット : 抵抗が1本で済む。高速。
・デメリット: コレクタ損失がやや大きい。VDD=3.3V以下では使えない。VF(LED順電圧)が高いLEDには使えない。
計算式: 抵抗値(VDD5Vの場合の概算式) = (4.2V − LED順電圧) / LED順電流
計算例: LED順電圧2.2V,LED順電流20mAなら抵抗は100Ω
VOH:マイコンのハイレベル出力電圧。CMOS出力ポートならVDD-0.1V程度で計算(Ioがおおむね1mA程度時)。
VBE:0.7V程度で計算。
VCE:0.8V程度で計算。これに電流を掛けた値がコレクタ損失。
マイコンの出力電流は,LED順電流/トランジスタのhFE。hFEは概算として100,安全を見る場合は50程度で計算。
(2)エミッタ接地駆動
トランジスタ(バイポーラ)1個を外付けする場合のオーソドックスな回路です。
・メリット:エミッタ・フォロワより損失が少ない。マイコンのVDDより高い電源や負電源をLED電源として使える(VFが高いLEDを駆動できる)。
・デメリット:抵抗が2〜3本必要。高速PWM駆動する場合はスピードアップ・コンデンサが必要。
・コンデンサはLEDのOFF期間が短い場合(おおむね10μs以下)に必要です(トランジスタ特性とR2に依存)。コンデンサ容量は10〜100pF程度。通常の用途ではここまでOFF期間を短くする必要性は無いので,ほとんどの場合コンデンサは不要です。
・マイコンの出力ポートがCMOSであれば,R3は省略可能です。あればターンオフ時間を多少速く出来ますが,コンデンサほどの効果はありません。
・VCCはマイコンの動作電圧(ここではVDD)より高くすることが可能です。VEEはグランドより低くする(負電圧にする)ことが可能です。
・R1 = (VCC - VCE(sat) - LED順電圧) / LED順電流 ・・・ アクティブ’H’駆動
R1 = ((VDD - VEE) - VCE(sat) - LED順電圧) / LED順電流 ・・・ アクティブ’L’駆動
ここで,VCE(sat)は,0.1V〜0.5V程度で計算します。LED順電流が100mA以下でベース電流2mA程度なら0.1V計算で良いでしょう。コレクタ電流を上げていくとVCE(sat)はだんだん高くなり,VCE(sat)を下げるためにはより多くのベース電流が必要になります。
・R2 = (VOH - 0.7) / (ベース電流 + 0.7 / R3) ・・・ アクティブ’H’駆動
R2 = (VOL - 0.7) / (ベース電流 + 0.7 / R3) ・・・ アクティブ’L’駆動
VOH, VOLは流す電流に応じてマイコンのポート特性表から求めます。例えばR3省略でベース電流1mAとし,電流1mA時のVOHが4VならばR2
= 3.3kΩになります。
(3)ソース接地駆動
MOS FET1個を外付けする場合の回路です。
・メリット:マイコンの駆動電流が小さい。同一パッケージのバイポーラ・トランジスタより電流を大きく取れる。マイコンのVDDより高い電源や負電源をLED電源として使える(VFが高いLEDを駆動できる)。
・デメリット:小口で買える低電圧駆動品種が少ない。抵抗が2本必要。
・2SK2961, 2SJ537はサトー電気で売っています(2010年初夏調べ)。パッケージがTO92なのでホビー用にちょうど手ごろと思います。5V電源のマイコンでは問題なく大電流駆動が可能です。3.3V電源マイコンで駆動するとオン抵抗が高くなるため電流はあまり流せません。
・R3はマイコンの出力ポートがリセット期間中ハイインピーダンスになるなら必須です。バイポーラと違ってR3が無いとリーク電流や浮遊電荷でオン(LEDが点灯)してしまう可能性があります。R3の値は10k〜100kΩ程度で良いでしょう。
・R1 = (VCC - LED順電圧) / LED順電流 - Ron
・・・ アクティブ’H’駆動
R1 = ((VDD - VEE) - LED順電圧) / LED順電流 - Ron
・・・ アクティブ’L’駆動
ここで,RonはMOS FETのオン抵抗です。2SK2961の場合,Vgs4Vで0.26Ω(typ.)と低いですが,Vgsが3V以下になると抵抗値が急激に上り,
Vgs2Vではワーストケースで10kΩ程度まで上ります。
まぁ,適当に読み流してください。
〜〜〜〜〜〜〜 まじめ編 〜〜〜〜〜〜〜
- 【人の話を聞け!、関係ない部分もだ!】 2016/8/15 追加
- 人の話を聞けと言うと、しばしば「聞いてますよ」と答えが返ってきます。これこそコミュニケーションギャップの最たる例ですね。話し手は聞いてもらいたいポイントを聞いてと言っているのに、聞き手は自分に興味ある部分とか関係ある部分だけ聞いて、他は聞き流していることがしばしばあります。
よくありがちなのが、奥さんの近所の噂話を適当に聞き流していると「あんた、聞いてるの?」と怒られることがあります。夫婦の会話なら良い(?)ですが、お客さんや上司から「こいつ聞いてないな」と思われたら心証悪いし、時として不毛だと思って聞き流していた話の一部に必要なことが混じっていて、後で「言ったじゃないか」と怒られたりすることも。
- ともかくコミュニケーションギャップが生じてるなと感じたら、関係ないところ、くどくど何度も言っているところ、をしっかり聞きましょうよ。
- 【設計依存数値を仕様化する場合、根拠書いてよ!】 2016/5/22 追加
- PS/2キーボードを設計しようと思って資料を漁って見ました。まぁ一通り見つかったのですが、その中に気になる仕様がありました。
「タイプマティック(キーリピート)の繰り返し回数設定値[回/秒]:30、26.7、24、21.8、・・・」
どう見ても設計依存の数値を仕様化したものですね。他の人の工作Webページを見ると、これに合わせようと苦労した跡がありました。かわいそうに^^; どうせ制御周期の関係だろうとあたりをつけたところ、あっさりと240Hz(4.167ms周期)をベースにした数値であると計算できました。26.7回/秒は、240/9つまり240Hzで9周期なので、正確には26.666...回/秒ですね。
ちゃんと根拠書いてくれれば誰も苦労せずに設計できるだろうにと思います。まぁ互換品を作るために仕様書を公開したわけではないから、そこまで親切にする義理はないのでしょうが、一般ユーザーでも、なんで小数点つきの数値で仕様を決めたの?って疑問に思いますよね。240/9と書いてくれれば皆納得するのに^^;
- 【眠らない頭、倒れない体、折れない心】 2015/7/2 追加
- 高度成長期には残業200時間のエンジニアも珍しくないと言われていました。かくいう私も200時間こそ行かなかったものの100時間越えはしばしばありました。給与と残業手当てが同じ、つまり2人分給料をもらっている感じでしたね。
今の世にも残業200時間はあるようですが、名ばかり管理職で手当が付かないとか、そもそも支払う気がないブラック企業とかあって、質的にはかなり違う状況です。まぁ、そこまでいかなくても、不況というか、家電系や半導体系の製造業がどんどん萎んでいくという状況では、低賃金で長時間労働もやむなしというあきらめもあるようです。
冒頭の「眠らない頭、倒れない体、折れない心」は、そういった企業で働く人から聞いた「エンジニアに必要な素養」だそうで、いやはや悲壮感ただよってますね。過労死にならないようにお気をつけて。
- 【公用文は「,と。」を用いる→改訂】 2021/4/3 更新
- ついに横書きの公用文で「、」が使える時代が来ました。はぁ?と思われる人も多いかもしれませんが、今まで横書き公用文の読点には「,」を用いることになっていたのですよ。今後は原則「、」になります。「,」も使ってよいですが一つの文書内ではどちらかに統一する必要があります。ま、私のWebページは公用文じゃないので今更統一はしませんけどね。詳しくは2021年3月12日付の『新しい「公用文作成の要領」にむけて(報告)』文化審議会国語分科会発行を参照ください。
【過去記事】
意外と知られてないですが,横書きの公用文の句読点は「,と。」を用い,縦書きは「、と。」を用いることになっています(Wikiの「公用文」参照)。義務教育で使う教科書,JIS規格書,などもこれに従っているようです。しかし全省庁がこれに従っているわけでは無く,公用文以外では少数派かもしれません。特にパソコンで文章作成することがあたり前になった今日では,「日本語入力FEPの設定を横書きと縦書きで変えるのは煩わしい」との理由で「、」設定のままにする場合が多いと思います。わたしゃ縦書き文書はめったに書かないので「,」設定にしています。
一部の企業では公用文に準じる規則を定めている場合があり,例えば旧NECエレクトロニクスのマニュアル類は「,と。」を使っています。一方で日立・三菱系は「、と。」を使っており,ルネサス・エレクトロニクス統合でどうなるかと思ってましたが,今のところ統一はされてないようです。従って,RL78やCubeSuite+のマニュアルは「,と。」,RXのマニュアルは「、と。」が使われています。
CQ出版のように「,と.」という英文派も結構見かけます。結局,そんなんどっちでも気にならないって事ですかね。ただたまに「,を使うのはおかしい」と言う人がいるので,恥をかかぬようご注意を。
- 【100点エンジニアと−50点エンジニア,同じ能力でも差が150点】 2011/7/12 追加
- 知識・経験が豊富なベテラン・エンジニアでも,周囲から100点評価される人と−50点評価される人がいます。
事例1:
「この回路を設計できますか?」
「えっ? 私はその回路のエキスパートですよ」
YesかNoかで聞かれている質問の答えを言ってない時点で0点,エキスパートだと自慢しているように聞こえるので−50点です。
これを頭で分かっていても,(俺の能力をちゃんと評価してくれてないのか)と言う想いが強いとついつい口に出てしまいます。そこをぐっと抑えてシンプルに「Yes」と答えて100点を取るのが良いでしょう。
事例2:
「他社が半額の製品を出してきた。まず全部品の推定原価一覧を作成して,次にコストダウン対策を考えてください」
と言って1枚の基板を渡されたら,一番高そうなLSIの捺印が明らかにカスタム捺印だった。
「対策考えるなら,このLSIを開封してチップサイズとか仕様を調べるのが先ですね。抵抗とか全部調べる意味ないですよ」
なまじ知識・経験が豊富だと,一足飛びに結論づけてしまいたくなります。しかしこんな言い方では評価が低くなっても仕方ありません。この場合,2番目の作業である”対策”に関する作業を先にすべきと聞こえた時点で0点,1番目の作業を頭から否定した時点で−50点です。
数百個で数十円にしかならないチップ抵抗を数えるのは馬鹿げているように思うかもしれません。しかし会社としては,きちんとした裏付け資料としてそれが必要になることもあります。従って意味が有る/無しを軽率に判断しないことです。もちろん与えられた時間で全部調べきれないと言うことであれば,”時間が足りないのでチップ抵抗は除外して良いですか?”と言えば良いのです。それなら−50点を免れます。
開封作業についても,”LSIの原価をより正確に推定するのに開封が必要で,時間がかかりますが良いですか”とか”開封委託費用がかかりますがよいですか”と言えばokです。最初に求められている答えをより正確に出すための提案&質問なので100点です。
教訓:
返事は,シンプルに直球で返す。
提案は,今求められている結果を改善できる内容であること。
- 【十字接続を多用する電子回路業界人】 2011/6/4 追加
- 電子回路屋として常識だと思っていることが通じない回路屋さんに出会いました。十字接続を気にせず多用する,電源・GNDもすべて配線として線を引く,信号をジャンプタグとかジャンプコネクタなどの記号で飛ばさない,だからどんなに規模が大きくても1枚の図面で書く。こんな回路図を見たら「素人か?」と疑ってしまいますが,サービス・マニュアル(地域の電気店含む販売店向けの修理・保守用マニュアル)では,こんな書き方が常識のようです。
早い話が,その回路図を読む人は電気屋のおっさん達なのです。実体配線に近い書き方が望ましいのでしょう。基板単位で枠で囲ってコネクタと基板間ケーブルもきちんと分かるように書くようです。
そういう世界で育った人は,一般書籍やトラ技などに出てくる回路図はきっと非常識だと感じているのでしょう。まぁ電気制御盤屋さんの書く図面に比べればささいな違いです。あちらは逆に図面と実際の配線がシロ−トではすぐに対応が付かないでしょう。ケーブルが洪水のごとくあふれる現物と,どっからケーブルなのか分からない図面の間で立ち往生してしまいます。
とにかく,また一つ勉強になりました。
- 【カソードは”K”・・・基板屋には通じず】 2011/6/4 追加
- ダイオードに限らず,サイリスタ(SCR),真空管でもカソード(Cathode)の端子(電極)記号は,Kです。これを知らない電子回路屋は恥をかくことになります。
しかし,これが基板屋(アートワーク屋)さんには通じないことが多いのです。英語の頭文字のCを端子記号として抽出ネットリストを吐き出してきて,回路のネットリストと相違が出てしまうことがしばしば。先日は,古くからある大手メーカで標準として使っているフットプリント・ライブラリまで,そうなっていることが判明して愕然としました。
まぁ,考えてみればアートワーク屋さんは,メカ屋さんなんですよね。電気の単位でなく全てがmmの世界。カソードがKだと知らなくてもしょうがないですね。最近は「50Ωのインピーダンス・コントロール」と言う頼み方も出来ますが,だから回路が分かっているなどと思ってはいけません。先日の案件でも,πマッチから先,内層を全て抜いたアンテナパターンまでも指示と異なる50Ω用の線幅で引いてくれました。GND層との層間距離で線幅が決まるという基本的な知識も無いようですね。
- 【結果を出せる正しき努力方法を身に付けるべし】 2011/2/20 追加
- 世間は結果しか評価しません。あなたの努力は評価しません。
だからと言って,短絡的に努力が無駄だと思ったり,不正な手段で結果を出そうとしてはいけません。
- 毎日宝くじを当てることができますか?
そうでなければ,努力をせずに常に良い結果を出せるということはあり得ません。
- 効果が薄い努力が悪いのであって,効果的な努力をすべき。
毎日遅くまで仕事をするというのも努力方法の一つですが,それは仕事の効率向上やいかに結果を出すかという熟考の努力を放棄しているとも言えます。
- 方法は人それぞれ,T.P.O.にもよる。
正しい方法というのは1つではありません。ゆえに書店には色々な本が山積みされているのです。競争がある場合は相手の出方でやり方を変えねばならないこともあります。どれが正しいのか悩むのでは無く,自分の価値観やライフスタイルに合った努力方法はどれか,今の状況に合うのはどれか探しましょう。
書店でも,人に聞いても見つからなければ,自分で新たな努力方法を生み出す努力をしましょう。
- 努力とは日々逆流を遡ること。
怠けるとすぐに流されてしまいます。焦っても長続きしません。金言に耳を貸しましょう。「千里の道も1歩から」,「ローマは一日にしてならず」,まず1歩から始め,着実に努力しましょう。
- 【ノウハウを得たかったら手を動かすべし。頭にあらず】 2011/2/7 追加
- 時々,「**のノウハウがなくてできない」という言い方を聞きます。**の部分はマイコンだったり,高周波回路だったり,要は自分の知らない領域のことです。こう言うことを聞くと私は「じゃぁ,さっさと身に付ければ?」と言います。
中には怠慢してちょっと調べれば分かることをノウハウと言う人もいますが,たしかに調べて分からないノウハウという技術はあります。ノウハウは本を読んで得られるものではありません。本を読んで身に付くのは知識です。たとえ「ノウハウ本」を読んでも知識が身に付くだけでノウハウは身に付きません。
ノウハウを身に付けるには,ハードでもソフトでも,手を動かして動く物を作ることです。知識はいわばバーチャルな世界での理論,ノウハウは現実世界で実際に起きる現象の理解,と考えてもよいでしょう。
ただし,実際に起きる現象は,ある条件の時に起きる限定的なものだったり,ある角度から見た側面しか見えないこともあります。従って1度動いたから喜んで終わりというのではなく,色々と手を加え続けて動かして見るのです。
そうやって地道に手を動かして体で覚えたノウハウは,言葉や数式で表せないかもしれません。自分の中の独特な世界観の中だけでしか存在できないかもしれません。しかしそのノウハウに基づく結果は現実世界で動く物として出せるのです。
とにかく考えて悩むより,動かして現実を見ましょう。
- 【2と3を使わない】 2011/1/15 追加
- 抵抗値で2kΩ,3kΩは,E24系列にありますが,E12系列以下にはありません。切りがよいので使いたくなるのですが,本当に使う価値があるのか,今一度考えた方が良いです。
まず設計仕様として2倍の反転増幅器をオペアンプで作ろうとすると,20kΩとかが必要になりますが,元々抵抗値には誤差があるので,±5%なら倍率は1.8〜2.2倍の範囲でバラツキます。きっちり2倍で無くて良ければ22KΩを使って2.2倍の仕様にするのが良いでしょう。
R−2Rラダー回路のように,きっちり2倍の抵抗を使いたい場合は,同じ抵抗を2本使って実現します。同一ロットの抵抗は相対バラツキが小さいことが期待できるので,ロットの違う2倍の抵抗を使うより高い精度を期待できます。
実際に手持ちの炭素皮膜抵抗22kΩ(±5%規格品)でメーカの違う2種類20本づつを実測したところ,1つは平均−0.46%(最小−0.95%,最大0%)で,もう一つは+0.26%(最小−0.41%,最大+0.73%)でした。おそらく両社とも製造ライン自体は±1%品対応と思われます。同一ロットなら±5%規格品でもmax/minは1%程度が期待できそうです。(逆に言うと±1%品を買っても相対バラツキは±5%品と同じレベルかな?)
- 【リード・ライト・メモリは頭が頭痛で痛い】
- 最近はあまり見かけなくなりましたが,一時期RAMのことをリード・ライト・メモリ(RWM)と言ってた人がいました。シロ−トが言う分には笑って済まされるのですが,某偉い先生が辞典にまで載せたからややこしい。
メモリって,本来リードもライトも出来る物を指すんですよね。だからリード・ライト・メモリは,「頭が頭痛で痛い」って言うようなもんで,恥ずかしい用語です。えっ,じゃあROM(リード・オンリ・メモリ)っておかしくないの?と思われるかも知れませんが,これは本来持つべき特性・概念を拡張する用語だから良いのです。一方RAMの方はメモリの中の分類を示す用語です。
人間に例えると,男/女は性別による分類,日本人/アメリカ人は国籍による分類ということで,あくまで通常の人間の範疇での分類です。RAM(ランダム・アクセス・メモリ)というのはアクセス方法の分類で,シーケンシャル・アクセス・メモリとかとの対比を示す用語なんですよ。一方ROMは,通常の人間とは違うという事を示した透明人間とか狼男のような用語です。EPROM(イレ−サブル・プログラマブル・リードオンリ・メモリ)に至っては三重に特殊化されているという恐るべき用語ですね。
- 【ビット表記D7-D0のMSBは数字が大きい方か?】
- これも最近はマイコン全盛で当たり前になりつつありますが,昔のA/Dコンバータでは0がMSBで,数字の大きい方がLSBというものが多くありました(今も在るのかな?)。マイコンの方は整数の世界だから,ビット数が増えれば数値範囲が大きくなります。ビット表記のサフィックスは2の指数を表しています。
一方,A/Dコンバータの世界は分解能,つまり逆数の世界です。ビット数が多くなるほど細かいところまで測定できるようになるのです。もともとはビット表記のサフィックスは,2のマイナスの指数を表していたので,0が一番大きな数値となってMSBになっていたのです。今のA/Dコンバータ(単品)では0をLSBにしているものが多いと思いますが,昔との混乱を避けるために親切なカタログではどっちがMSB/LSBかを明記してあります。「なーんでこんな分かりきったことを書いてるんだろう」なんて言う人がいたら教えてあげてね。
- 【声なき声を聴け】
- 私は,ハードウエアでもソフトウエアでも,バージョンアップなどで仕様変更するときに非常に気を遣っている点があります。それが「声なき声を聴け」です。人は不満があると声に出しますが,満足している事は当たり前に感じて案外声に出しません。だから改善点をヒアリングしたりリサーチすると,不満な点は集まりますが,そのまま維持して欲しい機能やインタフェースについてはなかなか出てきません。
このような調査結果だけを重視して,大多数が維持を望んでる点まで変更してしまうと,今まで気に入って使ってくれていた多数のユーザを失う結果になりかねません。
じゃ具体的にどうするかということですが,まずは調査時に”この機能は削除して良いか”って確認を十分にすることと,不明なら変更はせずに機能追加,変更オプション追加で従来互換性をできるだけ維持するのが良いでしょう。そんなことすると肥大化する一方だと思うかもしれませんが,ICの高集積化やメモリの大容量化でコスト増はほとんどカバーできます。使い続けてもらう方の恩恵がはるかに大きいです。(まぁ肥大化しすぎるとダウンサイジングの波が押し寄せますが)
〜〜〜〜〜〜〜 じょぉだんですよぉ編 〜〜〜〜〜〜〜
- 【古典小数点、不労小数点】 2019/8/13 追加
- 昔はマイコン(MCU)に浮動小数点計算のハードウエアがなかったし、CPU能力が低かったのでソフトで浮動小数点計算を行うのは時間がかかった。それゆえ技術計算で少しでも速度を稼ぎたいときは浮動小数点ではなく、固定小数点で計算していた。桁あふれや桁落ちが生じないように自分で桁位置を管理し、必要に応じてシフト命令で桁位置調整を行っていた。このような演算方法を古典小数点方式ともいう。
昨今はCPU能力は上がるし、はては1コイン(500円)のマイコンにも浮動小数点計算のハードウエアが付いたりし、わざわざ労力をかけて固定小数点で計算することは少なくなってきた。労力がいらなくなった計算方法という意味で不労小数点方式ともいう。
- 【差異的禍】 2016/8/15 追加
- 的外れによって生じる禍のこと。以下の例がある。
(1)最適化というと美しい響きがあるが、実際には「ある条件が成立する場合のみ効率が良い」手法であって、大抵の場合はその条件が成立しない。前提条件に差異があって効率が落ちるという禍。
(2)「御社に最適なソリューションを提供します」というベンダーの常套句に騙されて導入したものの、自社の実態と差異のあるシステムによって混乱をきたすという禍。
(3)他社との差別化とは、他社より魅力的な特徴を持たせるという意味だが、単に差異を設けることが目的化し、結局売れない商品になってしまう禍。
- 【タルタル・コンデンサ】 2011/4/21 追加
- タンタル・コンデンサは故障モードがショートであるため電源屋さんには嫌われている。一部にヒューズ内蔵のものもあるが,根本的に改善した物がタルタル・コンデンサである。故障時はどろっと融けてオープンとなる。特にMOS
FETのソース側に接続するタルタル・ソース接続で効果が大きい。
- 【ヒローチャート】
- 通常のフローチャートは,物事の流れが直感的にすぐ理解できるので,理解に必要な労力が少ないという意味で不労チャートとも呼ばれる。一方,飛び先や分岐の条件が複雑怪奇で,動作を追っかけると疲労してしまうものをヒローチャートと言う。
- 【コーティング】
- 一般的にはメッキや皮膜付け,塗装などを意味するが,ソフトウエア開発においてはソース先頭の著作権表示だけコーディングして,中身として外注に作らせたものやWebで拾ってきたものを付けることを言う。
- 【オモシロスコープ】
- 波形を見るオシロスコープに対して,八卦を見るものがオモシロスコープである。真実が映らず,期待する幻影だけが表示されるため,気分だけはよくなる。
- 【トグロスイッチ】
- 二つの状態を切り替えるトグルスイッチに対して,複数の状態をうだうだと切り替えるのがトグロスイッチである。アルコール洗浄しないと動作せず,どの状態に切り替わるかとか,切り替えのタイミングが予測がつかない。最近のIT世代のエンジニアはググルスイッチの方を好む。
- 【もなか指向】
- 商品を企画する時,たいていはロー・エンド(最低)指向,ハイ・エンド(最高)指向,その中間のミドル・レンジ指向の3つを考えるのであるが,人によってはミドル・エンド(最中)を指向する。これはもなか指向といい,一般的には失笑を買うので注意されたい。
- 【育ちの良いエンジニア】
- 昔は育ちの良いお嬢様は,箸より重い物は持たなかったそうである。同様に育ちの良いエンジニアは「半田ごてより重い物は持ったことがない」と言っていたものである。最近の育ちの良いエンジニアは,半田ごてすら持たずに,マウスを持つにとどまっている。図面を引いたら小人さんが工作してくれると思っているらしい。
- 【CPU周辺機能の超高級化】 2019/8/13 積み込み
- モータのベクトル制御機能とか、通信のプロトコル内蔵とか、周辺がどんどん高級化。でもそれによってチップ価格が高価になったんでは意味なし。こうゆう高価格をもたらす周辺機能はペリフェラーリと呼ぶべきか。
- 【RH850チップ消去するな】 2018/4/7 積み込み
- RFP(ルネサスフラッシュプログラマ)のマニュアルの隅っこにRH850はチップ消去するな的なことが書かれています。そんなこと書くよりチップ消去を禁止して欲しい。CPU指定しているんだから、そのCPUでどんなことしちゃいけ無いの分かるよね。
- 【H8コンパイラ。もちろんメンテされてない】 2018/4/7 積み込み
- 今時RXじゃなくてH8SXで新規基板開発をするのはダメでしょうね。HEWでプロジェクト生成したらiodefine.hのポートN定義に不具合(DDR,DRレジスタ定義抜け)がありました。どうやら放置されているようですね。いやツールだけならいいけどチップ供給がほんとに続くんですかね。
- 【溺れる者二人。相手を踏み台にしなきゃ生き残れない】 2018/4/7 積み込み
- ルネサスに限りませんが、常識的に考えて、溺れている者どうし二人が手を取り合ったら両方浮かぶなんてありえないですよ。だからか相手を踏み台にすべく内部では壮絶なサバイバル・バトルが行われます。負けたほうの品種は潰されるので、それを採用していたお客さんにとっては迷惑この上ない話ですよね。
NEC系の品種で言えばV850は無くなるし(RH850は一般客は買えない)、生き残ったRL78(元々K0Rの第4世代品)だってMiniCubeが使えるはずだったのに。コンパイラもCC-RLで性能が上がったことは喜ばしいけど、ソースの互換性がないので書き直し。ソース互換で性能上げて欲しかったです。もっとも性能が必要ならIAR買えばいいじゃんという雰囲気で、あのままだったら性能は上がらなかったかもしれませんが。ま、不幸中の幸いというヤツですかね。
- 【電源回りこみの嵐】 2018/4/7 積み込み
- ICが低消費電力になるのは良いことですが、信号端子からの回り込みで動作して問題になるのをちょくちょく目にするようになりました。完全に動作してくれるなら良いのですが、ちょっと電流を流すモードになると当然正規の電源じゃないんでトラブリます。しかも原因究明というか正規の電源が入ってないことに気づくのに時間がかかることもしばしば。民生機器のマニュアルには、動作しないときの対処として電源が入っているか、電池がなくなって無いか確認してくださいって書かれているものが結構ありますが、デバッグのマニュアルにも書かねばならないようですね。
- 【コーディングの5S】 2018/4/7 積み込み
- コーディング作業は製造ラインの作業と同じく5S(整理/整頓/清掃/清潔/躾)が必要と感じることが多々あります。
整理: 特に重複定義(同じ定義をソースのあちこちでやってしまう)はいけません。メンテナンスのときに全部直すの大変です。整理して1箇所で定義しましょう。
整頓: 工具置き場や部品だなと同じで、共通定義場所、共通関数など、書かねばならない内容を「明示」して、所定の位置におきましょう。
清掃: 現場では「ゴミを見たら跨ぐな(素通りするな)」と言われます。他人が落としたゴミ(意味の無いコメント、一時的なデバッグの残骸)も掃除しましょう。いつか使うかもしれない未使用のデータや関数も、そのソースからは外して引き出しにしまいましょう。
清潔: バグ、ウイルスの無いソース状態を保ちましょう。
躾: コーディング・ルール/ガイドラインは守りましょう。
- 【一度手放した金は戻ってこない】 2018/4/7 積み込み
- ・元本保証を信じるな。いくら契約書を交わしても相手が夜逃げしたら戻ってない。
・将来の利率や収入の保証を信じるな。
・人に金を貸すな。特に絶対返すと言うヤツに限って絶対返さない。
・人に物・不動産を貸すときは相場より高めにせよ。必要なときに返し渋りされる。
・借金するな、支払う利息で欲しいものが買える。
- 【ユーティリティ・ソフト】 2018/4/7 積み残し
- ・ターミナルソフト: コマンド/レスポンス画面と、垂れ流しログ画面
・漢字フォント: UTF-8対応
- 【製作】 2018/4/7 積み残し
- ・PIC32 28pin,256kB 秋月に有り(漢字LCDコントローラ用として最適)
・OSレスRT処理: マニュアル作成
以前の更新
2019/08/13 [コラム]”古典小数点、不労小数点”を追加。
2018/11/04 [マイクロチップ(Microchip)MPLAB X IDE(備忘録)]”ウオッチが同名のstatic変数を区別できない”を追加。
2018/10/23 [マイクロチップ(Microchip)MPLAB X IDE(備忘録)] 更新。
2018/09/16 [マイクロチップ(Microchip)MPLAB X IDE(備忘録)] 新規追加。
2018/01/08 [パーツショップ,電子部品通販会社] ”電即納(つまみの探し方)”を追加。
2016/12/05 [TI CC2650マイコンとCCS(code composer studio)IDE(備忘録)] 更新。
2016/11/13 [TI CC2650マイコンとCCS(code composer studio)IDE(備忘録)]新規追加。
2016/10/30 [78K0マイコンの思い出話]リンク先全面修正(IE11以上必須)。
2016/08/15 [コラム(じょぉだん編)]に”差異的禍”を追加。
2016/08/15 [コラム(まじめ編)]に”人の話を聞け!、関係ない部分もだ!”を追加。
2016/08/10 [パーツショップ,電子部品通販会社] ”鈴商”を更新。
2016/08/09 [パーツショップ,電子部品通販会社]に”aitendo”を追加。
2016/05/22 [コラム]に”設計依存数値を仕様化する場合、根拠書いてよ!”を追加。
2015/07/02 [コラム]に”眠らない頭、倒れない体、折れない心”を追加。
2014/10/14 [アトメル(Atmel)AVRマイコンとGCC等(備忘録)]を微更新。
2014/09/28 [アトメル(Atmel)AVRマイコンとGCC等(備忘録)]を更新。
2013/11/16 [78K0マイコンの思い出話](雑談)秋月でuPD78P083やっぱ売り切れか
2013/10/02 [78K0マイコンの思い出話]評価版ツールのプロダクトIDに関して追記。
2013/10/02 [78K0マイコンの思い出話](雑談)秋月でuPD78P083まだ売っていた
2013/08/06 [要求仕様書の書き方(組込み制御ソフト用)]を更新
2013/07/31 [要求仕様書の書き方(組込み制御ソフト用)]を更新
2013/07/28 [要求仕様書の書き方(組込み制御ソフト用)]を新規作成
2012/12/03 [78K0マイコンの思い出話]デバイスファイルのリンク先変更
2012/11/04 [アトメル(Atmel)AVRマイコンとGCC等(備忘録)]を更新。
2012/09/09 [アトメル(Atmel)AVRマイコンとGCC等(備忘録)]を微更新。
2012/08/13 [アトメル(Atmel)AVRマイコンとGCC等(備忘録)]を更新。
2012/08/01 [アトメル(Atmel)AVRマイコンとGCC等(備忘録)]を追加。
2012/04/02 リンク修正完了(ルネサス旧URL閉鎖対応)。
2012/03/11 [78K0マイコンの思い出話]にツールニュースおよびLED照明・蛍光灯関係へのリンクを追加
2012/02/20 「コラム」”公用文は「,と。」を用いる”を追加。
2012/01/22 リンク修正(ルネサス・ホームページ・リニューアル対応)。
2012/01/08 「回路図CAD」を独立したページに分離。
2011/12/03 「回路図CAD」部品ファイル更新 (短足クリスタルなど追加)。
2011/10/01 「回路図CAD」"tips"に若干追加。
2011/09/04 「回路図CAD」部品ファイル更新 (バリスタ,各種小型シンボル追加)。
2011/08/13 「回路図CAD」部品ファイル更新 (ヒューズ,フォトカプラ,デジトラ,EEPRO,ミニロジック追加)。
2011/07/12 「コラム」”100点エンジニアと−50点エンジニア,同じ能力でも差が150点”を追加。
2011/06/26 「回路図CAD」部品ファイル更新 (ブリッジ, SCR, TRIAC, IGBT追加)。
2011/06/04 「コラム」”カソードは”K”・・・基板屋には通じず”を追加。”十字接続を多用する電子回路業界人”を追加。
・・・・略・・・・
2010/12/27 ページ・フォーマットを変更。
・・・・略・・・・
2010/01/06 ページ新規作成
マイコン技研