Difransiyel 22 Bit ADC

Başlatan mesmert, 10 Temmuz 2014, 14:35:59

mesmert



ADS1212 adc entegresini kullanmak istiyorum ama okuyacağım voltaj 0-5VDC yukardaki resimde okuduğum değerin + veya - olduğunu nasıl anlayacağımı anlayamadım bu konularla ilgili tecrübesi olan varsa paylaşabilirmi acaba 

Salih

İki seçenek var demek ki birinci seçenekte normal işaretli tam sayı mantığı.
Ek işlem yapmana gerek yok.
Gelen değeri işaretli tam sayı olarak tanımlayıp kullanacaksın.

Kabil ATICI

Fark girişli olduğu için - ve + girişlerin birbirine göre durumuna bağlı olarak değişir.

şimdi
- giriş 'e göre  + giriş pozitif ise bu durumda çıkış + değer olarak alınır.
+ giriş 'e göre  - giriş pozitif ise bu durumda çıkış - değer olarak alınır.

Burada Command Register (CMR) registerindeki DF format biti var bunu sen atama yaparak çıkışını ayarlayabiliyorsun.

ikini tümleyeni şeklinde DF=0 verirsen
7FFFFF        --------------->5V   (+giriş  - girişe göre pozitif)
7FFFFE
...                        pozitif değerler
000002
000001
000000 ------------------->0V  (+ ve - girişler aynı seviyede.)
FFFFFF
FFFFFE
FFFFFD
...                       negatif değerler
800002
800001
800000   ------------------>5V  (-giriş  + girişe göre pozitif)

Eğer DF=1 ise  binary olarak


FFFFFF   --------------->5V   (+giriş  - girişe göre pozitif)
FFFFFE
FFFFFD
...                       pozitif değerler
800002
800001
800000  ----------------->0V
7FFFFF       
7FFFFE
...                        Negatif değerler
000002
000001
000000  5V  (-giriş  + girişe göre pozitif)

Yani hangisini kullanacağını  Command Register (CMR) registerindeki DF format biti belirleyecek.
ambar7

mesmert

#3
ambar7 hocam cevap için teşekkürler siz bu entegre daha önce kullandınız mı?

Benim şöyle bir sıkıntım var girişlerini +=5V ve-=0V ile +=0V ve -=5V verip voltaj ölçtüğümde iki ölçüm arasında voltaj farkı çıkıyor.

Kabil ATICI

ADS1212 değil de benzerini kullandım.
http://elektronikvelemciler.blogspot.com.tr/2013/08/atmega8-ve-mcp3550-ile-lm35-termometre.html
gibi.

Size söylediğim şey zaten veri kağıdında yazıyor.
ambar7

mesmert

Adc okuduğum değer 0-5V ama bunu ekranda 5000.00 şeklinde göstermek istiyorum aşağıdaki kodun mantığı doğrumu dur.

    if(volt_adc<=0x3FFFFF)
    {

      ftemp=(500000./4194303.)*(float)volt_adc; //
      volt_deger=(unsigned long)ftemp;
        volt_eksi=0;
        volt_arti=1;
    }
 
    else if(volt_adc>0x3FFFFF)
    {      
      ftemp=0.;
      ftemp=(500000./4194303.)*(float)volt_adc; //
      wtemp=1000000.-ftemp;
      volt_deger=(unsigned long)wtemp;

        volt_eksi=1;
        volt_arti=0;
    }

Kabil ATICI

Sanırım DF=0 için ele alındın
0x3FFFFF nereden çıkardın.
0x7FFFFF olması gerek

dolayısı ile 4194303 iki katı olması gerekir.
1 tane bayrak kullansan yeter. Çünkü eksi durumu var veya yok. Üçüncü bir durum yok.

volt_adc -->unsigned olarak tanımlamışsındır.
ambar7

mesmert

DF=0 modu seçili kod aşağıdaki gibi mi olmalı

   if(volt_adc<=0x7FFFFF)
    {

      ftemp=(500000./8388606.)*(float)volt_adc; //
      volt_deger=(unsigned long)ftemp;
        volt_eksi=0;
        volt_arti=1;
    }

Kabil ATICI

evet.

        volt_eksi=0;
        volt_arti=1;
bunlardan sadece biri seç. İkisini birden gerek yok.
ambar7