adc ile pil seviyesine göre led yakmak...?

Başlatan mustafa_cmbz, 08 Şubat 2009, 22:47:26

mustafa_cmbz

arkadaşlar elimde 18v'luk bir akü bulunmakta bu aküyü gerilim bölücüler ile max.5v verecek şekilde ayarladım...pic ile ölçüp ekrana yazma işlemide tamam..

If VAR1<3 Then High PIL_BITIK : GoSub PIL_SIL : DelayMS 200 : GoSub PIL_BOS
If VAR1=3  Then High PIL_FULL : GoSub PIL_SIL : DelayMS 200 : GoSub PIL_DOLU


(yukarıdaki kodlar daki gibi istediğim şeyi yapamıyorum...)

gel gelelim voltaj değerine göre led yakmak veya program içerisinde dallanıp budaklanma işlemini yapamıyorum...bu konuda yardımınızı bekliyorum...mesela 5v iken led1'i yak ekrandaki pil resmini temizle ve pil dolu resmini bas gibisinden bunu pilin seviyesine göre yapamıyorum devamlı değişiyor...kolay gelsin...

ete

Toplamda kaç led sana bu konuda yardımcı olacak?.
Diyelimki 3 adet led kullanacaksın. Bu durumda seviyeler şöyle olmalı;
1. Led düşük voltaj
2. Orta seviye
3. led ise dolu göstergesi

Gelelim ADC çıkışına. 0-5V arasında değer sana ADC olarak 0-1024 olarak  (8 bit ADC kullanırsan 0-255 olarak) dönecektir
Bu durumda 1024/3 =341 çıkmaktadır.
O halde 0-341 arasında 1. ledi yak
341- 682 arasında 2. ledi yak
682 den büyük ise 3. ledi yak gibi bir düz mantık kullanabileceğin gibi gerçek te akülerin boş dolu orta seviyelerine uygun aralıklar da seçebilirsin.

Zira 12V luk bir akü nün boş sayılması için 10V dolayına inmesi yeterli olmaktadır.
Orta seviye olarak ise 10V-11.5V kabul bul edilebilir. 11,5 V dan büyük her değer de dolu kabul edilebilir. Bu voltajlara gelen ham değerleri yaklaşık hesap edebilir yada hiç olmaz ise isis de bu değerleri verip ADC nin verdiği çıkışları sınır olarak kullanabilirsin.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Maxim

ben olsam şöyle yapardım ,

tabiki ete ustanın dediğide doğru ve o da bir yol ,
yanlız ,ete usta ,akü 18 volt lukmuş .(o nasıl bir aküyse ? )

neyse ,
normal bir voltmetre yapardım ,
yani girişe 10 volt verince 10 volt olarak hesaplayacak ,
yada girişe 13 volt verince 13 olarak hesaplayacak ,
yada 5 volt verince 5 volt ,

sonra çok basit bir şekilde istediğim dallanmaları yapardım ki ,
çok basit ,

mesela ,
5 tane ledli bir devre düşünürsek

if volt > 16 then high led5
if volt > 15 then high led4
if volt > 13 then high led3
if volt > 12 then high led2
if volt > 10 then high led1

gibi..

mustafa_cmbz

ADC_HESAP:

VAR1 = ADIn 0      ' Place the conversion into variable VAR1
VAR1 = (VAR1*/ 500)>>2		' equates to: (adval * 500)/1024
  DelayMS 150 
  
VAR2=ADIn 1

Print At 3,6,"volt : ",Dec (VAR1/100),".", DEC2 VAR1	
Print At 4,6,"volt : ",Dec VAR2
If VAR2<617 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_BOS
If VAR2>978 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_DOLU
GoTo ADC_HESAP


hocam yazdığım kod bu şekilde....16f877 ile ilgili herhangi bir sorun yok şundan büyükse şunu yak bundan küçükse şunu yap gibi....ama hesaplarken 2 den fazla değişkeni ıf2li şartlanamya soktuğumda mesela @maxiboost hocamında verdiği örnekteki gibi volt>10 ise led1'i yak diyorum aynı şekilde volt>14v dediğimde de aynı şeyi yapmış oluyorum sadece alt seviyeleri belirlemiş oluyorum anlıyacağınız 10v büyüksede pil boş yazıyor 14v dolu yazıyor devamlı ekrana arkası arkasıya aynı şeyleri basıyor..(resim olarak) bunun önüne geçmek için de aküden gelen ve porta.0 pinine giren uca porta.1 ucunuda bağlayarak buradanda ham veriyi alarak değerlendiriyorum...

bana lazım olan şey ise ete hocanın da dediği gibi şu voltla şu volt arasında ise şunu yap bu voltla bu volt arasında ise şunu yap dersek bizim iş olacak gibi....iyi çalışmalar...

alayli

Problemin gerilim bölücü dirençlerden adc'ye giden voltajın stabil olmamasından kaynaklandığını düşünüyorum. Gerilim "Sürekli değişiyor" ifadesi software'in düzgün çalıştığını, ama voltajın sürekli oynadığını çağrıştırıyor. ADC girişine küçük değerli (1-10 uF) bir tantal veya elko bağla veya yazılımında  karar döngüne bir histerizis ekle...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

mustafa_cmbz

Alıntı yapılan: "alayli"Problemin gerilim bölücü dirençlerden adc'ye giden voltajın stabil olmamasından kaynaklandığını düşünüyorum. Gerilim "Sürekli değişiyor" ifadesi software'in düzgün çalıştığını, ama voltajın sürekli oynadığını çağrıştırıyor. ADC girişine küçük değerli (1-10 uF) bir tantal veya elko bağla veya yazılımında  karar döngüne bir histerizis ekle...

voltaj seviyesi derken lcd de gözüken ham veri değerinden bahsediyordum az önce işi çözdüm...isiste 18v aküden gerilim bölücüler ile pic'in girişine verdiğim için bir sorun varmış...tasarımı daha gerçek hayata dökemedim...elimde glcd ve 18f452 yok şu anda...

muhittin_kaplan

If VAR2<617 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_BOS 
If VAR2>978 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_DOLU

ya
If VAR2<617 and Var2 >0 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_BOS '0 ile 617 arası
If VAR2<978 and var2>617 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_DOLU '617 ile 978 arası

yazsanız olmuyormu

mustafa_cmbz

ADC_HESAP:

VAR1 = ADIn 0      ' Place the conversion into variable VAR1
VAR1 = (VAR1*/ 500)>>2		' equates to: (adval * 500)/1024
  DelayMS 150 
  
VAR2=ADIn 1

Print At 3,6,"volt : ",Dec (VAR1/100),".", DEC2 VAR1	' 	' Display the decimal value
Print At 4,6,"volt : ",Dec VAR2
If VAR2<670 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_BOS
If VAR2>670 Then VAR_DEGIS
GoTo ADC_HESAP

VAR_DEGIS:

If VAR2=904 Then GoSub PIL_SIL : DelayMS 500 : GoSub PIL_DOLU
If VAR2=810 Then GoSub PIL_SIL : DelayMS 500 : GoSub KDM_1
If VAR2=762 Then GoSub PIL_SIL : DelayMS 500 : GoSub KDM_2
If VAR2=720 Then GoSub PIL_SIL : DelayMS 500 : GoSub KDM_3
GoTo ADC_HESAP


bu şekilde düzenlediğimde oluyor hocam...sorun bendeymiş...normalde 16f877 için derleme yaptığımda isiste sorun çıkmıyor...ama 18f452 için derleme yapıp simule ettiğimde sorun yaşıyordum...onuda tirslerden porta.1'i giriş olarak tanımlayınca düzeldi...yanlız ıf ile şartlandırdığım değere gelince resmi silip yeniden basıyor...oda işe bir hava katıyor...o seviyenin altına düşünce düzeliyor...

şimdi tek sorun gerilim bölücülerden gelen max.5v'u ekranda 18v olarak yazacak bir hesap formülü...onuda halledersem pil durumunu ölçecek sistem hazır olacak....birde belirli aralıklarda ölçüm yaptırmak için timer kullanacağım galiba...birde yerden tasarruf için pil resmi için 1-2 düzenleme yapacağım...ondan sonra sinyali algılatma işlemi kalıyor geriye...


falza formu kirletmeden bişey sormak istiyorum dedektörlerde çok frekanslı çalışmanın neye faydası var acaba_? mesela elimde bir tane arızalı expoler2 metal dedektörü var netten özelliklerine baktığımda 28frekanslı diyor acaba 28 frekans olmasının ne gibi bir avantajı var onu merak ediyorum...

yardımcı olan arkadaşlara çok teşşekkürler...iyi çalışmalar...