Saat+Isı Tüm Projelerim

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

ete

@Balkes10,

Tarih gösterilirken orta ledleri high özellikle bıraktım. Senin nokta ledleri dediğin özelliği çift led ile yapabilmek için. Kısacası orta ledleri ayıraç olarak kullanmaya çalıştım. Low da tutunca daha çirkin bir görüntü olmuş idi.
Dediğin gibi birer tane daha led koyabilsek nokta olarak daha güzel olacak ancak 628 de port kalmadı. 876 veya 877 de bu iş olabilir.

Orta ledlerin zıplama yapması na gelince , yaptığım denemelerde orta ledlerin kullanımı için en iyi yolun 1sn=1000 ms olduğu göz önüne alınarak 500 ms (on), 500 ms (off) şeklinde çalışması. Saat sinyallerini kendim oluşturunca bu özelliği yakalamk kolay idi. Ancak DS1302 den alınan sinyaller de 500 ms lik peryodu yakalam mümkün değil. Bu özelliği sağlayabilmek için yeniden kesme kullanıp yaklaşık 1 sn lik peryodu yakalayıp bunun yarısında ledleri açık yarısında da ledleri kapalı tutmayı amaçlamış idim. İsis de bu güzel gözüküyor. Çünki frekanslar sabit ve hesaba uyuyor. Ancak gerçek devrede pic frekansına bağlı sapmalar olacağını tahmin ediyorum. Bu yüzden aşağıda açıkladığım şekilde ayarlamal yaparak bu sorunu belki aşabilirsin.  
Bu iş tabiiki  (7) yi uygular isen mümkün.
Kesme bölümünde SAYAC isimli bir değişken var
Bu değişken yaklaşık 1 sn lik süreler hesaplıyor. Aynı mantığı önceki saatlerde de kullanmış idim.
Bu sayac değişkeni 61 olduğu zaman yaklaşık 1 sn lik süre dolmuş oluyor. Ohalde Sayac=30 olduğunda yaklaşık 500 ms lik süre doluyor demektir.

EKRAN0: etiketinin hemen altında veya karşısında;
       if sayac=30 then LOW porta.3
(30) rakamı değişik olabilir çünki sürekli bu rakam ile oynamakta idim.
Şimdi , kesme bölümünde;
IF SAYAC=61 then
satırında bu 61 sayısını artırabilirsin. Buraya koyduğun sayının hemen hemen  yarısını da
if sayac=30 then LOW porta.3
satırındaki 30 yerine yazmalısın.
Bana kalır ise rakamı sürekli artır taaki saatin düzgün çalışmadığı anı yakalayıncaya kadar. Çünki Bu sayac değişkeni aynı zamanda DS1302 den yapılacak okumanın yaklaşık 1 sn de bir olmasını sağlıyor. Sayac değişkenini artırdığın ve sürede 1 sn yi geçtiği zaman saa tin sn göstergesi  düzgün çalışmaması gerekir. Kısaca saat çalışan diğer bir saate göre sn yeleri geç göstermeye başlayacaktır. Bu şekilde sayac değişkenine verebileceğin en büyük değeri bulmaya çalış böylece orta ledler düzgün çalışacaktır.

Sonucu bildirirsen memnun olurum. Tabiiki SAYAC değişkeninin aldığı en son değer ile birlikte.
Yaptığım bir saat de bu sayac değişkeni 160 değerine kadar ulaşabilmiş idi. Aslında saçma bir değer ama sebebini anlayamamıştım. Bu nedenle seninde bu değerlere çıkman gerekebilir.

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

vatandas30

@ete üstadım
hafta sonu yoktum bu yüzden yazamadım. cuma günü sana söylediğim gibi programda düzeltme yaptım. pil boşta 3,3 V. pici programlayıp çalıştırdım. pil gerilimi yine 3,3 v. şarj etmiyor sandım . ama sanırım pil boşalmış bu yüzden saat bilgilerini de unuttu. yarın ilk iş pili önce 1 saat sarj edip öyle deneyeceğim.
sormak istediğim bir şey daha var. ben programın tanımlama bilgilerinde ilk olarak saat, tarih vs. bilgilerini girip ds 1302 ye yazdırıyorum. sonra ayar düğmelerinden saati tam olarak ayarlıyorum. pici tekrar yerinden çıkarıyorum. ve bu sefer de tanımlama bilgilerinden saat vs. bilgilerini kaldırıyorum. (direkt ds1302den okusun diye) eğer bunları kaldırmazsam enerjiyi kesip tekrar verdiğim zaman tekrar bunları yazıyor . bunun daha kolay bir yolu yokmu. yani saati kullanılır şekle sokmak için 2 defa pici programlamam gerekiyor.
eğer böyle yapmazda ilk başta direkt ds1302 den okutursam bu sefer de zaman ne yazarsa yazsın öylece kalıyor yani saat çalışmıyor.

sapkaliamca

@ETE hocam vatandaş30 arkadaşaımız sormuş gerçi ama ben tam anlayamadım trikle şarj komutunu tam anlamıyla nereye gireceğimizi anlayamadım

buraya mı ?(1 nci seçenek )

        CLEAR  'tüm değişkenler sıfırlandı
        low RTC_RST
        low RTC_CLK
        High RST      ' (triglejarj etme bölümü 1 diyot 1 dirnç için )
        SHIFTOUT DTA,CLK,LSBFIRST,[%10010000,%10101001]
        Low RST
        GOSUB GECIKME
        esn=0:GOR=0:POZ=0

yoksa buraya mı ?(2 nci seçenek )

ZAMAN_YAZ:
         
        high  RTC_RST
        SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'YAZMAK İÇİN HAZIRLA
        low RTC_RST:PAUSEUS 10
        high RTC_RST          
        SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 0]  'YAZ
        low RTC_RST
        High RST      ' (triglejarj etme bölümü 1 diyot 1 dirnç için )
        SHIFTOUT DTA,CLK,LSBFIRST,[%10010000,%10101001]
        Low RST
        PAUSEUS 10
        return

ete hocam hangisi doğru 1 nci seçenek mi? 2 nci mi? hepside yalnış ise proje(7)de nereye gireceğiz yazarsanız memnun olacağım teşekkür ederim.
ŞAPKALIAMCA MUTLULUKLAR DİLER

ete

@vatandas30,

Saat ayarı için neden öyle bir yol seçtin anlamadım. Yanlış anlamadı isem programın baş tarafına satırlar halinde saat ve tarih bilgilerini girip RTC ye yadırıyorsun. Sonra bu satırları çıartıp pic'i yeniden programlıyorsun ve yeniden çalıştırınca RTC deki bilgiler saat ve tarih bilgileri olarak kullanılıyor. Benim programlarda,
ilk çalıştırdığın zaman doğal olarak her şey sıfır başlar. Ayar bölümünden ayarlarsın ve RTC ye yazdırırsın. Böylece picin voltajı kesilip yeniden başatsan bile RTC dek bilgiler silinmemiş olur.
Senin yapacağın iş programına bir saat ve tarih ayar menüsü koymak.

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

ete

@Sapkaliamca,

Bence ikisinde kullanma ve programın en başına yani BASLA: satırından önce
LOW SCLK  'clock low dan başlamalı
HIGH  RST
SHIFTOUT  IO,SCLK,LSBFIRST,[8E,00] 'wrt protec açıldı
LOW RST
HIGH RST
SHIFTOUT IO, SCLK, LSBFIRST,[%10010000,%10101001]
LOW RST

satırlarını ilave et veya programın en sonuna ;
TRICKLE:
LOW SCLK  'clock low dan başlamalı
HIGH  RST
SHIFTOUT  IO,SCLK,LSBFIRST,[8E,00] 'wrt protec açıldı
LOW RST
HIGH RST
SHIFTOUT IO, SCLK, LSBFIRST,[%10010000,%10101001]
LOW RST

şeklinde bir bölüm ilave et ve BASLA satırından hemen öncesine de GOSUB TRICKLE
şeklinde bir satır ilave et olsun bitsin.

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

vatandas30

zannedersem hatamı buldum. senin programında olduğu gibi programın başında değişkenleri sıfırlamamışım. şu adreste şöyle birşey yazıyor.
http://www.bilesim.com.tr/tr/index.nsf?lf=/tr/leftbaryayincilik.html&rf=http://www.bilesim.com.tr/mistoportal/showmakale.nsf?xd=3473.xml

saniye registerinin 7. biti 1 olduğunda ds1302 nin osilatörü duruyormuş. dolayısıyla saat duruyor. sen en başta tüm değişkenleri sıfırlamışsın dolayısıyla ds1302 nin osilatörünü çalışır vaziyette tutuyorsun.

sapkaliamca

@ETE hocam yardımlarıniz için teşekkür ederim deneyeceğim

hocam @BALKES10 arkadaşımızın bahsettiği tarih bölümünde üçüncü led muhabbeti için port kalmadığı için 628 olmaz denmişti benim şöyle bir fikrim var ancak olurmu bilmem seven displaylerde mevcut nokta (dot) 74hc595 in boş olan (Q7 veya Q7') portuna bağlansa yada üçüncü led bağlansa hc595 e sinyal gönderttirilerek dot yada led kontrol ettirilemez mi yapılamaz mı fikir olsun diye söylüyorum olurmu bilmiyorum???
ŞAPKALIAMCA MUTLULUKLAR DİLER

ete

@Sapkaliamca,
Aslında HC595lerin 7. bitleri bu iş için kullanılabilir. Ama bana kalırsa gerek yok. Zaten aradaki ledler yanınca tarih olduğu belli oluyor. Sıkıntı olur ise yaparız. Yada en doğrusu bunu isteyen kendi yapsın.
595 lerin 7. biti ile birer led sürüp arada yaktırsınlar.

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

sapkaliamca

@ETE

Hocam haklısınız belli oluyor zatende balkes10 arkadaşımız masraf etmesin 877 yada 876 ya yazmak için diye söylemiştim yoksa umarım balkes10 arkadaşımızda görmüştür yazdıklarımızı teşekkür ederim.
ŞAPKALIAMCA MUTLULUKLAR DİLER

balkes10

hiç aklıma gelmemişti dörtli bir grup led ile deneyeceğim teşekkürler...
SADECE ŞAHLAR HAMLELERİ ÖNCEDEN SEZER

ete

@Balkes10,

Yapacağın yalnıca şunlar,
- İstediğin bir HC595'in 7.bitine 330 ohm direnç ile bir led bağla. LED in diğer ucu GND de olsun.
- EKRAN2 etiketinden sonra gelen HIGH PORTA.3 komutunu LOW PORTA.3 olarak değiştir.

- Hangi 595'e led bağladı isen ona bilgi gönderilen Shiftout komutunda en sonda yer alan [SAYI] terimine [SAYI+128] şeklinde bir komut ilave et. Böylece displaye çıkacak sayı ile birlikte 7 bite bağlı led de yanacaktır.

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

sapkaliamca

Alıntı yapılan: "ete"@Sapkaliamca,

Bence ikisinde kullanma ve programın en başına yani BASLA: satırından önce
LOW SCLK  'clock low dan başlamalı
HIGH  RST
SHIFTOUT  IO,SCLK,LSBFIRST,[8E,00] 'wrt protec açıldı
LOW RST
HIGH RST
SHIFTOUT IO, SCLK, LSBFIRST,[%10010000,%10101001]
LOW RST

satırlarını ilave et veya programın en sonuna ;
TRICKLE:
LOW SCLK  'clock low dan başlamalı
HIGH  RST
SHIFTOUT  IO,SCLK,LSBFIRST,[8E,00] 'wrt protec açıldı
LOW RST
HIGH RST
SHIFTOUT IO, SCLK, LSBFIRST,[%10010000,%10101001]
LOW RST

şeklinde bir bölüm ilave et ve BASLA satırından hemen öncesine de GOSUB TRICKLE
şeklinde bir satır ilave et olsun bitsin.

ETE

   Hocam verdiğiniz komutları söylediğiniz yerlere yazdım ancak combile ederken daha ilk satırda
"LOW SCLK  'clock low dan başlamalı" satırında hata veriyor ilk yazdıklarımı kaldırıyorum sondakinde de hata veriyor unuttuğumuz birşey mi var acaba hocam dediğiniz gibi 1 nci kodu BASLA: satırının hemen üstüne 2 nci kodu ise END komutunun hemen üstüne girdim ama hata verdi??

    Balkes10 arkadaşımız için yazdığınız 3 ncü LED için komutları bende yazdım ve 595 in 7 nci pinine bağladım çok şık görünüyor.
ŞAPKALIAMCA MUTLULUKLAR DİLER

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
,
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

vatandas30

hata şurada. eğer ete üstadın yazdıklarını kopyala yapıştır yaptıysan;

SHIFTOUT  IO,SCLK,LSBFIRST,[8E,00] 'wrt protec açıldı


SHIFTOUT  IO,SCLK,LSBFIRST,[$8E,$00] 'wrt protec açıldı


olacak. üstad $ koymayı unutmuş.

vatandas30

eksi sıcaklığı denemek için az önce buz getirttim. sıcaklık sıfıra düştü. sonra 34-35 dereceyi göstermeye başladı. programın eksi kısmında bir sorun var sanırım.
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        ' 
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-3
    RETURN    


sevgili ete yardımlarını bekliyorum. bu kısımları senin programından almıştım.