adc nedir etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Merhabalar,
Eski yazılarılarımızda arduino üzerinde dijital giriş ve çıkışlardan bahsetmiştik.Bu yazımızda ise artık analog dünyasına giriş yapacağız.
Analog nedir ?
Analog değer zamana bağlı olarak gerek voltaj ve akım olarak değişkenlik gösteren bir veridir.Bir sıcaklık sensörü ele alalım bu sensör bize çıkışında analog veri olarak 0-10V aralığında veri veriyor ve sıcaklık sensörümüzün çalışma aralığı da 0 - 80 derece olsun.Bu durumda bu sıcaklık sensörü bize 0 derecede 0 voltaj ve 80 derecede ise 10 V değerini verecektir.Yani bize analog değerlerini gönderecektir.
Elinizde bir arduino var ise modeline göre sayısı değişebilir A0 dan başlayarak devam eden pinleriniz sizin analog değer okuma amacı ile kullanabileceğiniz pinlerdir(bu pinler aynı zaman dijital giriş çıkış birimi olarak da kullanılabilmektedir.)
Gelelim can alıcı soruya ?
Bize analog değer geldi peki bunu arduino nasıl algılar ve bize nasıl iletir?
Bu noktada ADC ler devreye girer.Analog to digital converter yani analog dijital çeviriciler, girişlerine gelen analog değerleri çözünürlükleri doğrultusunda dijital veriye çevirerek bizim kullanabileceğimiz hale getirirler.Burada dikkat edilmesi gereken husus çözünürlükleri doğrultusunda lakin birçok çözünürlüke ADC entegreleri bulunmakta ve arduino uno üzerinde 10 bit çözünürlüğe sahip bir ADC bulunmaktadır.
Peki nedir bu 10 bit olayı ?
Sıcaklık sensörü örneğimizi tekrar ele alaım :)
0-80 derece aralığında bize 0-10V veren sensörümüz adc tarafında okunduğunda 10V olarak 80 derecenin adc nin girişine gelmesi ile birlikte adc bunu 10 bitlik veri düzeninde 1024 olarak bize sunacaktır.Bit değeri ne kadar artar ise analog verinin dijitale çevrimi o kadar hassaslaşır.
Bugun örneğimizde ise bir potansiyometre üzerinden analog girişimize gelen veriyi nasıl işleriz konusunu ele alacağız.
Yukarıdaki şekilde potansiyometre çeşitleri görülmektedir.Potansiyometre ayarlanabilir probu ile direnci değiştirilebilen bir elemandır.Kendisinin bir maksimum değeri vardır ve bu değer ile satın alınılır.Ayarlanabilir probu ile de kedisinin maksimum değerine kadar direnci arttırabilir ya da minimum değere kadar azaltabilirsiniz.
Biz potansiyometre üzeriden 5V değerimizi geçireceğiz ve prob üzerinden verdiğimiz her değişimde analog girişte farklı bir voltaj ve dolayısı ile adc üzerinden farklı dijital değerler okumayı ve yorumlamayı amaçlayacağız.
Yukarıdaki şemada görüldüğü üzere 5V potansiyometre üzerinden geçirildi ve arduinomuzun A0 analog pinine bağlandı.
Arduino Ide analog pine gelen değeri okuyabilmemiz için analogRead() fonksiyonunu bulundurmaktadır.Bu fonksiyon içerisinde okumak istediğimiz analog pin tanımı yazarak, o analog pine gelen verinin dijital halini adc üzerinde 0-1024 değeri aralığında okuyabilir hale geliriz.
Biz bu örneke analogRead(A0); ile veriyi okumaya çalışacağız.
Gelelim kodlarımıza
int sensor_degeri=0;// sensörden gelen verimizi içinde tutacağımız değişken
void setup()
{
Serial.begin(9600);// aynı zamanda verileri seri ekrana bastırıp buradan da izlemeyi amaçlıyoruz.
}
void loop()
{
sensor_degeri=analogRead(A0);// adc üzerinden sensör değerini aldık ve sensor_degeri değişkenine atadık
Serial.print("sensor degeri:");// seri ekrana sensor degeri: yazdırdık
Serial.println(sensor_degeri);//seri ekrana okuduğumuz sensör değerini yazdırdık.
delay(100);//daha iyi görebilmek ve anlık değişimleri göz ardı etmek adına 100ms gecikme tanımladık.
}
Bir sonraki yazımızda piezoelektrik uygulaması ile yeniden karşınızda olacağız.
Eski yazılarılarımızda arduino üzerinde dijital giriş ve çıkışlardan bahsetmiştik.Bu yazımızda ise artık analog dünyasına giriş yapacağız.
Analog nedir ?
Analog değer zamana bağlı olarak gerek voltaj ve akım olarak değişkenlik gösteren bir veridir.Bir sıcaklık sensörü ele alalım bu sensör bize çıkışında analog veri olarak 0-10V aralığında veri veriyor ve sıcaklık sensörümüzün çalışma aralığı da 0 - 80 derece olsun.Bu durumda bu sıcaklık sensörü bize 0 derecede 0 voltaj ve 80 derecede ise 10 V değerini verecektir.Yani bize analog değerlerini gönderecektir.
Elinizde bir arduino var ise modeline göre sayısı değişebilir A0 dan başlayarak devam eden pinleriniz sizin analog değer okuma amacı ile kullanabileceğiniz pinlerdir(bu pinler aynı zaman dijital giriş çıkış birimi olarak da kullanılabilmektedir.)
Gelelim can alıcı soruya ?
Bize analog değer geldi peki bunu arduino nasıl algılar ve bize nasıl iletir?
Bu noktada ADC ler devreye girer.Analog to digital converter yani analog dijital çeviriciler, girişlerine gelen analog değerleri çözünürlükleri doğrultusunda dijital veriye çevirerek bizim kullanabileceğimiz hale getirirler.Burada dikkat edilmesi gereken husus çözünürlükleri doğrultusunda lakin birçok çözünürlüke ADC entegreleri bulunmakta ve arduino uno üzerinde 10 bit çözünürlüğe sahip bir ADC bulunmaktadır.
Peki nedir bu 10 bit olayı ?
Sıcaklık sensörü örneğimizi tekrar ele alaım :)
0-80 derece aralığında bize 0-10V veren sensörümüz adc tarafında okunduğunda 10V olarak 80 derecenin adc nin girişine gelmesi ile birlikte adc bunu 10 bitlik veri düzeninde 1024 olarak bize sunacaktır.Bit değeri ne kadar artar ise analog verinin dijitale çevrimi o kadar hassaslaşır.
Bugun örneğimizde ise bir potansiyometre üzerinden analog girişimize gelen veriyi nasıl işleriz konusunu ele alacağız.
Biz potansiyometre üzeriden 5V değerimizi geçireceğiz ve prob üzerinden verdiğimiz her değişimde analog girişte farklı bir voltaj ve dolayısı ile adc üzerinden farklı dijital değerler okumayı ve yorumlamayı amaçlayacağız.
Yukarıdaki şemada görüldüğü üzere 5V potansiyometre üzerinden geçirildi ve arduinomuzun A0 analog pinine bağlandı.
Arduino Ide analog pine gelen değeri okuyabilmemiz için analogRead() fonksiyonunu bulundurmaktadır.Bu fonksiyon içerisinde okumak istediğimiz analog pin tanımı yazarak, o analog pine gelen verinin dijital halini adc üzerinde 0-1024 değeri aralığında okuyabilir hale geliriz.
Biz bu örneke analogRead(A0); ile veriyi okumaya çalışacağız.
Gelelim kodlarımıza
int sensor_degeri=0;// sensörden gelen verimizi içinde tutacağımız değişken
void setup()
{
Serial.begin(9600);// aynı zamanda verileri seri ekrana bastırıp buradan da izlemeyi amaçlıyoruz.
}
void loop()
{
sensor_degeri=analogRead(A0);// adc üzerinden sensör değerini aldık ve sensor_degeri değişkenine atadık
Serial.print("sensor degeri:");// seri ekrana sensor degeri: yazdırdık
Serial.println(sensor_degeri);//seri ekrana okuduğumuz sensör değerini yazdırdık.
delay(100);//daha iyi görebilmek ve anlık değişimleri göz ardı etmek adına 100ms gecikme tanımladık.
}
Bir sonraki yazımızda piezoelektrik uygulaması ile yeniden karşınızda olacağız.
PİC PROGRAMLAMA -14
Dogada bulunan tüm sistemler analog düzendedir.Bizim
kullanıdıgımız entegreler ise dijital düzendedir.Bu analog
sistemlerden(ışık,ses,sıcaklık...) veri almak için bunları dijitale dönüştürmek
gerekir.Bu işlem için ADC entegreleri kullanılır.Pic 16f877 de adc modulü
bulunmaktadır.Şekilde gösterilmiştir.
.n bitlik bir adc en fazla 2^n kadar analog
veri örnekleyebilir.Bu örnekleme sayısı adc'nin çözünürlügü olur.Çözünürlük ne
kadar yüksekse o kadar iyi bir dönüştürme olur.Adc nin dijital büyüklüge
dönüştürülecegi en küçük birime ise adım büyüklügü denir.
Adım büyükügü=(Vref(+)-Vref(-))/(2^n) ile hesaplanır.
ADC KOMUTLARI:
-Setup_adc()=Bu komut ile adc kapatılır,açılır veya frekans degeri belirlernir.
-Setup_adc_ports(x)=Bu komut ile analog giriş komutlarına
karar verir.Bu komut yani x degişkeni kullanılan
denetleyiciye göre degişir.
-Set_adc_channel(x)=Bu komut ile okuma yapacagımız kanal
seçilir.X degişkeni yerine şunlar yazılır;
0=RA0,1=RA1,2=RA2,3=RA3,4=RA5,5=RE0,6=RE1,7=RE2
örnegin;set_adc_channel(0) gibi
-read_adc()=Bu komut ile analog veri okuması yapılır.Bu
komuttan önce üstteki komutlar kesinlikle tanımlanmalıdır.
örnegin; setup_adc(adc_clock_div_32)//adc frekansı osiloskop
frekansı/32 degerindedir
setup_adc_ports(all_analog)//tüm
portlar analog giriştedir.
set_adc_channel(0)//RA0
pininden okuma yapılacak
veri=read_adc()//RA0
pininde okunan analog sinyal okunur
Not=read_adc(adc_start_and_read) komutu ile read_adc()
komutu aynı görevi görür.
Gelelim uygulamamıza;
#use
delay(clock=4000000)//pic frekans degeri
#define use_portd_lcd true//lcd'mizin d portuna baglı
#include <lcd.c>//lcd kütüphanesi
long int veri=0;
float sayi;
void main()
{
set_tris_b(0*00);
output_b(0*00);
setup_adc(adc_clock_div_32);//F_adc=F_pic/32
set_adc_channel(0);//RA0
pininden okuma yapılacak
delay_us(20);//Kanal
seçiminden sonra muhakkak konmalıdır.
lcd_init();//lcd
hazırlanıyor
printf(lcd_putc,"\fPOTANSIYOMETRE\nUYGULAMASI");//ekrana
yazdırılıyor
delay_ms(1000);//1
saniye bekleniyor
while(true)
{
veri=read_adc(adc_start_And_read);//kanal 0 daki deger okunur ve veri
degişkeninin içine atılır.
if(veri>240)output_b(0b11111111);//veri degeri 240 tan büyükse B
portunun hepsini yak
else
if(veri>210)output_b(0b01111111);//veri degeri 210 dan büyükse B portunun
sadece RB7 yanmasın
else
if(veri>180)output_b(0b00111111);//veri degeri 180 den büyükse B portunda
RB7 ve RB6 yanmasın
else
if(veri>150)output_b(0b00011111);//RB7,RB6,RB5 yanmasın
else
if(veri>120)output_b(0b00001111);// RB7,RB6,RB5,RB4 yanmasın
else
if(veri>90)output_b(0b00000111); //RB7,RB6,RB5,RB4,RB3 yanmasın
else
if(veri>60)output_b(0b00000011); //RB7,RB6,RB5,RB4,RB3,RB2 yanmasın
else
if(veri>30)output_b(0b00000001); //RB7,RB6,RB5,RB4,RB3,RB2,RB1 yanmasın
else
if(veri>0)output_b(0b00000000);// RB7,RB6,RB5,RB4,RB3,RB2,RB1,RB0 yanmasın
sayi=veri*0.01953;//veri
degerimizin dijital ortamdaki karşılıgını bulduk.Bunu yaparken şu yolu
izledik.8 bit üzerinde işlem yaptıgım için; (5-0)/(2^8)=0.01953 .sonra veri degişkeni ile de bu ifadeyi
çarptım
printf(lcd_putc,"\fVoltaj=%f V",sayi);//ekrana yazdırdım
delay_ms(1000); //1 sn bekledim
}
setup_psp(PSP_DISABLED);//psp devre dışı
setup_spi(SPI_SS_DISABLED);//spı devre dışı
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);//timer0 devre dışı
setup_timer_1(T1_DISABLED);//timer1 devre dışı
setup_timer_2(T2_DISABLED,0,1);//timer2 devre dışı
}