12f675 ADC Sorunu

Başlatan ugurer, 05 Ekim 2017, 16:36:00

ugurer

Merhabalar arkadaşlar. 12f675 ile batarya voltajını okuyorum ve 13.5 V'a ulaştığı zaman bataryam tam kapasiteye ulaşıyor ve sarj işlemini bitiriyorum. Buraya kadar her şey güzel ayrıca fakat sorun yaşadığım olay şu aynı kart ve aynı programı kullandığım halde bazı işlemciler 12.4 V'ta sarjı kesiyor bazıları da 10 V'ta kesiyor. Direnç değerleri ve ADC pininin voltajlarını kontrol ettim onlar da problem yok. Ayrıca 12 voltta kesen karta diğer işlemciyi taktığım zaman 13.5 V'ta kesiyor yani donanımsal bir sıkıntı yok.
Problem işlemciden kaynaklanıyor yani. Fakat niye böyle bir şey yapıyor anlayamadım bir türlü konu hakkında fikri olan veya daha önceden böyle bir olayı tecrübe eden var mı ?

Tagli

Sorunlu işlemciler her seferinde aynı noktada mı kesiyorlar şarj işlemini?
Gökçe Tağlıoğlu

ugurer

Aynen. Resmen 3 model oldu elimde 13.4 V 12.5 V ve 10.2 V gibi. Değerlerde sapma var +-0.2 V civarı ama o sorun değil.

Tagli

Girişlerde gerilim bölücü kullanıyorsundur sanırım. Direnç değerleri nedir? Acaba fazla yüksek kaçmış olabilirler mi? Dirençlerden kaynaklanan empedans çok yüksek ise belki PIC'lerin analog girişlerindeki ufak empedans farkları ciddi dönüşüm farklarına neden olabilir.
Gökçe Tağlıoğlu

ugurer

Aynen girişte 10k ve 3.3k ile gerilim bölücü kullanıyorum. Fakat aynı devre'ye diğer işlemciyi taktığım zaman değer değişiyor yani 12 V'ta kapatan devreye 10V'ta kapatan işlemci taktığım zaman değer değişiyor. Yani problem işlemcide anladığım kadarıyla.

zenze

adc için ref gerilimin sağlıklı değildir.?

ugurer

Tamam o da kabul ama üç çeşit değer olması kafamı karıştırıyor. Her birinde farklı değer olsa tamam diyeceğim yada değerler alakasız olsa sorun değil ama 3 tip sonuç alıyorum devamlı olarak.

Erol YILMAZ


JOKERAS


Bu normal bir durum.
Çünkü tüm yarı iletkenler tek kalıptan çıksa bile değerleri farklılık gösterir.
Mesela İşlemcinin İç osilatörü sizin set değerinizde olmayacaktır.
Siz 4Mhz ayarlarsınız fakat bu her işlemcide farklı +/- değerler verir.
İşte onun için işlemcilere OSC Tuning, OSC Calibrasyon gibi registerler koymuşlar.
Bu registerle Frekansı olabilecek en yakın noktaya ayarlamaya,set etmeye çalışmışlar.


İç osilatör frekansı kayınca doğal olarak Real Time bozuluyor veya farklılık gösteriyor.
Adc ile okuduğunuz örneklediğiniz veriler, yazdığınız kodların instruction süreleri
etkileniyor.


Bir de şöyle bir durum var.
Adc referansı fix bir değer olmalı,olmalıki tam aynı değeri karşılaştırıp değer üretsin.
Bunun için Yeni nesil Piclerde FVR(Fixed Voltage Regülatör) denen bir devreyi işlemciye gömmüşler.
Araştırın.


Siz  önce farklı değer veren Piclere yüklediğiniz yazılıma OSCCAL Veya OSCTUNE registeri neyse
o registerlerin değerini aşağı yukarı değiştirip durumu gözlemleyin.
Eğerki farklılık oluyorsa sorun OSC kalibrasyonunda.
Tabii seri üretim mantığında her Pic'i tek tek kalibre etmek çok sıkıntı olur.
Onun için şöyle bir şey vardı,Yazılım yükleme pgm'ında OSCCAL diye bir kutucuk oluyordu.Onu işaretlediğinizde
olması muhtemel en yakın değer ile İşlemciği otmatik kalibre ediyordu.
Bunu da şu şekilde yapıyordu.İşlemci içierisindeki ROM veya Eeprom'a Kalibre değerini İmalat esnasında gömüyorlardı.
O değer otomatik olarak OSCCAL registerine yükleniyordu.


Diğer bir yöntem,okuduğunuz değeri kodunuzda sorgulayarak belli bir Range'te,aralıkta olup olmadığını sorgulamak.
"Eğer Adc değeri şundan küçük bundan da büyükse Bu yaklaşık değerdir" diyerek.

































Maxim

12F675 lerdeki OSCCAL olayı doğru
ben çok rastladım hiç kullanılmamış ama oscal değeri hatalı 12F675
pickit2 ile otomatik olarak yaratabiliyorsunuz bunu, sonra devam

ugurer

Gerçekten çok teşekkür ederim. Hayatta aklıma gelmezdi böyle bir sıkıntı olacağı hem şimdi hem de sonraki projelerimde gözlemleyeceğim bir problem. Yardım eden herkese çok teşekkür ederim.

OG

"İmalat farklılığından" meselesi doğru bir yaklaşım olarak gelmiyor bana, çünkü voltajlar çok farklı.
Gerilim bölücüleri çok büyük değerlerde seçmiş olmayasınız. ADC girişi için yüksek direnç değerleri kullanmak hatalı ölçümlere sebep olabilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ugurer

Ama hocam 3 farklı değer oluşuyor elimde yaklaşık 50 kartta denedim bu durumu. Direnç sıkıntısı olsa farklı farklı değerler oluşur diye düşünüyorum.

ÜC

Pic ler ozdisandan mi?

Özdisan piclerde problemmi var Allegro hocam ?

Timucin

Merhaba;

Alıntı YapThe A/D process takes 9.5 TAD times to complete. 
If TAD is too short, then the switched capacitors in the A/Dconverter do not have enough time to fully charge up, so the apparent measured
voltage may be inaccurate. 
The A/D clock is derived from the CPU clock by a selectable prescaler, or by an RC oscillator.

Programınız minimum TAD ve Acquisition Time değerlerini sağlıyor mu? CHOLD'u yeterince dolduramıyor olabilir misiniz?
Datasheet'de Minimum Acquisition Time = 19,72 microsec veriyor (Datasheet Page 45 Equation 7-1)
Bu şu demek, her ADC ölçümü öncesi en az 19,72 microsaniye beklemek gerekiyor ki CHOLD'u yeterince dolsun.

Datasheet'den alınmadır !.. (Page 41)
Alıntı Yap7.1.4 CONVERSION CLOCK
The A/D conversion cycle requires 11 TAD. The source
of the conversion clock is software selectable via the
ADCS bits (ANSEL<6:4>). There are seven possible
clock options:
• FOSC/2
• FOSC/4
• FOSC/8
• FOSC/16
• FOSC/32
• FOSC/64
• FRC (dedicated internal RC oscillator)
For correct conversion, the A/D conversion clock
(1/TAD) must be selected to ensure a minimum TAD of 1.6 μs.
Table 7-1 shows a few TAD calculations for selected frequencies

ANSEL Register'ındaki bit 6-4 seçiminizin minimum TAD değeri olan 1,6 microsaniyenin altına düşmediğinden emin olmak gerek

Saygılarımla
Timuçin