Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: samedkutuk - 22 Şubat 2020, 18:52:09

Başlık: CCS C ile spi haberleşme(ADS1261)
Gönderen: samedkutuk - 22 Şubat 2020, 18:52:09
Arkadaşlar merhabalar  öncelikle herkese iyi çalışmalar dilerim :)
Proje olarak 24 bitlik TI nin ADS1261 entegresi ile ağırlık ölçümü yağmak niyetindeyim
Projem bittiğinde de geliştirmek isteyenler için buraya paylaşacağım inşallah :)
Şimdi Pic 18f serisi bir pic ile Bu entegreyi haberleştirmek istiyorum.
Entegreyi gerekli bağlantılarını yaparak bir devre üzerine yerleştirdim ve sağlam yaptığımı düşünüyorum ölçümlerim ile bunu sağladım.
CCS C fonksiyonları ile Spı da veri okuma ve veri yazma nasıl yapılıyor daha önce yapmıştım.
Sormak istediğim sorular;
Örneğin Bu entegrenin 0x12 Registerini okumak istiyorum bunu ccs c fonksiyonları ile nasıl yapabilirim.
Bunun  için önce cihaz adresi tanımlamam gerekmez mi ?
bir de datasheet de bir okuma diyagramı verilmiş bunu nasıl uygularım fikir verirseniz çok sevinirim
herkese iyi çalışmalar dilerim.

(https://i.ibb.co/7nCmwHG/registermap.png) (https://ibb.co/7nCmwHG)

(https://i.ibb.co/njNSqqn/status.png) (https://ibb.co/njNSqqn)

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

(https://i.ibb.co/yVnTHS0/Ekran-Al-nt-s.png) (https://ibb.co/yVnTHS0)
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: devrecii - 23 Şubat 2020, 14:50:58
Spi aynı anda read write  yapan fonkiyon olması lazım, bunu kullnmalısın

cs pini 1 iken 0 yapıyorsun
Spi read write fonksiyonu ile bir byte (20H+regadres) gönderiyorsun çipten  cevap olarak FFH geliyor.
Spi read write fonksiyonu ile bir byte (herhangi sayı) gönderiyorsun çipten cevap olarak (20H+regadres) geliyor.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak registerdeki sayı geliyor.
cs pinini tekrar 1 yapmak zorundasın.

DRY pini adc okuma bittiğinde bir pals üretiyor bu palsı dilersen inteerupt olarak kullanabilrisin aynı zamanda çipin adc çalışıp işlem yaptığını anlayablirsin , verdiğin diagramda  çipin ilk açışta konrol edilmesi setup edilmesi var.

DRY pini plas üretiyorsa  adc değerini okumak için

cs pini 1 iken 0 yapıyorsun
Spi read write fonksiyonu ile bir byte (12H) gönderiyorsun çipten  cevap olarak FFH geliyor.
Spi read write fonksiyonu ile bir byte (herhangi sayı) gönderiyorsun çipten cevap olarak (12H) geliyor.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak adc 24bit değernin son 8 biti.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak adc 24bit değernin son 8 biti.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak adc 24bit değernin ilk 8 biti.
cs pinini tekrar 1 yapmak zorundasın.

crc konrolu veri akışı aktifmi pasifmi bakmak ona göre bilgileri alman gerekir taminimce cpu ilk enerji verildiğinde pasifdir.
dry pini pals veriyormu buna bakman lazım tahminimce çip default hazırdır değilde setup yapmalısın diagrama göre
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: samedkutuk - 24 Şubat 2020, 14:23:00
@devrecii Hocam merhabalar yanıtınız teşekkür ederim.
SPIread write (20H+register)
burayı anlayamadım neden 20H göndeeriyorum ?

Alıntı yapılan: devrecii - 23 Şubat 2020, 14:50:58Spi aynı anda read write  yapan fonkiyon olması lazım, bunu kullnmalısın

cs pini 1 iken 0 yapıyorsun
Spi read write fonksiyonu ile bir byte (20H+regadres) gönderiyorsun çipten  cevap olarak FFH geliyor.
Spi read write fonksiyonu ile bir byte (herhangi sayı) gönderiyorsun çipten cevap olarak (20H+regadres) geliyor.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak registerdeki sayı geliyor.
cs pinini tekrar 1 yapmak zorundasın.

DRY pini adc okuma bittiğinde bir pals üretiyor bu palsı dilersen inteerupt olarak kullanabilrisin aynı zamanda çipin adc çalışıp işlem yaptığını anlayablirsin , verdiğin diagramda  çipin ilk açışta konrol edilmesi setup edilmesi var.

DRY pini plas üretiyorsa  adc değerini okumak için

cs pini 1 iken 0 yapıyorsun
Spi read write fonksiyonu ile bir byte (12H) gönderiyorsun çipten  cevap olarak FFH geliyor.
Spi read write fonksiyonu ile bir byte (herhangi sayı) gönderiyorsun çipten cevap olarak (12H) geliyor.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak adc 24bit değernin son 8 biti.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak adc 24bit değernin son 8 biti.
Spi read write fonksiyonu ile bir byte (0) gönderiyorsun çipten cevap olarak adc 24bit değernin ilk 8 biti.
cs pinini tekrar 1 yapmak zorundasın.

crc konrolu veri akışı aktifmi pasifmi bakmak ona göre bilgileri alman gerekir taminimce cpu ilk enerji verildiğinde pasifdir.
dry pini pals veriyormu buna bakman lazım tahminimce çip default hazırdır değilde setup yapmalısın diagrama göre
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: devrecii - 26 Şubat 2020, 14:12:55
Dostum çipi üretenler öyle üretmiş (0x20 + adres) gönderirsen  çip regiteri okuma yaptığını anlıyor ,  (0x40+adres) gönderirsen çip  registere yazma yaptığını anlıyor, read/write pininden kurtulmuş oluyor yoksa bazı çiplerde bu pin var.

Yani bu spi haberleşmesi kuralı değil çipi üretenler böyle üretmiş.
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: samedkutuk - 26 Şubat 2020, 15:52:48
Alıntı yapılan: devrecii - 26 Şubat 2020, 14:12:55Dostum çipi üretenler öyle üretmiş (0x20 + adres) gönderirsen  çip regiteri okuma yaptığını anlıyor ,  (0x40+adres) gönderirsen çip  registere yazma yaptığını anlıyor, read/write pininden kurtulmuş oluyor yoksa bazı çiplerde bu pin var.

Yani bu spi haberleşmesi kuralı değil çipi üretenler böyle üretmiş.

Anladım hocam çok teşekkür ederim datasheeti okumaktan bir hal oldum ama o kısmını sizin yazdıklarınızla da birleştirince bişeyler çıktı ortaya
1-Cs Pin i ni 0 dan 1 e çekiyorum
2-Sonra 12H göndereceğim fakat entegre bunun veri mi adres mi olduğunu nasıl anlayacak(Yani ben 0x04 adresine 0x15 yazmak istersem nasıl yazacağım bir türlü oturtamadım o kısmı) ?
3- Aynı şekilde ben 0x03 adresini okumak için örneğin Spi_xfer(0x23); mü yazmam gerekiyor?
4-Ve 24- bit i mantıksal olarak nasıl okuyacağımı da anlayamadım :(

Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: samedkutuk - 26 Şubat 2020, 15:57:30
@devrecii  hocam bir de ccs c de result = spi_xfer(data)

result = spi_xfer(stream, data)

result = spi_xfer(stream, data, bits)
Şu şekilde bir kullanım var
Stream dediği SPI1 mi SPI2 mi o sanırım
birde data kısmından adres veya veri gönderebiliyoruz
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: devrecii - 26 Şubat 2020, 16:25:55
Yine çiple alakalı 12h gönderdiğin zaman adc bufferi okumak istediğini anlıyor çip ve sana 24biti 8 8 8 parça olarak gönderiyor ilk mesajımda var , bir de unutma bu çipde 1 adc var ve 1 tane adc sonucunun yazıldığı 24bit buffer var yani her giriş için ayrı register yok, registerler çipn hangi girişi hızı stup  vsvs ayarlamak için var.

result = spi_xfer(data)  eğer result çipten gelen veri ise doğrudur bu fonksiyon.


Aynı şekilde ben 0x03 adresini okumak için örneğin Spi_xfer(0x23);  bir seferde olmuyor ilk mesajımda var

cs pini 1 iken 0 yapıyorsun
result=Spi_xfer(0x23); 
///result ff olmalı kontrol amaçlı
result=Spi_xfer(0); 
///result 0x23 olmalı kontrol amaçlı
result=Spi_xfer(0); 
///result 3 nolu registerin değeri

cs pinini tekrar 1 yapmak zorundasın.
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: devrecii - 26 Şubat 2020, 16:34:24
Soru sorarken pdf dosyası linkini de paylaşırsan daha fazla kişiden cevap alabilirsin , kimse google gireyimde pdf bulayım diye uğraşmaz bu sitede  :)
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: samedkutuk - 26 Şubat 2020, 16:45:01
Alıntı yapılan: devrecii - 26 Şubat 2020, 16:25:55Yine çiple alakalı 12h gönderdiğin zaman adc bufferi okumak istediğini anlıyor çip ve sana 24biti 8 8 8 parça olarak gönderiyor ilk mesajımda var , bir de unutma bu çipde 1 adc var ve 1 tane adc sonucunun yazıldığı 24bit buffer var yani her giriş için ayrı register yok, registerler çipn hangi girişi hızı stup  vsvs ayarlamak için var.

result = spi_xfer(data)  eğer result çipten gelen veri ise doğrudur bu fonksiyon.


Aynı şekilde ben 0x03 adresini okumak için örneğin Spi_xfer(0x23);  bir seferde olmuyor ilk mesajımda var

cs pini 1 iken 0 yapıyorsun
result=Spi_xfer(0x23); 
///result ff olmalı kontrol amaçlı
result=Spi_xfer(0); 
///result 0x23 olmalı kontrol amaçlı
result=Spi_xfer(0); 
///result 3 nolu registerin değeri

cs pinini tekrar 1 yapmak zorundasın.

Hocam teşekkür ederim bu şekilde yaptığımda 32 bit result değişkeni tanımlamış olsam adc değerimi almış mı oluyorum yoksa 8 8 8 şeklinde 3 biti sıralı nasıl alacağım
datasheetlink;
[url]https://dosyayukle.club/fzc/ads1261.pdf (http://[url]https://dosyayukle.club/fzc/ads1261.pdf%5B/url%5D)[/url]
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: devrecii - 26 Şubat 2020, 17:06:39
Yok öyle değil şu şekilde

DRY pini plas üretiyorsa  adc değerini okumak için

int32 adcdeger=0;

cs pini 1 iken 0 yapıyorsun
result=Spi_xfer(0x12);
///result ff olmalı kontrol amaçlı
result=Spi_xfer(0);
///result 00x12 olmalı kontrol amaçlı
adcdeger=Spi_xfer(0);
adcdeger<<=8;   
adcdeger+=Spi_xfer(0);
adcdeger<<=8;
adcdeger+=Spi_xfer(0);



cs pinini tekrar 1 yapmak zorundasın.
Başlık: Ynt: CCS C ile spi haberleşme(ADS1261)
Gönderen: samedkutuk - 26 Şubat 2020, 17:32:47
Alıntı yapılan: devrecii - 26 Şubat 2020, 17:06:39Yok öyle değil şu şekilde

DRY pini plas üretiyorsa  adc değerini okumak için

int32 adcdeger=0;

cs pini 1 iken 0 yapıyorsun
result=Spi_xfer(0x12);
///result ff olmalı kontrol amaçlı
result=Spi_xfer(0);
///result 00x12 olmalı kontrol amaçlı
adcdeger=Spi_xfer(0);
adcdeger<<=8;   
adcdeger+=Spi_xfer(0);
adcdeger<<=8;
adcdeger+=Spi_xfer(0);



cs pinini tekrar 1 yapmak zorundasın.
@devrecii  hocam teşekkür ederim dediğiniz şekilde deneyeceğim bir de osiloskop ile kontrol edeyim spi hattının bilgi akışını