2022.12.8
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第123回]



●PICUSBIO−03(72)SPIモード(4)DAコンバータMCP4911

PICのSPIインターフェースを試してみるためにDAコンバータMCP4911を使ってみることにしました。
MCP4911はSPIインターフェースでデジタルデータをシリアル送信することで動作するDAコンバータです。
なぜDAコンバータかということなのですが、それには理由があります。

ずっとPICUSBIO−03の説明を続けています。
途中からはPIC18F13K50の機能の説明になってしまっています。
PICUSBIO−03はPIC18F13K50を単体でプリント基板に実装しただけと言ってもよいくらいのボードですからPICUSBIO−03の操作説明をしようとしますと結局のところそういうことになってしまいます。
実のところ私としてもここまでのことになってしまうとは思ってもみなかったことなのですが、ここまできてしまったらもう乗りかかった船です。
最後まで行くしかありませぬ。

それで。
PIC18F13K50はADコンバータを内蔵しています。
いずれはそのADコンバータについても動作確認をすることになります。
その動作テストのときにDAコンバータがあれば都合がいいじゃないかと考えました。
それでローコストで使い勝手のいいDAコンバータを捜していてMCP4911を見つけました。
確認してみましたところインターフェースはSPIです。
どうせ何かのデバイスでSPIの動作テストをしてみなければならないと考えていましたからこれはまさに一石二鳥のデバイスです。
ということでSPI通信のテストを兼ねてMCP4911を使ってみることにした次第です。

MCP4911のData Sheetです。

[出典]Microchip Technology Inc. MCP4901/4911/4921 Data Sheet

MCP4911は単電源(+5V)で動作する10ビットのDAコンバータです。
下はMCP4911のブロック図です。

[出典]Microchip Technology Inc. MCP4901/4911/4921 Data Sheet

もうこれ以上簡単にはできないだろうと思えるくらい実にシンプルな8pinのICです。
PSI端子はCSとSDIとSCKの3本です。
MCP4911にはホストからデジタルデータを送るだけでMCP4911からはデータの送信は行ないませんからSDO端子はありません。
VrefにVdd(+5V)を接続することで0Vから+5VまでのRail−to−Rail出力が得られます。

下はMCP49XXWRITEコマンドです。
MCP49XXはビット数によって12ビット、10ビット、8ビットの3種があります。
MCP4911は10ビットDAコンバータです(REGISTER5−2)。

[出典]Microchip Technology Inc. MCP4901/4911/4921 Data Sheet

MCP4911に送信するコマンドはこのWRITEコマンドだけです。
WRITEコマンドは16ビットです。
SPIの送信バッファは8ビットですから16ビットを8ビット2回に分けて送ります。
最初の1バイトはコマンド部の4ビット+データの上位4ビットです。
次の1バイトはデータの下位6ビット+ダミー2ビットです。
コマンド部の各ビットは以下の値にします。

bit15=0
bit14=0
bit13=1
 上のVoutの式はMCP4921(12bitDA)の場合です。
 MCP4911(10bitDA)の場合は下の式になります。
 Vout=Vref*D/1024   D=0〜1023
bit12=1

MCP4911のSPI信号波形です。

[出典]Microchip Technology Inc. MCP4901/4911/4921 Data Sheet

SCKのところ(右端)にMode1,1(破線)とMode0,0(実線)と書いてあります。
クロックの↑のときにデータが読み込まれます。
モードによってクロックの極性が逆になりますがどちらのモードでもクロックがLからHになるときにデータが読み込まれることを示しています。

下は前回お見せしたSPIのマスターモードの波形図です。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

この図で見るとクロックがLからHになるときにSDOからの出力データの各ビットの真ん中あたりが来るのは上から2番目(CKP=1、CKE=0)と3番目(CKP=0、CKE=1)です。

下は前回整理したSPIのMODEです。

MODE0(MODE0,0) CPOL=0(CKP=0)、CPHA=0(CKE=1) クロックはアクティブH(正極性)、クロックがH→LのときデータOUT
MODE1(MODE0,1) CPOL=0(CKP=0)、CPHA=1(CKE=0) クロックはアクティブH(正極性)、クロックがL→HのときデータOUT
MODE2(MODE1,0) CPOL=1(CKP=1)、CPHA=0(CKE=1) クロックはアクティブL(負極性)、クロックがL→HのときデータOUT
MODE3(MODE1,1) CPOL=1(CKP=1)、CPHA=1(CKE=0) クロックはアクティブL(負極性)、クロックがH→LのときデータOUT

これにあてはめてみますとMODE3(MODE1,1)がCKP=1、CKE=0でMODE0(MODE0,0)がCKP=0、CKE=1になります。
MCP4911のSPI信号波形図でもMode1,1(破線)とMode0,0(実線)と書いてあります。

これならなんとかなりそうです。

まずはMCP4911の準備です。

適当なジャノ目基板に組み付けました。
PICUSBIO−03との接続には16pinフラットケーブルコネクタを使います。

下はPICUSBIO−03と接続したときの全体の回路図です。

PICUSBIO−03とMPC4911の接続には16pinフラットケーブルコネクタを使いますがMCP4911の側で使うのはVccとGNDのほかはCSとSCKとSDIの合計5本のラインのみです。
MCP4911のCSにはRC0を使います。
これがSSに相当します。
マスターモードではSS出力は汎用I/Oポートをそのまま使います。
どの端子をSSとするかについては(SSを使うか使わないかを含めて)SPIのマスターモードでは任意です。
今回はSSとしてRC0を使います。
MCP4911のSDIにはSDO(RC7)を接続します。
MCP4911のSCKにはSCK(RB6)を接続します。

PICUSBIO−03と今回作成したMCP4911基板とを16pinフラットケーブルで接続しました。


PIC−USBIO using BASIC[第123回]
2022.12.8upload

前へ
次へ
ホームページトップへ戻る