2015年3月15日日曜日

levelDBを使う。

はじめは、C++11のハッシュテーブル(unordered_map)を使おうと思ったのだが、
永続化の処理を書いたりする必要があるなど、大変にプログラムを書くのに時間が掛かる事が判明したので、
先人の書いた素晴らしいコードを利用させてもらおうと思う。(しかも自分で書くより処理が速い。はず。)

環境:
win7x64にインストールしたVirtualBox上の
CentOS7

LevelDBをつかってみた
を大いに参考にした……のに つまずいた。



geditのショートカットキーからbuildできなかった。

[致命的エラー: /usr/local/include/leveldb/db.h: 許可がありません]
→権限が足りないらしいので、スーパーユーザーになる必要がある。
→[makefile]を作成したディレクトリ上で、右クリック→[端末の中に開く(E)]
→[su]コマンドでsuper userになる。
→[make]コマンドでbuild

あるいは、始めからrootでログインしておけばいけるかもしれない。
今度試してみる。
→できた。(当然ではあるが)


参考にしたサイトで、一部
int main(int argc, char *argv) {
となっているが、たぶん
int main(int argc, char *argv[]) {
かな?


[`leveldb::Options::Options()' に対する定義されていない参照です]
[`leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)' に対する定義されていない参照です]
→コンパイルオプションを付けるのを忘れていた。
[ /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/ ]
を追加。

2015年2月25日水曜日

bloggerで一日の間にメール投稿できる限度数

C++ による socket通信 でBloggerにメールで投稿するテストをしていたら、
何故か投稿できない代わりに、メールボックスに以下のメッセージが返信された。


Delivery to the following recipient failed permanently:

     XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXX@blogger.com

Technical details of permanent failure:
You have exceeded the the allowable number of posts without solving a captcha.

----- Original message -----

~省略~

----- End of message -----


要するに、
「 (人間である事を証明するための) 画像認証無しに許されている投稿の数の限度を超過しました。」
と言っており、投稿でき無くなった。

実際の所、Bloggerの管理ページを開いて、投稿しようとすると、
画像認証ができ来て、それをパスすると上手く行く。

(ただ、残念ながら、メールでの投稿はこの後も失敗したので、
どうやら制限が解除されるまで待つしか無さそうだ。)

何処かのページの1日あたり50投稿が限度と書いてあったので、
今度試す時に実際に数えてみようと思う。(送信履歴を消してしまった。)
→50でした。

2015年2月18日水曜日

Unicode処理②::UTF16(Unicode)をUTF8に変換する。

Unicode : 文字コードの一種。

UTF16 , UTF8 : Unicodeをファイルに保存する場合の保存方法(バイナリ値)。


[例]=================================================

あ : Unicode値 : 0x3042

は、UTF16なら、
   big endian : 0x30 , 0x42
little endian : 0x42 , 0x30

↓変換……したい。

あ : UTF8なら、0xE3  81  82
(UTF8では、仕様上big endian も little endianも関係無い。)

====================================================

(14) UTF-16からUTF-8への文字コード変換
を参考にして変換してみる。(変換表はwikiのUTF-8にもある。)

2015年2月17日火曜日

Unicode処理①::Unicode値をUTF16(エスケープしたサロゲートペア)へ変換(分解)する。

ちょっと頭が弱くて、
サロゲートペア入門
の記事がすぐに理解できなかったのでメモ。

参考資料:文字コードに関する覚え書きと実験

webでサロゲートペアに対応しているエンコーダ&デコーダ
:Unicodeエスケープシーケンス変換ツール


[例]==========================================



 ( Unicode値 : 0x20B9F ) ← UTF16で、エスケープするとサロゲートペアになる文字。



↓エスケープ・シーケンスに変換    ↑デーコード

                 \ud842\udf9f

=============================================(サロゲートペア入門のページの例より)

処理としては以下の手順になります。

2015年1月25日日曜日

C++再入門②_ダブルポインタを回避したい。

Googleで「C言語 ダブルポインタ」で検索すると、
ダブルポインタについて、非常に分かり易く説明してくれているサイト

ダブルポインタで分からなくなる度にこのページを見直す訳であるが、
「そもそもどうしても変数の先頭に*付けないといけないの?」
と疑問が浮かぶ。


プログラムを書く時、始めはmain関数に押し込んで、「取りあえず動く」事を確認し、
それから、まとまった処理毎に関数化してmain関数を軽くしていく事が多い。(少なくとも、私は……。

しかし、そのやり方だと、
関数化する際、非常に面倒になってくるのは、値の受け渡しも去る事ながら、
ダブルポインタを使わないと値を参照できないようになってしまう場合だろう。

正直、コードが長くなると、一々変数ごとに「*」を付けるのは、
非常に億劫であるだけでなく、ミスし易い大変な作業となる。

そこで、以下の様にした。

2015年1月12日月曜日

C++再入門①_文字列操作編

C++、一度覚えたけど、結局C言語で事足りる事が多かったため、
使わないでいたら忘れたので、復習。

実行環境はwin7 x64 visual studio 2012

using namespace std;
とは何か?
using namespace std;の是非


using namespace std;を宣言した場合。



2015年1月7日水曜日

仮想にCentOS7インストール&初期設定のメモ。

情弱な私には お気に入りバーと「Ctrl + K」の無いChromeは使いにくいので、IEばかり。(時々Chrome
しかし、「Ctrl + D」→「Enter」(こちらはChromeにもある。)が便利過ぎて、
IEのお気に入りが散らかってきたので、記事にして消そうかと……。



VMWare PlayerとVirtualBoxの違い。
Yahoo!知恵袋のここを参考にした。
→結論として、営利・非営利を問わず無料で使える「VirtualBox」を選択。

一番気になっていたのは「VirtualBox」がマルチCPUに対応しているか、だったが、問題無く設定できた。

今回は
http://www.centos.org/
からCentOS7をダウンロード。

以下を参考にCentOS7をインストールする。
DVDのisoを選択し再起動する際、一度電源を落とし、CPUのコア数を増やしてから再起動する方が、インストールが高速になるかもしれない。
(後から思っただけでやってないので注意。)
インストール時最小構成にすると、端末(windowsのdos窓みたいなやつ)しか使えないので注意。デスクトップには、今回GONOME??を選択しておいた。(あとコード組むために入れるので開発環境)
VirtualBoxで作成した仮想マシンにLinuxを導入してみよう(1)

2014年11月26日水曜日

C言語でファイルを全て配列に読み込む方法。

ちょっと備忘録に。

テキストファイル「XXXXX.txt」を、
mallocで確保した配列(strBuffer)に、始めから最後までコピーする。
バイナリファイルの場合も同様の操作で行える。

EZ_USB_FX2LPへPCからファームウェアのダウンロード、及び、SlaveFIFOの制御。

そもそも、EZ_USB_FX2LP、とは何か?

EZ_USB_FX2LPは、High Speed(480Mbps)の転送速度で外部回路と通信できる
数少ない?マイコンの一つです。
最近はUSB3.0に対応したシリーズ(EZ_USB_FX3)も出てきているようで、FX2は少し時代遅れですが、
それでも現在(一個人が)実現できる中では圧倒的な帯域幅を持っています。

EZ_USB_FX2LPは、外部ROMを用意しておけばスタンドアローンで動作する事も可能ですが、
今回は(私の場合は)PCと常時接続する事を前提としているので、ファームウェアを、
起動時に毎回EZ_USB_FX2LPへ転送する事にしました。

2014年11月23日日曜日

XilinxのFPGAをSerialSlaveModeで書き込み(コンフィギュレーション)する。

FPGAのコンフィグあれこれ
を参考にした。

高価な書き込み装置が無くても、この辺りの仕組みを理解してしまえば、
自作の書き込み装置でFPGAに書き込みできるようになる。

重要なのは、自分で理解して、好き勝手にできる事だろう。

ここで問題になるのが、ISEの吐き出すFPGAに書き込むファイル、
つまり、「XXXX.bit」ファイル、あるいはBitstreamファイルの構造が良く分からない事だ。

2014年11月16日日曜日

ユニバーサル基盤の実体配線図を手書きするためのシートを作成する方法。

PC上で配線できるソフトもあるようですが、
私のように未だ手書きのアナログな人のために書いておきます。

方法は簡単で、
Excelのセルを全て任意の大きさの正方形にして、
全てのセルに「〇(まる)」と書き込んで、
色が濃いと手で書いた線が見難いので薄くし、文字サイズも調整し
印刷プレビューした後に印刷するだけです。

Excelでセルを正方形にするには「Ctrl+A」などで全て選択してから、
セルの行or列の、数字orABCを右クリックし、幅を変更すればいい。

しかし、問題なのは、Excelの行と列では単位が何故か違うため、
同じ値を入れても正方形にならない。
実際に変更してみてからピクセル数を確認するのが望ましい。

普通に、使用するユニバーサル基盤の型番で検索すれば、
その基盤の寸法図が出てくるので、それを拡大して印刷しても構わないのですが、
時々ユニバーサル基盤上に表面実装用のICを配置したいときなどは、
図面を大きくしないと線を書けないので、画像を大きく拡大する事になり、
どうしても荒くなってしまいます。

その点、Excelでシートを自作できれば、穴を表す〇の大きさは文字サイズで決められ、
また〇の間隔も正方形に揃えたセルの辺の大きさで決定できるので、
状況に応じたシートを作成する事ができます。

時には方眼紙で実態配線図を書く人もいるようですが、
やはり〇である方が、ユニバーサル基盤をイメージし易く便利です。

例えばSunhayatoの「小型ユニバーサル基板 ICB-288」
(画像はSunhayatoのHPより拝借。(右に90°回転させている。)
http://sunhayato.co.jp/products/item_image_L/ICB-288_L.jpg)

をExcelで起こすと、

2014年11月8日土曜日

ブログにアクセスできない。
管理画面にはアクセスできるのだが、
トップ画面、その他にアクセスできない。

自分の環境だけかとも思ったが、
今日のトラフィックを見ると通常と比べて異常に増えていなので、
たぶんbloggerの方がバグっているのかな……?

DNSのエラーと言っているから、或いはどこかの別の問題かもしれないけど。

2014.11.26.追記
最近、ブログのトップには一応アクセスできるものの、
応答が物凄く遅い。でも現在の私のネット環境が最悪なので、
こちらの問題なのか、それともblogger(google)の問題なのかが分からない。

2014年9月27日土曜日

Slave FIFOs メモ書き⑤

page.233「15.5.3 PINFLAGSxx」について、


「Table 15-4. FIFO Flag Pin Functions」より、

FLAGA=PF, FLAGB=FF, FLAGC=EF, FLAGD=EP2PF
(Actual FIFO is selected by FIFOADR[0,1] pins)


ここで、page.103「9.2.4 FIFO Flag Pins (FLAGA, FLAGB, FLAGC, FLAGD)」より、

Four pins — FLAGA, FLAGB, FLAGC, and FLAGD (see
Figure 9-7) — report the status of the EZ-USB’s FIFOs; in
addition to the usual ‘FIFO full’ and ‘FIFO empty’ signals,
there is also a signal which indicates that a FIFO has filled to
a user-programmable level. The external master typically
monitors the ‘empty’ flag (EF) of OUT endpoints and the full
(FF) flag of IN endpoints; the programmable level flag (PF)
is equally useful for either type of endpoint (it can, for
instance, give advance warning that an OUT endpoint is
almost empty or that an IN endpoint is almost full).

empty flag (EF)
full flag      (FF)
programmable level flag (PF)

Slave FIFOs メモ書き④

「15.5.10 REVCTL
Chip Revision Control Register」について。



Note DYN_OUT and ENH_PKT default to ‘0’ on a hard reset. Cypress highly recommends setting both bits to ‘1’.

デフォルトではDYN_OUT と ENH_PKTは両方とも0だが、
Cypressは両方とも1にする事を強く勧める。



1 DYN_OUT
 Disable Auto-Arming at the 0-1 transition of AUTOOUT.

0
 The core automatically arms the endpoints when AUTOOUT is switched from ‘0’ to ‘1’.
 This means that firmware must reset the endpoint
 (and risk losing endpoint data) when switching
between Auto-Out mode and Manual-Out mode.

1
 The core disables auto-arming of the endpoints when AUTOOUT transitions from ‘0’ to ‘1’.
This feature allows CPU intervention when switching between AUTO and Manual mode
without having to reset the endpoint.

Note
 When DYN_OUT = 1 and AUTOOUT = 1, the CPU is responsible for ‘priming the pump’ by initially arming the endpoints (OUTPKTEND w/SKIP = 1 to pass packets to host).


0 ENH_PKT
 Enhanced Packet Handling.

0 The CPU can neither source OUT packets nor skip IN packets; it has only the following capabilities.
OUT packets: Skip or Commit
IN packets: Commit or Edit/Source

1 The CPU has additional capabilities:
OUT packets: Skip, Commit, or Edit/Source
IN packets: Skip, Commit, or Edit/Source

1 DYN_OUT
 AUTOOUTが 0から 1に遷移する時、自動アーミングを無効にします。
(自動アーミングがそもそも何かが分からない……エンドポイントの切り替え?)

0
AUTOOUTが0から1へ変化した時、コア(半導体チップ?)は自動的にエンドポイントを切り替えます。
これは、Auto-Out mode と Manual-Out modeの切り替え時に、ファームウェアがエンドポイントをリセットしなければならない事を意味します。(そして、エンドポイントのデータを失う危険性を負います。)

1
AUTOOUTが0から1へ変化した時、コア(半導体チップ?)は自動的にエンドポイントを切り替え。
ることができない。
この特徴はオート・モードからマニュアル・モードへの切り替え時に、
エンドポイントをリセットする事無く、CPUが介入する事を可能にする。

注意
DYN_OUT = 1 かつ AUTOOUT = 1の場合、CPUは‘priming the pump’に対して、
エンドポイントを初期化する最初に使用する(切り替える)エンドポイントを(OUTPKTEND w/SKIP = 1 にして、パケットがホストに渡されるようにする)
責任を負う。


--------------
0 ENH_PKT
 強化されたパケットの処理方法

0
CPUはOUTパケットを参照する事も、INパケットを通過させる事もできない。
それは、唯一以下の様な機能を持つ。

OUTパケット:通過か修正
INパケット:修正、編集/参照

(――――何が違うのかが分からない……)


1
CPUは追加の機能を持ちます。

OUTパケット:通過、修正、編集/参照
INパケット:通過、修正、編集/参照



「15.6.16 INPKTEND
Force IN Packet End Register」について、





「15.6.17 OUTPKTEND
Force OUT Packet End Register」について、


7 SKIP
 Skip Packet.
When ENH_PKT (REVCTL.0) is set to ‘1’, setting this bit to a ‘1’ causes the OUT packet to be
skipped. Clearing this bit to ‘0’ automatically dispatches an OUT buffer.

3:0 EP[3:0]
 Endpoint Number.
Replaces the function of EPxBCL.7=1 (Skip). This feature is for OUT transfers. By writing the desired
endpoint number (2, 4, 6, or 8), EZ-USB logic automatically skips or commits an OUT packet
(depends on the SKIP bit settings).
Note This register has no effect if REVCTL.0 = 0.

7 SKIP
パケットをスキップする。
ENH_PKT (REVCTL.0) が1かつ、このビット(SKIP(OUTPKTEND.7))が1の時、
「OUT packet」(複数ではなく、単数、と考えていいのか?)はスキップされる。
このビットは自動的に0にクリアされ、an OUT bufferは、停止?、する


3:0 EP[3:0]
エンドポイントの番号。
EPxBCL.7=1(スキップ)の機能を置き換えます。
 この機能は、OUT転送のためのものです。
希望するエンドポイントの番号 (2, 4, 6, or 8) を書き込む事により、
 EZ-USB のハードウェアは自動的に、パケットを、スキップまたは、渡します。
(SKIP Bitの設定に依ります。)

注意
このビットは、「REVCTL.0 = 0」の場合、効果を発揮しません。
今回は
http://www.nahitech.com/nahitafu/fpgavhdl/fpgacfg/fpgacfg.html
あたりのSlave Serial Modeでコンフィギュレーションする。

FPGAで、コンフィギュレーションのモードを設定するM0,M1,M2は、

「Spartan-3ジェネレーション コンフィギュレーション ガイド Spartan-3A、Spatran-3E、および Spartan-3 FPGA ファミリ」

より、HSWAPがLowの場合は、
内部でプルアップされているので、
1なら解放しておいても問題ない。(page.47参照)
ただし、今回DWマガジンの付録ではHighとなっているので、
大人しく(4.7kΩで)プルアップしておく。

0ならGNDに落とす。



EZ-USBからの接続は、330Ωの抵抗を直列に接続しておく。
……ところで、Slave Serial Modeは3.3Vなのか2.5Vなのかどちらなのだろうか?
XAPP453参照。らしい。

XAPP453のpage.9を見ると、
M0,M1,M2は、2.5Vに直接接続されている。……なんだ、それでいいのか。
EZ-USBからの接続は、56Ωの抵抗を直列に接続している……のかな?
DINだけは3.3V駆動なのか?抵抗が接続されていない。

page.2にDINについて、3.3Vとは書いていないが、
少なくとも2.5Vには横線が引いてあるので違うのだろう。

たぶんこれで大丈夫?かな?OK

http://www.cqpub.co.jp/dwm/contents/0124/dwm012400660.pdf

あたりによると、
VCCINT:コア電源(1.2V)
VCCCAUX:補助電源(2.5V)
VCCO:I/O電源(3.3V)

付録雑誌の回路図を見ても確かにそのように接続されていた。

結局、

PROG:2.5Vなので、56Ωの抵抗を直列に接続(75Ωで代用)
CCLK:2.5Vなので、56Ωの抵抗を直列に接続(75Ωで代用)
DATA:3.3Vなので、直接接続
DONE:330Ωで2.5Vにプルアップしてから接続

M0,M1,M2は2.5Vに直接接続。

といった感じの接続になる。
FPGA参考図書

FPGAボードで学ぶ組み込みシステム開発入門[Xilinx編]
小林優[著]
低価格FPGAボードで体験する
ハードウェア&ソフトウェア設計
AUTOPTRLを用いると、
XAUTODAT1にPCからのデータが受信されて、
XAUTODAT2に書き込む事でPCに送信される。

AUTOPTRSETUPを使用すると、EP□BCH、EP□BCLにサイズを書き込まなくても、自動的に送信される。たぶん。





EP1OUTCFG
EP1INCFG

EP2CFG
EP4CFG
EP6CFG
EP8CFG
の設定については、「EZ-USB(R) Technical Reference Manual.pdf」で、
■「8.4 How the CPU Configures the Endpoints」(page.88)にレジスタの意味。
■「15.6 Endpoint Configuration」の「15.6.1 EP1OUTCFG」(page.233)~(page.236)辺りにレジスタの定義。
をそれぞれ参照すると良い。



バッファの分け方については
「1.17 EZ-USB Endpoint Buffers」(page.30)



AUTOPTRSETUPについて、
「EZ-USB(R) Technical Reference Manual.pdf」の(page.215)より、

The AUTOPTRSETUP register is configured as follows:
■ Set APTRnINC=0 to freeze the address pointer, APTRnINC=1 to automatically increment it for every read or write of an
XAUTODATn register. This bit defaults to ‘1’, enabling the auto increment feature.
■ To enable the autopointer, set APTREN=1. Enabling the Autopointers has one side-effect: any code access (an instruction
fetch, for instance) from addresses 0xE67B and 0xE67C return the AUTODATA values, rather than the code-memory values
at these two addresses. This introduces a two-byte ‘hole’ in the code memory.
The firmware then writes a 16 bit address to AUTOPTRHn/Ln. Then, for every read or write of an XAUTODATn register, the
address pointer automatically increments (if APTRnINC=1).

要するに、XAUTODATnへリードorライトする毎に、自動的に、データの格納されたバッファのポインタがインクリメントされる。
ところで、サンプルで

  // enable dual autopointer feature
  AUTOPTRSETUP |= 0x01;

となっているのは、「|=」(ビット和代入)していて、もともと、APTRnINCはデフォルトの設定が1なので、

AUTOPTRSETUP = 0x07;

とするのと同じ。



「EZ-USB(R) Development Kit User Guide.pdf」のコメントより、

APTR1H = MSB( &EP2FIFOBUF ); // Initializing the first data pointer
APTR1L = LSB( &EP2FIFOBUF );

APTRnH,APTRLは、data pointerの始めの開始位置を指定するときに使うらしい。


「C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Firmware\Bulkext」
のBulkextの「bulkext.c」を書き直しただけだと、「EP1」がホストで認識されない問題について、

「C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Firmware\EP_Interrupts」
のサンプルプログラムでは、ホストで認識された。

そこで、「bulkext.c」の内容を「EP_Interrupts.c」に書き換えて、コンパイルしたところ、
またも失敗する。

ファイル比較ソフトで両者のファイルの違いを比較したところ、
「dscr.a51」ファイルで違いが見られた。
(なお、ファイルの比較には「DF.txt」というファイル比較ソフトを用いた。)
このファイルでは

      db   4               ;; Number of end points


      db   6               ;; Number of end points

や、その他に、EP1に関する部分について違いが見られた。

そこで、「dscr.a51」を入れ替えた所、ホストで認識できるようになった。


この if文 "if (!(USBCS & bmRENUM))" をコメントアウトして FWをビルドして やれば、ダウンロード(CPUリセット)の度、毎回 ReNumerationされるようになるので 「ミミックUSB FX2」 もうまく動くようになります。

http://www.geocities.jp/altshibabou/win/ezusb_tip3sub.html
より。











DCMの使い方。

http://japan.xilinx.com/support/documentation/user_guides/j_ug331.pdf

のpage.71と、page.64の

周波数合成の出力CLKIN を分数値 M/D (M = {2..32}、D = {1..32}) で逓倍
• CLKFX
• CLKFX180

辺りを参照。

Spartan3E DCMからクロックが出てこない
の記事は、なりかねないので、注意しておこう。

MCP4726の使い方メモ。



がた老AVR研究所
によると、


 EEPROMの使い道はまだ良くわからない。判然とはしないが、電源断を含む運転を想定していて、前の値を保持しているだけのようだ。

この辺りは私も手を出す予定はないのでパスしよう。


ディバイスのアドレスは出荷時に固定で、あとからは換えられない。

D/Aコンバータを増やすたびにFPGAのIOを消費するかと思ったが、
恐らくその心配はなさそうだ。(I2Cだし……)

と、思ったのだが、秋月のDIP版の説明書が、マニュアルの必要部分を要約していて、
どうやらアドレスは全て
「ICアドレス:‘1100000’(7ビットアドレス) 」で固定らしい。
良く見ると「http://akizukidenshi.com/catalog/g/gI-07611/」の説明にも書いてあった。
最悪だ。
この説明はマニュアルのpage.46
ICの型番でアドレスが決まっている。
「http://www.chip1stop.com/」に「MCP4726A0T-E/XX」以外の型番を発見。



 データシートには具体例があるので、数値入力12ビットをアナログ化する手順だけなら間題ない。1ブロックを27ビットとし、頭1バイトをI2Cのマスター書き込み宣言、続いてデータバイト2バイトを送る。それぞれのバイトのあとにACKビットが1ビットづつ付くので計27ビット分を送ると、ディバイスはアナログ電圧をラッチする。



I2Cのクロックは、625μsのサンプリング期間に27ビットが送り終える速さにしなければならない。ビットレートを100khz程度で、30ビット->300μsで送れるようクロックを調整する。



そもそもの、I2Cについては、
電子工作の実験室」の「I2Cモジュールの使い方」(http://www.picfun.com/i2cframe.html)の
I2Cの接続構成とプルアップ抵抗
I2Cの基本データフォーマット

CCS Cコンパイラ実用プログラミングテク」の「11. I2Cの使い方(旧)」を参考にする。



あとはマニュアルのpage.50からのタイミングを見れば大体なんとかなりそうだと分かった。

ただ、プルアップ抵抗の値が心配なのと、クロスストレッチって、これショートしてませんか?
まあ、クロスストレッチに関してはその部分のタイミングが掛かれていないので、考えなくても大丈夫かな?

データシートのpage64によると、プルアップは

R1 and R2:
5 kΩ - 10 kΩ for fSCL = 100 kHz to 400 kHz
~700Ω for fSCL = 3.4 MHz



出力電圧は電源電圧に対して12Bit分に分割されると考えて合っているのだろうか?
……まあ、やってみれば分かる事か。




型番メモ。

秋月電子
MCP4726A0T-E/CH
2個入り180円(1個90円)


「http://www.chip1stop.com/」

「MCP4726A0T-E/CH」
1個135円~
「MCP4726A0T-E/MAY」
1個200円~


「MCP4726A1T-E/CH」
1個135円~


「MCP4726A2T-E/CH」
1個135円~


「MCP4726A3T-E/CH」
1個135円~

今回は6個使う予定なので、数百円高くなるが、秋月に無い型番はこちらで調達しようと思う。
Clockは共有できるので、クロック以外の6ピンが2ピンに削減できる予定。




page.8より

SCL pin Frequency

Standard mode 0 100 kHz Cb = 400 pF, 2.7V - 5.5V
Fast mode 0 400 kHz Cb = 400 pF, 2.7V - 5.5V
High-Speed 1.7 0 1.7 MHz Cb = 400 pF, 4.5V - 5.5V
High-Speed 3.4 0 3.4 MHz Cb = 100 pF, 4.5V - 5.5V

要するに、3.3Vの場合、通信速度は、400kHzまでらしい。



page.2の表より、Vrefやゲインと抵抗を操作できる。
ゲインはGで、
抵抗はPDで操作する。
PDについては、page.40の表より、

TABLE 4-2: POWER-DOWN BITS AND
OUTPUT RESISTIVE LOAD

PD1 PD0 Function
0 0 Normal operation
0 1 1 kΩ resistor to ground
1 0 125 kΩ resistor to ground
1 1 640 kΩ resistor to ground

今回は{PD1,PD2}={0,0}とする。

VrefやGはpage.51~55までの操作(など?)で変更できるが、
今回はデフォルトのままで使う。