bir butonla bir ledi yakıp söndürmek

Başlatan oktayc84, 11 Eylül 2004, 09:19:31

Mucit23

hocam bu kodu tam olarak anlayamadım
IF SULA.bit0[Hafta]=1
şimdi burada anladığım kadarıyla 1 byte lık sula değişkeni içerisine haftanın günlerini yerşetiriyoruz. sula değişkeninin 0. biti pazar ,1. biti ptesi,2. bit salı .... Bu şekilde heprsini bir bytelık veride saklayabiliyoruz. O halde her günü epromun farklı adreslerine yazmamıza gerek yok değilmi.
yukarıdaki kodda anlamadığım nokta parantez içerisindeki hafta değişkenin ni görevi nedir.
sula değişkeninne veri yazmakda şöyle olabilirmi
SULA.bit0=1 yani sula değişkeninnin 1. biti 1 yapıldı. 1. bit hangi güne eş geliyorsa o gün sulamaya açıldı demektir. Normalde programda HAFTA isimli değişke ds 1302 den alınan haftanın gün bilgisini tutuyor. yukarıdaki kodla nasıl ilişkisi oluyor merak ediyorum. Hocam siz en iyisi yazdığını kodları bi verin inceleyeyim nasıl düzeltmer yapmışsınız.Böyle giderse size çok soru soracağım.

ete

Bahsini ettiğim düzeltmelerin biri hariç hepsini yaptım. Yalnızca haftanın günlerini yazdıran kısmı değiştirmedim. Bazı günlerde kısaltma kullanmışsın ama diğerinde kısaltma yok idi o nedenle ona dokunmadım.
Dosya aşağıdaki linktedir.

Ete

http://hotfile.com/dl/93491853/737a924/CICEK_ETE.rar.html
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

#32
Hocam hotfileden indirme yapamıyorum. Başka dosya indirmememe rağmen 1 seferde sadece bir dosya indirebilirsiniz diyor. Sizden ricam başka bir siteye yükleyebilirmisiniz
-----------------------------------------------------------------------
Hocam gerek kalmadı aldım dosyaları. Teşekkürler ilginiz için

ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Merhabalar hocam kolay gelsin.
Hocam bugün internette bir yazı okudumda tarımla  uğraşanlar için sulama işleminin buharlaşmanın en az olduğu gece vakitlerinde sulama yapılmasını tavsiye ediyorlar. Üstelik Şimdi dijital sayac kullananlar için Gece elektrik dahada ucuz oluyor.(gece gündüz tarifleri farklı olduğu için).Bunların bilincinde olan bir çiftçi elbette ağaçlarını bahçesini gece sulama yapmak isteyecektir.

Bunları düşününce bu gece yarısı sulama işlemi aklıma takılıyor. Ben biraz uğraştım ama pek sonuç alamadım. Araya günü sokmadan yapsam oluyor. Fakat bu seferde devrenin enerjisini kesip versem unutuyor. Galina yine bir değiken tutup ona da rölenin acılış saatinin kapanış saatinden büyük olduğu bilgisini tutmak gerekiyor. İşin zor tarafı şu diyelim pazartesi  akşam saat 10 da sulamayı açtık. Salı sabah 8 de kapanacak peki salı günü sulamalar komple kapalı ise ne olacak. Şöyle olabilir zaten açılış saati pazartesi günü, eğer açılış saati salı günü olsaydı çalışmazdı. Öyle olabilir ancak yani haftanın gününü hiç devreye sokmayacağız. Yapmam gereken açılış saati kapanış saatinden büyükse bunu bir değişkenle kayıtta tutmak böylelikle enerji gidip geldiğinde sulamaya devam edebilirim.
Bu konuda siz neler düşünüyorsunuz nasıl yapmam uygun olur sizce

ete

Ferhat,
Şayet kesin olarak gece sulama işinide yapayım dersen program mantığını değiştirmen gerekebilir.
Ele alacağımız bir gün için sulama var yada yok demenin hiç bir avantajı yok bence. O güne ait sulama açılmış ise sulama var demektir. O güne ait sulama açılmamış ise sulama yk demektir. Neden böyle kendini kısıtladın anlamadım. Ayrıca unutma gerçek sulama sistemleri gün içinde birden fazla (bildiğim en az 2 en fazla 4 adet ) sulama program uygulamaktadır. Örnek sabah saat 11 de sulama başlıyor saat 14 de sulama kesiliyor. Akşam saat 16 de başlıyor 23 de kesiliyor gibi. Tek sulama programı bu iş için yeterli değil.
Benzer bir ticari proje yapmıştım. O projede hafta içinde gün seçiyor ve o güne ait 4 ayrı vana ve her vana için 4 ayrı sulama programı verebiliyordun. Benim mantığımda program her dakika için açılacak sulama varmı yada açık olup da kapatılacak sulama varmı ona bakıyor idi. Olayı bu şekilde düşünürsen daha kolay halledersin.

Sonuç olarak gece 23 de açılacak bir sulama ertesi gün sabah 8 de kapatılacak ise;
önce saat 23 de açılacak sulama varmı diye bakmak ve elektrik kesilip geri geldiğinde açılmış sulama varmı ona bakmak gerekir.
Ertesi sabah ise hem açılacak sulama varmı diye bakarken hemde kapatılacak sulama varmı diye bakmak lazım gelir. Ben böyle düşünüyorum.
Elektrik kesilmesi ve geri gelmesi durumu insanı uğraştırır. Doğru yolu bulmak zaman alabilir. Bu nedenle en iyisi yine eepromu kullanmak olmalı. Sulama açtığında bir şaret bitini set edip , mesela ACIK isimli bir değişken 7 güne ait açılan sulamaları tutsun. ACIK.1 Pazar, ACIK.2 Pazartesi gibi ilgili gün bitleri set edilmiş ise yani 1 ise o gün sulama açılmış ama henüz kapatılmamış anlamına gelsin. Sulama kapandığı zaman ilgili gün bitinide sıfır yaparsan sorunun çözülmüş olacaktır. Elektrik gidip geldiğinde ACIK değeri eepromdan alınıp içinde bulunduğun güne ait yada tamamı için açılmış sulama varmıdır bakmak gerek. Tabiiki bakarken de elektrik kesildiğinde sulamanın kapanma saatide geçilmiş olabilir. Önce 1. mantığa göre açarsın sonrada kapanma saatlerini kontrol edip kapanacakları kapatırsın diye düşünüyorum. Bir anda yapılacak bu işlemde aç kapa işlemi kullanıcı tarafından görülemez bile.
Benim düşüncelerim bu yönde.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam aslında çok mantıklı kapsamlı bir proje olacak ise günde bir defa sulama yetmeyebilir.dediğiniz gibi günde bir kaç defa sulama işlemi yaptırmak isteyebilir. Bence eğer böyle bişey yapıcaksam 16F876 oyalanma olur. Bu haliyle bile program sınırlarda geziyor. Daha geniş bir program kapasitesi olabilecek bir pice geçmeliyim. Bu iş için bence en uygun olanı 18F252 dir. Hem pin sayısı 16F876 ile uygun hemde program hafızası çok geniş. Ben bu programda şimdilik bu kadar değişiklik ve özellik yeter. Gece sulama işin bir şekilde hallederim.
Eğer iyi bir proje yapılacaksa 1 çıkışlı değil 1 den fazla röle çıkışlı  ve her röle için günlük olarak ayrı sulama programları seçilebilir. Önümdeki tek engel şu 18F252 ile derleme yapamamam. Hocam ne yaptıysam şu hatalardan kurtulamadım. Dediğiniz gibi PBP klasörünün içindeki 18f252.inc klasöründeki  config ayarlarını pasif yaptım. configürasyon ayarlarını MPASM klasöründeki yazılanları aynısını yazdım fakat yine hata veriyor . Nerede hata yapıyorum anlamıyorum. Bu yüzden bir türlü 18Fserisine ısınamadım. Bunun bir püf noktasımı var yapanlar nasıl yapıyor arkadaş....

Mucit23

Yada yeni bir proje yapmamada gerek yok belki ileride.
Eğer 18F252 yi kullanırsam Bu program çok ek özellikler getirecem aklımda kullanıcıya özel bir sürü şey var. Tek engelim işlemci hafızası..  :(

ete

18F serisi ile derleme yapmanın bir yolu var ve onuda sana izah ettim.
Mutlaka ya bir şeyi yanlış yapıyorsun yada PBP sürümün eskidir.
Yapılacak işlemleri yeniden sıralıyorum; Örneği 18F252 üzerinden yapıyorum senin için kolaylık olur.

1. PBP klasörü içinde  18F252.INC dosyasını MCS ye yükleyeceksin.
2. Config satırları aşağıdakiler olacaktır;
        __CONFIG    _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
        __CONFIG    _CONFIG4L, _LVP_OFF_4L
3. Bunların baş tarafına birer ; koyacaksın sonuçta satırlar şöyle olacak,
;        __CONFIG    _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
;        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
;        __CONFIG    _CONFIG4L, _LVP_OFF_4L
4. Sonra bu dosyayı yerine geri kayıt edeceksin.
5. MPASM (Proteus / Tools klasöründe mevcut) içinden P18F252.INC dosyasını MCS ile açacaksın
Dosyanın sonuna doğru "Configurasyon Bits" şeklinde bir satır bulacaksın onun altında ayarlanması gereken Config bitleri ve daha altta da her bir config bitinin alması gereken değerleri göreceksin. Bir tane örnek vereyim.
;Configuration Byte 1H Options  başlığı altından OSC tipleri verilmektedir. Diyelimki HS tipini kullanacaksın. Bunun programa yazılış şekli;
@ASM
__CONFIG    _CONFIG1H, _OSCS_OFF_1H & __HS_OSC_1H
...
...
endasm
bu listeye dahil edilecek olan ayarların listesi Config bitleri başlığında veriliyor zaten. Yukarıda benim .... ile geçtiğim yerlere bunları satır satır yazman gerek.

Hepsi bu kadar.
Tam emin değilim ama bu sistem PBP250 ve yukarısında çalışıyor sanırım.

Ete


Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam dediklerinizi uyguladım
PBP klasörünün içindeki 18F252.inc klasörünü mcs ye yükleyip değişiklikleri yaptıktan sonra tekrar ismini değiştirmeden aynı klasör içerisine inc olarak kaydettim.
Sonra mpasm klaösünün içindeki 18F252.inc klasörünü açıp configürasyon ayarlarını teker teker yazdım. Birde ufak bi led yak södür uygulaması yazdım. İşlemciyi 18F252 olarak seçip derle tuşuna bastığımda hiç derleme bile yapmadan kırmızı hatalar veriyor.
[IMG]http://img692.imageshack.us/img692/4764/adszjha.png[/img]

Uploaded with ImageShack.us
Anlama veremedim.
Yazdığım kodlar bunlar
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 04.01.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4

TRISA=%00000000
TRISB=%00000000
TRISC=%00000000
PORTA=0
PORTB=0
PORTC=0

asm
__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
__CONFIG    _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_OFF_2L
__CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
__CONFIG    _CONFIG3H, _CCP2MX_ON_3H
__CONFIG    _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
__CONFIG    _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
__CONFIG    _CONFIG5H, _CPB_ON_5H & _CPD_OFF_5H
__CONFIG    _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 
__CONFIG    _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
__CONFIG    _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
__CONFIG    _CONFIG7H, _EBTRB_OFF_7H
ENDASM


BASLA:
HIGH PORTB.0
PAUSE 500
LOW PORTB.0
PAUSE 500
GOTO BASLA
END

Verilen hatalar ise bunlar
FATAL ERROR: Too many errors. (21)
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 13: Redefiniton of LABEL TRISA.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 13: Syntax error.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 14: Redefiniton of LABEL TRISB.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 14: Syntax error.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 15: Redefiniton of LABEL TRISC.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 15: Syntax error.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 16: Redefiniton of LABEL PORTA.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 16: Syntax error.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 17: Redefiniton of LABEL PORTB.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 17: Syntax error.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 18: Redefiniton of LABEL PORTC.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 18: Syntax error.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 35: Redefiniton of LABEL BASLA.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 36: Bad expression.
C:\USERS\WIN 7\DOCUMENTS\MCS\18F252.BAS ERROR Line 38: Bad expression.

Sorun ne olabilir.

ete

Senin programı bende kopyalayıp derledim sıfır hata ile derledi.

Bu durumda senin basic klasöründe bir sorun var.
Şayet PBP klasöründeki dosyaları değiştirmese idin bu hataları alacaktın. Demekki MCS başka bir yei kullanıyor.
Sakınmakinanda iki ayrı basic klasörü olmasın?.
Bu duurmda MCS de View menüsünü aç Compile & Program Options'u seç bakalım ekrana ne geliyor.
Compiler etiketi altında C:\PBP gibi bir path (yol) gelmesi gerek ne yazıyor orada. Senin değişiklik yaptığın klasörle aynımıdır?

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam ben ben PBP yi MCS klasörünün içine kurmuşum. C:\Program Files\mecanique\PBP  Ben bi aralar yine 18F252 ile yapmaya çalışmıştım ozaman PBP klasörünün içindeki inc dosyasındaki değişikliği mcs ile değilde not defteri ile yapıp kaydettim. hocam şimdi mcs ve pbp yi komple kaldırıp yeniden yükleyeyim. PBP yi direk c ye mi kurayım yoksa program filesin içinde bi yeremi. Bu arada view menüsünden compile and program optinons sa tıkladığımda compiler adresi doğru yani c:\program files\mecanique\pbp yani doğru yerde Assembler ise proteus dakini kullanıyorum. Acaba mcs yi silip yeniden kurayımmı. 18F452 ile derleme yapabiliyorum onda sorun olmuyor. 18F452 nin konfigürasyon ayarlarını yazıp derleyince sıfır hata ile derliyor.

ete

PBP daima C ana klasöründe olmalıdır.

Birçok işlemci için config ayarları aynıdır. 452 nin kodları ile 252 derleniyorsa tamam demektir.
Bana kalırsa sen yinede 18F252.INC dosyasına bir kere daha bak. Bence config ayarları orada kapatılmamış gözüküyor.

Hatta aynı anda hem 18F452.INC ve hemde 18F252.INC dosyalarına bak neler kapanmış neler kapanmamış.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam PBP yi silip yeniden yükledim. C klasöründe şimdi. Ama yine almuyor anlamıyorum hocam bakın bi 18F252 ile 18f452 nin inc dosyalarını veriyorum configürasyon ayarları 18F252 ye göre olmasına rağmen işlemci 18f452 yi seçince derliyor 18f252 yi seçince yine resimdeki hatalardan veriyor.
18F252 nin inc dosyası
;****************************************************************
;*  18F252.INC                                                  *
;*                                                              *
;*  By        : Leonard Zerman, Jeff Schmoyer                   *
;*  Notice    : Copyright (c) 2005 microEngineering Labs, Inc.  *
;*              All Rights Reserved                             *
;*  Date      : 12/16/05                                        *
;*  Version   : 2.47                                            *
;*  Notes     :                                                 *
;****************************************************************
        NOLIST
    ifdef PM_USED
        LIST
        "Error: PM does not support this device.  Use MPASM."
        NOLIST
    else
        LIST
        LIST p = 18F252, r = dec, w = -311, w = -230, f = inhx32
        INCLUDE "P18F252.INC"   ; MPASM  Header
;        __CONFIG    _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
;        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
;        __CONFIG    _CONFIG4L, _LVP_OFF_4L
        NOLIST
    endif
        LIST
EEPROM_START	EQU	0F00000h
BLOCK_SIZE	EQU	8

18F452 nin inc dosyası
;****************************************************************
;*  18F452.INC                                                  *
;*                                                              *
;*  By        : Leonard Zerman, Jeff Schmoyer                   *
;*  Notice    : Copyright (c) 2005 microEngineering Labs, Inc.  *
;*              All Rights Reserved                             *
;*  Date      : 12/16/05                                        *
;*  Version   : 2.47                                            *
;*  Notes     :                                                 *
;****************************************************************
        NOLIST
    ifdef PM_USED
        LIST
        "Error: PM does not support this device.  Use MPASM."
        NOLIST
    else
        LIST
        LIST p = 18F452, r = dec, w = -311, w = -230, f = inhx32
        INCLUDE "P18F452.INC"   ; MPASM  Header
;        __CONFIG    _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
;        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
;        __CONFIG    _CONFIG4L, _LVP_OFF_4L
        NOLIST
    endif
        LIST
EEPROM_START	EQU	0F00000h
BLOCK_SIZE	EQU	8


Ayni işlemi 18F258 ile de denedim aynı hatayı veriyor.

ete

#44
18F452 de o satırları tamamen çıkarmışsın. Aynı işlemi 252 içinde yap bakalım ne olacak. Muhtemelen koyduğun noktalı virgül tanımlanmıyor.

Ete

not: yanlış görmüşüm alt tarafa bakmamışım. Haklısın ikisinde de ; var.
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com