将DS1868 3线器件连接到SPI总线

元器件信息   2023-11-21 11:03   226   0  

DS1868  点击型号查看芯片规格书

Analog Devices(亚德诺) 芯片规格书大全

芯片规格书搜索工具-icspec


DS1868使用带有3线(移位寄存器)接口的双数字电位器。本应用说明描述了将DS1868以及任何其他达拉斯半导体3线设备连接到摩托罗拉SPI总线所需的逻辑和固件。

DS1868简介

DS1868是一款双数字电位器,具有3线接口。本应用笔记将描述如何将达拉斯半导体的3线器件与带有SPITM接口的微控制器连接起来。

比较SPI和三线接口

SPI和3线是不同的串行接口,但它们是兼容的。下面的部分描述它们的区别。

串行外设接口

SPI有4个信号:SDO、SDI、SCK和active-low SS,其中SDO信号为数据出,SDI信号为数据入,SCK信号为时钟,active-low SS信号为从选。

三线串行接口

3线串行接口有4个信号:DQ, Cout, active-low RST和CLK。数据输入在DQ信号上,数据输出在Cout信号上,active-low RST信号使能3线接口,CLK是时钟。

串行接口信号的名字信号的描述总线速度(典型)数据格式

电话DQ数据500kHz至5mhzLSB第一,MSB最后


Cout数据




RST校验重新校验




CLK时钟



SPISDI数据10 mhzMSB第一,LSB最后


SDO数据




党卫军校验active-low从机选择




SCK时钟



注意:在此应用程序说明中,不使用active-low SS(仅在从模式下使用)。

写/重写字节

向DS1868写入数据


微控制器包含一个SPI接口,以8位的倍数发送和接收数据。因此,除了17位数据外,还需要发送7个额外的位,总共3个字节。微控制器首先发送MSB。当微控制器向DS1868写入数据时,第一个字节的前7位被推出移位寄存器,b0包含第一个字节的LSB(见图1)。

11035_wfmv_9610.gif

图1所示。在写入过程中具有7个额外位的移位寄存器。

数据来自DS1868

当微控制器从DS1868读取数据时,首先传输堆栈选择位(b0),然后是锅1的MSB (b1),依此类推(见图2)。当重新读取时,额外的7位位于第三个字节。

11035_tb9c_7821.gif

图2。17位移位寄存器。

下面是一个如何写入和读取字节的示例。在这个例子中,堆栈选择位选择1号存储池。锅1编程为0Fh,锅0编程为55h。所选锅的刮水器的值将在S(OUT)引脚上。写入DS1868的三个字节分别是01h、0Fh和55h。01h的最后两个零是额外的7位。微控制器首先发送MSB,因此第7个零首先传输。这两个0从末尾掉下来,而“1”在末尾是0。锅1将有前4位填满0和最后4位填满1。锅0中的MSB将是一个'0',其余的位在1和0之间交替。

字节0:00000001b (01h)额外的位加了下划线。
字节1:00001111b (0Fh)
字节2:01010101b (55h)

当读取数据时,b0是第一个输出位。输出的3个字节现在读起来如下:

字节0:10000111 (87h)
字节1:10101010 (ah)
字节2:10000000(80h)额外的部分加了下划线。
这7个额外的位现在位于字节2的末尾。

表2中列出了将写入数据转换为读取数据的更多示例。

该软件将写入的字节与从DS1868读取的字节进行比较(参见附录)。

3字节写入(十六进制)3字节写入(二进制)锅设置
SS锅1锅0
3字节读取(十六进制)3字节读取(二进制)
0h FFh 80h00000001
11111111
10000000
1 FFh 80hh h h h11111111
11000000
00000000
0h 80h 80h00000001
10000000
10000000
1 FFh 80hh 40h 00h11000000
01000000
00000000
0h 0h 0h00000000
10000000
00001111
080h 0Fh40h 07h 80h01000000
00000111
10000000

硬件配置

电路板的原理图如图3所示。

11035_kind_3250.gif

图3。板示意图。

软件配置

软件配置是针对PIC16F872。

端口设置

TRISx寄存器将引脚设置为输入(1)或输出(0)。PORTA寄存器将驱动低激活RST和LED到5V或0V。

TRISA =——1xxx00-RA5active-low SS设置为输入。该命令用于启用串口。RA0和RA1设置为active-low RST和LED的输出
TRISB =未使用
TRISC = xx010xxx -清除SCK和SDO,设置SDI

active-low RST引脚需要在数据发送/接收之前设置,在事务完成后清除。

SPI设置

SSPSTAT = 01000000 (40h) -bit SMP = 0, bit CKE = 1
当SMP = 0时,在数据输出时间结束时对输入数据进行采样。
当CKE = 1时,传输发生在CKP = 0时,从活动时钟状态过渡到空闲时钟状态。

SSPSTAT寄存器设置时钟和数据,使其具有与DS1868接口的正确定时。

SSPCON = 00100001 (21h) -bit SSPEN = 1, bit SSPM3-0 = 0001
SSPEN = 1使能串口。
SSPM3-0选择时钟频率。SSPM3-0 = 0001 = Fosc/16 = 20MHz/16 = 1.25MHz

DS1868的最大时钟速率为10MHz。

代码

附录包含编写、读取和比较电位器数据的汇编代码。

除了SPI端口外,使用的每个端口都需要初始化。电位计也需要初始化为零。然后可以将数据写入电位器。

SPI时机

使用上面描述的寄存器设置,微控制器产生以下时序信号。

11035_5h9p_2738.gif

图4。SPI时序图。

SDO上的数据传输在时钟的下降沿上完成。在时钟周期内,数据在SDI上接收。以下是接收和发送电位器数据的示意图。图5显示了01h、FFh和80h被发送到SDO线上的DS1868。SDI包含DS1868发送回微控制器的数据。SDI上的数据为FFh、co0h和00h。有关转换数据的更多信息,请参见表2。

11035_qyq8_3588.gif

图5。数据传输/接收。

SDO上的数据传输在时钟的下降沿上完成。在时钟周期内,数据在SDI上接收。以下是接收和发送电位器数据的示意图。图5显示了01h、FFh和80h被发送到SDO线上的DS1868。SDI包含DS1868发送回微控制器的数据。SDI上的数据为FFh、co0h和00h。有关转换数据的更多信息,请参见表2。

图6显示了01h、80h和80h被发送到DS1868。然后将数据与C0h、40h和00h进行比较。有关转换数据的更多信息,请参见表2。

11035_o2ye_4239.gif

图6。传输/接收的数据(详细)。

附录

使用PIC16F872的汇编代码

;*****************;App Note Code;下面的代码是在PIC16F872上开发的。***************** 列表p = 16 f872 # INCLUDE & lt; p16f872.inc> GOTO主要;* * * * * *子程序;0x23MOVLW 0x20MOVWF 0x20DEC1 DECFSZ 0x20GOTO LOOP1RETURNLOOP1 MOVLW 0xFFMOVWF 0X21DEC2 DECFSZ 0X21GOTO LOOP2GOTO DEC1LOOP2 MOVLW 0xFFMOVWF 0x22DEC3 DECFSZ 0X22GOTO DEC3GOTO DEC2延迟;*************************************;测试确定TX是否完成BSF STATUS, RP0;Select Bank 1BTFSS SSPSTAT,0;测试SSPBUF以确定TX是否完成。**************************************;初始化PORTAINITA BCF STATUS, RP0;Select Bank 0BCF STATUS, RP1CLRF PORTA;清空输出数据latchesBSF STATUS, RP0;Select Bank 1MOVLW 0x06;所有输出设digitalMOVWF ADCON1MOVLW 0x20;用于初始化数据方向的值;LED和主动低RST输出bcf STATUS, RP0;Select Bank 0BCF STATUS, RP1BSF PORTA, 1;LED offBCF PORTA, 0;active-low RST = 0VRETURN;**************************************;初始化PORTCINITC BCF STATUS, r0;Select Bank 0BCF STATUS, RP1CLRF PORTC;清空输出数据latchesBSF STATUS, RP0;Select Bank 1MOVLW 0x10;用于初始化数据方向的值;清除SCK和SDO,设置SDIRETURN;**************************************;初始化SPISPI BSF STATUS, r0;Select Bank 1MOVLW 0x40MOVWF SSPSTAT;SMP=0, CKE=1:这些位设置了数据&时钟。BCF状态,rp0;Select Bank 0BCF STATUS, RP1MOVLW 0x21MOVWF SSPCON;SSPEN=1, CKP=SSPMx=0001 (Fosc/16)RETURN;***************************************;初始化POT1WRITE0 BCF STATUS;Select Bank 0BCF STATUS, RP1BSF PORTA, 0;active-low RST = 5VMOVLW 0x00;清除字节0MOVWF SSPBUFCALL DONE;测试SSPBUF以确定TX是否完成。Select Bank 0BCF STATUS, RP1MOVLW 0x00;清除字节1MOVWF SSPBUFCALL DONE;测试SSPBUF以确定TX是否完成。Select Bank 0BCF STATUS, RP1MOVLW 0x00;清除字节2MOVWF SSPBUFCALL DONE;测试SSPBUF以确定TX是否完成。Select Bank 0BCF STATUS, RP1BCF PORTA, 0;active-low RST = 0VRETURN;***************************************;Write to Pot1WRITE BCF STATUS, r0;Select Bank 0BCF STATUS, RP1BSF PORTA, 0;active-low RST = 5VMOVLW 0x01;栈选择bit = 1 (Byte 0);Select Bank 0BCF STATUS, RP1MOVLW 0xFF;{{{}} {{}} {{}}}Select Bank 0BCF STATUS, RP1MOVLW 0x80;0 = 80(字节2)MOVWF SSPBUFCALL DONEBCF STATUS, RP0;Bank0BCF STATUS, RP1BCF PORTA, 0;active-low RST = 0VRETURN;***************************************;比较发送和接收数据Select Bank 0BCF STATUS, RP1BSF PORTA, 0;active-low RST = 5VMOVLW 0x01;写字节0MOVWF SSPBUFBCF PORTA, 1;LED onCALL DONEBCF STATUS, r0;Select Bank 0BCF STATUS, RP1MOVF SSPBUF, 0;读取字节0XORLW 0xFFBTFSS状态,2GOTO FAILMOVLW 0xFF;写字节1MOVWF SSPBUFCALL DONEBCF STATUS, r0;Select Bank 0BCF STATUS, RP1MOVF SSPBUF, 0;读取字节1XORLW 0xC0BTFSS状态,2GOTO FAILMOVLW 0x80;写字节2MOVWF SSPBUFCALL DONEBCF STATUS, r0;Select Bank 0BCF STATUS, RP1MOVF SSPBUF, 0;读取字节2ANDLW 0x80BTFSS STATUS, 2GOTO FAILBCF PORTA, 0;active-low RST = 0VGOTO PASSRETURN;***************************************;如果Compare FailsFAIL BCF STATUS, r0;Select Bank 0BCF STATUS, RP1CLRF PORTA;通过清除输出数据来初始化PORTASelect Bank 1MOVLW 0x06;所有输出设digitalMOVWF ADCON1MOVLW 0x20;用于初始化数据方向的值;LED亮起,低RST高bcf STATUS, RP0;Select Bank 0BCF STATUS, RP1BCF PORTA, 1;LED onCALL WAITBSF portal, 1;导致offCALL WAITGOTO失败;LED重复闪烁;***********************************;If Compare PassesPASS BCF STATUS, r0;Select Bank 0BCF STATUS, RP1BCF PORTA, 1;被引导通过;LED保持亮;******主程序********主调用inita;初始化PORTACALL INITC;初始化portcall SPI;初始化SPICALL WRITE0;初始化postcall WRITE;将数据写入到potcall CMPR将写入到pots的数据与从potsEND</p16f872.inc>


登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。