如题所述,
我尝试使用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
}