ds1302 sorunu

Başlatan kurtuluş, 13 Nisan 2015, 18:49:31

kurtuluş

hocam ne yaptıysam ds1302 ve kristal ssaati günde 6 sn ileri götürüyor. birkaç kez kristalin frekansını bile ölçtük başta 32768 bir süre sonra 32771 vb oluyor defalarca pc nin anakartından kristal söktük bir türlü sorunu halldemedim saat ileri gidiyor

Burak

Denemelerinizi Breadboard'damı yapıyorsunuz yoksa , bir PCB üzerinde mi çalıştırıyorsunuz .. ?

Burak
Ω Gens Una Sumus Ω

kurtuluş

hocam hepsini pcb de yaptım. ne yaptıysam günde 6 sn ileri gidiyor. hatta dijital bir osiloskop ile kristal frekansınıda ölçtüm 32771 vb değer ölçüyorum

ete

Başlangıçta normal frekans verip de sonradan frekans artıyor ise DS1302 nin sıcaklığı artıyordur mutlaka.
Ya ısı yayan bir şeyin yanında duruyor yada çok sık okuma emri veriyorsunuzdur.
RTC lerde bir ortak özellik dikkatimi çekiyor. Mantıklı düşünürseniz RTC de değişim her 1000 ms de bir olmakta ve sn değeri bir artaktadır. Bunu bile bile her 10 ms de bir zaman değerini okumaya kalkarsak boşuna entegreyi meşgul etmiş ve onu aşırı çalışmaya zorlamış oluyoruz. Bu sıcaklığının artmasına ve satbil çalışmamasına sebep oluyor.
Eski programlarımda buna bende pek dikkat etmiyor idim ama son dönemde yazdığım programlarda genellikle timer sayacı yada kesme kullanıp zaman dolduğunda okuma yapmaya özen gösteriyorum. Bu şekilde çalışan saatlerin daha düzgün çalıştığını söyleyebilirim.

Ete

kurtuluş

Ete hocam benim bu programım sizin daha önce 4 dijitli yapmış olduğunuz programdır ben sadece takvim göstermesin diye o kısımlarını pasifize ettim. ayrıca bunda daha öncelerden de yapmıştım bire bir aynısı onlarda böyle promlemler olmuyordu. size programı tekrar atıyorum bir bakarsanız çok sevinirim benim pilim şarşlı olmadığı için ds modülün şarş kısmınıda iptal ettim. Bunu güneş enerjisi ile çalıştırıp okula asmayı düşünüyorum günde 6 sn büyük bir değer hocam yardımcı olursanız sevinirim.

ete

Bu programda zaman kesmesi kullanılarak uygun amanda RTC okuması yapmaya çalışmışım.
Ancak KESEMetiketi altındaki şu satıra bakarsan;

IF SAYAC=69 then
bir terslik olduğunu anlarsın. Normal şartlarda ortalama 61 adet kesme 1000 ms civarında bir süreye eşdeğerdir. Sen bunu 69 yapmışsın. Bu her seferinde biraz daha uzun süre ile zaman okuması yapılacağı anlamına gelir.
Süre işinde etkilimidir değilmidir bilemem. Ama orada yazması gereken rakam 61 dir. Aslında komut gecikmeleri nedeni ile bu değer 58-60 arasında alınır ama sen zaten 1000 ms aşıldıktan sonra okuma yapacağın için 61 yazmanda fayda görüyorum.
Bu değeri düzelt ama günde 6 sn sapma yaratabileceğinide pek sanmıyorum. Böyle bir sorun acak parazitik durumlarda ortaya çıkar. Bana kalırsa DS1302 besleme bacaklarına 100nF kondansatör bağla mutlaka.
PCB de mümkünse kristal bacaklarının etrafında bir GND çemberi yarat. Bunların hepsi parazitleri engellemek için yapılması gerekenlerdir.  Data sheet de nasıl yapıldığı resimle gösterilmiştir. Orada çember değil kristal bacakları ve kristal bağlanan bacaklar bir GND karesi içine alınmıştır. Benzer bir şeyi tel çekerek yaratabilirsin.
Ayrıca kristal gövdesine bir tel lehimleyip o telide GND ye bağla. Tel kalınca olsun. Bu işlem kristal gövdesinin stabil bir ısıda tutulmasını sağlamaktadır. Böylece kristal daha randımanlı çalışabilecektir.
Başkada yapılacak bir şey yok zaten.

Ete

MS_59

hocam kesme içinde GOSUB ile dallanma doğru bi yöntemmi
mehmet

ete

Hiç doğru bir yöntem değil aslında. Bu hatayı yapmışım her halde tam olarak yaratacağı sorunları düşünmediğim dönemde yazdım bu programı. Ancak çalışıyor. Normal şartlarda kesme çok özel bir yer. Oraya girerken işlemci elindeki registerlerin değerlerini stacke kayıt ediyor. Çıkarken de geri alıyor. Kesme haricine gidilince bu işlemin bu geri alma işleminin aksaması lazım ama burada bir sorun çıkmadı galiba. Bu programı yeniden düzenleyip o kısmı iptal etmek lazım.
EN iyisi yapayım ben bunu.

Ete

MS_59

tamam hocam bende öyle biliyordum çünkü, sağolun
mehmet

kurtuluş

Ete hocam ben kristali her defasında bir çemberle faraday kafesi gibi kullandım. kesem içindeki 69 u farkettim ama onunda zaman alma değerini değiştireceğini düşünüyorum normal zamanı saydıran zaten kristal ve zaman okuduğum ds modül  yine de tarar değiştirip deneyeceğim sağolun.

ete

#10
Programı yeniden düzenledim.
Kesme işini iptal ettim TMR1 sayacı ile iki 500 ms lik dilim elde edip hem orta ledleri buradan kontrol ettim hemde zaman okumayı 1 sn de bir yaptırdım.
Bu şekilde daha sıhhatli çalışacaktır.
Programı deneyemedim çünki artık benim program olmaktan çıkmış. Pek çok pinin yeri değişmiş. Bende simulasyonu olmadığı için deneyemedim anlayacağınız. Ancak aynı programın orjinalinide çevirdim ve onu denedim güzel çalışıyor.

Deneyip sonucu bildirirsen sevinirim.
Ete

NOT: Ufak bir hata düzelttim.Dosyaları yeniledim

kurtuluş

hocam deneyip size yarın dönüyorum sağolun

kurtuluş

hocam sizin yazdığınızı attım ancak ısı gösterirken flaşlar yanıp sönmeye de çalışıyor düzeltemedim sağolun

ete

onu düzeltiriz.
En altta , GOTO BASLA komut satırından evvel  PORTB.4=1 diye bir komut olması gerek.
O satırı şöyle değiştir;
       IF Y<11 THEN PORTB.4=1
Derleyip yeniden yükle.
Ete

kurtuluş

Hocam yükleyip attım. Ayar gidip gitmediği hemen anlaşılmıyor. deneyip size döneceğim.

Powered by EzPortal