16f877'de timer ve ADC

Katılım
24 Haz 2008
Mesajlar
11
Puanları
1
arkadaşlar merhaba,
16f877' ye bağlayacağım potansiyometre ile 0-1 dk arasında bir röleyi çektirip bıraktırmak istiyorum.yani pot 0 ohm olduğunda röle hiç çekmicek,pot 100k ohm olduğunda 1 dk boyunca röle çekili kalıp sonra bırakcak.pot ile 0-1 dk arasında zaman ayarı yaparak röleyi çektirebilirmiyim?çok aradım ama bulamadım programı kendim yazmaya çalıştım ama yapamadım.Timer'ları araştırdım ama konuya çok hakim olmadığım için yapamadım ne lcd istiyorum ne de başka bişey.evet bunu pic olmadan da yapabilirsin diceksiniz ama pic le yapmam lazım.sizden programı yazıp bana vermenizi beklemiyorum buna hakkımın olmadığını düşünüyorum ama en azından bir yol gösterirseniz çok sevinirim.takıldığım noktalar şunlar:potu ADC olarak kullanacaz peki ADC sonucunu nasıl timer'a adapte edecez,yani potun direnc değerini pic nasıl zamana çevirecek?...valla başıma ağrılar girdi şimdiden ilgilenen herkese çok ama çok teşekkür ediyorum.
Saygılarımla..
 
10 bit adc kullandığını varsayalım:

*Adc sonucunu word/int tipi bir değişkene yaz (örn: sonuc)
*Sonuc = 0 ise atla
*Röleyi enerjilendir
*Sonuc * ms bekle
*Röle enerjisini kes
 
tyildizak ilgin için cok sağol ancak rölenin enerjisini kesme kısmını tam çözemedim
Sonuc * ms bekle
demişsin şimdi adc den okudugu değer 0-1024 arası bi değer değilmi?atıyorum 500 okudu diyelim ''500 ms bekle'' demek istiyorum nasıl olcak?
tekrardan teşekkür ederim
 
Kullandığınız dile göre değişir. Örn. Pbp için "pause sonuc"
Röleyi enerjilendirmek ve enerjisini kesmekten kasıt, röleyi süren portu on - off yapmak.
 
Bak şimdi şöyle yapalım.

8 bit okuma yaptığını düşünüyorum.
Pot: 0 ohm, Analog giriş gerilimi 0 V, ADC sonucu dijital değer 0,
Pot: 10k ohm, Analog giriş gerilimi 5 V, ADC sonucu dijital değer 255,
Bunda hem fikiriz değil mi? Dolayısıyla sen şu ohm değerini bırak, gerilimin bölünmesi prensibine göre pic'e giren gerilime bak (0 ve 5 V arası).

İsteğine göre 0V ta röle kontakları açık olacak, 5V ta ise röle kontakları kapacak ve 1 dakika boyunca konumunu koruyacak, ve sen bu değerlere göre süreyi ayarlayabilir miyim diye soruyosun değil mi? Evet ayarlayabilirsin. Öncelikle kaç kademe istiyorsun? Diyelimki 5 istedin. Bu demek oluyorki her 1 volt gerilim değişiminde sürede bir o kadar değişsin çok güzel. 1 Volt analog gerilim değişimi dijitalde kaça tekabül eder peki? 255/5=51. Yani analog değeri dijitale çevirdiğinde pot her konum değiştirdiğinde 0, 51, 102, 153, 204, 255 değerlerinden geçerken bir if koşulu koyabilirsin bu koşuluda timer kesmesi içersine koydurabilirsin. Örneğin okuduğun adc değeri 0 olursa röle kontakları açık olsun, 0-51 arasında olursa timer 10 saniye röleyi çeksin ve bıraksın, 51-102 arasında olursa 20 saniye, 102-153 arasında 30 sn, 153-204 arası 40 sn, 204-255 arası 50 sn ve 255 değerinde 60 saniye röle çekili dursun ve bıraksın şeklinde bir program yazmalısın :) Tabi tüm bunların yanında potansiyometrenin lineer olmadığını düşünerekten 255 tam değerine ya da 0 tam değerine ulaşamama ihtimalinide göz önünde bulundurarak pratikte yapacağın devreye göre bu aralıkları ayarlamalısın örneğin 0-10 arasında röle 0 konumunda olsun gibi ;) Ya da timer süresi bitmeden potu çevirirsen o anki işlemin bitirmesini sağlatmak gibi gibi. Takıldığın yer olursa özel msj at yardımcı olurum.
 
sayın gkocak harikasın harika!!!tam olarak istedigim şeyi anlamış ve anlatmışsın yanlız sorunum devam ediyor ben pic basic te yazmıyorum assembler da yazıyorum nasıl olcak?gkocak çok iyi anlatmıssın artık umutluyum :) salı gününe yetiştirmem lazım sanırım olcak inş. galiba :D cevabını merakla bekliyorum.yukarıdaki anlattıklarının aynısını yapmam lazım...
 
sayın gkocak harikasın harika!!!tam olarak istedigim şeyi anlamış ve anlatmışsın yanlız sorunum devam ediyor ben pic basic te yazmıyorum assembler da yazıyorum nasıl olcak?gkocak çok iyi anlatmıssın artık umutluyum :) salı gününe yetiştirmem lazım sanırım olcak inş. galiba :D cevabını merakla bekliyorum.yukarıdaki anlattıklarının aynısını yapmam lazım...

Yalnız ben assembly bilmiyorum :) CCS C ile yazıyorum ben programlarımı. Onu nasıl yapıcaz?
 
hadi ya ozaman bu iş bi başka bahara kaldı en kısa zamanda yaparsam paylaşcam ilgin için cok saol gkocak tşk ederim sana ve diğer arkadaslarıma.
 
for next döngüsü ile de olabilir
1023 e kadar aldığımızı varsayalım yani 10 bit olsun sonuç.
elseif sonuc=0 then
low portx.x
ıf sonuç >0 then
for ı=0 to sonuc*60
delayms 1
hıgh portx.x
next

endıf
low portx.x
 
for next döngüsü ile de olabilir
1023 e kadar aldığımızı varsayalım yani 10 bit olsun sonuç.
elseif sonuc=0 then
low portx.x
ıf sonuç >0 then
for ı=0 to sonuc*60
delayms 1
hıgh portx.x
next

endıf
low portx.x

Ara değerleri napıcaz peki? ;)
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Geri
Üst