Pic adc aslında 10 bit, olup 8 bit sonuç programla mı oluyor?

Başlatan t2, 02 Haziran 2012, 20:50:33

t2

Daha önce Proton adin  komutuyla  çözünürlüğü 8 bit  ayarlamıştım.

Örnekleme süresini kısaltmak amacıyla protonun kendi komutunu değil de ADCON0.1 kullanarak okumayı başlatmak ve sonra da adresh, adresl register larından sonucu okumak istedim.

Fakat yanlış anlamadıysam aslında 8 bit diye bir sonuç yok. sonuç 10 bit. acaba protonda  adin  kullandığımız  zaman aslında 10 bit okunuyor da sonradan 8 bite mi dönüşüyor?


emregenc

kaç bitlik adc ölçümü deniyorsun
protonda 8 bit adc ölçümünde herhangi bir sorun yaşamadım
ama 10 bit adc ölçümlerde sorun yaşıyor
yazdığın kodu paylaşırsan ona göre yorum yapabilirz

serhat1990

Alıntı yapılan: t2 - 02 Haziran 2012, 20:50:33
Daha önce Proton adin  komutuyla  çözünürlüğü 8 bit  ayarlamıştım.

Örnekleme süresini kısaltmak amacıyla protonun kendi komutunu değil de ADCON0.1 kullanarak okumayı başlatmak ve sonra da adresh, adresl register larından sonucu okumak istedim.

Fakat yanlış anlamadıysam aslında 8 bit diye bir sonuç yok. sonuç 10 bit. acaba protonda  adin  kullandığımız  zaman aslında 10 bit okunuyor da sonradan 8 bite mi dönüşüyor?

Hocam benim bildiğim 8 bit sonuç isteyince 10 bit olan sonuç 2 bit sağa kaydırılıyor. En sondaki 2 bit önemsiz oluyor zaten düşük değerlikli olduğundan pek sorun olmuyor. Kolay Gelsin iyi çalışmalar...

pea

Datasheet'i okumak lazım :)
8 bit Pic'lerde , ADRESL ve ADRESH olmak üzere 2 adet 8'er bitli ADC sonuç register'ı var.
ADRESL'de , çevrim sonucunun düşük anlamlı bitleri , ADRESH'ta 2 adet yüksek anlamlı bit'i var.
Ancak , kontrol register'ında (ADCON1) bir bit'i(7. bit) değiştirerek , right justified ya da left justified olarak sonuç yazılıyor.Buradaki seçime göre yukarıda yazdığım şekilde , ya da tam tersi olarak sonuç saklanıyor.

10bit'lik sonuç istenirse , bu iki register birleştiriliyor.
8bit'lik sonuç istenirse , ADCON1'in 7. bit'i 0 yapılarak , sonuç sola yapıştırılıyor.ADRESH register'ında yüksek anlamlı bitler oluyor.ADRESL register'ında da 2 adet düşük anlamlı bit kalıyor.8 bit sonuç için ADRESH register'ı okunuyor , ADRESL okunmuyor.

Örnekleme süresini kısaltmak için komutları değiştirmeyi değil de , örneklenecek kaynağın empedansını azaltmanızı öneririm.

t2

Datasheet'i zaten okudum. Buradan anladığım, aslında 8 bitlik sonuç yok. sonuç hep 10 bitlik. sağa bitişik sola bitişik ayrı konu. Ama sonuç 10 bitlik. Emin olmak için sordum. sonucu 2 bit sağa kaydırıyoruz 4e bölmüş oluyoruz 8 bitlik sonuç elde ediyoruz. Fakat aslında 10 bitlik işlem yapılmış sonuç bulunmuştu

Eren Eraslan

bende bir projede adc yi 10 bitlik ayarlamışım konfigurasyon ayarlarında ama int değişkenim default olarak 8 bit olduğundan okuma yaptığında taşma yapıyordu cok saçma değerler okuyordu..
ama int16 diye değişkeni tanımlarsan istedğin kadar oku taşma olmaz :)
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

OG

Alıntı yapılan: t2 - 03 Haziran 2012, 12:29:08
Datasheet'i zaten okudum. Buradan anladığım, aslında 8 bitlik sonuç yok. sonuç hep 10 bitlik. sağa bitişik sola bitişik ayrı konu. Ama sonuç 10 bitlik.
Evet, donanımı 10 bit olduğundan hep 10 bit büyüklük hazır oluyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Pyrodigy

Alıntı yapılan: t2 - 03 Haziran 2012, 12:29:08
Datasheet'i zaten okudum. Buradan anladığım, aslında 8 bitlik sonuç yok.
donanım 10 bitlik diye illede 10 bitlik olarak işlemek zorunda değilsin. Gerilim bölücü ile ADC pinine uygulanan gerilimi şu formülle özetlersek
Okumak istediğin değer * (R2 / (R1+R2)) / (Vref / 255) = ADC değeri
Okumak istediğin değer * (3.3 / (10+3.3)) / (5 / 255) = ADC değeri
Örnek uygulama:  14.5 volt x 0.248 / 0.01961 = 183  (hex 0xB7)

Burada 255 desimal yani 8 bitlik değer olarak okur ve değerlendirirsin. Bunu 1023 ile yer değiştirerek 10 bitlik değere pay edebilirsin.
Saygılar
Persistance is the name of the game in this business....