16f877a 65 K direnç ADC okuma

Başlatan blueboard, 11 Aralık 2017, 13:44:47

blueboard

Ete Hocah, elimdeki devrede 7 farklı butondan 7 farklı direnç değeri geliyor. Gelen dirençlerden en düşük olanının değeri 500 ohm, en yüksek olanı ise 65 K Ohm. 65 K ohm luk direnci ADC çevrim ile okuyup ilgili pin çıkışından high elde etmek istiyorum. Ancak 65 K direnç değerinin sanırım yüksek bir değer olmasından kaynaklanıyor olmalı bu değeri gerçek devrede okuyamıyorum. İsis'te eklediğim devrede olduğu şekilde 5 volt tarafına 22K direnç takıyorum, 65 K olan dirence kadar olan diğer dirençleri rahatlıkla okuyabiliyorum ve istediğim portu high konumuna alabiliyorum. Ama sıra 65 K dirence gelince isis'te sorunsuzca çalışmasına rağmen gerçek devrede çalışmıyor. Gerçek devremde sorun olsa diğer direnç okumalarda da aynı sorunu yaşamam gerekirdi  ama 500 ohm, 3k3 , 7k9 , 17 k , 23 k dirençlerini okumada hiç bir sorun yok.Deneme amaçlı  5 volt tarafına 1 k, 6k8, 12 k dirençler bağladım. Tamamında 65 K direnci okumaya kadar sorun yok , 65 K 'yı okumaya gelince çalışmıyor. 10 Bit ADC okuma yapıyorum. Yardımcı olabilir misiniz? Teşekkür ederim.

Maxim

o şekilde pice 3.7 volt geliyor, anormal bir durum yok
yazılımda sıkıntı vardır

blueboard

#2
Şu an dışardayım, yazılımı akşama yükleyebilirim. Ancak anlamadığım şu: yazılımda sıkıntı varsa 23 k 'ya kadar olan direnç değerlerini de okumaması ve ilgili pini high konumuna almaması gerekirdi. Oysa hem isi'te hem de gerçek devrede 23 K değerine kadar olan okumalarda sorun yok.

ete

Büyük değerlikli KOHM seviyesindeki dirençleri tolerans nedeni ile sorunlu olarak okuyabilirsin. Ama sonuçta okursun.
Sen ise yalnızca okuyamıyorum demişsin iyide ne oluyorda okuyamıyorsun. ADC den bir değermi gelmiyor ne oluyor sorunun aslı nedir?
O direnci bir ölçü aleti ile okuyabilirsin Böylelikle yanlış değerlendirdiğin bir direnç olabilir. 65K değilde 650K lık bir direnç olabilir.
Ete

blueboard

Ete Hocam, akşama programı buraya yükleyeyim.

blueboard

#5
Ete hocam, bu akşam aynı programı 16f1827 için yazdım ve devreyi kurdum, sonuç aynı 65 k direncin bağlı olduğu butona basıldığında isis'te program çalışıyor ama gerçek devrede çalışmıyor. Diğer butonlarda sorun yok, gerçek devrede de çalışıyorlar.  Teşekkür ederim.

ete

Sorunun kaynağının referans voltajına bağlı olarak limitlerin değişmesi olduğunu düşünüyorum.
Anlamak için okunan değeri eproma yazdırıp sonra işlemciyi programlayıcıya takarak epromdaki değeri okumak gerekir.
Böylece 65K lık direncin hangi HAMA değerini verdiğini oradan kolaylıkla görebiliriz.
Bu iş için sırası ile aşağıdakileri yerine getirmeye çalış
1. BASLA satırından sonra yer alan PAUSE 100 komutunu en alta yerleştir. Yani GOTO BASLA satırından bir evvelki konuma.
2.Aşağıda verdiğim satırları ise PASUE 100 satırından bir evvelki konuma yerleştir.
IF HAMA<1000 THEN
  WRITE $08,HAMA.BYTE1,HAMA.BYTE0
ENDIF
3. Programı pic'e yükle ve devreyi çalıştır.
4. Yaklaşık 30 sn bekle her şey stabil hale gelsin.
5. Ardından yalnıca 7. ci butona yani 65K nın butonuna basıp bırak.
6. devreyi kapat işlemciyi yerinden sök ve programlayıcıya tak.
7. Epromda 2. satırda (08 nolu adresten itibaren) 2 byte bilgiyi bir yere yaz.
Bu bilgi 65K karşılığında okunan HAMA değeridir. Bak bakalım senin belirttiğin gibi 665 ile 765 aralığında bir değermidir.
Bu aşamadan sonra gerekirse gerçek devrende bu işlemi bütün tuşlar için yapabilir ve gerçek değer aralıklarını tespit edebilirsin.
İsis de neden çalışıyor diyebilirsin. İsis besleme voltajını tam tamına 5V kabul ediyor. Gerçekte bu biraz farklı olabiliyor.
Şayet besleme voltajın 4,98 V ise bu voltaja karşılık gelen ADC değerin 1023 olur. Dolayısıyla gerilim bölücülerin böldüğü voltaj aralıkları şaşabilir. Sende de muhtemelen benzer bir durum oluşuyor. Alt direnç aralıkları yaklaşık olarak tutuyor ama üst noktaya gelince şaşıyordur. Dediklerimi yapınca öğreneceksin bunu.

Ete


Maxim

bence böyle birşey olması imkansız
kesin program doğruysa devrede hata vardır
ya direnç değeri yanlıştır ya başka birşey vardır
ve hep öyle çıkar sonunda :)

siz şunu denedinizmi hiç?
gerçek devrede 22k + 65k hattına bir ölçü aleti takıp pice 3.7 volt girdiğini gördünüzmü?
yani AN analog girişine gerçekten 3.7 volt geliyor ama pic bunu ölçmüyormu yani?

blueboard

#8
Akşama gerilimi ölçeyim. Ancak şunu belirtmek isterim; devrede hata olsa diğer dirençlerin ölçümünde ve ilgili pini high yapmada da sorun olması gerekmez miydi?Programı bundan önceki mesajımda ek olarak görebilirsiniz.

ete

Adc ölçümün belirli dirençler için 0 dan büyük bir değerle başlayıp en son 765 e kadar geliyor.
Şimdi bir dğşüğn bakalım. 65K okuma yaparken senin ADC den 665-765 aralığında bir bilgi değilde 780 gibi bir bilgi okuyor ise ne olacak? program hiç bir şey yapmayacak değilmi . İşte sorunun bu bana kalırsa ve doğrulamak için veridiğim yöntemi kullanacağız. Cevabını bekliyorum.
Ete

blueboard

#10
Ete hocam, tahmininizde haklı çıktınız. Denemelerim ancak sonuçlandı.Sorunun bir kaç sebebi varmış. Birincisi 7805 çıkışında 5 volt yerine 4.78 volt veriyormuş.Bunun sonucunda da okunan ADC değeri hatalı hesaplandığından ilgili pin lojik 1 olmuyormuş. Okunan değeri anlattığınız şekilde Eprom'a yazdırdım ama Eprom'dan bilgiyi programlayıcıdan nasıl okuyacağımı bilmediğimden o kısmı yapamadım. Dijital ölçü aleti ile ölçüm yaparak doğru sonuca ulaştım.
Yeri gelmişken POT komutunu sormak istiyorum. POT komutu ile ADC özelliği olmayan mikrodenetleyicilerde bile direnç ölçümü yapılabiliyormuş. Bu konu hakkında bildiklerinizi paylaşabilir misiniz. Çok teşekkür ederim.Aklınızla çok yaşayın.

blueboard

Ete Hocam, 65 K lık direnci okuduktan sonra uğraşamaya devam ettim. Bu sefer 5volt olamsı gereken ancak gerçekte 4.78 volt olan taraftaki sabit direnci 12 K olarak değiştirdim. Belirttiğiniz kodları programın en alt kısmına ekledim. Devrede 1 dakika bir şey yapmadan bekledim ve 65 k lık butona bastım. Ardından epromdan datayı nasıl okuyacağımı internetten araştırdım.Sanırım okudum da . Bunun ekran görüntüsünü ekliyorum. 12 k sabit direnç ve 65 k butona göre benim hesabım ADC değerinin 825 olması gerekir. Eprom okumasını PicKit2 ile yaptım. 8 Nolu adreste  00  00 yazıyor.

ete

Dere geçilirken at değiştirilmez. Dirençlere dokunmadan bu işi yapman gerekir idi.
Epromda 00 00 yazmasıda normal değil. Adc sıfır okuyor olamaz. Direnç değiştirir iken başka bir donanım hatası yaptın mutlaka. Yolu gösterdim arayıp bulman gerek kusurunu.
Ete

Powered by EzPortal