kazu_1995’s diary

北の高専→大学生→院生→社会人のブログ

TeXでの下付き文字(添字)を簡単に出力する

MOSFETの諸特性R_{\mathrm{DS(ON)}}I_{\mathrm{D}}P_{\mathrm{D}}オペアンプでのV_{\mathrm{OS}}I_{\mathrm{B}},電源を示すV_{\mathrm{CC}}というように下付き文字をつける変数が多々存在します. これらの下付き文字は一般に端子名や状態が用いられることが多く,例えばR_{\mathrm{DS(ON)}}だと,ON状態のときのドレイン・ソース(Drain・Source)間抵抗が語源です. この変数自体には書体が指定されていて通常イタリック体(斜体)を用います.一方,下付き部は名称であるためローマン体(立体)が用いられます.

これをTeXにて再現しようとすると,

$ R_{\mathrm{DS(ON}} $

と書く必要があり,大変面倒です.

そこで今回は,マクロ(\newcommand)を用いてもっと簡単に出力できるようにしてみたいと思います. プリアンブル部に以下を書くだけです.

\catcode`_ = \active
\newcommand_[1]{\sb{\mathrm{#1}}}

まず1行目で,下付き文字(カテゴリーコード8)の操作を行えるようにします. 次に2行目で,本文中(ただし数式モード中に限る)にtest_hogeのような文章が出現したとき,hogeの部分をローマン体にするようにします.\sb_と同じ役割を示し、hogeをtestの下付き文字になるようにします.

あとは本文中で,

$ R_{DS(ON}} $

と書けば, R_{\mathrm{DS(ON)}}のように出力されます.

Terasic DE0ボードでのUSB通信①

Terasic社が販売しているFPGAボード・DE0にはUSBコネクタが搭載されていますが, 通信方法について具体的に書かれている資料は英語資料含めても限りなく少ないため中々実装することができませんでした.

しかし,rerm.info JavaでJTAG通信 にてJavaを使って通信する方法が掲載されており, これを元に,と思い立ち今日に至ります.

この記事ではまずUSB通信のテストを行います. 今後の実装の都合上,C#を用いてコーディングしました.


1.USB通信テスト

今回はまずUSB通信の第一歩としてPCから命令を送信し,FPGA特有のコードであるIDCODE*1の受信を試みます.


2.ソースコード

Visual Studioを起動し,Visual C#で新しいコンソールアプリケーションを作成後,以下をコピー・ペーストしてください.

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        const string DLL_PATH = "ftd2xx.dll";
        [DllImport(DLL_PATH)]
        unsafe private static extern UInt32 FT_Open( Int16 DeviceNumber, UInt32* ftHandle );
        [DllImport(DLL_PATH)]
        private static extern UInt32 FT_Close( UInt32 ftHandle );
        [DllImport(DLL_PATH)]
        unsafe private static extern UInt32 FT_Write( UInt32 ftHandle,
                [MarshalAs(UnmanagedType.LPArray)] short[] bdata, UInt32 BufferSize, UInt32* BytesWriten );
        [DllImport(DLL_PATH)]
        unsafe private static extern UInt32 FT_Read( UInt32 lngHandle,
            [MarshalAs(UnmanagedType.LPArray)] byte[] bdata, UInt32 lngBufferSize, UInt32* lngBytesReturned );


        static unsafe void Main( string[] args )
        {
            const short L = 0x2D2C;
            const short H = (short)(L | 0x1010);
            const short TMS = (short)(L | 0x0202);
            const short TMS_H = (short)(TMS | H);
            const short WR = 0x81;
            const short RD = 0xC0;
            const short OFF = 0x0D0C;

            uint size;
            UInt32 ftHandle;
            List<short> memory = new List<short>();

            if (FT_Open(0, &ftHandle) != 0)
            {
                Console.WriteLine("Don't connect.");
                Console.ReadLine();
                return;
            }
            Console.WriteLine("Connection!");

            // MoveIdle
            memory = new List<short> { TMS, TMS, TMS, TMS, TMS, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // MoveShiftir
            memory = new List<short> { TMS, TMS, L, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // WriteShiftir
            memory = new List<short> { (short)((0x06 << 8) | WR), L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // MoveShiftirToShiftdr
            memory = new List<short> { TMS, TMS, TMS, L, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // ReadShiftdr
            int rx = new int();
            byte[] rxData = new byte[4];
            memory = new List<short> { (short)((0 << 8) | (RD | 4)), TMS_H, TMS, TMS, L, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            for (int i = 0; i < 4; i++)
            {
                FT_Read(ftHandle, rxData, 1, &size);
                rx += rxData[0] << (i * 8);
            }

            Console.WriteLine("Device IDCODE is " + rx);

            memory = new List<short> { TMS_H, TMS, OFF };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            FT_Close(ftHandle);

            Console.WriteLine("JTAG Close...");
            Console.ReadKey();
        }
    }
}


3.注意事項

  1. プラットフォームターゲットに"x86"を指定
    System.BadImageFormatExceptionエラーが発生する場合があります.設定自体はプロパティのビルドから変更します.
  2. アンセーフコードの許可
    ftd2xx.dllを使う関係でunsafeを使用しました.この設定も上と同じくビルドから変更します.
  3. 生成された.exeファイルと同じディレクトリにftd2xx.dllを配置
    FTDI社WebサイトのDrivers,D2XX Driversからドライバをダウンロードすると中に入っています.
  4. QuartusⅡを入手しておく
    USB Blaster認識の都合上必要だと思います(※未検証).フリーのWeb Editionを入手してみてください.


4.実行結果

f:id:kazu_1995:20171019015701p:plain DE0に搭載しているFPGA,CycloneⅢ EP3C16のIDCODEは0000 0010 0000 1111 0010 0000 1101 1101*2であり,10進では34545885になります. また,DE0の電源スイッチ下、POWER-LED右側のLOADとシルクがあるLEDが一瞬点灯することを確認できるかと思います. これらより,JTAG通信を用いてIDCODEの読み出しに成功したことがわかります.


5.備考

他のTerasic社製ボードの場合,Terasic DE0-Nano(CycloneⅣ EP4CE22)だと34549981が,DE1(CycloneⅡ EP2C20)だと34287837が出力されます.

unsafeを使わないやり方を考えていますが,未熟ゆえ良い方法が思いつきません...... もしうまいやり方をご存知でしたら教えてください.


参考文献

rerm.info JavaでJTAG通信
ioioのホームページ FT245RL用DLLの使い方
坂巻佳寿美.JTAGテストの基礎と応用.CQ出版,2003


(11/18追記)続き kazu1995.hatenablog.jp

*1:製造メーカや部品番号などが含まれる32bit長のコードのこと

*2:Altera Cyclone III Device Handbook, Volume 1 『Chapter 12. IEEE 1149.1 (JTAG) Boundary-Scan Testing for the Cyclone III Device Family』 p.12-2より

proxy環境下におけるTeXの導入

研究室に配属され,卒業研究に着手される方が多くなるこの時期.パソコンにTeXを導入される方も多いのではないでしょうか.

そんなとき,学校内のネットワークを使って導入しようとするとエラーが発生して導入できない,なんてことが多々あるかと思います.

この記事では,そんな学内ネットワーク(proxy環境下)においてTeXを導入する方法をご紹介したいと思います.

 

1.導入するTeX

国内においてTeXを導入するにはTeXインストーラ3を使う方法とTeX Liveを使う方法との2つが主流です.TeXインストーラ3はネットワークインストール形式の導入形式でproxy環境下では弾かれることが多いため,今回はTeX Liveでの方法をご紹介します.TeX Liveは以下のWebサイトからtexlive.isoを選択することで入手可能です.

Acquiring TeX Live as an ISO image - TeX Users Group

 

2.isoファイルのマウント(Windows7の方のみ)

Windows8以降のOSを使っている方は読み飛ばしてください.

 ダウンロードしたファイルはそのままでは開くことができません.そのため,7-Zip(圧縮・解凍用ソフト)を追加で導入する必要があります.7-Zipを入手したら,先にダウンロードしたtexlive.isoを展開してください.

また,申請・許可など諸々の事情で7-Zipを導入できない方は,Microsoft純正のVirtual CD-ROM Control Panelが良いでしょう.

7-Zipの入手先:7-Zip

Virtual CD-ROM Control Panelの解説ページ:

Windows 7でISOイメージをマウントするMS純正ソフト(32ビット版のみ): EeePCの軌跡

 

3.まずは最小構成で導入する

texlive.isoをマウント(展開)したら,フォルダ内のinstall-tl-advanced.batを実行します.すると,次のような画面が表れると思います.

f:id:kazu_1995:20170501230322p:plain

この画面が現れたら,--- 基本情報 ---にある"選択したスキーム"の右端,"変更"ボタンをクリックします.すると,

f:id:kazu_1995:20170501230553p:plain

という画面が表れるので,"最小限スキーム"を選択して"OK"ボタンをクリックします.

あとは"TeX Liveの導入"ボタンをクリックして,しばし待ちます.すると,次のような画面が出てきます.この時点で最低限のTeXは導入されました.

f:id:kazu_1995:20170501230713p:plain

ここでなぜ最小限スキームを選択したかというと,TeX Liveでの導入途中に障害が発生し,インストーラが固まった挙句導入に失敗するという問題がよく見られるからです.そこで最小限の構成で導入し,後に足りないものを補う,というのが今回の手法です.

 

4.TeX Live Managerを使って足りないものを補う

TeXでは表を作ったり図を挿入したりという機能1つずつがパッケージという仕組みにより提供されています.このままでは何一つTeXを使うことができないので,先程導入しなかったパッケージ群を一気に導入したいと思います.

3.によりTeXの最小限スキームの導入が終わると,TeX Live Managerというソフトウェアが入ります.まずはこれを起動します.起動すると次のような画面が表示されます.

f:id:kazu_1995:20170501232041p:plain

tlmgrタブから,”他のリポジトリの読み込み”をクリックします.すると画面が出てくるので,"ローカルディレクトリを選択してください"から,先のtexlive.isoがマウントされているドライブ,または解凍してあるディレクトリを選択して"読み込み"をクリックします.すると,リポジトリの項目に"読み込み完了"と表示されるので,"表示設定"の"状態"から"未導入"を選択肢,右端にある"すべて選択"をクリックし,最後に導入をクリックします.簡単なクリックの流れは次の図の通り.

f:id:kazu_1995:20170501232236p:plain

3000を超えるパッケージを導入するので,かなりの時間がかかりますが,待機.全て導入が終わると下のメッセージボックスに"完了 ."とひとことメッセージがでます.以上がproxy環境下におけるTeXの導入でした.

 

いかがでしたでしょうか,無事導入することはできましたか?

最後に,これからTeXを使われる方へ,教科書代わりに使える本をご紹介して終わります.

[改訂第7版]LaTeX2ε美文書作成入門

[改訂第7版]LaTeX2ε美文書作成入門

 

いざという時にも安心?!電気系学生に追加でおすすめする工具6選

昨日の記事(1万円で揃える電気系学生におすすめの工具10選)に追加で,いざという時にも対処するための工具などを6つ,ご紹介します.

 

1.テスター

故障の判定や,導通確認,短絡確認といった基板のチェック,電源から出力される電圧/電流の測定など,様々な用途に使えるのがテスター.巷には数多くのテスターがありますが,サンワのCD771がコストパフォーマンスに優れる1台です.数台持っていても損はありません.

SANWA デジタルマルチメータ バックライト搭載 CD771

SANWA デジタルマルチメータ バックライト搭載 CD771

 

また,テストリード先端に接続できるアクセサリも多数販売されているので,用意してあると中々便利です.

三和電気計器 クリップアダプタ CL-14(わに口クリップ)

三和電気計器 アダプタ TL-A4(バナナプラグ・直安の端子に直接挿入)

サンハヤト ブレッドボード用オプション SUP-200 テスター棒用(ブレッドボード挿入用)

三和電気計器 携帯用ケース C-77(CD771用ケース)

 

2.ラジオペンチ

ちょっとした曲げ加工や,スペーサ代わりに使ったり,ピンセットでは歯がたたないときに登場するのがラジオペンチ.ナットを緩めたり(締めるのは微妙),太い電線の切断にも使用できます.ハンマー代わりに打撃に使ったりも.マルト長谷川(KEIBA)のペンチ類はしなやかに,そして油を注すこと無くしなやかさが維持されるのでとても良いです.

ケイバ(KEIBA) ハイグレード ザ ラジオペンチ FC-306

ケイバ(KEIBA) ハイグレード ザ ラジオペンチ FC-306

 

 

3.インシュロック

実験中,机の上に広がる多数の電線.基板と基板をつなぐ無数の電線.それらを束ねるのに使います.結束バンド,タイラップ,ロックタイ,もっと短くタイと呼ばれたりも.

 

4.ハンダ吸い取り線

間違えてはんだ付けをしちゃった,基板を改良しなければいけないなどなど,一度はんだ付けをした箇所からはんだを除去するのに使います.はんだが少量であればはんだこてでも頑張れなくはないですが,やっぱり吸い取り線があると便利.

goot はんだ吸取り線 CP-3015

goot はんだ吸取り線 CP-3015

 

 

5.イソプロパノール

突然ですが薬品,アルコールです.これは汚れを除去するのに使います.普通の水では不純物が含まれているため電気が通りNG,なのでアルコールを使うのです.無水エタノールを使うこともありますが,値段が高いのでイソプロパノールと呼ばれるアルコールを使用します.イソプロピルアルコール,イソプロなんて呼ばれ方も.

【第3類医薬品】イソプロピルアルコール50%P 500mL

【第3類医薬品】イソプロピルアルコール50%P 500mL

 

 

6.キムワイプ

イソプロで洗浄した基板を拭くのに使うのがこのキムワイプ.普通のティッシュでは水を含むとボロボロになってしまいますが,キムワイプはそうなりません.キッチンペーパーのようなものです.そして鼻をかんだり,卓球*1にも使える優れもの.

 

いかがでしたでしょうか.他にもワイヤストリッパや圧着工具,スズメッキ線,パイオラン,あげるときりがないのでこの程度とさせていただきます.

前記事と同様,ここにある商品はすべてAmazon.co.jp以外でも購入ができます.ただし,テスターやイソプロは,そこらのホームセンターでは売っていないかと......

1万円で揃える電気系学生におすすめの工具10選

6年間もの高専生活を振り返って,本当に必要だった工具を1万円の予算から10個ご紹介します.

 

1.ニッパ(2000円)

恐らく一番使うのがこれ.電子部品の足や電線,インシュロックの切断に大活躍.リードストッパー付きのニッパーだと,切断したあとの小さい線が飛んでいかず,後片付けが非常に楽です.

3.peaks ニッパ リ-ドストッパ-付 130mm SP-31

3.peaks ニッパ リ-ドストッパ-付 130mm SP-31

 

リードストッパーが活躍する様子は以下の動画をご覧ください.

切った物が飛ばない=ステンレスニッパ(リードストッパー付)【SP-31】 - YouTube

 

2.はんだこて(4000円)

百均でも半田ごてを売っているそうですが,絶対に駄目です.初めてならなおさら,出力が高く,温調機能がついているこてを選んだほうが良いです.なぜなら,はんだ付け時のはんだのつきやすさが段違いだから.

 このgootのPX338は85Wの消費電力を有し,十分です.

グット 設定温度固定式はんだこて PX338

グット 設定温度固定式はんだこて PX338

 

 

3.プラスドライバその1(600円)

基板上の部品の調整や端子を締めたり,電気の世界でも意外に使うことが多いプラスドライバ.ドライバ(ねじ)のプラスの部分のサイズは小さい順からNo.00,No.0,No.1,No.2...とあります.小さいねじ用にはNo.0とNo.1とを持っていたらOK(本当は調整ドライバという電子部品用の特殊なドライバのほうがいいのですが).

 

4.プラスドライバその2(700円)

一方,電動機の端子なんかに使われるねじは少し大きく,No.2のドライバが適合することが多いです.ここでは先ほどとは違って,グリップの大きい,より力を入れることができるドライバがおすすめ.

 

5.マイナスドライバ(300円)

プラスドライバに続き,マイナスドライバもラインナップ.正直,ねじを締めるという用途よりも,何かをこじる,隙間をつくるような用途に多々使いました.

 

6.マスキングテープ(100円)

工具ではないのですが,あえてラインナップ.測定作業中,電線を机に仮止めしたり,多数ある計器に何を測定しているのかを示したり.はたまた,はんだ付け中に電子部品を固定したりと,多くの場面であったら便利な一品.

 

7.ノック式マッキー(200円)

そしてこのマスキングテープに文字を書くためにマッキー.視認性が良い,赤色のノック式をおすすめします(キャップ式はキャップを無くす恐れがあるため).

そしてもう一つ,恐らく図面を基にはんだ付けを行うと思いますが,終了した配線,部品を区別することや,基板自体に文字を書き込みたいときにも重宝します(なので蛍光ペンやボールペンではダメなのです).

 

8.ピンセット(300円)

ようやく工具に復活.ちょこまかとした作業をするとき,何度もピンセットに助けられました.逆接などの変わったやつではなく,普通のピンセットでOK.

 

9.直尺(300円)

寸法を測るため.15cm長であれば正直なんでも良いです.

 

10.工具袋(1500円)

せっかく揃えた工具も,持ち運びができなければ意味がありません.まとめてどかっと入れるタイプよりも,こういう多くのポケットがあるほうが整理しやすく便利です.こんなかんじ.

f:id:kazu_1995:20170401231629j:plain

 

 

いかがでしたでしょうか.このエントリでは最低限必要と思われる工具を取り上げてみました.

すべての商品はAmazon.co.jpで購入ができ,他にもヨドバシやモノタロウ,楽天など様々な場所で購入できると思います.

ここに紹介していない工具でも,この工具は僕にとって必須だった,これは使わなかったなどありましたら,是非コメントに残していただけると幸いです.

 

(4/2追記)続き

いざという時にも安心?!電気系学生に追加でおすすめする工具6選

論文やレポートを書くときに - SISTのご紹介

参考文献の書き方や雑誌名,団体名の表記方法など,簡単そうで意外に書き方がわからないとき,ありませんか?論文やレポートを書くときのお供に,JSTが策定したSIST(科学技術情報流通技術基準)がおすすめです.

jipsti.jst.go.jp

このSISTは論文やレポートといった学術情報の記述方法について定めた文章です.基本的に少しお固めな文章ですが,”小冊子「参考文献の役割と書き方」”は参考文献の書き方だけに的を絞り,とてもわかりやすく書かれています.

この小冊子を例にすると,そもそも参考文献の役割とは何か?から始まり,雑誌記事を参考にするとき,Webサイトを参考にするとき,参考文献と本文との関連付けの方法など非常に事細かに事例があげられています.

他にも「学術論文の執筆と構成」も一見の価値ありです.

小冊子「参考文献の役割と書き方」またはSIST 02,そしてSIST 08を自分用や研究室に1部,いかがでしょう.

 

また,予稿集など限られたスペースに参考文献を記述しないといけない場合.電気,情報系であれば,電子情報通信学会の以下のファイルが参考になります.

付録E.学術雑誌略語表(電子情報通信学会)

Terasic DE0ボードの入力保護ダイオード

Terasic DE0ボードには,GPIO0とGPIO1とで2つの汎用入出力が備わっていますが,そのうちのGPIO1は全信号線で,信号線から3.3V電源及びGNDへの入力保護ダイオードが接続されています.

このダイオード,パッケージにある刻印”WV4”から,NXPのショットキーバリアダイオード,BAT54Sであるかと思われます.

 

このBAT54S,素子1つにつき逆方向電流が0.4uA(25℃,VR=3V)端子容量が3pF(同)*1 であることから,高速な信号の入出力を行いたいときはGPIO0を使用したほうが良いかもしれません.

 

ちなみに,このダイオードをうまく活用すれば,5V入力ができる……?(危険)

*1:BAT54 seriesのデータシート http://www.nxp.com/documents/data_sheet/BAT54_SERIES.pdf より