seven segment saat-derece

Başlatan sinasos, 28 Şubat 2015, 03:22:50

sinasos

değerli dostlar merhabalar,
epey uzun süredir ete hocamıza ait bir saat projesi ile uğraşıyorum, üzerinde birtakım değişiklikler yaparak son halini  ekliyorum. bunun proteus ve yazılım dosyaları mevcut. bir sorunum var ve şu saat oldu çözemedim. bazen insanın aklının üzeri kapanır ya ! sorun şu ! display ortasında bulunan saniye gösteren ledler düzenli değil. lütfen hatamın nerede olduğunu bildirin de bende şu kafa karışıklığından kurtularak rahatlayayım. herşey normal ama ledler anormal :)

ete

#1
Bu orta ledlerin en güzelçalışma şekli 500 ms HIGH ve 500 ms LOW şeklinde çalışmasıdır.
Bunu sağlamak amacı ile programda kesme kullanmış idim. Kesme sayacı 60 değerine ulaşınca 1000 ms geçmiş olacağı için sayacın başında orta ledleri HIGH yapıp sayac değeri 30'u aşınca da ortal ledleri LOW yapıyor idim.
Sende aynı mantığı kullanmışsın. Bir farkla IF SAYAC=30 THEN LOW NOKTA şeklinde kullandığın komut her zaman SAYAC=30 değerini göremeyebilir. Üstelik LOW NOKTA demekle işide uzatmış oluyorsun. Zira komut once NOKTA pinini OUT yapıyor sonra Nokta pinine LOW veriyor. Bunu tek işlem olarak yapmak için direk NOKTA=0 demen daha uygun olacaktır.
Sayac=30 konumunu kaçırmamak için oradaki komutu;
IF SAYAC>29 THEN NOKTA=0 şeklinde değiştirirsen sistem daha güzel çalışacaktır.
Yine sorun oluyor ise asıl sorun program yükünün fazla olması anlamına gelir. Zira program çok fazla iş yaparak senin yazdığın komutlara denk gelemeyebilir. Benim yazdığım şekilde sonradan da denk gelse ledleri söndürecektir ama yanıp sönme eşit aralıklarda olmayabilir. O zaman 29 rakamı ile oynayarak dengeyi sağlamaya çalışırsın.

Ete


sinasos

#2
cevabınız için teşekkür ederim, çok naziksiniz. Programda da uygulamada da çalıştı. Hazır sizi bulmuşken bir şey daha sorabilirmiyim ? uygulamada devre derece kısmına geçince sürekli değişiyor. hani "If y=11 then y=0" satırından sonra y>5 ----yani y>5 ile y=11 arasında her seferinde ısı sensorunu okuyorya o sırada örneğin ilk seferinde 16 ikinci okumada 17 ücüncü okumada 18 diyor ve orada bir yerde kalıyor. yani ısı sanki hızla yükseliyormuş gibi oluyor. ama bunu genelde ortam sıcaklığı 20 C civarındayken yapıyor. bunun sebebi konusunda fikriniz varmı acaba ?


not : bunu sürekli yapmıyor ben şimdi bir video çektim isterseniz bir bakın. bu video da 16-17 arası değişiyor ama  ortam 20 derecelere geldiğinde 18-21 arası oynuyor...

ete

Sebebini bilemiyorum. Ancak iki kusur var gibi programda. Birincisi gereksiz yere bir döngüde (basla ile goto basla arasında) iki defa sensör okuması yapılıyor ki bu gereksiz. İkincisi sensör okuma emrinden sonra bilginin hazır olup olmadığına bakan satırların kapalı olması.
Sensör okumada yer alan ve mevcut durumda kapalı olan şu satırları aktif hale getirsen daha uygun olurdu. Belkide sorun sensor okumasını tamamlamadan sıcaklık değerini almaya çalışman olmaktadır.
'           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
'           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
Bu semsör normal şartlarda sıcaklığı okuyup vermesi 750 ms sürmektedir. Saat ve sıcaklık gösteren devrelerde ise bu süre genelde sorun yaratmaktadır. Çünki 750 ms orada beklerseniz bu seferde diğer yapılacak işler aksamaktadır.
Bu nedenle genelde ben yeni projelerimde sıcaklığı okuma emrini verip geri dönmekteyim. İşlerimi bitirdikten sonra da hazır olan sıcaklığı gidip okumaktayım. Böylece 750 ms lik bekleme süresini ben diğer işleri yapmakta kullanıp arta kalan zamanda gelip hazır olacak olan sıcaklığı okumaktayım.
Şimdi soracaksın bunu nasıl yapacağız diye; Şöyle yaparsın.
Öncelikle ;
IF Y>5 THEN GOSUB SENSOROKU:GOSUB EKRAN1  satırını,
IF Y>5 THEN GOSUB EKRAN1  şeklinde değiştir.

Sensör okuma bölümündeki satırları şöyle düzenle;

SENSOROKU:

           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
           RETURN   'burada okuma emrini verip geri döndük.
Kapalı olan satırları aktif hale getir.
Sonra , IF Y>5 THEN GOSUB EKRAN1  satırından bir önceki satıra şunu yaz;
Gosub Bekle  'bu komut okuma bilgisinin hazır olup olmadığına bakarak hazır olunca okuyup sıcaklığıda hesaplayarak geri döner. Böylece bir alt satırda şayet sıcaklık ekranında isen sıcaklığı göstermiş olursun.
Hatta başlangıç kısmını şöyle yaparsan daha da iyi olur;
BASLA:        
        IF SAYAC>30 THEN NOKTA=0':HIGH PORTB.4:PAUSE 500:LOW PORTB.4
        IF Y=11 THEN Y=0 'TOPLAM GÖSTERİM SÜRESİ
        If SEC=TUS THEN AYAR
        GOSUB BEKLE
        IF Y>5 THEN GOSUB EKRAN1 'DERECE
        IF Y<6 THEN GOSUB EKRAN0  'SAAT               
        GOSUB SENSOROKU
GOTO BASLA


Sensor okuma kısmında şöyle yapman gerekecek;
SENSOROKU: 

           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
           return
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
           
SENSORYAZ:
          OWOUT   COMM_Pin, 1, [$CC, $4E, $00,$00,$31]
          return           
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       ham=~(ham+2)
    endif
    ISI = HAM*10/16   
GEC:         '
    FLOAT=ISI//10
    ISI=ISI/10
    RETURN 


ETE

sinasos

Söylediğinizi uyguladıktan sonra daha kararlı çalışmaya başladı. Tekrar teşekkür ederim. Sizi üzmezsem eğer özel birşey sorabilirmiyim ? Bu şekilde bir site açmışsınız ve hiçbir karşılık beklemeden herkesin sorularına cevap veriyor, yardım ediyorsunuz ! bunu neden yaptığınızı çok merak ettim. günümüzde karşılıksız birşey yapana pek rastlamak mümkün değil de ?
Saygılarımla.

ete

Her şeyden önce program yazmaktan zevk alıyorum. Algoritma çözmektende zevk alıyorum. Sonuçta bu benim boş zaman değerlendirme usulüm. Gerçi çoğu zaman dolu zamanlarımıda kullanıyor ama ne yapalım zevk önde geliyor.

Bu işte birinci amacım bilginin yayılması. Tabiiki bunu yaparken bir şeyler öğrenmeye çalışanları desteklemeye çalışıyorum.
Bu edenle hazır iş isteyenlere kesinlikle itibar etmiyorum. Aslında bu site olamadan da bu işi bir kaç site üzerinden yapıyordum zaten. Ama daha rahat bir çalışma ortamı yaratmak ve benim gibi Basic kullananları desteklemek amacı ile bu siteyi açtım.
Bu demek değildir ki yalnızca karşılıksız iş yapıyorum.  Sonradan,  sürekli gelen istekler doğrultusunda karşılık alarak da iş yapmaya başladım. Aslında başlangıçta karşı idim bu konuya zira mevcut bir işim var zaten. Zevk aldığım bir konuda para istemek bana ters gelmiş idi. Ama yaptığım bir çok projenin dükkanlarda satıldığını yada benden yardım isteyenlerin projelerimi sonradan satışa sunduklarını görünce uyandım artık. Zaman zaman elektronik ile ilgili siteleri dolaşırım. Çoğu zaman bir projemin o sitede yer aldığını görüyorum. Bu beni üzüyor. Aslında bir karşılık beklediğimden değil ama insan kimin projesi diye bir ibare koyar hiç olmaz ise. Yada izin ister veya pay verir. Ama olmuyor böyle şeyler.
Bakın daha dün bir siteye tesadüfen ulaştım. ;

http://www.miliamper.com/projeler/projeler.html

Sitenin ana sayfasına bakarsanız ne amacı olduğu açıkça belli oluyor. Burada yer alan benim projem. İzinsiz oraya koymuş vatandaş. Bir gün çatacağım bunlara esaslı bir şekilde. Basic derslerim benden izinsiz (3 sitenin izni mevcut) belkide 20 tane sitede yayınlanıyor. Çoğu projemde öyle.

Bu tür nedenlerden dolayı bazı istekleri ticari amaç güttükleri için cevapsız bırakmaya yada cevapları yüzeysel olarak vermeye başladım. Ardından da istek geldikçe ticari işlerde kabul etmeye başladım.
Hiç bir zaman oturup şunu yapayımda satayım düşüncem hiç olmadı. Para ile yaptığım işler tamamen gelen istek doğrultusunda işler. 
Bu konuda sayfalar dolusu yazı yazabilirim. Ama gerek yok. Bu kadar bilgi yeter sanırım.

Ete

sinasos

sizi şimdi çok daha iyi anlıyorum. Ancak her insan maalesef sizin düşüncelerinizi taşımıyor ancak altında ark niyette aramamak gerekli. (sizin aramadığınız gibi !) herkes kendi çapında bir şeyler yapmak ve insanlardan bunun üzerinden para kazanmak istiyor. örneğin bende sizin projesini hazırladığınız şu saati biraz daha geliştirip ticaret yapmayı düşünüyordum, fakat şimdi vazgeçtim. Hakkınızı helal edin.
Saygılarımla
sinasos...

Powered by EzPortal