otomatik çiçek sulama projesi bazı sorunlar var lütfen yardım edin!

Başlatan Mucit23, 30 Haziran 2010, 13:09:25

ete

Aslında IF satırları doğru çalışıyor.
Başla satırından önce zaman okuması yapmadığından ilk açılışta saat=0, saat1=0 dak=0 ve dak1=0 olduğu için direk gidip röleyi çalıştırıyor. Ama sonra zaman doğru okununca röle açık kalıyor ve bir daha ancak kapanma zamanında kapanıyor sanırım.
Yapılacak işi Başla satırından önce hatta sensör okumadan önce GOSUB ZAMAN_OKU şeklinde bir komut ilave etmen gerek.

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

Mucit23

Merhabalar ete hocam
Sorunu şimdi çözdüm programda ilk başlangıçta sizin dediğiniz gibi zaman okuma bölümüne yönlendirdim ama röleyi kontrol etmeyle ilgili komut bence yinede eksikti çünkü röleyi açmak için haftanın günlerine bakmıyordu önceden sadece hangi gün sulama yapılacak, saate ve dakikaya bakıyordu böyle olunca saat ve dakika ayarladaığım değerlerle eşitlenince hanggi gün olursa olsun o an röleyi açıyordu şimdi kodları aşağıdaki gibi yapınca hiç bir sorun kalmadı tam zamanında röleyi kontrol ediyor
ZAMANA_BAK:
READ $0,SAYI
READ $1,PTESI:IF PTESI=255 THEN PTESI=0
READ $2,SALI:IF SALI=255 THEN SALI=0
READ $3,CARS:IF CARS=255 THEN CARS=0
READ $4,PERS:IF PERS=255 THEN PERS=0
READ $5,CUMA:IF CUMA=255 THEN CUMA=0
READ $6,CTESI:IF CTESI=255 THEN CTESI=0 
READ $7,PAZAR:IF PAZAR=255 THEN PAZAR=0

IF SAYI=1 THEN
   IF HAFTA=1 AND PTESI=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
   IF HAFTA=2 AND SALI=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
   IF HAFTA=3 AND CARS=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
   IF HAFTA=4 AND PERS=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
   IF HAFTA=5 AND CUMA=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
   IF HAFTA=6 AND CTESI=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
   IF HAFTA=7 AND PAZAR=1 AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
ENDIF  
RETURN         

size danışmak istediğim bi konu daha var şu saatin geç ilerlemesiyle ilgili bu konuyla ilgili bana önereceğiniz bişey varmı yani biliyorum simülasyonla gereçk hayat çok farklı acaba gereçk hayattada bu sorun yaşanırmı
ben şöyle bi deneme yaptım programdaki osc değerini 8 mhz ye çıkartıp simülasyondaki kristal değerleride 4 mhz olunca saat çok normal çalışıyor ama bu sefer derecede -0,1 derecede kalıyor dderece kısmı çalışmıyor ama hem osc değerini hemde şemadaki kristal değerlerini 8 mehz veya 4 mhz yapınca yine eskisi gibi saat yavaş derece düzgün çalışıyor bunun sebeni ne olabilir acaba yani normalde kristal değerini 8 yaparsak saattaki yavaşlama sorunu çözülürmü

ete

Saatin geç ilerlemesi simulasyondandır. Anlamak için;
İsis ekranının en altında gerçek zaman saati bulunmaktadır. Kısaca zaman artımı oradan takip edilebilir.
Saniye artışı orası ile aynı ise gerçekte sorunsuz çalışacak anlamınadır.
Gerçek devrede bakmadan saating geç ilerlediği hakkında hüküm verme bence. Bu sık sık olan bir şeydir.
İsis gerçekten bir sürü işi bir arada ypmakta bazen süre onun için yetersiz kalmaktadır. Olayın takibi ise gerçek zaman saatinden yapılabilir.

Ete

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

Mucit23

Hocam simülasyonda devreye ilk enerji verdiğim zaman bilgisayarın saatini alıyor ona göre ilerliyor ama isisin altındaki kronometre gibi bişey galiba
bide devreyi ilk çalıştırdığımızda DS1302 clock diye ufak bir pencere açılıyor oarda ds1302 içerisindeki saat ve tarih bilgilerini gösteriyor eğer dediğiniz şey buysa ozaman gerçekte doğru çalışır çünkü bu küçük pencerede yazanlarla lcd ekranda yazan saat bilgileri aynı

ete

Aşağıda kronometre gibi şey dediğin şey aslında gerçek zaman saatidir. Orda saniyenin bir artması demek gerçek zamanda program çalıştığında 1 sn geçecek anlamındadır. Bazen oradaki sn değeri kolundaki saate nazaran 3 sn de bir sn bazen 5 sn de bir saniye atar. Bunun anlamı simulasyon yavaş çalışıyor ancak gerçekte normal çalışacak demektir.

Sen dosyaları bana bir yolla ben bakayım.

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

Mucit23

merhabalar ete hocam kusura bakmayın cevap yazmakta biraz geciktim
hocam dosyaları bu adresten indirebilirsiniz
http://s1.dosya.tc/HyNkxG/_i_eksulama.rar.html

ete

Aslında önceki dosya bende var idi oradan baktım. Dediğim gibi sistem saati normal çalışıyor. Anlayacağın gerçek devre doğru çalışacak. Aşağıda gördüğün gerçek zaman saatidir ve o saat DS1302 ile doğru çalışıyor.

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

Mucit23

tamam hocam teşekkürler devrenin pcb sini çiziyorum en kısa zzamanda devreyi kuracam
Sağlıcakla kalın :)

Mucit23

merhabalar hocam size sormak istediğim bişey daha var projem ile ilgili görüşlerinizi almak istiyorum gerek program yazma mantığı gerekse devrenin çalışması ile ilgili sizce ne olsaydı güzel olurdu.Biliyorum sizin program yazma mantığınız çok farklı çok karmaşık işleri bile kısa yollardan halledebiliyorsunuz.Bu özelliğiniz benim çok hoşuma gidiyor nede olsizin sayenizde öğrendim program yazmayı şimdide ufak tefek işlerle uğraşıyorum .

ete

Aslında bu soruyu cevaplayacak kadar çok detaylı incelemedim bu programı.
Ancak yinede söyleyebileceğim bir şey var. Programda hem değişken kullanılıyor hemde bu değişkendeğerleri eeproma kayıt ediliyor.
Değişken değeri zaten hafızada iken birkerede eepromdan okunuyor ve o şekilde kullanılıyor. Keşke bu kadar eeproma yazılıp okunan bir program olmasaydı diyorum. Benim kullanmadığım ve kullanmakda istemediğim bir mantık bu. Eepromların belirli sayıda yazma ömrü olduğunu düşünürsek programın çalışması anında bir çok kereler eeproma yazılıp okunmaktdaır. Bu eepromun ömrünü kısa sürede bitirebilir diye düşünüyorum. Birde lüzumsuz geciklemelere sebep olan bir husus.

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

Mucit23


Mucit23

merhabalar hocam nasılsınız iyimisiniz
hocam geçen gün kuluçka makinamdan ilk civcivler çıktı :)
Ama bu sefer verim çok kötü oldu :( 10 yumurtadan sadece 5i çıkabildi :( buduruma biraz üzüldüm doğrusu civcivleri o halde görmek insanı üzüyor .
Bende hemen sebebini araştırmaya koyuldum
makina içerisinde yumurtalıkların üzerine çeşitli termometreler koyup ısı öçümleri aldım ve sonuç genelde devrenin gösterdiği ısıdan 2-3 derece düşük kalıyor bunun sebebide aslında basit makinada ısıtıcılar çalışınca ısınan hava makinanın üst taraflarına doğru ilerliyor sht 11 de üst taraflarda olduğu için makina nomalden daha yüksek ölçüyor.Ben çözümümü buldum, aslında sht 11 i alt tarafa alınarak belki sorun çözülebilir ama bence böyleside verimli olmaytacaktır.Bunun yerine devreye 1 adet DS18B20 daha ekledim.burada sorun yok.Şimdi makinanın iki yn tarafında iki adet fan var makina içerisindeki hava silkülasyonunu sağlamak için yapmak istediğim şey iki sensör arasındaki ısı farkı sıfır olanakadar yandaki fanlar çalışacak alt ve üst ısılar eşitlenince yandaki fanlar kapanacak aslında hasasiyet ayarıda eklenebilir buna ama hassaiyetin nasılyapıldığını bilmiorum.diğer karşılaştırma işlemini yapabilirim.
Set değeri ise bu iki sensörün ortalaması alınarak çıkan değerle karşılaştırılacak işte burada tıkandım kaldım ortalama için nasıl bir formül kullanmalıyım bunu bilmiyorum
ben örnek olarak şöyle bir uygulama yaptım ;Diyelimki iki adet ISI1 ve ISI2 adında değişkenimizolsun bunlar sensörlere ait ısı bilgilerini tutuyor biz ikisinin ortalamasını almak için aşağıdaki gibi bi formül kullanabilirmiyim

ORTISI=(ISI1*10)+(ISI2*10)/20  gibi bi formül kullansam aslında oluyor ama pic ondalıklı işlemleri yapmıyor net değeri veriyor acaba ondalıklı bi işlem yapabilmek için nasıl bi formul kullanmalıyım.

Şimdilik devreyi çok geliştirecem tam otomatik bir sistem haline getirecem elimde bir sürü malzeme var onları değerlendiriyorum. LCD boyutunu 20x4 lcd yapıcam eğer aşağıdakinin bir 20x4 lcd olduğunu düşünürsek aklımda şöyle bi ekran görüntüsü var

                                   Ü=25,7  A=23,8  S=37,8
                                   ORTISI=24,7    NEM%70
                                   SAAT 12:12:00   01.GUN
                                   TARIH 01/01/10    CTESI

Biraz açıklamak gerekirse
Ü= üst ısı
A= alt ısı
S= ısı set değeri
ortısı=ortalama ısı

bu işe çok heves verdim umarım projemi sağ sağlim bitiririm
Ayrıca işlemci olarak verim açısından 18F452 ye geçmek istiyorum elimde bu işlemciden çok var kristal frekansınıda 20 mhz ye çıkartmayı düşünüyorum çünkü ana programda birçok gosub komutu olduğu için ana menüye girmek için butona biraz basılı tutmak gerekiyor .

micro code studioda 18 f serisi için bi program yazmak için mpasm ile bi bağlantı kurmak gerekiyor bunun nasıl yapıldığını bilmiyorum daha önce hiç 18 f serisi için bi program yazmadım bunun nasıl yapıldığınıda eğerbi bilginiz varsa söylerseniz çok memnun olurum.

Umarım sizi çok rahatsız etmiyorumdur gözümde çok değerlisiniz benim için bi isteğiniz olursa herzaman budayım.
Lazımsa civcivde gönderebilirim sizin o civcivlerde emeğiniz çok :)

ete

Öncelikle hemen belirteyim farklı sensörler sıcaklık oynamalarına farklı tepki verirler. Ancak stabil ortamda aynı sıcaklığı gösterebilirler. Bu nedenle bana kalırsa ortalama vermek yerine aralık vermek daha uygun olur gibime geliyor.
Örnek vermek gerekir ise ;
IF ALTISI=>(USTISI-1) AND ALTISI<=(USTISI+1) THEN
   FAN=0
ELSE
   FAN=1
ENDIF
Rakamla açıklamak gerekir ise ALTISI 24 derece ise ÜSTISI 23-24-25 derecelerde iken fan çalışmayacak bunun dışındaki derecelerde fan çalışacaktır.
Bir derecelik fark hem altta hem üstte fanın sürekli dur kalk yapmasını önleyecek ve nispeten sıcaklığı sabit tutmaya çalışmasına sebep olacaktır.
Başka bir deyişle, alt ısı 23 derece ye gelince fan duracak ve bu durma üst ısı ile alt ısıs arasındaki farkın 3 dereceyi aşmasına kadar devam edecektir.

Başka bir yöntemde fark alarak işlem yapılabilir. FARK isimli değişken WORD tipinde olacak
FARK=USTISI-ALTISI
IF FARK.Bit15=1 then FARK=~FARK  (Şayet USTISI<ALTISI ise FARK=ALTISI-USTISI demek gerekir ki bu komut bu işlemi yerine getiriyor)
IF FARK>2 then '(ben fark olarak 2 kabul ettim sen 3 yada 4 yada 1 alabilirsin)
   FAN=1
ELSE
   FAN=0
ENDIF
belkide bu daha iyi bir yöntemdir. Denemek gerekir.

Gelelim ondalık meselesine. Hesaplanmış bir ısıs değerini 10 ile çarparak ondalık işlemi yapamazsın. Asıl işlem sensörden ilk sıcaklığı hesaplarken sonuç 10 ile çarpılmış olarak bulunmalıdır. Dolayısıyla karşılaştırmalar bu değerler üzerinden yapılırsa ondalıkl aişlem yapmış olacaksın. Bunada örnek vereyim.
Üst sensör bilgisini 238 (aslında 23,8 derece) olarak hesapladın. Alt sensör bilgisinide 224 olarak hesapladın. Burada karşılaştırmalar 238 ve 224 ile yapılarak ondalıklarıda devreye almış olursun. SOnuç olarak,  IF 23,8>22,4 demek ile if 238>224 demek arasında fark yoktur.

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

Mucit23

Tamam hocam dediklerinizi çok iyi anladım ne yapacağımı biliyorum
Peki şu 18F serisi için program yazma hakkında bilginiz varmıydı nasıl yapmam gerekiyor

ete

18F serisi için yapılacak işlem sırası ile şöyle,

Önce aşağıdaki sigorta ayarlarını programın başına ekle,
'    device, 18F452
asm
    __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H 
    __CONFIG _CONFIG2L, _BOR_On_2L & _BORV_20_2L & _PWRT_OFF_2L
    __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
    __CONFIG _CONFIG3H, _CCP2MX_On_3H
    __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
    __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
    __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
    __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
    __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
    __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
    __CONFIG _CONFIG7H, _EBTRB_OFF_7H 
endasm

20 MHz kristale göre verdim ayarları. daha düşük kullanırsan HS yerine XT seçilmesi gerekir.

Sonra MCS de  View menüsünde "Compile & Program Options" seçeneğini seç
Gelen ekranda ortada yer alan Assembler butonuna tıkla ve çıkan ekranda  Use MPASM kutucuğuna tıklayarak seçili hale getir.
Bundan sonra derlediğin işlemci 18F serisi olmalıdır. Diğer işlemciler için bu seçeneği yeniden iptal edip eskiye dönmelisin.
Bu şekilde programı derleyebilirsin.

Bir önceki mesajımda bir fark alma seçeneği daha ilave ettim gözünden kaçtı ise yeniden bakıver.

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