avatar_serkan_31_31

7seg saat devresi

Başlatan serkan_31_31, 11 Nisan 2012, 15:11:10

serkan_31_31

Selam ete hocam yine başınızı çok ağrıtıyorum ama yardımınıza ihtiyacım var.şimdi 7 segment bir saat devresi yapmaya çalışıyorum, 4 digit ve 4 tane 74hc595 kullandım. ayrıyeten ayar yapmak için sec yukarı ve asagı olarak 3 buton kullandım. şimdi benim bilmek istediğim ayar yaparken o dijiti nasıl flas(yani ayar esnasında dakka ve saat hanelerini yakıp söndürmeyi) nasıl yaparım, mantığı nedir? birde ds18b20 programı ekliycem ama şu ekranda kalma süreleri ve o işlemin nasıl yapıldığını da söylerseniz çok sevinirim hocam. biliyorum bu sorduklarımın hepsi sizin yaptıgınız son 7segment saat devresinde var ama ben ne yazdığımı ve nasıl oldugunu öğrenerek yapmak istiyorum.yani sizin devreden  kod çalmadan işin mantığını bilerek kendim yapmak istiyorum.saat çalışmam asagıdaki dosyadadır.şimdiden çok teşekkür ederim herkese başarılar
serkan ünaldı
Serkan Ünaldı

ete

Flash eden karekter demek bir var bir yok demektir. Örnek verecek olursak A karekterini flash yaptırırken,
Ekrana A yazarsın 120 ms beklersin. Sonra ekranı silersin 120 ms daha beklersin aynı işlemleri tekrarlarsan al sana flash yapan A harfi gelir. LCD ekranlarda gerçekte karekter değil çizgi şeklindeki imleç flash yaptırılır.
7 segmentlerde ise karekterin kendisi flash yaptırılır. Artırma eksiltme işlemlerinde karekter ekranda iken değiştirme yapılır.

Karekterin ekranda kalma süresi taramalı sistemler için geçerli olan bir terimdir. 74HC595 kullanılan sistemlerde atarama yoktur.
Her bir karekteri bir 595 tuttuğu için ekranda kalma süresi diye bir şey geçerli değildir. Karekter süreklki ekrandadır.
Taramlı sistemlerde bir karekterler her 1-5 ms arasındaki bir sürede değiştirilmelidir.

Ete


serkan_31_31

öyle değil hocam yapmak istediğim ayar menüsüne girince hangi bölmede ayar yapıyorsak o bölmedeki displayi yakıp söndürmek istiyorum... siz bir saat devresinde 74hc595 ile yapmıştınız.o sistemi yapmak istiyorum kısaca ordaki kodları anlatırmısınız hocam ?
Serkan Ünaldı

ete

Yer o kadar önemli değilki sana mantığını anlattım uygulamayı kolaylıkla yapabilmen gerekir.
İllaki kodlar üzerinden açıklama istiyor isen al bakalım.
Burada saniye değerini değiştirme kodları mevcut. Kodların altına doğru Z=1-Z şeklinde bir kod göreceksin. Bu komut Z ye toggle işlemini yaptırıyor. Z 1 iken sıfır sıfır ikende 1 oluyor.
ZAM_BIR:
        W=1
        IF SEC=0 THEN ZAM_IKI
        IF YUKARI=0 THEN
          IF Z=0 THEN sn=SN+1
          IF SN=31 THEN SN=0       
        ENDIF             
        IF ASAGI=0 THEN
           IF Z=0 THEN SN=SN-1
           IF SN=255 THEN SN=30
        ENDIF
        Z=1-Z
        GOSUB EKRAN_3       
        GOSUB GECIKME
        GOTO ZAM_BIR

Değiştirilmiş değerleri ekrana vermek için  GOSUB EKRAN_3 şeklinde bir satır göreceksin. Bak bakalım EKRAN_3 de ne yapılıyor;
EKRAN_3:
        X= SN DIG 0:GOSUB BAK_1:GOSUB AKTAR
        X= SN DIG 1 :GOSUB BAK_1:GOSUB AKTAR
        u=0
        SAYI=0:GOSUB AKTAR
        SAYI=SUM:GOSUB AKTAR
        w=0
        PULSOUT st,5
       RETURN

Peki burada Sayının digit leri ayrılıp ona karşılık gelen 7 segment değerleri önce alınıyor. BAK_1 alt programı bu işi yapıyor.
Bakalım ne var orada;
BAK_1:
       GOSUB AL
       IF Z=1 AND U=1 THEN SAYI=0             
       RETURN

Gosub AL satırı ile sayının 7 segment karşılığı alınıyor. Ancak Z=1 ise alınan karşılık sıfır yapılıyor. Sayının 7 segment karşılığını sıfır olması demek ekrana bir karekter çıkmaması demektir. İşte bu Z=1-Z komutu sayesinde ilgili karekter bir boş bir dolu olarak ekrana verilmektedir. Sana söylediğim şeyin program karşılığda budur.

Ete

serkan_31_31

sagolun hocam allah razı olsun, ben eve gidince bi deneyim. peki saat ve derecenin ekranda gösterimleri nasıl oluyor hocam? yani bir saat bir derece bir saat bir derece....
Serkan Ünaldı

ete

Bir saat bir derece göstermenin türlü yolu var.
Ben bir Y değeişkeni kullandım.
Y değeri he sn değiştiğinde değişiyor. Y=Y+1 oluyor. Şayet Y=15 olmuş ise y=0 oluyor.
Y değeri 0-9 arasında ise saat gösteriyor , 10-15 arasında ise sıcaklık gösteriyor.

ETe


serkan_31_31

hocam yapamadım bu kodlar benim devreye nasıl uyarlanır :/
Serkan Ünaldı

fatih88

serkan kardeşim yolladıgım kodlara bir bak belki senin için bir yardımı olur
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

serkan_31_31

sagolun hocam eve gidince bir göz atarım. çok teşekkürler :)
Serkan Ünaldı

fatih88

sorun değil kardeşim umarım işine yarar
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

serkan_31_31

hocam yardım eden etmeyen herkesten allah razı olsun sonunda bitti. ete hocama ve fatih hocama teşekkürlerimi bir borc bilirim. yararlanmak isteyenler göz atabilir kaynak kodları ve dosyaları aşagıdadır....
Serkan Ünaldı

serkan_31_31

merhaba hocam rahatsız ediyorum ama size takıldığım bir yeri daha sormak istiyorum bu saat devrelerinde orta saniye ledini nasıl hiç aksatmadan eşit miktarda saniyede bir kez yakıp söndürürüz?
Serkan Ünaldı

ete

Orta ledlerin yanma mantığı 500 ms on, 500 ms off şeklindedir aslında. Ama sen  1000ms on - 1000 ms off şeklinde yakacak isen ona diyeceğim yok. Bunun için programda her sn değişiminde ledlere toggle işlemini uygularsın olur biter.
Ete

serkan_31_31

ama onu nasil yapacam hocam.okuma ve yazma süreleri uzuyor
Serkan Ünaldı

ete

Orta ledler için daha güzel bir çözüm var aslında,
DS1307 RTC kullanın ve SOUT çıkışını 1 Hz olarak ayarlayın. Böylece o bacaktan 1 hzlık bir sinyal çıkar. O sinyal ile ledleri sürün olsun bitsin. Böylece program o ledlerle uğraşmak zorunda kalmaz.

Orta ledler için ben programlarımda genelde kesme kullanarak 500ms lik süreleri kullanmaya çalışırım. Saat projelerime bakınız.

Ete

Powered by EzPortal