PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第131回]
●PICUSBIO−03(80)I2Cモード(2)マスターモード
今回はI2C通信の2回目です。
下は I2Cモードの選択についての説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
MSSPモジュールはSSPCON1レジスタのSSPENビットをセットすることで機能するようになります。
SSPCON1レジスタは前回説明しました。
SSPCON1レジスタのbit3−bit0をセットすることで下記のモードのうちの1つを選択することができます。
・I2Cマスターモード。CLOCK=48/(4*(SSPADD+1)MHz
・I2Cスレーブモード(7bitアドレス)
・I2Cスレーブモード(10bitアドレス)
・I2Cスレーブモード(7bitアドレス)。スタートおよびストップビット割り込み可能
・I2Cスレーブモード(10bitアドレス)。スタートおよびストップビット割り込み可能
・I2Cファームウェアコントロールマスターモード。スレーブはアイドル
SSPENビットをセットし上記のI2Cモードを選択するときはSCL端子とSDA端子はオープンドレインになります。
対応するTRISビットは入力に設定します。
SCLはRB6と端子を共有し、SDAはRB4と端子を共有していますからTRISBのビット6とビット4を1にセットすることになります。
Note:SCLとSDAの端子は抵抗でプルアップする必要があります。
PIC18F13K50 Data Sheetではこのあとスレーブモードについての説明が長々と続いているのですが順序としては先にマスターモードのテストをしたいと考えていますのでスレーブモードについての説明は後に回すことにして先にマスターモードについて説明することにします。
とはいってもマスターモードの説明も長いです。
PIC18F13K50 Data SheetのI2Cモードについての説明文はスレーブモードとマスターモードをあわせてなんと33ページもあります。
それを全部引用しながら説明していくなんてとてもやってられません。
PIC18F13K50のI2Cについて全てを理解するのは当連載の目的ではありません。
PICUSBIO用BASICインタプリタでPICのI2Cモードが簡単に使えるということが確認できれば目的は達成できます。
ということでできるだけ簡単に必要最小限の説明を心がけることにいたします。
下はマスターモードについての説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
マスターモードはSSPCON1のSSPMビット(bit3−bit0)を設定してSSPENビットをセットすることで使用可能になります。
マスターモードではSCLとSDAラインはMSSPハードウェアによってコントロールされます。
マスターモードはSTOP、STARTコンディションの検出割り込みによって進行します。
STOP(P)ビットおよびSTART(S)ビット(おそらくはSSPSTATレジスタのbit4とbit3)はリセットまたはMSSPモジュールをディスイネーブルにするとクリアされます。
I2CバスはPビットがセットされるかSおよびPビットがともにクリアされることでバスがアイドル状態になったときに開放されます。
ファームウェアマスターモードではユーザーの命令コードはSTARTおよびSTOPコンディションに基くI2Cバス制御によって進行します(ってどういうこと?割り込み制御ではなくて自動的に進行するという意味か?よくわかりません)。
マスターモードが選択されるとユーザーは下記の6通りを実行できます。
1.SDA、SCLラインをSTARTコンディションにする
2.SDA、SCLラインをリピーテッドSTARTコンディションにする
3.データ/アドレスの送信を開始するためにSSPBUFに書き込みを行なう
4.データが受信できるようにI2Cポートを設定する
5.バイトデータの受信の終わりにACKを送出できるようにする
6.SDA、SCLラインをSTOPコンディションにする
Note:マスターモードでは命令を進行待ちにすることはできません。
たとえばSTARTコンディションを開始したとき、STARTコンディションの完了前にSSPBUFに書込みを行なって送信を開始することはできません。
この場合にはSSPBUFへの書込みは実行されず、SSPBUFに書込みが行なわれなかったことを示すためにWCOLビット(SSPCON1レジスタbit7)がセットされます。
以下のイベントによってSSP割込フラグビットSSPIFがセットされます(割込イネーブルの場合には割込が発生します)。
・STARTコンディション
・STOPコンディション
・データバイトの送信/受信
・ACKの送信
・リピーテッドSTART
さらにマスターモードの説明が続きます。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
マスターデバイスはシリアルクロックパルスとSTART、STOPコンディションを作り出します。
送信はSTOPコンディションかリピーテッドSTARTコンディションで終ります。
リピーテッドSTARTコンディションは次の送信の始まりでもあるためI2Cバスは開放されません。
マスター送信モードではSCLから送出されるシリアルクロックとともにシリアルデータがSDAから送出されます。
最初の1バイトはスレーブアドレス(7ビット)とR/Wビットです。
この場合R/Wビットはロジック”0”にします。
一度に送信されるシリアルデータは8ビットです。
各バイトを送出するごとにアクノリッジ(ACK)ビットが受信されます。
STARTとSTOPコンディションは送信の開始と終了を示します。
マスター受信モードでは最初にスレーブアドレス(7ビット)とR/Wビットの8ビットを送信します。
この場合R/Wビットはロジック”1”にします。
シリアルデータはSCLから出力するシリアルクロックに従ってSDAから受信されます。
一度に受信されるシリアルデータは8ビットです。
各バイトを受信するごとにアクノリッジ(ACK)ビットを送信します。
STARTとSTOPコンディションは受信の開始と終了を示します。
ボーレートジェネレータはSCLから送出するクロック周波数を決定するのに使われます。
送信は下のような手順で行なわれます。
1.ユーザーはSSPCON2レジスタのSENビットをセットすることでSTARTコンディションを作り出します。
2.SSPIFフラグがセットされます。MSSPモジュールはオペレーションの準備が整うまで待っています。
3.ユーザーは送信するスレーブアドレスをSSPBUFに書き込みます。
4.アドレスデータは8ビット全部がSDA端子からシフトアウトされます。
5.MSSPモジュールはスレーブデバイスからACKビットを受信してその値をSSPCON2のACKSTATビットに書き込みます。
6.MSSPモジュールは9番目のクロックの終わりにSSPIFフラグをセットします。
7.ユーザーは8ビットのデータをSSPBUFに書き込みます。
8.データは8ビット全部がSDA端子からシフトアウトされます。
9.MSSPモジュールはスレーブデバイスからACKビットを受信してその値をSSPCON2のACKSTATビットに書き込みます。
10.MSSPモジュールは9番目のクロックの終わりにSSPIFフラグをセットします。
11.ユーザーはSSPCON2レジスタのPENビットをセットすることでSTOPコンディションを作り出します。
12.STOPコンディションが完了すると割込フラグSSPIFがセットされます。
できるだけ簡単にいきたいと思っているのですが、ちっとも簡単じゃありませんねえ。
次回に続きます。
PIC−USBIO using BASIC[第131回]
2022.12.18upload
前へ
次へ
ホームページトップへ戻る