【dsPIC33FJ128MC802】デジタルポテンションメータAD5245を使ってみる。

2021年2月22日

◆dsPIC33FJ128MC802でアナログデバイスのデジタルポテンションメータAD5245を使ってみます。
抵抗値をI2C制御で変更できるので様々や用途で活躍できると思います。
本デバイスはREAD/WRITE可能ですが、WRITEのみにチャレンジしてみたいと思います。
パッケージがSOT-23ですがピッチが狭いので半田付けが大変です。
bc0650e5.jpg

AD5245の仕様

 ・分解能:256段階
 ・抵抗値:5kΩ/10kΩ/50kΩ/100kΩ
 ・電源:2.7V~5.5V

参考

 データーシートを参考にしました。

WRITEの手順

c53f9d08.png
StartBIT発行→「SLAVE_ADDRESS」→ACK→「Instruction」→ACK→「data」→Ack→StopBIT発行
 ・SlaveAddress:01011000(書き込み時/AD0pinをLOW時)
 ・Instruction:00000000

ソース

ソースは前後かなり端折りましたのでご注意ください。

//== AD5245 ======================================================================
void ad_5245_write(unsigned char data);   //write
unsigned char data;
//=====================================================================
while(1)
{
sprintf(string_box,"%03u",data);
sb1602_string_write(string_box,1,4);    //bmp_data_write
ad_5245_write(data);
delay_ms(10);
data++;
}//while(1)
}//int main(void)
//== SB1602 Write ====================================================
void ad_5245_write(unsigned char data)
{
//StartBIT
while(I2C1CONbits.SEN || I2C1CONbits.PEN || I2C1CONbits.RCEN || I2C1CONbits.ACKEN || I2C1STATbits.TRSTAT);
I2C1CONbits.SEN = 1;            //start_bit
while(I2C1CONbits.SEN);         //start_wait
//address
I2C1TRN = 0b01011000;   //slave_address
while(I2C1STATbits.TBF);        //transmit_wait
while(I2C1STATbits.ACKSTAT);    //ACK_CHECK
//mode_select
while(I2C1CONbits.SEN || I2C1CONbits.PEN || I2C1CONbits.RCEN || I2C1CONbits.ACKEN || I2C1STATbits.TRSTAT);
I2C1TRN = 0b00000000;   //command_write
while(I2C1STATbits.TBF);        //transmit_wait
while(I2C1STATbits.ACKSTAT);    //ack_check
//data
while(I2C1CONbits.SEN || I2C1CONbits.PEN || I2C1CONbits.RCEN || I2C1CONbits.ACKEN || I2C1STATbits.TRSTAT);
I2C1TRN = data;               //transmit
while(I2C1STATbits.TBF);        //transmit_wait
while(I2C1STATbits.ACKSTAT);    //ack_check
//StopBIT
while(I2C1CONbits.SEN || I2C1CONbits.PEN || I2C1CONbits.RCEN || I2C1CONbits.ACKEN || I2C1STATbits.TRSTAT);
I2C1CONbits.PEN = 1;            //stop_bit
while(I2C1CONbits.PEN);         //stop_bit_wait
}//void ad5245_data_write(unsigned char data)
//========================================================================

オシロで確認

8bitレジスタに毎回+1加算してAD5245に書き込み。
Wピンをオシロで確認
80fa290b.png

回路図

AD0pin:LOW
0dfaf959.png

よろしければバナーをクリックお願いします!