PCAP04驱动求助,SPI接口使用Arduino开发

如题所述,

我尝试使用Arduino做为开发介面 参考了大佬们使用PCAP04读取数值方式

我能够通过testread,读取数值0x11

POR也做了初始化也做了 config、Firmware也设定了

最后config、Firmware也都写入了 我仍然得到的数值都为0

请求大神帮忙,为何我的数值接收都是为0

下面这是我的代码

 
#include <SoftwareSerial.h>
#include <SPI.h>

//opcodes
#define WR_MEM      0xA0
#define WR_CONFIG   0xA3
#define POR         0x88
#define INITIALIZE  0x8A
#define CDC_START   0x8C
#define RDC_START   0x8E
#define NV_STORE    0x96
#define TEST        0x7e
#define PCAP04_READ_RESULT        0x40 

char Pcap04_Config [] =
{
 0x1D, 0x00, 0x58, 0x10,  
 0x10, 0x00, 0x3F, 0x20,  
 0x00, 0xD0, 0x07, 0x00,  
 0x00, 0x08, 0xFF, 0x03,  
 0x00, 0x24, 0x00, 0x00,  
 0x00, 0x01, 0x50, 0x30,  
 0x73, 0x04, 0x50, 0x08,  
 0x5A, 0x00, 0x82, 0x08,  
 0x08, 0x00, 0x47, 0x40,  
 0x00, 0x00, 0x00, 0x71,  
 0x00, 0x00, 0x08, 0x00,  
 0x00, 0x00, 0x00, 0x01,  
 0x00, 0x00, 0x00, 0x00
 };
 
char PCAP04_Firmware[] =
{
 0x24,0x05,0xA0,0x01,0x20,0x55,0x42,0x5C,0x48,0xB1,0x07,0x92,0x02,0x20,0x13,0x02  //0
,0x20,0x93,0x02,0xB2,0x02,0x78,0x20,0x54,0xB3,0x06,0x91,0x00,0x7F,0x20,0x86,0x20  //16
,0x54,0xB6,0x03,0x72,0x62,0x20,0x54,0xB7,0x00,0x00,0x42,0x5C,0xA1,0x00,0x49,0xB0  //32
,0x00,0x49,0x40,0xAB,0x5D,0x92,0x1C,0x90,0x02,0x7F,0x20,0x86,0x66,0x67,0x76,0x77  //48
,0x66,0x7A,0xCF,0xCD,0xE6,0x43,0xF1,0x44,0x29,0xE0,0x7A,0xDC,0xE7,0x41,0x32,0xAA  //64
,0x01,0x99,0xFD,0x7B,0x01,0x7A,0xCF,0xEB,0xE6,0x43,0xF1,0x44,0x29,0xE0,0x7A,0xC1  //80
,0xE7,0x41,0x32,0x6A,0xDE,0x44,0x7A,0xCF,0xEA,0xE6,0x43,0xF1,0x44,0x29,0xE0,0x6A  //96
,0xDF,0x44,0x7A,0xC4,0xE7,0x41,0x32,0xAB,0x05,0x7A,0xC1,0xE1,0x43,0xE0,0x3A,0x7A  //112
,0xC0,0xE1,0x43,0xE0,0x3A,0x02,0x7A,0xCF,0xE6,0xE6,0x43,0xF1,0x44,0x29,0xE0,0x7A  //128
,0xEF,0x44,0x02,0x20,0x9D,0x84,0x01,0x21,0x2E,0x21,0x74,0x20,0x37,0xC8,0x7A,0xE7  //144
,0x43,0x49,0x11,0x6A,0xD4,0x44,0x7A,0xC1,0xD8,0xE6,0x43,0xE9,0x44,0x1C,0x43,0x13  //160
,0xAB,0x63,0x6A,0xDE,0x41,0xAB,0x0B,0x46,0x46,0x46,0x7A,0xDF,0xFF,0xFF,0xFF,0xFF  //176
,0xE3,0x41,0x32,0x1C,0x44,0xE9,0x13,0x6A,0xD4,0x13,0x41,0xAA,0xDF,0x7A,0xC5,0xE1  //192
,0x43,0x49,0xE0,0x34,0x7A,0xCF,0xE3,0xE6,0x43,0xF1,0x44,0x29,0xE0,0xDB,0xC0,0x27  //208
,0xE5,0x6A,0xDF,0x43,0x7A,0xC8,0xE7,0x41,0x30,0xAB,0x03,0x86,0x01,0x92,0x37,0x7A  //224
,0xC6,0xE7,0x41,0x7A,0xFA,0xE7,0x43,0xEA,0x44,0x7A,0xC1,0xE1,0xE6,0x43,0xE9,0x44  //240
,0x25,0xE0,0x7A,0xC6,0xE7,0x41,0x7A,0xFA,0xE7,0x43,0xEA,0x44,0x7A,0xC0,0xE7,0x43  //256
,0xE9,0x44,0x25,0xE0,0x92,0x10,0x7A,0xE1,0x44,0xE2,0x44,0xE3,0x44,0xE4,0x44,0xE5  //272
,0x44,0xE6,0x44,0xE7,0x44,0xE8,0x44,0xC1,0xD8,0x24,0x3E,0x92,0xFF,0x02,0x7A,0xCF  //288
,0xD7,0xE6,0x43,0xF1,0x44,0x7A,0xD0,0xE7,0x43,0x2A,0x2A,0x32,0xAB,0x03,0x42,0x5C  //304
,0x92,0x03,0x7A,0xC0,0xE1,0x43,0xD9,0x27,0x90,0x6A,0xDF,0x43,0x7A,0xC8,0xE7,0x41  //320
,0x32,0xAB,0x03,0x86,0x01,0x92,0x11,0x7A,0xC2,0x43,0x7A,0xE7,0x44,0x6A,0xC6,0x44  //336
,0x7A,0xC3,0x43,0x7A,0xE8,0x44,0x6A,0xC7,0x44,0xC1,0xD4,0x24,0x57,0x7A,0xC8,0xE1  //352
,0x43,0xE0,0x3A,0x02,0x7A,0xCF,0xE7,0xE6,0x43,0xF1,0x44,0x29,0xE0,0x7A,0xC7,0xE1  //368
,0x41,0x6A,0xD4,0x45,0x5A,0x25,0x36,0x46,0x46,0x46,0x46,0x7A,0xE9,0x44,0x7A,0xC0  //384
,0xE7,0x43,0x55,0x7A,0xEA,0x45,0x7A,0xE9,0x51,0x1C,0x43,0x6A,0xCA,0x44,0x1D,0x43  //400
,0x6A,0xCB,0x44,0x74,0xC1,0xCA,0xE6,0x43,0xE9,0x44,0x7A,0xC1,0xE1,0x43,0x7A,0xCC  //416
,0xE0,0xE6,0x41,0x2C,0x42,0x7A,0xC5,0xE1,0x43,0x49,0xE0,0x34,0x7A,0xC1,0xCC,0xE6  //432
,0x43,0xE9,0x44,0x7A,0xC1,0xE1,0x43,0x2C,0x70,0x7A,0xCC,0x43,0x7A,0xCF,0x44,0x7A  //448
,0xCD,0x43,0x7A,0xCE,0x44,0x6A,0xCA,0x43,0xC1,0xCA,0x7A,0xE6,0x41,0xE9,0x45,0x2B  //464
,0xAE,0xEE,0x44,0x7A,0xC1,0xCA,0xE6,0x43,0xE9,0x44,0x7A,0xC1,0xE1,0x43,0x7A,0xCC  //480
,0xEC,0xE6,0x41,0x2C,0x42,0x7A,0xC5,0xE1,0x43,0x49,0xE0,0x34,0x7A,0xC1,0xCC,0xE6  //496
,0x43,0xE9,0x44,0x7A,0xC1,0xE1,0x43,0x2C,0x70,0x7A,0xCC,0x43,0x7A,0xCF,0x44,0x7A  //512
,0xCD,0x43,0x7A,0xCE,0x44,0x6A,0xCB,0x43,0xC1,0xCA,0x7A,0xE6,0x41,0xE9,0x45,0x2B  //528
,0xAE,0xED,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //544
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //560
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //576
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //592
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //608
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //624
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //640
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //656
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //672
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //688
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //704
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //720
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //736
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //752
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //768
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //784
,0x35,0x33,0x33,0x07,0xCD,0xCC,0xCC,0x08,0x01,0x00,0xFE,0x03,0x66,0x66,0x66,0x01  //800
,0x33,0x33,0x33,0x02,0x01,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //816
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //832
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //848
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //864
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //880
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //896
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //912
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //928
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //944
,0x1D,0x00,0x58,0x10,0x10,0x00,0x0F,0x20,0x00,0xD0,0x07,0x00,0x00,0x08,0xFF,0x03  //960  
,0x00,0x24,0x00,0x00,0x00,0x01,0x50,0x30,0x73,0x04,0x50,0x08,0x5A,0x00,0x82,0x08  //976
,0x08,0x00,0x47,0x40,0x00,0x00,0x00,0x71,0x00,0x03,0x08,0x00,0x00,0x00,0x00,0x01  //992
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //1008
};

volatile uint8_t text_receive;  // Declare as volatile
volatile uint32_t Value[6]={0x00};
uint8_t firmware_data;
int a = 0;

void setup() {
  Serial.begin(9600);
  pinMode(SS, OUTPUT);
  pinMode(MOSI, OUTPUT);
  pinMode(MISO, INPUT);
  pinMode(SCK, OUTPUT);

  
  // Initialize SPI
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV16);
  SPI.setDataMode(SPI_MODE1);
  SPI.setBitOrder(MSBFIRST);
  digitalWrite(SS, HIGH); // Ensure SS is high before starting
}

char spi_transfer(volatile char data) {
  SPDR = data;                    // Start the transmission

  while (!(SPSR & (1<<SPIF)))     // Wait for the end of the transmission
  {
    // Wait for transmission to complete
  };

  return SPDR;                    // Return the received byte
}

void PCap04_Test() { //0x7e
  digitalWrite(SS, LOW);  // Enable device
  spi_transfer(TEST);
  text_receive = spi_transfer(0x00);  // Write data byte and store response in text_receive
  digitalWrite(SS, HIGH); // Disable device
  delay(2);
}

void PCap04_PowerON_RESET(){ //0x88

  delay(5);
  digitalWrite(SS, LOW);  // Enable device
  spi_transfer(POR);
  digitalWrite(SS, HIGH);
}

void PCap04_CDCStart(){ //0x8C
  digitalWrite(SS, LOW);  
  spi_transfer(CDC_START);
  digitalWrite(SS, HIGH);
}


void PCap04_INITIALIZE(){ //0x8A

  digitalWrite(SS, LOW);
  spi_transfer(INITIALIZE);
  digitalWrite(SS, HIGH);
}

void PCAP04_WriteFirmware(){

  uint8_t data = 0x00;

  digitalWrite(SS, LOW);
  spi_transfer(WR_MEM);
  spi_transfer(data);

  for(uint16_t i=0; i<1024; i++){
    uint16_t data;
    data = PCAP04_Firmware[i];
    spi_transfer(data);
    //a++;
    //Serial.print(a);
    //Serial.print(data);
    //Serial.print("\n");
  }

  digitalWrite(SS, HIGH);
}


void PCap04_Init(){

  uint8_t PCap04_data = 0x00, Opcode = 0x00, Address = 0x00;
  //PCap04_PowerON_RESET(); //先上電復位所有狀態
  //PCap04_INITIALIZE();

  digitalWrite(SS, LOW);
  spi_transfer(0x2F);
  spi_transfer(0x00);
  //spi_transfer(PCap04_data);
  digitalWrite(SS, HIGH);

  for(uint8_t i=0; i<52; i++){
    digitalWrite(SS, LOW);
    spi_transfer(WR_MEM);
    spi_transfer(Address);
    spi_transfer(Pcap04_Config[i]);
    digitalWrite(SS, HIGH);
    Address++;
  }
  digitalWrite(SS, LOW);
  spi_transfer(0x2F);
  spi_transfer(0x01);
  digitalWrite(SS, HIGH);

  PCap04_CDCStart();
}


void PCap04_Init_Tow(){

  uint8_t PCap04_data = 0x00, Opcode = 0x00, Address = 0x00;
  
  PCap04_PowerON_RESET(); //先上電復位所有狀態
  PCap04_INITIALIZE();
  delay(50);
  PCAP04_WriteFirmware();
  

}

uint32_t PCAP04_Read_CDC_Result_data(int Num){
  uint8_t u32Val[4]={0x00};
  uint32_t dCapRatio = 0x00000000;
  uint32_t integer,fractional;
  double integrated ;
  uint8_t data;

  data = PCAP04_READ_RESULT + (Num * 4);
  digitalWrite(SS, LOW);
  delay(3);
  spi_transfer(data);
  u32Val[4] = spi_transfer(0x00);
  digitalWrite(SS, HIGH);

  dCapRatio |=  u32Val[0];
	dCapRatio |=  u32Val[1]<<8;
	dCapRatio |=  u32Val[2]<<16;
	dCapRatio |=  u32Val[3]<<24;
  delay(3);

  return dCapRatio;
}


void loop() {

  PCap04_Test(); //傳測試代碼
  PCap04_Test(); //傳測試代碼
  if (text_receive == 0x11) {
    Serial.print("返回值:");
    Serial.println(text_receive, HEX);
    // Do something when text_receive is 0x11
    } else {
      Serial.print("error:");
      Serial.println(text_receive, HEX);
    // Do something else
  }

  PCap04_Init_Tow(); 
  PCap04_Init();
  Serial.print("初始化完成");

  //for(uint8_t i=0; i<3; i++){

    char char_buff[30];

    /*Value[0] = 0x00;
		Value[1] = 0x00;
		Value[2] = 0x00;
		Value[3] = 0x00;*/

    Value[0] = PCAP04_Read_CDC_Result_data(0);
    delay(100);
    Value[1] = PCAP04_Read_CDC_Result_data(1);
    delay(100);
    Value[2] = PCAP04_Read_CDC_Result_data(2);
    delay(100);
    Value[3] = PCAP04_Read_CDC_Result_data(3);
    delay(100);

    sprintf(char_buff, "16進位數值0: %X\r\n", Value[0],HEX);
    Serial.println(char_buff);
    sprintf(char_buff, "16進位數值1: %X\r\n", Value[1],HEX);
    Serial.println(char_buff);
    sprintf(char_buff, "16進位數值2: %X\r\n", Value[2],HEX);
    Serial.println(char_buff);
    sprintf(char_buff, "16進位數值3: %X\r\n", Value[3],HEX);
    Serial.println(char_buff);

  //}


  

  
  delay(1000); // Add a delay to avoid spamming the output
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值