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ı ?
Sorunlu işlemciler her seferinde aynı noktada mı kesiyorlar şarj işlemini?
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.
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.
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.
adc için ref gerilimin sağlıklı değildir.?
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.
Pic ler ozdisandan mi?
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.
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
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.
"İ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.
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.
Pic ler ozdisandan mi?
Özdisan piclerde problemmi var Allegro hocam ?
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? C
HOLD'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 C
HOLD'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
Hocam kusura bakmayın araya kaynamış o mesaj. Nereden aldığımızı bilmiyorum ürünleri eski bir tasarım zaten. Kullanılan yerlerden böyle batarya dolmuyor şikayeti gelince fark ettik durumu.
Konuyu takipteyim.Sorunu çözersen bilgilendirir misin?
Tabi hocam bugün deneme şansım olmadı ilk fırsatta kalibrasyon kısmını halledeceğim.
Maalesef bir değişiklik olmadı daha doğrusu yazılım atarken zaten kalibrasyon yapıyormuşuz yeni fark ettim o durumu.
Yazılımı atarken kalibrasyon nasıl yapıyorsunuz?
ADC min örnekleme süresini sağladınız mı?
Alıntı Yap
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.
Burada
@JOKERAS 'ın dediği gibi program yüklerken ki register değerlerine baktık bunu sabit olarak maksimum değer olan 3FFF olarak yüklemişiz.
ugurer, 3FFF olmaz.
Eğer İşlemciyi okuduğunuzda Rom'un en son hücresindeki değer 3FFF ise
İşlemci sıfır değil,yani daha önce Pgm yüklenmiş işlemcidir.
Yükleme pgm'ında Kalibrasyon işaretli şekilde yükleme yapılmayan işlemci Rom'u doğal olarak
silinir.Silmekten kasıt 3FFF olması.Halbuki ilk değerin 3F değilde 34 olması gerektiği,bunun RetLw komutu olduğunu
Alltaki Linkte ifade ediyor.
Siz hiç pgm yüklenmemiş işlemciler ile bunu test edeceksiniz.
Şöyle düşünün...
Sıfır bir işlemciye Kalibrasyon işaretli bir şekilde pgm atarsanız,Rom'un Son hücresindeki değerin
kopyalanıp OSCCAL registerine yüklendiğini düşünün.
Yükleme pgm'ında bunu yapmazsanız doğal olarak Değer siliniyor.
OSCCAL işratelenmden Pgm atılmış işlemcilerde bunu manuel olarak deneye deneye bulacaksınız.
Çünkü kalibrasyon değeri bir kere uçtu,geri getirmek imkansız!
Deneyin.
İngilizce'si sağlam arkadaşlar buradan okuyup yorumlayabilir.
http://picprojects.org.uk/projects/piccal.htm (http://picprojects.org.uk/projects/piccal.htm)
Hmm o zaman durum apayrı. Ben 3F değerini görünce aşağıda ki görselle uyumlu diğer FF'de tamamlamak için diye düşünmüştüm çok yanlış anlamışım durumu. Deneye deneye bulacaksınız'dan kasıt programlayıcı kısmından değer yazmak değil mi. Datasheet'te yazmam gereken değer belirtilmiş anladığım kadarıyla niye farklı değerler denemem gerekiyor.
(https://s1.postimg.cc/9pq9rvg6y3/Ekran_Al_nt_s.png) (https://postimg.cc/image/9pq9rvg6y3/)
Daha doğrusu şöyle bir toparlayayım benim şu an denediğim şey osilatör frekansının yanlış olabileceği ve bunu durumu düzeltmek için register değeri ile kalibrasyon yapmak. Bu kalibrasyonu da ister direk yazılımla istersem de programlama sırasında OSCCAL register'ına değer girerek yapabiliyorum. Bu değer de datasheet'te yazdığı gibi 0x9F. He bir de bu işlemi sıfır çiplerle deneyeceğim eğer bu şekilde program attıklarımda sorun yoksa problem buradaymış diyeceğim. Doğru mu anlamışım.
Alıntı yapılan: ugurer - 07 Ekim 2017, 14:26:36
Daha doğrusu şöyle bir toparlayayım benim şu an denediğim şey osilatör frekansının yanlış olabileceği ve bunu durumu düzeltmek için register değeri ile kalibrasyon yapmak. Bu kalibrasyonu da ister direk yazılımla istersem de programlama sırasında OSCCAL register'ına değer girerek yapabiliyorum. Bu değer de datasheet'te yazdığı gibi 0x9F. He bir de bu işlemi sıfır çiplerle deneyeceğim eğer bu şekilde program attıklarımda sorun yoksa problem buradaymış diyeceğim. Doğru mu anlamışım.
Aynen öyle.
Siz kodunuza OSCCAL = 0x Test edilecek değerler;
yazıp deneyin.Bakın farklılık varmı?
Sıfır Hiç pgm yüklenmemiş işlemci kullanıyorsanız OSC Kalibrasyon işaretleyin otomatik kalibre olsun.
Tamamdır hocam en kısa sürede deneyip geri dönüş yapacağım. Yorumlarınız için teşekkürler.
Güzel anlatmış. binary değeri saklama yöntemi bayağı ilginç.
Yeni PIC'i oku, enson adreste ki 34xx deki xx i binary çevir ve pinlere işaretle.
Tekrardan merhabalar. Eski işlemcilerin hex kodlarını okuduğumda dediğim gibi kalibrasyon değerlerini silmişiz farkında olmadan. Onlara tekrar kalibrasyon yapalım diye uğraşmadk ama yeni işlemcilere kalibrasyon değerlerini ekleyerek yazılım attık. 60 tane kartta denedim şuan için bir problem gözükmüyor. Konuyla ilgilenen ve destek veren herkese teşekkür ederim.