资讯详情

使用IAP15 SPI写数字电位器MCP41XXX

使用IAP15单片机的SPI控制数字电位器MCP41XXX

  • 1. SPI的硬件连接
  • 2. 软件
    • 2.1 初始化
    • 2.2 串口接收命令并发送
  • 3. 总结
在前一个仪器中使用了一个MCP采用41100数字电位器SPI通信为设置电位器提供了一种快速的方式。过去,数字终端控制的电位器有电阻增加和电阻减小的数字终端。当需要增加电阻时,需要使电阻INC端接高电平,等待电阻升高, MCP数字电位计介绍4011。而采用SPI电阻变化为150ns之后就会生效。

1. SPI的硬件连接

SPI与单片机连接可以是硬件SPI也可以是普通的SPI,我用普通终端连接SPI,有三个端子:

CS P1.2 - 片选信号 SCLK P1.5 - 时钟 SI P1.3 - 数据输入是单片机的MOSI

注意,在IAP这三点是硬件SPI但是我没有在软件中使用这些点。相反,使用软点SPI通信的方式。

2. 软件

通过串口输入数据进行测试通信,然后通过SPI发送到MCP,试验效果。

2.1 初始化

sbit bCS  = P1^2; sbit bSCK = P1^5; sbit bMOSI = P1^3;

将所有数字口设置为准双向口,初始化完成。

2.2 串口接收命令并发送

将检测串口输入语句添加到主程序中,当输入为spi读取输入的数字,如果数字小于255,则发送到SPI。

    if ( strncmp(RX1_Buffer, "spi", 3) == 0)     { 
              sscanf(mStr1, "%s %d\r\n", mStr2, &u16Temp);      if ( u16Temp < 255 )      { 
               SPIData = u16Temp;       printf("The SPIData will be send: %d\r\n", (u16)SPIData);       bCS = 0;       writeByte(0x11);       writeByte(SPIData);       bCS = 1;            }     } 

下面是写SPI的分程序,writeByte(u8 Data)

void writeByte(u8 xSend) { 
          u8 i;    bMOSI = 0;  bSCK = 0;    for ( i 
       
        = 
        0
        ; i 
        < 
        8
        ; i
        ++ 
        ) 
        { 
          bMOSI 
        = 
        0
        ; bSCK 
        = 
        0
        ; 
        if 
        ( xSend 
        & 
        0x80 
        ) 
        { 
          bMOSI 
        = 
        1
        ; 
        } bSCK 
        = 
        0
        ; bSCK 
        = 
        1
        ; xSend 
        <<= 
        1
        ; 
        } 
        }
       

以上程序在IAP15单片机上通过。

3. 总结

SPI并不一定要使用硬件的接口,可以通过软件实现,这在和SX1278等的通讯中验证是完全可以胜任的,这次的试验也验证了软SPI可以和具有SPI接口的部件通讯。

标签: r1216电位器r9011电位器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台