lcd ile geri sayımlı röle kontrolü yardım!

Başlatan tosun54, 26 Mayıs 2015, 18:11:36

tosun54

programlama konusunda yeni olduğum için bana bu konuda yardım edebilirmisiniz. Benim için en çok sıkıntılı olan kısmı yazıların flash yapması ve röle zaman ayarı geri sayım.

                   Projede istenilenler:
    Projede 4x20 grafik LCD, iki adet röle (zaman ayarlı olarak sadece dakika ve saniye),açıp kapatmak için anahtar(on-off), programı çalıştırmak için başlat butonu, kapağın açık veya kapalı olduğunu anlamak için switch program bitişinde sesli uyarı(buzzer).
   Devreye bağlı olan röleler ayrı ayrı seçilerek çalıştırılabilecek. Programı (ON) yaptığımızda LCD'de "AYARLAR" menüsü olacak buradan ilk olarak "RÖLE"1 ve "RÖLE2" nin AYAR seçimi yapılacak.
       Hangi "RÖLE" seçili ise o röleye ait çalışma (ON)zaman ayarı yapılacak(Örnek: RÖLE 1 ZAMAN= 02 Dk 25 Sn ) bu ayar menüsü diğer röle içinde aynı olacak.
       Ayarlar yapıldıktan sonra hangi rölenin çalışacağı seçilir,(Örnek "RÖLE1") başlat  butonuna bas kapak switch'i  kapalı ise programı çalıştır, açık ise programı çalıştırma ekranda "KAPAK AÇIK" uyarısı ver. Program çalışır ise ekranda "ÇALIŞIYOR","KALAN SÜRE"  XX Dk XX Sn "yazacak (röle için ayarladığımız zamandan     i                                                                                                                                                                                                                                                                                 Program sonunda kapak açık olmadığı sürece program çalışmayacak (tekrar "BAŞLAT" a basılırsa) ekranda "PROGRAM BİTTİ" (flash yaparak uyaracak) kapak açılana kadar sesli uyarı (buzzer) çalışacak.             

tosun54

#1
programın büyük bir çoğunluğunu hallettim devrenin dosyaları işyerinde kaldığı için ekleyemiyorum. Program tek röle(röleye gerek kalmadı transistör ile hallettim) için istediğim gibi çalışıyor. Sıkıntı yaşadığım yer menü oluşturup ayar kısmında röle1 ve röle2 seçmem bu seçimi eproma kayıt edip, seçime göre devreyi çalıştırmak.   

ete

Hallettiğin kısıma bir bakalım. Ayrıca devre şemasını JPG olarak da ekle.

Ete

tosun54

istediğiniz dosyaları ekledim. menü oluşturup menü içerisinden alt veya üst gurubu seçip program hangi grup seçili ise ona göre devem edecek. birde kapağı iptal edip onun yerine stop koyacağız programın neresinde olursa olsun stop a basıldığında programı resetleyip başla etiketine dönecek yardımınız için teşekkürler.

ete

Ben zannettimki program aşağı yukarı hazır bir menü düzenlemesi eksik. Burada bir şey yok ki. Bu söylediklerini yapmak için sabahtan akşama kadar kod yazmak lazım. Menü ekranlarını bile hazırlamamışsın. Kim hazırlayacak onları benmi? hiç sanmıyorum. Sen çalışmaya başla tıkandığın yerde yardım iste bence. Zira bu istediğin yeni program yazmaktan farklı bir şey değil. Kusura bakma ancak kısmi yardım edebilirim.

Ete

F®T

Bu kadar kod yazmışınız geriye bir şey kalmamış.Gerisinide getirebilirsiniz.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

tosun54

menü kısmını yazabildiğim yere kadar yazacağım. Peki stop butonunu nasıl halledebilirim.

F®T

Programa

IF STOPBUTONU=1 THEN GOSUB RESET:GOTO BASLA    gibi bir satır ekledinmi oldu bitti.


RESET:
Bu kısma resetlemek istediklerini yazarsın
.......
......
.......
RETURN

Bu şekil eğer STOP  butonuna basılırsa işlemcinin bağlı olduğu stop butonu bu pine artı 5 volt verirse program bu satırda reset alt programına gider orda neyi resetlemek istiyorsan yazarsın sonra döner ordan basla satırına gelir tekrar sıfırdan devam eder.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

tosun54

menü kısmını oluşturdum fakat sonunu getiremiyorum işlemcinin hafızası yetmediği için 16f877 ile değiştirdim. menünün son kısmı olan UST ve ALT AKTIF PASIF durumu, örnek üst poz aktif olarak seçildiğinde alt pasif olacak basla da ust poz aktif yazacak gerisayda high üstpoz olacak. alt poz aktif olarak seçildiğinde üst pasif olacak basla da alt poz aktif yazacak gerisayda high altpoz olacak. 

ete

Bu kadar bilgi ile bu dediklerini yapmak mümkün değil maalesef. Anlayamıyorumki nasıl yapayım.
" - UST POZLAMA AYARI"
" - ALT POZLAMA AYARI"
" - KONUM AYARI CIKIS"
şeklinde 3 adet menü seçeneği mevcut. Üst sıradakini seçince diğer menüye geçiyor. Orada en başa ekranı sildirecek komutu koyduğun için görüntü yerinde durmuyor. İlk gediğinde ekranı silsin ama alta ulaşıp tekrar yukarı gönderdiğinde artık ekranı silen satıra değilde bir altına yönlendirmen gerekiyor. Birini ben yapayım gerisini sen hallet.
UST_AYAR:
    LCDOUT $FE,1
UST_BIR:
    lcdout $fe,$02,"      UVP 2015      "
    LCDOUT $fe,$C0," UST POZLAMA AYARI  "
    LCDOUT $FE,$94," -  UST (AKTIF)     "
    LCDOUT $FE,$D4," -  UST (PASIF)     "
    GOTO UST_BIR

UST AYAR ile ALT_AYAR sanki bir birinin aynısı. Anladığım kadarı ile birinde UST AKTIF diğerinde ALT Aktif olmalı öyle değilmi?
Bir şeyin aktif yada pasif olmasını ancak bir bit değişkeni (BAYRAK yada FLAG) kullanarak halledersin.
Mesela UST_FLAG  VAR BIT şeklinde bir bit değişkeni tanımlasan ve UST_FLAG=1 ise Aktif, 0 ise pasif olduğu anlaşılsa işin epeyce kolaylaşır. Ekrana yazarken de;
LCDOUT $FE,$94," -  UST  "
IF UST_FLAG=1 then
   LCDOUT "AKTIF"
ELSE
   LCDOUT "PASIF"
ENDIF
şeklinde yazdırabilirsin hemde aynı satıra aktif ise aktif değilse pasif yazdırarak.
ALT içinde benzer uygulama kullanabilirsin.

Menü yazılarını seçeneklerini daha doğrusu bütün ekranları birer alt programda tutarsan yeniden yazmak zorunda kalmadan her birini GOSUB ile yazdırabilirsin. Daha kolay ve güzel olurdu.

Ben olsaydım PORTB ye tuşları bağlar dahili pullup larından istifade ederdim. Ekranı da PORTC ye bağlardım.
Böylece çok gerekirse DUR butonu için kesme kullanır ve hangi konumda olursam olayım anında DUR butonuna basıldığını kolaylıkla algılayabilirdim.

Ete


Powered by EzPortal