Haberler:

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

Ana Menü

adc dönüşüm ve frekansları

Başlatan mokan, 21 Mayıs 2011, 13:33:53

mokan

Merhaba arkadaşlar,
       ADC dönüşümde kullanılan frekans bölme oranının yüksek veya düşük olmasının ne gibi bir farkı vardır? Çevrimin hassasiyetini etkiler mi? Yoksa sadece bitirme zamanını mı kısaltıyor? Ayrıca frekans bölme oranları (DIV_2 , DIV_8, DIV_32) tıpkı sayıcılardaki gibi pic'in 4'e böldüğü çalışma frekansını mı bölüyor ? Yoksa osilatör çıkışından gelen frekansı mı?
       Yardımcı olacak herkese şimdiden teşekkür ederim.


Tagli

Bölme oranı ne kadar düşük olursa o kadar hızlı dönüşüm yapar. Ancak, TAD'nin datasheet'te belirtilen değerden az veya fazla olmaması gerekiyor. Bu şartı sağlamak için bölme oranını yükseltmek veya düşürmek gerekebiliyor.

Bölme oranı doğrudan FOSC üzerinden hesaplanıyor, yani 4'e bölünmeden önceki değer ile.

Datasheet'te genelde referans alınabilecek bir tablo bulunuyor. Aşağıdaki tablo 18F2550'nin datasheet'inden:
[IMG]http://img692.imageshack.us/img692/212/adctablo.jpg[/img]
Gerçi biraz tersten oluşturmuşlar. Belirtilen minimum TAD 0.7 us olarak verilmiş. Örneğin PIC 48 MHz'de çalışıyor olsun. Bölme oranını 32 seçersek [(48E6)/32]-1 = 0.666 us yapıyor ki bu da istenen değerden düşük. Bu sebeple 32 kurtarmıyor, 64'e bölmek gerekiyor. Tablodaki değerler de örneğin 32'nin kurtaracağı azami hızı gösteriyor. Tabi 64 bölme oranıyla teorik olarak daha yüksek hız da desteklenir ama 48 MHz 18F2550'nin azami hızı olduğundan tabloda bu değere yer verilmiş. Normalde 91.43 MHz olmalıydı.
Gökçe Tağlıoğlu

mokan

şimdi 16f876'nın datasheet'ini inceledim.876 için minumum Tad değeri 1.6uS olarak verilmiş. Ben 4 mhz osc kullanacağım için 8Tosc altı bölme oranını kullanamıyorum. Ancak şöyle bir durum var; isis'de yaptığım simulasyonda 4mhz clock'da 2Tosc oranı çalışıyordu. Buradan şunu çıkartabiliyorum; Tad değeri altına düşmek çalışmaya engel değil fakat sağlıklı bir dönüşüm yapmıyor doğru muyum bu görüşte?

Tagli

Sanırım öyle. Az önce 16 MHz'de çalıştırdığım 18F452 ile birkaç deneme yaptım. Pot üzerinden gerilim okuyorum. Normalde bölme oranı 32'nin altında olmamalı. Ben 32, 16, 8, 4 ve 2'yi denedim. 16 ve 8'de hiç değişiklik yok gibi. 4 ve 2'de ise biraz oynadı. Örneğin 10 bitlik ölçümde, 2 oranıyla 512 okuduğum değer 32 oranıyla 504 oldu. Ama benim tavsiyem, önerilen değerlere uyulması.
Gökçe Tağlıoğlu

50Cal

#4
Alıntı yapılan: mokan - 21 Mayıs 2011, 16:20:18
şimdi 16f876'nın datasheet'ini inceledim.876 için minumum Tad değeri 1.6uS olarak verilmiş. Ben 4 mhz osc kullanacağım için 8Tosc altı bölme oranını kullanamıyorum. Ancak şöyle bir durum var; isis'de yaptığım simulasyonda 4mhz clock'da 2Tosc oranı çalışıyordu. Buradan şunu çıkartabiliyorum; Tad değeri altına düşmek çalışmaya engel değil fakat sağlıklı bir dönüşüm yapmıyor doğru muyum bu görüşte?

Evet doğru, şu an 20 mhzde f_osc'yi bölmeden kullanıyorum ve gayet düzgün adc işlemi gerçekleşiyor. Olması gerekenin 32 katı hızlı olduğu halde.
Tabi uygulamamda hassasiyet önemli olduğu için 32'ye bölerek kullanmayı düşünüyorum, biraz deneme yapıp ne kadar fark oluştuğuna bakacağım.

Düzeltme: Bu mesajda yazılanlar tamamen hayal ürünüdür.  :)

Tagli

Alıntı yapılan: 50Cal - 21 Mayıs 2011, 16:38:50şu an 20 mhzde f_osc'yi bölmeden kullanıyorum
Bunu nasıl yapıyorsun? Bölme oranı en az 2 değil mi? Gerçi PIC modeline göre değişiyor olabilir, ama baktığım birkaç datasheet'te en az 2 vardı bölme oranı olarak.
Gökçe Tağlıoğlu

mokan

Kullanacağım sistemde adc çevrim yaptığım kısımda zaman sıkıntım yok.Aslına bakarsanız adc çevrimde de hassasiyet sıkıntım yok 10bit yerine 8bit çözünürlük kullanıyorum zaten. Ama yinede uygulamada bir sorunla karşılamamak adına uygun değer olan 8Tosc yi kullanacağım. Şunu da merak ettim; 10bit veya 8bit kullanmam Tad'yi etkilemiyor galiba doğru mu? İngilizcem çok yeterli olmadığı için öyle bir kısım varsada datasheet'de anlayamadım.

Tagli

Etkilemez. Zaten 8 bit dönüşüm yapmak diye bir şey yok. Her durumda 10 bitlik dönüşüm yapıyor. Ama sen sonucun büyük 8 bitini kullanmış oluyorsun sadece. Erişimi kolaylaştırmak için veriyi iki register'a nasıl hizalayacağını seçebiliyorsun. Genelde, büyük 8 biti kullanacaksan sola hizalayıp sadece büyük register'ı okumak, 10 biti de kullanacaksan sağa hizalayıp iki register'ı da okuyup int olarak değerlendirmek yöntemleri tercih ediliyor.

Bu anlattıklarım 8 bitlik PIC'ler için (PIC16, PIC18 vs.) geçerli. PIC24 ve dsPIC'lerde durumun daha farklı ve karmaşık olduğunu biliyorum ama bunun haricinde bir bilgim ve deneyimim yok. Onlarda dönüşüm hassasiyeti seçilebiliyor, ve buna bağlı olarak eğer düşük çözünürlük seçilmişse aynı anda birden fazla kanalda tarama yapılabiliyor, yanlış hatırlamıyorsam tabi.
Gökçe Tağlıoğlu

mokan

Anladım. Çok teşekkür ederim yardımcı olduğun için tagli hocam. Çok iyi oldu bu bilgileri öğrenmem. İyi çalışmalar dilerim. 50cal hocam sana da teşekkür ederim.

50Cal

Alıntı yapılan: Tagli - 21 Mayıs 2011, 16:44:34
Alıntı yapılan: 50Cal - 21 Mayıs 2011, 16:38:50şu an 20 mhzde f_osc'yi bölmeden kullanıyorum
Bunu nasıl yapıyorsun? Bölme oranı en az 2 değil mi? Gerçi PIC modeline göre değişiyor olabilir, ama baktığım birkaç datasheet'te en az 2 vardı bölme oranı olarak.

Haklısın, güzel bi dikkatsizlik yapmışım.
clock internal seçmiştim ve sanki timer clock seçiminde internal dediğimizde bölme yapmadan dahili komut frekansını kullandığı gibi adcde de aynı şekilde bölme yapılmıyor gibi düşünmüşüm.

Yani bit başına min. süre 1.6 us iken ben dahili RC osilatörü kullanarak bit başına 4 us zaman ayırdığım için çok güzel adc okumaları elde ediyormuşum :D