ADE7953板上的SPI

问题描述 投票:0回答:1

因此,我一直在尝试在板与我的arduino之间进行SPI通信。在开发板的手册中,它要求发送两个字节的地址与我要读取/写入的地址,以及另一个字节来选择读取或写入(最高有效位指示您将应用哪个地址)。但是,我的代码似乎没有运行。有人愿意帮助吗? Code

arduino spi
1个回答
0
投票

我尚未使用实际的Arduino SPI库,但我将为您提供一个Arduino片段,它将代替SPI。它将允许您发送一些字节,以查看是否一切正常。尝试另一种方法以查看其是否有用可能会很有用。您将需要更改引脚和寄存器以匹配您的目标应用程序。

#define PIN_SPIDATA 16
#define PIN_SPICLK  17
#define PIN_SPILOAD 18

#define REG_DECODEMODE  0x09
#define REG_INTENSITY   0x0A
#define REG_SCANLIMIT   0x0B
#define REG_SHUTDOWN    0x0C
#define REG_DISPLAYTEST 0x0F

void setup() {

  // set ddr for sw spi pins
  pinMode(PIN_SPICLK, OUTPUT);
  pinMode(PIN_SPIDATA, OUTPUT);
  pinMode(PIN_SPILOAD, OUTPUT);

  setRegister(REG_INTENSITY, 0x04); 
  setRegister(REG_SCANLIMIT, 0x07);
  setRegister(REG_SHUTDOWN, 0x01);    // normal operation
  setRegister(REG_DECODEMODE, 0x00);  // pixels not integers
  setRegister(REG_DISPLAYTEST, 0x00); // not in test mode
}

// sends a single byte by sw spi (no latching)
void putByte(uint8_t data)
{
  uint8_t i = 8;
  uint8_t mask;
  while(i > 0) {
    mask = 0x01 << (i - 1);         // get bitmask
    digitalWrite(PIN_SPICLK, LOW);   // tick
    if (data & mask){               // choose bit
      digitalWrite(PIN_SPIDATA, HIGH); // set 1
    }else{
      digitalWrite(PIN_SPIDATA, LOW);  // set 0
    }
    digitalWrite(PIN_SPICLK, HIGH);  // tock
    --i;                            // move to lesser bit
  }
}

// sets register to the same byte value for all screens
void setRegister(uint8_t reg, uint8_t data)
{
  digitalWrite(PIN_SPILOAD, LOW); // begin
  for(uint8_t i = 0; i < numChips; ++i){
    putByte(reg);  // specify register
    putByte(data); // send data
  }
  digitalWrite(PIN_SPILOAD, HIGH);  // latch in data
  digitalWrite(PIN_SPILOAD, LOW); // end
}
© www.soinside.com 2019 - 2024. All rights reserved.