Saat+Isı Tüm Projelerim

Başlatan ete, 19 Nisan 2006, 16:59:42

ete

Benimde aynı denemyi yapmam gerek sanırım. Artı sıcaklıkları denemiş idim ancak eksi hiç denemedim. Bir ara bakarım ve burada belirtirim sonucu.

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

vatandas30

@ete
aşağıda ds18b20 nin nasıl okutulacağı var. http://www.rentron.com/PicBasic/one-wire3.htm
buna göre - sıcaklık için sanırım şöyle birşey yazmamız gerekecek.
Hesapla:                 ' Ham değerden Santigrat derece hesabı
       IF SIGN_BITI = NEGAT_ISI THEN
       temp=625*(~HAM+1)
       ISI  = DIV32 10 
       GOTO GEC   
    endif
    TEMP = 625 * HAM        ' 
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme 
GEC:
    ISI=(ISI/1000)
    RETURN  

- sıcaklıkta sensörden alınan bilgi birebir + sıcaklığın tersi(binary sisteme göre) 625 ile çarptıktan sonra 10000 e bölmek gerekiyor. (tabii önce 1 ile toplamak gerekiyor. işlemi yaparak bizzat denedim) belki DIV 32 10 yerine DIV 32 10000 yazılabilir mi bilemiyorum. eğer öyleyse bir kaç satır daha kısalır.
senin programında;
GEC:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-3
    RETURN  

ısı değerinden 3 çıkartmışsın. bu yüzden sanırım 3 derece noksan gösteriyor. atelyedeki denemelerimde biraz şüphelenmiştim. ortam sıcaklığını 13 derece gösteriyordu.
yarın bir aksilik çıkmazsa bunu bir yerlerden buz bulup tekrar deneyeceğim. saygılar

sapkaliamca

Alıntı yapılan: "ete"@Sapkaliamca,
Muhtemelen SCLK ismi seninki ile uyuşmuyordur.
Symbol komutların bak bakalım DS1302 nin clock pinine picde ne ad vermişsin. Bu isimle komuttaki isim aynı olacak.
Gerekirse bu komutu LOW PORTX.x şeklinde değiştir. Büyük Z yerine clock pinininbağlı olduğu Pic Port adı A-B-C-D gibi , küçük x yerinede pin numarası gelecektir.

ETE
,

    Hocam symbol konusunda haklısınız tutmuyomuş hepsini birbirine ayarladım

SYMBOL  IO=PORTA.0
SYMBOL  SCLK=PORTA.1
SYMBOL  RST=PORTA.2
seklinde tanımladım hatta IO yerine PORTA.1 diyede yazdım ancak

Alıntı Yap
SHIFTOUT  IO,SCLK,LSBFIRST,[8E,00] 'wrt protec açıldı
satırında 2 hata "bad expression" ile "expected"

Alıntı Yap
SHIFTOUT IO, SCLK, LSBFIRST,[%10010000,%10101001]

satırında ise 1 tane hata veriyor oda "bad expression" yazıyor birde vatandaş30 arkadaşımızın dediği gibi [8E,00] de [$8E,00] şeklinde "$" işareti varmı? kusura bakmayın sizleride yormuyoruz ihşallah. tşk ederim.
ŞAPKALIAMCA MUTLULUKLAR DİLER

sapkaliamca

@ETE  hocam sanırım çözdüm.

BASLA:  satırının hemen üstüne
Alıntı Yap
       LOW SCLK  'clock low dan başlamalı
       HIGH  RST
       SHIFTOUT  IO, SCLK, RST, [$8E,00]
       LOW RST
       HIGH RST
       SHIFTOUT IO, SCLK, RST,[%10010000,%10101001]
       LOW RST        

END komutunun hemen üstünede
Alıntı Yap
TRICKLE:
               LOW SCLK  'clock low dan başlamalı
               HIGH  RST
               SHIFTOUT  IO, SCLK, RST, [$8E,00]
               LOW RST
               HIGH RST
               SHIFTOUT IO, SCLK, RST,[%10010000,%10101001]
               LOW RST  
yazdım kabul etti
BASLA: satırının üstüne GOSUB TRICKLE yazarsam ekran kararıyor çalışmıyor
Alıntı YapSHIFTOUT  IO, SCLK, LSBFIRST, [8E,00]
SHIFTOUT IO, SCLK, LSBFIRST,[%10010000,%10101001]
satırlarını

Alıntı YapSHIFTOUT  IO, SCLK, RST, [$8E,00]  
SHIFTOUT IO, SCLK, RST,[%10010000,%10101001]
olarak değiştirdim  kabul etti doğrumudur. tşk.
ŞAPKALIAMCA MUTLULUKLAR DİLER

ete

Sorunu anladım.

LSBFIRST ifadesini kullanabilmek için programın en başına;
INCLUDE "modedefs.bas"
ilave etmeniz gerekir. Yada LSBFIRST yerine 0   yani (sıfır) kullanın.
8E değerinin başında dolar işareti olacak. İŞaretsiz yazarsanız yanlış olun.
Aklınızda bulunsun bir rakam A-B-C-D-E-F harflerinden birisi ile kullanılıyor ise bu bir HEXADESIMALmsayı demektir ve pic de kullanabilmekiçin başına bir dolar işareti koymak gerekir.

@Sapkaliamca,

komutların içine ilave ettiğin RST ifadesi yanlış. BU nedenle yukarıda açıkladığım gibi düzelt.

@Vatandas30,

Sensörün okunması için yazdığım kod doğrudur. Ancak Isı değerinden 3 çıkarmayı bir arkadaş istemiş idi. Galiba derecesi 3 derece fazla gösteriyormuş. Sonra orada unutmuşum. Bu -3 ifadesini silin oradan gerisi doğrudur.

Ancak yinede eksi sıcaklıkları deneyeceğim.

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

vatandas30

yukarıda yazdığım gibi programın - kısmını değiştirdim. her durumda da sıfır dereceden sonra hemen 35 e geçiyor. yani -1 yazması gerkirken 35 yazıyor. sanırım burada bitlerin tersini aldıramadım. rev komutu kullanarakda denedim yine aynı sonuç.
üstelik sıcaklık düştükçe 36-37 diye gitmesi gerekirken 34-33-32 diye ekranda çıkıyor.

ete

@Vatandas30,

Şu anda deneme yapıyorum. Önce basit bir program yazdım aynı okuma bölümünü kullanarak bilgileri LCD ye veriyorum. Uzun bir sensör kablosu yaptım. Ve buzdolabının buzluğuna yerleştirdim. Sıcaklık yavaş yavaş düşerek 0 dereceye ve sonrada -0,1 sonra -0,2 ve devam ederek -1,0 dereceye düştü. Şu anda -8,1 derecede.
Buradan anlaşılacağı üzere senin sensör mefta olmuş veya kısmi bozulma var. Programda sorun yok.
Bu arada dikkatimi çekti ondalık bölümü çok iyi çalışmıyor idi. Ufak bir değişiklik yaptım ve şu anda 0,1 hassasiyetle çalışıyor. İlgilenenler için çalışan bölümü aşağıya veriyorum.

Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10 
       GOTO GEC   
    endif
    TEMP = 625 *( HAM+1)  'burayı değiştirdim
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    FLOAT = (ISI //1000)/100
    ISI=ISI/1000
     LCDOUT $FE,$02,"ham=",hex ham '" ORTAM SICAKLIGI"
    LCDOUT $FE,$C4,Sign,DEC ISI,".",DEC1 (Float)," ",Deg,"C      " 
    RETURN


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

vatandas30

sensörü bozacak birşey yapmadım ama allahtan yedeği var. yarın yerine yedeğini takıp , senin gibi buzdolabına sokup deneyeceğim.

vatandas30

üstad
hatamı buldum.
ISI=(ISI/1000)-3 kısmını düzeltmemiştim. tabii sensörün gerçek sıcaklığı 3 derece iken ekranda 0 görünüyor. ama sensör sıcaklığı 2 ye düştüğü zaman (proteusta da denedim) 35 ten başlayarak 34-33 diye gidiyor. yani ben sensör sıcaklığını aslında hiç sıfırın altına düşürememişim. bu yüzden bu değerleri göstermiş. yarın yemekhanenin buzdolabında deneyeceğim.  :D ama bu sefer doğru değerleri göstereceğinden eminim.
ilgilendiğin için çok teşekkür ederim. seni de boşu boşuna uğraştırdım. saygılar

sapkaliamca

@ETE  hocam
Alıntı YapINCLUDE "modedefs.bas"
ifadesini başa yazınca LSBFIRST komutunu kabul ediyor tşk ete ustam kolay gelsin.
ŞAPKALIAMCA MUTLULUKLAR DİLER

vatandas30

eksi sıcaklıkta denedim. gayet güzel çalıştı. hatam dün anlattığım gibi imiş. benim devremde sadece iki tane buton var. birisi saat ayar, diğeri dakika ayar. ayrıca saniye göstermiyor. isteyene şema, baskı devre ve programını gönderebilirim. saygılar

ete

sende bir iyilik yap ve bu dediklerini bir yere yükle ve buraya link ver bakalım. Paylaşmak adına tabiiki.

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

vatandas30


conavar

ya ben kendimden suphe etmeye basladım...elektroniği bırakacam herhalde.... :(  ya 5 kere yaptım devreyi sadece bir kere saat kısmı calıstı :(
off delirecem LCD`li saatlerden nefret diyom artıq  :evil:
breadboard a kurcam şimdi...bakalım ne olacak



resimde net görunmeyebilir ama anlatayım...borda kurdum.
MOD tusuna basınca son ıkı basamak(sn) kayboluyor..DS18B20 takmadım...boyle denedim.
Diğer ASAGI ve YUKARI da bir işlev yurutmuyo...
saat 00:00:00 dan başlıyo 00:00:59 olunca tekrar 00:00:00 donuyo :?
ya pic bozuk yada ben :? kafayı yiyecem...

şimdi de DS takılı...ilk olarak + - falan yaktı saatle beraber....
ve artık hiçbirşey göstermiyo :(
.::BiLgi Paylaştıkça Çoğalır::.[/url]

conavar

elimde 4 adet 16F628A var....
sadece bir sefer devre calıştı onda da DS18B20 + 28.5 derece ölçtü..dogru olarak calıştı..saat dakika göründü sonra sustu
 :cry:  :cry:  :cry:
yaaa LCD de problem olma ıhtımalı var mı? bir aydır su devreyi calıştıramıyorum cıldıracağım ya :cry:  :cry:  :cry:
.::BiLgi Paylaştıkça Çoğalır::.[/url]