06 Ağustos 2020, 00:46:33

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


ADS1261 KULLANIMI

Başlatan tunahanfıtlamak, 13 Şubat 2020, 12:25:24

tunahanfıtlamak

#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(DATAOUTOUTPUT);
  
pinMode(DATAININPUT);
  
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



mehmet


tunahanfıtlamak

24 Şubat 2020, 14:38:45 #2 Son düzenlenme: 24 Şubat 2020, 14:46:03 tunahanfıtlamak
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 (2HIGH);//entegreye start verilmesi
   
delay(500);
  if(
digitalRead(DRDY)==LOW)//DRDY pininin entegreden gelen cevap
  
{
  
digitalWrite (slaveAPinLOW);

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

  
digitalWrite (slaveAPinHIGH);

    
delay(1000);
    
Serial.println(byte1,BIN);//gelen cevabı seri ekrana yazdırmak
    
Serial.println();
   }
    
digitalWrite(2LOW);//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 (slaveAPinOUTPUT);
  
pinMode (2OUTPUT);//start pini çıkışı tanımlanıyor
  
pinMode (drdyINPUT);

  
digitalWrite (2LOW);
   
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 byte1byte2byte3,byte4,byte5result;


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 (2HIGH);
   
delay(500);
  if(
digitalRead(drdy)==LOW)
  {
  
digitalWrite (slaveAPinLOW);
  
  
SPI.transfer(0x05);
  
byte1 SPI.transfer(0);
  
  
digitalWrite (slaveAPinHIGH);
  
i=10;
  
delay(1000);
  
Serial.println(byte1,BIN);
  
Serial.println();
  }
  
digitalWrite(2LOW);
  
delay(500);
}
void spi_status(uint8_t adres,uint8_t data)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres);
  
SPI.transfer(data);
  
digitalWrite (slaveAPinHIGH);
}
void spi_register(uint8_t adres1,uint8_t data1)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres1);
  
SPI.transfer(data1);
  
digitalWrite (slaveAPinHIGH);
}
void spi_mode0(uint8_t adres2,uint8_t data2)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres2);
  
SPI.transfer(data2);
  
digitalWrite (slaveAPinHIGH);
}
void spi_mode1(uint8_t adres3,uint8_t data3)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres3);
  
SPI.transfer(data3);
  
digitalWrite (slaveAPinHIGH);
}
void spi_mode2(uint8_t adres4,uint8_t data4)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres4);
  
SPI.transfer(data4);
  
digitalWrite (slaveAPinHIGH);
}
void spi_mode3(uint8_t adres5,uint8_t data5)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres5);
  
SPI.transfer(data5);
  
digitalWrite (slaveAPinHIGH);
}
void spi_ref(uint8_t adres6,uint8_t data6)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres6);
  
SPI.transfer(data6);
  
digitalWrite (slaveAPinHIGH);
}
void spi_mux(uint8_t adres7,uint8_t data7)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres7);
  
SPI.transfer(data7);
  
digitalWrite (slaveAPinHIGH);
}
void spi_imag(uint8_t adres8,uint8_t data8)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres8);
  
SPI.transfer(data8);
  
digitalWrite (slaveAPinHIGH);
}
void spi_inpmux(uint8_t adres9,uint8_t data9)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres9);
  
SPI.transfer(data9);
  
digitalWrite (slaveAPinHIGH);
}
void spi_inpbias(uint8_t adres10,uint8_t data10)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres10);
  
SPI.transfer(data10);
  
digitalWrite (slaveAPinHIGH); 
}
void spi_ofcal0(uint8_t adres11,uint8_t data11)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres11);
  
SPI.transfer(data11);
  
digitalWrite (slaveAPinHIGH); 
}
void spi_ofcal1(uint8_t adres12,uint8_t data12)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres12);
  
SPI.transfer(data12);
  
digitalWrite (slaveAPinHIGH); 
}
void spi_ofcal2(uint8_t adres13,uint8_t data13)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres13);
  
SPI.transfer(data13);
  
digitalWrite (slaveAPinHIGH); 
}
void spi_fscal0(uint8_t adres14,uint8_t data14)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres14);
  
SPI.transfer(data14);
  
digitalWrite (slaveAPinHIGH); 
}
void spi_fscal1(uint8_t adres15,uint8_t data15)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres15);
  
SPI.transfer(data15);
  
digitalWrite (slaveAPinHIGH); 
}
void spi_fscal2(uint8_t adres16,uint8_t data16)
{
  
digitalWrite (slaveAPinLOW);
  
SPI.transfer(adres16);
  
SPI.transfer(data16);
  
digitalWrite (slaveAPinHIGH); 
}