avatar_mc_no_fear

programlı kombi termostatı yardım

Başlatan mc_no_fear, 04 Ocak 2015, 22:23:33

mc_no_fear

hocam dediğiniz gibi yaptım. Sadece ilk karakteri kontrol ediyor gerisine bakmıyor. Dosyaları ekte sundum. Yardımcı olursanız sevinirim. Biryeri gözden kaçırıyorum ama neresi ????

ete

vericide aşağıdaki satırlar doğru değil,
 For I=0 to 5
   Lookup I,["KMBISI"],KYSL
   hserout [str SORU\6,"    "]
   If KYSL=SORU[I] then
        ESIT=0
        EXIT
   Endif
Next

Birincisi o Hserout komutunu neden oraya koydun? toplam 6 defa SORU değişkeni içinde kayıtlı 6 karekterli diziyi yollar.
Yollayacaksan döngüden önce 1 kere yolla olsun bitsin.
İkincisi karşılaştırmdada eşitlik deği eşitsizlik arıyoruz. Eşitlik için tamamını karşılaştırmak gerek. Halbuki eşitsizlik için arada eşit olmayan bir karekter yakalayınca karşılaştırmayı bırakmak mümkün olur.
Doğrusu aşağıdaki gibi olmalı;
 
hserout [str SORU\6,"    "]
For I=0 to 5
   Lookup I,["KMBISI"],KYSL   
   If KYSL!=SORU[I] then
        ESIT=0
        EXIT
   Endif
Next

bu satırlar sonunda ESIT=0 olursa eşit değil , ESIT=1 se eşit demektir. Sonrası malum.

Ete

mc_no_fear

Hocam çok teşekkür ederim. Sayenizde bu sorunda çözüldü emeğinize sağlık..... ;)

enginkanat

ETE hocam, string ifadeler için bir include dosyası (yada library) hazırlanabilirmi? karakter işleme konusunda bu dosyayı çağırsak ve sadece komutlar ile isteklerimizi gerçekleştirebilirmiyiz? Pic Basic de bu mümkün mü?

ete

İnclude sistemi bunun içindir. Yapılabilir elbette. Aslında asıl amaç sıklıkla kullanılan bazı program parçalarını yeniden yazmadan direk include ile programa eklemektir. Örneğin lcd, tuş takımı, sıcaklık ölçme, rtc kontrol gibi sistemler inlude altında programa hazır kod olarak eklenebilir. Bende pek aşışkın değilimbu şekil kullanmaya. Direk başka bir programdan kopyalayıp yapıştırmak daha kolayıma geliyor her nedense.

Ete

mc_no_fear

ON INTERRUPT GOTO GSM 
komutunu çıkarttığımda anda program normal bir şekilde çalışıyor. Ne yaptı isem USART kesmesini aktif edemedim. Hep hata veriyor. nereyi gözden kaçırıyorum arkadaşlarım, hocalarım yardımcı olurmusunuz? Dosyaları ekte sundum.

ete

Kesme alt programınabir bakalım istersen;
GSM: 
    GIE=0
    HSEROUT ["AT+CMGF=1",13]
    PAUSE 200
    HSEROUT ["AT+CNMI=2,2,0,0,0",13]   
    ESIT=1
    HSERIN,2000,BASLA,[WAIT("?? "),STR SORU\6]
    For T=0 to 5
    Lookup T,["ODAISI"],KYSL
    If KYSL!=SORU[T] then
    ESIT=0
    EXIT
    Endif
NEXT
    IF ESIT=1 THEN HSEROUT ["AT+CMGS=",34,"05059134268",34,13]
                   PAUSE 2500
                   HSEROUT ["SAAT ",DEC2 SAAT,":",DEC2 DAK," iTiBARi iLE ODA ISISI=",DEC2 ISI,".",DEC1 ONDA,"C DiR.",26]
    IF ESIT=0 THEN GOTO GSM2

GSM2:
    ESIT=1
    For T=0 to 5
        Lookup T,["KMBDRM"],KYSL
            If KYSL!=SORU[T] then
            ESIT=0
            EXIT
            Endif
   NEXT
    IF ESIT=1 AND DURUM=0 THEN  HSEROUT ["AT+CMGS=",34,"05059134268",34,13]
                                PAUSE 2500
                                HSEROUT [DEC2 GUNDUZ/10,".",DEC1 GUNDUZ//10," DERECE, GUNDUZ MODU AKTIF VE KOMBI=",DEC1 KOMBI,26]
    IF ESIT=1 AND DURUM=1 THEN  HSEROUT ["AT+CMGS=",34,"05059134268",34,13]
                                PAUSE 2500
                                HSEROUT [DEC2 GECE/10,".",DEC1 GECE//10," DERECE, GECE MODU AKTIF VE KOMBI=",DEC1 KOMBI,26]
    IF ESIT=0 THEN              HSEROUT ["AT+CMGS=",34,"05059134268",34,13]
                                PAUSE 2500
                                HSEROUT ["HATALI GIRIS. TEKRAR DENEYINIZ....",26]
   
    GIE=1
    Resume
enable

Birincisi GSM etiketinden evvel bir DISABLE yazman gerek. Sen her ne kadar GIE=0 yazsanda işlemci kendiside kesmeyi kapatması gerekir. Onuda DISABLE yapıyor zaten.

İkincisi bu programda USART kesmesi kullanılıyor. BU ne demektir? USART portundan (RX pininden) bir veri gelmeye başladığı zaman sistem otomatikman programı kesme etiketine yönlendirir. Bunu sanki musluktan su akmasını bekleyen bir sistemde su gelmeye başladığı zaman sizi musluğa su almaya yönlendirmek gibi düşünün. Hemen musluğunbaşına gittiniz su akıyor ama sizi su almak için engelleyen bir şey var ;
PAUSE 200 komut satırı. Bu size 200 ms bekleyin diyor. Beklediniz ama 200 ms sonunda veri gelmesi kesilecektir. Belkide 100 ms sonra kesilecektir. Siz 200ms beklediniz sonra veri alacağınıza veri yolluyorsunuz. Bu sistem o zaman usart kesmesi kullanmaya uygun değil demektir. Kesme oluştuğunda seri porta veri gelmiş onu alın demektir. Siz ne yapıyorsunuz alma yerine verme yapıp birde 200 ms bekliyorsunuz sonra veri almaya kalkıyorsunuzki bu bana göre hatalı bir uygulama. Bu şekilde USART çalışamaz.

Sonra HSERIN 2000 diyebaşlayına komutunuzda 2000 ms (2 sn) içinde beklenen veri gelmez ise BASLA etiketine gönderme yapmışsınız. BASLA kesme dıiında bir etikettir ve kesme içinden direk oraya gidemezsiniz. Kesme oluşması özel bir durumdur. Bu durumdan usulüne uygun çıkmanız gerekir. Bana kalırsa oradaki 2000 değeri yanlış bu bir . İKincisi de BASLA etiketine göndermede yanlış oraya kesmeden çıkış kısmına gönderme yapacak şekilde bir etiket adı yazmanız daha uygun olur.

Ete

mc_no_fear

#52
hocam teşekkür ederim. Sorun çözüldü :)

ete

Nasıl çözüldüğünü burada açıklaman gerek. Bilgi birikimi açısından bunu yapmalısın. Benzer sorunlar yaşayanlara rehber olacak bir bilgi bu.

Ete

mc_no_fear

#54
GSM:
    DISABLE
    GIE=0
    HSERIN,5000,KCIK,[WAIT("??"),STR SORU\6] 
    ESIT=1
    For I=0 to 5
    Lookup I,["KMBZMN"],KYSL   
    If KYSL!=SORU[I] then
        ESIT=0
        EXIT
    Endif
    Next
    IF ESIT=1 THEN GOTO KMBZMN
    IF ESIT=0 THEN GOTO SRG2
   
SRG2:
    ESIT=1
    For I=0 to 5
    Lookup I,["ODAISI"],KYSL   
    If KYSL!=SORU[I] then
        ESIT=0
        EXIT
    Endif
    Next
    IF ESIT=1 THEN GOTO ODAISI
    IF ESIT=0 THEN GOTO SRG3

SRG3:
    ESIT=1
    For I=0 to 5
    Lookup I,["KMBDRM"],KYSL   
    If KYSL!=SORU[I] then
        ESIT=0
        EXIT
    Endif
    Next
    IF ESIT=1 THEN GOTO KMBDRM
    IF ESIT=0 THEN GOTO KCIK


KCIK:
    GIE=1
    Resume
    enable


Kesme alt programını "GSM" yukarıdaki gibi düzenledim.Eski halinde kesme alt programının içerisinde istediğim kelime geldiğinde yapması gereken işi yaptırıyordum ve pic saçmalıyordu. Şimdi ise istediğim kelime geldiğinde, o kelimeye ait alt programa yönlendirip işi yaptırıyorum. İşlem bittikten sonrada kesmeden çıkış komutlarını verip ana programa döndürüyorum... Şimdi sorunsuz çalışıyor.

mc_no_fear

Hocam bu zamana kadar hep biz kombiden veri istedik . Peki kombiye veri gönderme işini nasıl yapabiliriz? Mesela programın geneline uymak maksadı ile kuralı bozmadan ?? ön eki ile "??GN26.5"  olarak data gönderdiğimizde gündüz modunu 26.5 dereceye ayarlamasını istesek nasıl yapabiliriz? ::)

ete

Bu konu ile ilgili bölük pörçük bilgi sahibiyim. Kim alıyor kim aldığını ne yapıyor bilmiyorum.
Mademki oda sıcaklığını kombi ayarlasın diyorsun kombiye bağladığın alet bu işi yaptırması lazım. Ama nasıl yaptırılacağını senin bilmen gerekiyor.

Ete

mc_no_fear


hocam kurmaya çalıştığım sistem bu. Kombinizi evde iken verici ünite üzerinden ayarlayabilirsiniz.Sorun yok. Olaki evden ayrıldınız. Kombinizin derecesini düşürmeyi unuttunuz. Bir mesaj atarak dereceyi düzenleyebilir, yada cihazınızın kapanmasını sağlayabilirsiniz. Şuan evimde bu sistemi kurdum. Sorunsuz çalışıyor. Sayenizde kombim, sorduğum soruların cevabını verebiliyor. Şimdi ben ona SMS yolu ile komuta edebilmek istiyorum. ??GN26.5 yazdığımda gündüz değerini 26.5 olarak kaydetmesini istiyorum. Programın kaydetme alt programı şu şekilde

    WRITE 10,GUNDUZ.BYTE1,GUNDUZ.BYTE0 :PAUSE 10
    WRITE 12,GECE.BYTE1,GECE.BYTE0     :PAUSE 10
    WRITE 14,T_ISI.BYTE1,T_ISI.BYTE0   :PAUSE 10
    WRITE 16,HAS    :PAUSE 10
    WRITE 17,T_BASLA:PAUSE 10
    WRITE 18,T_BITIR:PAUSE 10     
    WRITE 19,W      :PAUSE 10
    WRITE 20,GUNBAS :PAUSE 10
    WRITE 21,GUNBIT :PAUSE 10

Şimdi bu string değerin 2ve3 üncü karakterleri ile 5'inci karakterini içerisinden nasıl alabilirim?

ete

Yazdıklarında string değer yok. Ama bir string içinden bir karekter çekmek istersen lookup tablosu kullan.
Lookup index,["GUNDUZ"],ALINAN
INDEX=0 olursa Alınan="G" olur.
Index=1 olursa Alınan="U" olur
..
Index=5 olursa Alınan="Z" olur.

Ete

mc_no_fear

Sayın ete hocam
programın tamamını ekte sundum.
GSM bölümünde GN26.5 yada GC26.5 mesajını attığımda 26.5 derecesini, ilgili moda ayarlamasını birtürlü yapamadım. Yardımcı olurmusunuz?

Powered by EzPortal