ADS1261 data okuma sorunu

Başlatan tunahanfıtlamak, 28 Şubat 2020, 17:42:13

tunahanfıtlamak

merhabalar
arduino ile ads1261 entegresini kullanmaya çalışıyorum. entegre spı ile haberleşiyor.
araştırmalarım sonucu bu kodu
#include <SPI.h>

#define Status    0x01
#define MODE0     0x02
#define MODE1     0x03
#define MODE2     0x04
#define MODE3     0x05
#define REF       0x06
#define OFCAL0    0x07
#define OFCAL1    0x08
#define OFCAL2    0x09
#define FSCAL0    0x0A
#define FSCAL1    0x0B
#define FSCAL2    0x0C
#define IMUX      0x0D
#define IMAG      0x0E
#define REVERSED  0x0F
#define PGA       0x10
#define INPMUX    0x11
#define INPBIAS   0x12

#define RREG 0x20
#define WREG 0x40
#define START 0x08
#define STOP 0x0A
#define RDATA 0x12
#define  UNLOCK  0xF5
const int ADS1261_DRDY_PIN = 3;
const int ADS1261_CS_PIN = 10;
const int ADS1261_START_PIN = 2;
const int ADS1261_PWDN_PIN = 4;
const int ADS1261_STOP_PIN = 5;

uint8_t byt1,byt2,byt3,byt4,byt5;
void setup() 
{
  SPI.begin ();
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  SPI.setDataMode (SPI_MODE1);

 // SPCR  |= 0b01010100;
//  //SPI status register
//  SPSR  |= 0b00000000;
  Serial.begin(9600);

  pinMode(ADS1261_DRDY_PIN, INPUT); //Data ready input line
  pinMode(ADS1261_CS_PIN, OUTPUT); //Chip enable output line
  pinMode(ADS1261_START_PIN, OUTPUT); //Start 
  pinMode(ADS1261_PWDN_PIN, OUTPUT); //Power down output
  pinMode(ADS1261_STOP_PIN, OUTPUT); //Power down output

    delay(100);
  digitalWrite(ADS1261_CS_PIN, HIGH);
  digitalWrite(ADS1261_START_PIN, HIGH);

  ads1261_Init();
  
}

void loop() 
{

   if(digitalRead(ADS1261_DRDY_PIN)==HIGH)
   {
    Serial.println("drdy hıgh");
   }
    delay (500); 
    
   if(digitalRead(ADS1261_DRDY_PIN)==LOW)
   {
    SPI.transfer(RDATA);
      byte dataToSend1 = 0x01 | RREG;
      digitalWrite(ADS1261_CS_PIN, LOW);   
   
     SPI.transfer (dataToSend1);
     SPI.transfer (0x00);
      byt1= SPI.transfer (0xFF);
  digitalWrite(ADS1261_CS_PIN, HIGH);
    
     Serial.println(byt1,BIN);
    Serial.println("drdy LOW");
   }
  delay (1000); 
}
void ads1261_Reset() //PWDN_PIN MUST BE HIGH FOR OPERATION
{
  digitalWrite(ADS1261_PWDN_PIN, HIGH); delay(100);
  digitalWrite(ADS1261_PWDN_PIN, LOW); delay(100);
  digitalWrite(ADS1261_PWDN_PIN, HIGH); delay(100);
}
void ads1261_Init()
{  
  ads1261_Reset(); delay(100);

  ads1261_Reg_Write(Status, 0x01);delay(20);   
  ads1261_Reg_Write(MODE0, 0x24); delay(20);
  ads1261_Reg_Write(MODE1, 0x61); delay(20); 
  ads1261_Reg_Write(MODE2, 0x00); delay(20); 
  ads1261_Reg_Write(MODE3, 0x00); delay(20);   
  ads1261_Reg_Write(REF, 0x05);delay(20); 
  ads1261_Reg_Write(OFCAL0, 0x00);delay(20); 
  ads1261_Reg_Write(OFCAL1, 0x00);delay(20);  
  ads1261_Reg_Write(OFCAL2, 0x00);delay(20); 
  ads1261_Reg_Write(FSCAL0, 0x00);delay(20); 
  ads1261_Reg_Write(FSCAL1, 0x00);delay(20);   
  ads1261_Reg_Write(FSCAL2, 0x40);delay(20);
  ads1261_Reg_Write(IMUX, 0xFF);delay(20);
  ads1261_Reg_Write(IMAG, 0x00);delay(20); 
  ads1261_Reg_Write(REVERSED,0x00);delay(20);    
  ads1261_Reg_Write(PGA, 0x00);delay(20);   
  ads1261_Reg_Write(INPMUX,0xFF);delay(20);  
  ads1261_Reg_Write(INPBIAS,0x00);delay(20); 
  
  delay(100);
  digitalWrite(ADS1261_CS_PIN, LOW);   
  SPI.transfer(UNLOCK);    
  delay(2);
  digitalWrite(ADS1261_CS_PIN, HIGH);
  
  delay(100);
  digitalWrite(ADS1261_CS_PIN, LOW);   
  SPI.transfer(START); //Inicia a conversão via código 08h
  digitalWrite(ADS1261_CS_PIN, HIGH);

  digitalWrite(ADS1261_STOP_PIN, HIGH);
}
void ads1261_Reg_Write (unsigned char READ_WRITE_ADDRESS, unsigned char DATA) //registerlara default değerlerini atama
{
  byte dataToSend = READ_WRITE_ADDRESS | WREG;
  
  digitalWrite(ADS1261_CS_PIN, LOW);
  delay(5);
  SPI.transfer(dataToSend);
  SPI.transfer(0xFF);    
  SPI.transfer(DATA);   
  delay(2);
  digitalWrite(ADS1261_CS_PIN, HIGH);
}

yazdım ve void loop içindeki datatosend1 e yazdığım register adresinin geri dönüşü olarak default değeri geliyor.
birinci sorum baştaki konfigürasyon ayarlarını yaparken girdiğim değerleri bana döndürmüyor sürekli datasheet deki default değerlerini döndürüyor bunu benim ayarladığım değerlere nasıl çevirebilim?
ikinci sorum ben bu entegreden adc değerini nasıl okuyacağım?
üçüncü sorum ads1261_init fonksiyonunda ki konfigürasyon ayarlarım doğru mu ?


osiloskoptan ölçtüğüm değer bu sarı olan sclk clock sinyalim kırmızı olan ise MISO bacağım entegreden gelen cevap(bir de sinyalin neden bu kadar parazitli geldiğini anlamadım haberleşme sizce doğru mu)