2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PIC16F1769で電子ボリュームLM1972Mを鳴らす

Posted at

PICマイコンでSPIモジュールを設定・使用する方法をまとめた.
2011280245.png

はじめに

PICでのSPIモジュールの設定には,MPLAB IDEのMCC機能を使用する方法があるが,今回はこれを使用せず,レジスタの設定を直接mainファイルに記載する方法を紹介する.(実際は初期設定に少しMCUを使用する)

なお,本記事では電子ボリュームLM1972との通信を目標とした設定方法を紹介していくため,PICをslaveとした使用方法など,説明を省く部分もある.

使用するマイコンには,PIC16F1769を採用している.

初期設定

はじめMCCは使用しないと言ったが,やはりクロックやピンの初期設定など,あまり後で弄ることのない部分はMCCを使用して設定したほうが効率的である.今回はクロックに内部クロック8MHzを使用した.

ピン設定であるが,まずSPIで送信を行うにはSDO,SCK,SSの3つのピンが必要となる.大抵のGPIOピンはピン選択機能でモジュールの機能を割り当てることが出来るので,空いているピンを適当に3つ選べばよい.

今回はSDOにRA2,SCKにRC5,SSにRC4を選択した.3つのピンはMCCを使ってデジタル出力に設定しておく.

1.RxyPPSレジスタの設定

RxyPPSレジスタで,ピンの機能をSCKとSDOに設定する.レジスタ値はSCKなら0x12,SDOなら0x14である.
今回はRC5にSCK,RA2にSDOの機能を割り当てるため,以下のようになる.

RC5PPS = 0x12;          // RC5:SCK
RA2PPS = 0x14;          // RA2:SDO

2.xxxPPSレジスタの設定

SSPCLKPPSと SSPSSPPSは,それぞれSCKとSSをどのピンに割り当てるかを決めるレジスタである.ここが分かりにくいポイントで,RxyPPSレジスタの設定だけではSPIを使うことは出来ないのである.

レジスタの値の詳細については,マイコンのデータシートを参照していただきたい.

SSPCLKPPS = 0b00010101; // SCK:RC5
SSPSSPPS = 0b00010100;  // SS:RC4

なぜRxyPPSと違い2進数で書いているかというと,このレジスタは使用するポートにより値が全て異なるため,間違いを避けたいからである.

3.SSP1STATレジスタの設定

このレジスタでは,主にbit6のCKEビットを操作してクロック位相(エッジ)を設定する.

1:active to idle
0:idle to active

LM1972のデータシートを参照すると,クロック位相はidle to activeとなっているため,CKEビットはクリアしておく.

SSP1STATbits.CKE = 0;   // idle to active

4.SSP1CON1レジスタの設定

このレジスタでは,SSP1STATと同様にSPIのモードを設定する.
まず,必ずSSPENビットをセットしてSPIのピン設定を有効にしておく.
それから,CKPビットを操作してクロック(SCK)の極性を選ぶ.

1:idle High
0:idle Low

LM1972のデータシートを参照すると,クロック位相はidle Lowとなっているため,CKPビットはクリアしておく.

0~3bitのSSPMでは,マスター/スレーブの選択,クロック周波数(SCK)の選択を行う.
LM1972のデータシートを参照すると,基本クロック周波数は2MHzとなっているため,クロックはFOSC/4とする.また,PICマイコンはmasterの役割を担う.
SSPMビットはモードにより様々な値のパターンがあるため,詳細については使用するマイコンのデータシートを参照すること.


SSP1CON1 = 0b00100000;  // Enable SerialPort / idle Low / CLK:FOSC/4

参考文献

SPI通信の使い方
http://www.picfun.com/f1/f05.html

SPIの基本を学ぶ | アナログ・デバイセズ
https://www.analog.com/jp/analog-dialogue/articles/introduction-to-spi-interface.html

桐井研究室 LM1972を使った電子ボリューム。
http://kirylabo.blog.fc2.com/blog-entry-81.html

SAKURA87.net Arduino Unoで電子ボリューム(LM1972M)を動かす
https://sakura87.net/archives/4342

氾濫原 LM1972 デジタルボリューム
https://lowreal.net/2018/02/20/1

氷精工房 電子ボリュームを使ってみた
http://www.maroon.dti.ne.jp/jyaku9/koneta/koneta6/koneta.html

SPI通信の使い方
http://www.picfun.com/f1/f05.html

MICROCHIP PIC16(L)F1764/5/8/9 日本語PDFデータシート
https://akizukidenshi.com/download/ds/microchip/PIC16F1764_PIC16LF1769_j.pdf

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?