Spi haberleşme ile ADS1261 KULLANIMI

Başlatan tunahanfıtlamak, 24 Şubat 2020, 11:36:20

tunahanfıtlamak

merhabalar
Proje olarak 24 bitlik TI nin ADS1261 entegresi ile adc okumak istiyorum.
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.
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); 
}









tunahanfıtlamak

arkadaşlar yok mu bu konu hakkında tecrübeli olan?

ete

#2
Kendi adıma konuşursam bilmediğim bir konu. Hem C dilinde elim kolum bağlanıyor hemde hiç kullanmadığım ve tanımadığım bir entegre. Belki data sheet inceledikten sonra entegreyi çözerim ama kod olarak yardımcı olamam.
Entegreyi gün içinde inceleyeceğim.
Ete


note:
Hemen incelemeye başladım. İtiraf edeyim ki bir çırpıda anlaşılabilecek bir entegre değil.
Öncelikle komut tablosu ve register haritasını iyice öğrenmek gerekiyor.
Çok inceledim ama adc karşılıklarını nereden okuyacağımızı bende göremedim.
Bir uygulamada bulamadım. Zor entegre. KOlaylıklar diliyorum. İşin zor gerçekten.Bu iş için hemen program yazmaktansa döküman ve örnek arayışına girilmeli bence. Bu tür entegreleri kullanmaya aşina değilim. O nedenle çok fazla bir şey söyleyemeyeceğim


tunahanfıtlamak

Alıntı yapılan: ete - 25 Şubat 2020, 09:28:41Kendi adıma konuşursam bilmediğim bir konu. Hem C dilinde elim kolum bağlanıyor hemde hiç kullanmadığım ve tanımadığım bir entegre. Belki data sheet inceledikten sonra entegreyi çözerim ama kod olarak yardımcı olamam.
Entegreyi gün içinde inceleyeceğim.
Ete

teşekkürler hocam

Powered by EzPortal