需要帮助通过SPI读取移位寄存器

时间:2018-11-10 18:50:56

标签: arduino esp8266 arduino-esp8266

我正在尝试解码要在洗衣机中移位寄存器的信号。寄存器是STP16CPC05,它也恰好是LED驱动器。我正在尝试使用ESP12从洗衣机中获取状态,例如剩余时间,周期,检查是否完成等。如果我能读取到LED驱动器的信号,则可以确定哪些位对应于哪个LED,然后确定程序中的状态。

我的第一个念头是使用自定义shiftin,但是我对此并不走运(据说digitalread()还是太慢了),而且我到处都在读我应该“只使用SPI”,因为它速度更快。我已经能够使用逻辑分析仪成功读取信号,甚至为arduino pro mini编写脚本来模拟寄存器信号,这样我就可以更轻松地调试ESP12,而不必整天运行洗衣机。编写SPI主机相对容易,但是从机是困难的部分。这是Arduino Pro mini的代码,因此它可以仿真洗衣机信号:

// SPI master code for Arduino Pro Mini "washing machine clone"

#include <SPI.h>


void setup (void)
{

  SPI.begin ();

  SPI.setClockDivider(SPI_CLOCK_DIV8);

}


void loop (void)
{
  delayMicroseconds(200);
  SPI.transfer(0x00); //00 00 11 01 08   01 08 02 02 00   00 0C 67 66 80
  SPI.transfer(0x00);
  SPI.transfer(0x11);
  SPI.transfer(0x01);
  SPI.transfer(0x08);
  delayMicroseconds(180);
  SPI.transfer(0x01);
  SPI.transfer(0x08);
  SPI.transfer(0x02);
  SPI.transfer(0x02);
  SPI.transfer(0x00);
  delayMicroseconds(180);
  SPI.transfer(0x00);
  SPI.transfer(0x0C);
  SPI.transfer(0x67);
  SPI.transfer(0x66);
  SPI.transfer(0x80);
  delayMicroseconds(200);    
}

enter image description here

有人对在esp上制作一个简单的SPI从设备有任何想法吗?还是有更好的方法来监听此移位寄存器总线?时钟信号为1 MHZ,因此速度并不快。我只需要一次读取15个字节。

这是有希望的,但是将它分解成我想要的东西已经做了很多工作:https://github.com/JiriBilek/WiFiSpi。我可以获取它一次打印出数据,但随后我认为它在重置接收中断时遇到了问题,因为它需要交互式主机。

1 个答案:

答案 0 :(得分:0)

esp8266 Arduino包中有一个SPISlave库。有例子。 (Jiri Bilek的固件只有其修改版本。)