Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: tunahanfıtlamak - 13 Şubat 2020, 09:25:24

Başlık: ADS1261 KULLANIMI
Gönderen: tunahanfıtlamak - 13 Şubat 2020, 09:25:24
#include <SPI.h>
#define DATAOUT 11//MOSI
#define DATAIN  12//MISO
#define SPICLOCK  13//sck
#define SLAVESELECT 10//ss

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(SLAVESELECT,OUTPUT);
  digitalWrite(SLAVESELECT,HIGH); //release chip
}
void okuma()
{
  digitalWrite(SLAVESELECT,LOW); //release chip
  --SPI.transfer();--
}
void loop()
{
  okuma();
  delay(1000);
}

merhabalar
arduino ile ads1261 entegresini kullanmaya çalışıyorum. entegre spı ile haberleşiyor.
Spı haberlşemesini kodda ki gibi yaptım benim resimdeki status register ının 3. bitine ulaşmam lazım spı.transfer komutunu register lara ulaşmak için kullanmak istiyorum bu komutu nasıl kullanabilirim
Şimdiden çok teşekkür ederim

ADS1261 http://www.ti.com/product/ADS1261

(https://i.ibb.co/8j2KZVv/Ekran-Al-nt-s-1.png) (https://ibb.co/8j2KZVv)
Başlık: Ynt: ADS1261 KULLANIMI
Gönderen: mehmet - 13 Şubat 2020, 10:42:15
Burası yardımcı olabilir belki...

https://forum.arduino.cc/index.php?topic=57873.0
Başlık: Ynt: ADS1261 KULLANIMI
Gönderen: tunahanfıtlamak - 24 Şubat 2020, 11:38:45
hocam araştırmalarım sonucu bu kodu yazdım fakat başarılı sonuç elde edemedim
datasheet ve internetteki dökümaları inceledim ve   digitalWrite (2, HIGH);//entegreye start verilmesi
   delay(500);
  if(digitalRead(DRDY)==LOW)//DRDY pininin entegreden gelen cevap
  {
  digitalWrite (slaveAPin, LOW);

  SPI.transfer(0x05);//adress
  byte1 = SPI.transfer(0);//yazdığımız register adresine 0 göndererek register daki verileri okumak

  digitalWrite (slaveAPin, HIGH);

    delay(1000);
    Serial.println(byte1,BIN);//gelen cevabı seri ekrana yazdırmak
    Serial.println();
   }
    digitalWrite(2, LOW);//start pini düşük yapılarak entegreyi resetlemek
  delay(500);
bu kodu yazım
kodda önce entegreye start verilmesi ve entegrenin drdy çıkışının veri alımına uygun olup olmadığını if içine alarak kontrol ettim drdy pini hazır olduğu zaman slaveAPin pinini düşük yaparak spı haberleşmedeki slave cihaza spi.transfer() komutu ile önce adres ve byte1=spi.transfer() komutu ile 0 göndererek o register daki veriyi okudum ve slaveAPin pinini yüksek yaptım okuduğum veriyi seri ekrana yazdım. start pinini low yaparak entegrenin resetlenmesini amaçladım.

araştırmalarım sonucu bulduğum spi.transfer komutu hem yazma ve okuma yapıyormuş.
ben komutu böyle kullandım  spi.transfer() komutunu adres data göndermede doğru mu kullanıyorum? ilk sorum bu
gerekli tanımlamaları yaptım ve bu komutu işlemcime yüklediğimde status registerinden gelen veri "10000001" bu
benim register dan "10000101" verisini okumam lazım 3. bit data ready biti onun bir olaması lazım aşağıda paylaşağım fotoğraflarda daha net görebileceksiniz.
hocam birde en önemlisi ben adc değerimi hangi registerden okuyacağım.
bunu nasıl bir yolla yapabilirim kod un tamamını aşağıda

#include <SPI.h>
const int slaveAPin = 10;
int drdy=3;
int i=0;
uint8_t dta=10000000;
uint8_t dta1=00000001;
uint8_t dta2=00100100;
uint8_t dta3=00000001;
uint8_t dta4=00000000;
uint8_t dta5=01110000;
uint8_t dta6=00010000;
uint8_t dta7=11111111;
uint8_t dta8=00000000;
uint8_t dta9=11111111;
uint8_t dta10=00000000;

void setup() {
  Serial.begin(9600);
 SPI.setDataMode(SPI_MODE3);

  SPI.setBitOrder(MSBFIRST);

  pinMode (slaveAPin, OUTPUT);
  pinMode (2, OUTPUT);//start pini çıkışı tanımlanıyor
  pinMode (drdy, INPUT);

  digitalWrite (2, LOW);
   SPI.begin();
     spi_ofcal0(0x07,0x00);
     spi_ofcal1(0x08,0x00);
     spi_ofcal2(0x09,0x00);
   
     spi_fscal0(0x0A,0x00);
     spi_fscal1(0x0B,0x00);
     spi_fscal2(0x0C,0x40);
}

uint8_t byte1, byte2, byte3,byte4,byte5, result;


void loop()
{
  digitalWrite(2,LOW);
 
  if(digitalRead(drdy)==HIGH)
  {
   Serial.println("drdy pini yüksek");
  }
 
  delay(500);
  spi_register(0x00,0x00);
  spi_status(0x01,dta1);
  spi_mode0(0x02,dta2);
  spi_mode1(0x03,dta3);
  spi_mode2(0x04,dta4);
  spi_mode3(0x05,dta5);
  spi_ref(0x06,dta6);
  spi_mux(0x0D,dta7);
  spi_imag(0x0E,dta8);
  spi_inpmux(0x11,dta9);
  spi_inpbias(0x12,dta10);
 
  Serial.println("baslanın içinde");
 
  digitalWrite (2, HIGH);
   delay(500);
  if(digitalRead(drdy)==LOW)
  {
  digitalWrite (slaveAPin, LOW);
 
  SPI.transfer(0x05);
  byte1 = SPI.transfer(0);
 
  digitalWrite (slaveAPin, HIGH);
  i=10;
  delay(1000);
  Serial.println(byte1,BIN);
  Serial.println();
  }
  digitalWrite(2, LOW);
  delay(500);
}
void spi_status(uint8_t adres,uint8_t data)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres);
  SPI.transfer(data);
  digitalWrite (slaveAPin, HIGH);
}
void spi_register(uint8_t adres1,uint8_t data1)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres1);
  SPI.transfer(data1);
  digitalWrite (slaveAPin, HIGH);
}
void spi_mode0(uint8_t adres2,uint8_t data2)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres2);
  SPI.transfer(data2);
  digitalWrite (slaveAPin, HIGH);
}
void spi_mode1(uint8_t adres3,uint8_t data3)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres3);
  SPI.transfer(data3);
  digitalWrite (slaveAPin, HIGH);
}
void spi_mode2(uint8_t adres4,uint8_t data4)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres4);
  SPI.transfer(data4);
  digitalWrite (slaveAPin, HIGH);
}
void spi_mode3(uint8_t adres5,uint8_t data5)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres5);
  SPI.transfer(data5);
  digitalWrite (slaveAPin, HIGH);
}
void spi_ref(uint8_t adres6,uint8_t data6)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres6);
  SPI.transfer(data6);
  digitalWrite (slaveAPin, HIGH);
}
void spi_mux(uint8_t adres7,uint8_t data7)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres7);
  SPI.transfer(data7);
  digitalWrite (slaveAPin, HIGH);
}
void spi_imag(uint8_t adres8,uint8_t data8)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres8);
  SPI.transfer(data8);
  digitalWrite (slaveAPin, HIGH);
}
void spi_inpmux(uint8_t adres9,uint8_t data9)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres9);
  SPI.transfer(data9);
  digitalWrite (slaveAPin, HIGH);
}
void spi_inpbias(uint8_t adres10,uint8_t data10)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres10);
  SPI.transfer(data10);
  digitalWrite (slaveAPin, HIGH);
}
void spi_ofcal0(uint8_t adres11,uint8_t data11)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres11);
  SPI.transfer(data11);
  digitalWrite (slaveAPin, HIGH);
}
void spi_ofcal1(uint8_t adres12,uint8_t data12)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres12);
  SPI.transfer(data12);
  digitalWrite (slaveAPin, HIGH);
}
void spi_ofcal2(uint8_t adres13,uint8_t data13)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres13);
  SPI.transfer(data13);
  digitalWrite (slaveAPin, HIGH);
}
void spi_fscal0(uint8_t adres14,uint8_t data14)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres14);
  SPI.transfer(data14);
  digitalWrite (slaveAPin, HIGH);
}
void spi_fscal1(uint8_t adres15,uint8_t data15)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres15);
  SPI.transfer(data15);
  digitalWrite (slaveAPin, HIGH);
}
void spi_fscal2(uint8_t adres16,uint8_t data16)
{
  digitalWrite (slaveAPin, LOW);
  SPI.transfer(adres16);
  SPI.transfer(data16);
  digitalWrite (slaveAPin, HIGH);
}

(https://i.ibb.co/w0K2j2N/blockdiyagram.png) (https://ibb.co/w0K2j2N)

(https://i.ibb.co/7kMrx4F/giri-ler.png) (https://ibb.co/7kMrx4F)

(https://i.ibb.co/0qXCZPY/register.png) (https://ibb.co/0qXCZPY)

(https://i.ibb.co/F0VMn1F/statusregisteri.png) (https://ibb.co/F0VMn1F)