Mazot göstergesi+A/D çevirimi yardım

Başlatan ahmetinrodisi, 20 Ekim 2005, 22:16:44

ahmetinrodisi

Merhaba Arkadaşlar.Tekrar yardımlarınıza ihtiyaç duydum.Yapmak istediğim şey ise bir dijital mazot göstergesi. Muhtemelen projem de A/D çevrimini kullanacam. A/D çevrimini ise satın aldığım " Adım Adım Picmicro PROGRAMLAMA" kitabından öğrenmeye çalıştım. Kitapta hazır bir program üzerinde denemeler yaptım.Program "PORTA ya bağlı potansiyemetrelerin değerlerini 8 bitlik çözünürlükte okuma"dır.Fakat programı yazdığımda daha PORTA ya hiçbir potansiyemetre bağlamadan, program LCD de 30 -60 arası değerleri göstermeye başladı.Kısaca A/D çevrimi konusunda biraz sorunluyum.Benim projemde mazot şamandırası 0-30 ohm arası değişken dirençten oluşmakta. Acaba bu şamandırayı kullanarak LCD ye nasıl bir veri yollayabilirim?Yada bu işi başarmam için sizin A/D bilgimi geliştirecek bilgi ve örnekleriniz var mı? Termometre örneklerini İnternet ten buldum ama onlar biraz bana bilgim az olduğu için karışık geldi.Mesala 100 ohm luk bir direncin  değerini A/D yi kullanarak LCD ye nasıl yazdırabilirim?.AN0,AN1 kanallarını okumayı asm ile az çok öğrendim sayılır.Fakat takıldığım bazı noktalar var.Ben PIC16F877,4 MHZ XT kullanıyorum.ADCON0'ın 7. biti ADCS1 seçeneğini nasıl seçmem lazım veya bu neyi ifade eder?Yada başka bir sorunum,ben noktalı değerleri AD ile nasıl okuyabilirim?. Çok soru sorduysam sizden çok özür dilerim arkadaşlar.Bana balık tutmayı öğretseniz inanın gerisini getiririm:)Fikirlerinizi bekliyorum arkadaşlar.Şimdiden hepinize teşekkürler.

arslan74

Merhaba,
Sana değişik bir yol önereyim. Şamandranın potansını osilatöre bağla (555 gibi) direnç değiştikce frekansda değişecektir. Program olarak ADC değilde, frekans metre olarak yazarsın. Giriş değerlerin dijital bilgi olur. Diğer türlü sistemi parasitlerden yalıtman zor olur. Osilatör devresini bir optucopler ile cok rahat PIC'den yalıtabilirsin.

Eğer frekans metre programı nasıl yazıldığını bilimiyorsan. Kısaca mantığı vereyim.

1.ci yol: puls girişini int0 veririsin. int0 aktif hale getirirsin. timer0 veya timer1'i aktif hale getirirsin. Her pulsda int0 devreye girecektir. int0 da timer0 veya timer1 değerini okursun. puls değiştikce okuduğun değerde değişecek. sonrada bu değerleri seviye değerlerine dönüştürürsün.

2.ci yol: timer0'ın clock girişini harici puls girişi olarak ayarlarsın ( bu genellikle R4 bacağı oluyor). Sonrada devenin puls cıkışını bu baçağa bağlarsın. her pulsda timer0 artacaktır eğer önbölücüyü devreye sokmadığın ise. frekans cok yüksek olursa önbölüçüyü devreye sokabilirsin. Sonra bekle (delay) döngüsü yazarsın. timer0 içeriğini silib delay döngüsüne girersin. döngü sonunda timer0 değerini okuyub değerlendirme yapabilirsin. Burda döngü süresini sistemine bağlı olarak kendin belirlemelisin.

Umarım sana yardımcı olabilmişimdir.

Calışmalarında başarılar,

Hasan ARSLAN

ahmetinrodisi

Çok teşekkürler arslan74. Çözümün değişik de olsa, her fikre açığım. Sonuçta bu işin tek bir yolu yok.Yalnız, Elektronikle hobi olarak ilgilendiğim için bazı şeylerde bilgim az onu belirteyim. Frekans metre kısmını anladım programda yapabilirim.Fakat devremde bundan ayrı olarak RB4-RB7 durum değişikliği kesmesini kullandım ve bütün bu pinleri doldurdum. Programda hiç 2 tane kesme altprogramı yapmayı denemedim.Mesela 1. kesme için org 0x004, goto Kesme_Altprog derken 2. kesmeyi nereye nasıl yerleştireceğimi ve nasıl çağıracağımı bilmiyorum.
   İkinci olarak bana 555 ile bu devrenin şamandıradan picin ucuna kadar olan bağlantı şemasını gönderebilirmisin. Mesela şamandıranın iki ucu var, bunlar nere nasıl bağlanacak, 555 kullanırken araya hangi dirençleri ve hangi kapasitörleri bağlayacam bunu pek bilmiyorum.Yardımların için tekrar teşekkürler.Değişik fikirleriniz olursa onlarıda deneyebilirim arkadaşlar.Sağlıcakla kalın...

arslan74

Merhaba,

Sana proteusta yapılmış 555 osilatör simulasyonu gönderiyorum.

http://rapidshare.de/files/6559650/555.rar.html

Birde PIC anlatan dökümanlar var onları biraz incelersen int. ilgili senin soruna cevab bulabilirsin.

Aşağıdaki dökümanları indir ibraz oku:

https://www.picproje.org/main/modules.php?name=Forums&file=viewtopic&p=41495#41495


https://www.picproje.org/main/modules.php?name=Forums&file=viewtopic&p=41487#41487

stlg

Sevgili ahmetinrodisi
Arkadasım bende sana baska bir yol onereyim pıclerle yapılan ntcli ısı
olcumunu yada kapasite olcumlerini hic gordunmu a/d donusumuyle falan
ugrasman zor geliyorsa samandıra potuna bir kapasite bagla olcume
basladıgında bu kapasiteyi pic vasıtasıyla  bosalt yani bir nevi kısadevre et  sonra bir registeri sıfırdan baslıyarak sayısını artırmaya basla bu kapasite baglı pini surekli oku buradaki seviye degistiginde sayıcıyı durdur ve lcd ekrana bu bilgiyi mantıklı bir sekilde gonder sayıcıyı artıran zamanlama dongusunun suresini degistirerek lcd ye kalan mazotla ilgili
dogru bilgileri gonderebilirsin giriş devresiyle ilgili problemlerin olursa
pottan gelen gerilimi direnclerle bolebilir istedigin gerilime getirebilirsin  


              ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

arslan74

.
Sana bir link yolluyorum.
Aşağıda linkte NTC thermistor ile sicaklık okuma devreysi yapmışlar. Mantık aynı benim sana bahs etiğim şekilde yapılmış.
Hatta sen thermistor yerine şamantıranın direncini bağladınmı ekrana bir değerler yazacaktır. Tabi ki istediğin değer göstermek için bunu üzerineki ayarlarda biraz oynaman gerekecek. Ama olayın iskeleti aynı.

LCD li sicaklık göstergesi:
http://www.piclist.com/techref/piclist/cheapic/therm.htm?key=lm35+thermometer&from=/techref/piclist/cheapic/therm.htm

.

ahmetinrodisi

Çok teşekürler stlg ve arslan74.Verdiğiniz fikirler ve şemalar çok güzel.Hemen işe koyulmaya başlayacam. Stlg senin fikrinide denemek isterim fakat bilgim az olduğu için şamandıraya nekadarlık bir kapasite ve pic e kadar bu bağlantıları yardımınız olmadan doğru yapacağımı sanmıyorum.Bilen için belkide 5 dk. Vaktin olursa stlg bana bahsettiğin fikrin şemasını yollarsan çok sevinirim.Şemayı gördüğümde olayı daha iyi anlar ve programı yazabilirim.Tekrar hepinize teşekürler, gelişen ilerlemelerden mutlaka sizi haberdar edecem, sağlıcakla kalın...

ismshn

mazot deposu sürekli sarsıntı halinde olacaktır.(yokuş aşağı veya yukarı-çukurlardan dolayı)
ekrandaki bilgi de sürekli değişecektir.
bence çözüm olarak:okunan değerlerin ortalamasını aldıktan sonra lcd güncelleme süresini yavaşlatırsan haledilebilir.

stlg

Sevgili ahmetinrodisi
Arkadasım senin mazot seviye potunun iki ucu bostamı bilmiyorum genelde otolarda bu ucun birisi aracın govdesindedir yani eksi uca baglıdır sen bu iki ucu ayırabilirsen su sekilde devreni kurabilirsin potun bir ucuna
+5v vereceksin potun diger ucunuda bir kapasitenin artı ucuna baglayacaksın kondansatorun eksisinide eksiye bagla biz pot ile kondansatorun dugum noktasını pice girecegiz kapasite cok onemli değil 10 uF ile 470 uF arası olabilir onemli olan kapasitenin cok hızlı dolmaması biliyorsun piclerin artı seviyeyi algıladıkları bir nokta var işte biz bunu kullanacagız (threshold)

*Ölcum soyle yapılır kondansator desarj edilir harici bir transistorle yada kapasiteyi bosaltabilirse acık kollektor ucu olan ra4 ile
* Kondansatorun desarj suresi kadar beklenir
* Ra4 bu sefer giris olarak yonlendirilir
*Tam bu esnada bir register sıfırdan itibaren saymaya baslar
bu sayıcı yazırlananan bir zaman dongusuyle ilerletilir
* Bu ilerleme esnasında program surekli ra4 pinini kontrol eder
* Bu pin yuksek oldugu an sayıcı durdurulur ve bu bilgi lcd ye gonderilir
*Burada  bir register olabilecegi gibi tmr0 kullanılırsa daha iyi olur programla ilgisi olmadan ilerler gerekli ayarlarla
*Sarj suresi potun direnciyle ters orantılıdır potun degeri buyudukce
sarj suresi buyuyeceginden register icindeki sayıda buyuyecektir
bu olcum dongusunu belirli aralıklarla yaparsan samandıradaki sallantıları
minimuma indirmiş olursun

                 ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

camby

Konunun üzerinden biraz geçmiş ama ben de "Select A/D conversion clock (ADCON0)" konusuna bakıyorum. ADCON0 ve ADCON1 de bulunan ADCS0 , ADCS1 ve ADCS2 bitlerini neye göre ayarlamalıyım , ADC işlemindeki CLOCK neyi belirliyor?

stlg

Bu bitler ad cevrimin hızını belirleyen bitler, datasheeti incelersen pratik olarak kullandıgın frekansa gore atayacagın degerleri gorebilirsin ,mesela 4 mhz icin 01 rc osilatorler icin 11 vs gibi
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.