概要
前回はルックアップテーブルを説明しました。本当はDFFとLATCHもLUTで利用できるのですが、説明が大変なので、単純なロジックから説明していきたいと思います。今回はロジックからは少し離れますが2電源周りの説明とオシレーターを紹介します。
ピン配置
GreenPAKは複数のチップがありますが、I2Cで何度も書き換え可能なSLG46826についてかんたんに説明します。

上記がSLG46826VでSTQFN-20パッケージです。

上記がSLG46826GでTSSOP-20です。どちらも20ピンで形が違うだけのものです。サイズ的にはSLG46826Vの方が小さいので製品にはよく使われると思います。しかしながらホビーユースだと手ハンダがしやすいTSSOP-20パッケージのSLG46826Gが便利です。
この2種類のパッケージですが、決定的な差がありましてSLG46826Gの1ピンがVCCではありません。通常1ピンがVCCで最後のピンがGNDなのですが、TSSOP-20パッケージではなぜか逆順に配置されています。ブレイクアウト基板とかを使った場合に特に気をつけてください。
- VDD
- VDD2
- GND
- SCL(I2C)
- SDA(I2C)
- IO0-15
ピンの種類としては上記の6種類になります。20ピンの内訳は主電源であるVDDとサブ電源であるVDD2、そしてGNDとI2Cの2ピン、残りがIOの15ピンになります。

上記がSLG46826Vのピン配置に近いかたちに配置した図になります。デフォルト配置がだいたい同じですがI2Cの2ピンが邪魔なのでPIN7とPIN10の間じゃない場所にあります。
よくみるとPINの色が青とオレンジの2色あるのがわかると思います。この色別に電源レベルが異なります。青がVDDの電源レベル、オレンジがVDD2の電源レベルになります。

VDDのソース電圧を5Vに設定してみました。

VDD2はデフォルトの3.3Vです。
PIN | 電圧レベル |
PIN1(VDD) | 5V |
PIN2(IO0) | 5V |
PIN3(IO1) | 5V |
PIN4(IO2) | 5V |
PIN5(IO3) | 5V |
PIN6(IO4) | 5V |
PIN7(IO5) | 5V |
PIN10(IO6) | 5V |
PIN8(SCL) | 5V |
PIN9(SDA) | 5V |
PIN14(VDD2) | 3.3V |
PIN12(IO7) | 3.3V |
PIN13(IO8) | 3.3V |
PIN14(IO9) | 3.3V |
PIN15(IO10) | 3.3V |
PIN16(IO11) | 3.3V |
PIN17(IO12) | 3.3V |
PIN18(IO13) | 3.3V |
PIN19(IO14) | 3.3V |
上記がちょっと長いですが、各ピンの電圧レベルです。VDDはVDD2より高い電圧である必要があるので、両方3.3Vと同じ電圧を設定することはできますが、VDDが3.3VのときにVDD2がより高い5Vに設定することはできません。
レベル変換回路

こんな回路を組んでみました。VDD(青ピン)は5V、VDD2(オレンジピン)は3.3Vに設定しています。PIN20に3.3Vの信号を入力して、PIN3に出力しています。同じようにPIN6に5Vの信号を入力し、PIN19に出力しています。

シミュレーション結果結果です。VDD(V1)は5V、VDD2(V2)は3.3Vになっています。

一番上がV3で3.3V信号です。LOWとHIGHを繰り返しています。最初の信号がなまっているのは電源ON時の立ち上がりですので無視して大丈夫です。その下がPIN3の出力です。入力信号は3.3Vなのですが、出力は5Vになっています。
下2つが同じように5Vの信号を入力して、PIN19から3.3Vで出力されています。このようにVDDとVDD2のどちらのピンかで入出力の電圧が変わります。内部の結線はHIGHとLOWのデジタルデータのみですので、信号レベルが異なっていても接続することができます。
一般的にはVDDとVDD2は同じ電圧に設定することが多いとは思いますが、2電源で動かすことも可能です。そのためVDD2にも基本的には電源を接続するようにしてください。VDD2がフローティングの場合にはハイインピーダンスのオープンドレインになります。またVDD2をGNDには接続しないようにデータシートには記載がありました。
先程も記載しましたが、VDDとVDD2ではVDDの方が高い電圧である必要があります。3.3Vと1.8Vの2電源の場合には、VDDには電圧の高い3.3Vを接続する必要があります。
I2C出力

ちなみにGreenPAKはI2Cからも出力が可能です。I2Cの下に伸びているのはPIN固定の出力です。通常は接続されていませんが、I2C出力を有効に設定するとI2C経由でOUTPUTを制御可能です。また、右側に伸びている8箇所は自由に接続できる出力です。ピンではなくてロジックなどの入力にすることもできます。
このように12ピンまでであればI2Cから出力の制御が可能です。ちなみに資料をみてもI2Cで入力ができるとは書いてありません。I2Cから伸びている足はすべて出力なので入力ができないのです。しかしながら各ピンや、LUTの出力などの信号レベルなどは内部レジスタから取得できます。I2Cで内部レジスタの値を読み出せば、信号レベルがわかるので特別な入力はないとのことです。
オシレーター(OSC)
オシレーターとは発振回路であり、クロックなどを生成するための部品です。デジタル回路ではクロックを使って動くものが多いので、はやめに紹介したいと思います。

SLG46826ではOSC0、OSC1、OSC2の3つを使うことができます。3つとも足の数が違うので、ちょっとだけ性能も違っています。

OSC0の上にマウスカーソルを置くと、足の役割がわかります。

上記がプロパティです。一番上がコントロールピンで「Power Down」がデフォルト値です。このままだとピンで入力をしないとクロックを出さないので「Force on」に変更します。二番目はOSCパワーモードとあります。デフォルトは「Auto Power On」になっていますが、こちらも「Force Power On」に変更して強制的に動かします。
クロックセレクトはOSCと外部クロックが選択できます。ここでは標準的な内部クロックで動かしてみたいと思います。周波数は変更ができませんが、2.048kHzと書かれています。これ以降の設定は後ほど確認するとして、まずは動かしてみます。

出力側端子に全部プローブを追加して波形を確認してみます。

シミュレーション設定は、長さだけはもとの12msから24msに延長しています。

OUT0とOUT1は変化がなく、CLKが定期的に出てきて、CLK/8は8クロック分で出力と分周した結果ですね。同じようにCLK/64も少しだけ変化しているのがわかります。

クロックの分周を2に変更してみました。下の表も/2が増えていますね。

結果です。クロックの速度が半分に落ちました。1.024kHz相当になりました。OUTは相変わらず出ていませんね。

触ってみたところ、他のピンに接続しないと出力しないようでした。OUT0は分周を4、OUT1は8に設定してみました。

結果です。OUT0とOUT1が出力されました。クロックの立ち上がりはちょっとずれちゃいましたが出ていますね。外部に普通に接続できるのはOUT0とOUT1の端子のみです。

OSC1のプロパティです。周波数が2.048MHzとOSC0と比べると随分早い周波数になっています。CLKで確認できる分周は減っていますが、出力はOUT0とOUT1の2つなのは変わっていません。

OSC2です、周波数がさらに上がって25MHzになりました。CLKも等倍と/4の二種類になりました。

ちなみに、OUT以外のクロック出力は他の回路へのクロック入力には設定可能です。この場合オシレーター側ではなく、クロックを受け取る側で設定をすることで接続されるようです。詳しくは次回以降に説明します。
OSCのまとめ
OSC | 内部周波数 | 外部クロックピン |
OSC0 | 2.048kHz | PIN2(IO0) |
OSC1 | 2.048MHz | PIN16(IO10) |
OSC2 | 25MHz | PIN13(IO8) |
上記の3種類になります。外部クロックを使う場合には入力に利用できるピンが固定されているので注意してください。
クロックの分周は1, 2, 4, 8の4種類、OUTの分周は1, 2, 3, 4, 8, 12, 24, 64の8種類あります。元の周波数から8×64で512倍遅いクロックまでを取り出すことができます。2.048kHzを512で分周すると4Hzになります。

OSC0の分周を8にして、OUT0の分周を24、OUT1の分周を64にしました。

シミュレーション設定を2秒間の、20ミリ秒間隔にして実行しました。

下の紫の方が2.048kHzを8で分周したものを、さらに64で分周したものになります。2秒間に8山ありますので、計算通り4Hzになっています。4Hzから25MHzまでなので、Lチカをするにはちょっと早いですね。他の回路を利用することでもっと遅いクロックは作れますが、内部クロックのオシレーターのみだとこの範囲のクロック生成になります。
便利な操作方法
キー+マウスで画面移動
キー | 操作 |
スクロール | 上下の移動 |
Alt+スクロール | 左右の移動 |
Ctrl+スクロール | 拡大縮小 |
真ん中ボタンクリック+マウス移動 | 掴んで移動 |
Ctrl+マウススクロールは拡大縮小なのでわかりやすいのですが、Altで左右の移動になりました。画面を掴んで移動したかったのですが、マウスのスクロールボタンをクリックしてからの移動でした。
オブジェクトの移動
キー | 操作 |
Ctrl+矢印 | 大きく移動 |
Alt+矢印 | 1ドット移動 |
オブジェクトを移動する場合には、目分量で適当な場所に移動してからAlt+矢印で微調整が良さそうです。
参考資料
メーカー資料に2電源のレベルシフトの日本語資料があります。この資料だけだと把握は難しいですが、レベルシフト用の回路を別に準備するより、趣味の範囲だとGreenPAKを使えば0.4ドルでレベルシフトをかんたんに実現できるので便利な気もします。
まとめ
いろいろ便利な機能があるのですが、なかなか難しいのでちょっとずつ調べながら書いています。なかなか当初紹介しようとした回路を調べてみると、他の回路の説明をしないと実際の利用例が紹介できなかったりと順番が難しいですね。
オブジェクトを選択してF1でヘルプが開くので、かなり便利なのですが基本的なロジック回路についての説明はないので、その部分を重点的に説明していきたいと思っています。
コメント