otomatik çiçek sulama projesi bazı sorunlar var lütfen yardım edin!

Başlatan Mucit23, 30 Haziran 2010, 13:09:25

Mucit23

tamam hocam dediklerinizi anladım aslında ikinci formül birazdaha kafama yattı gerçi en iyisini deneyerek bulacağım elbette
18 f serisi için program yazmayıda anladım sigorta ayrları felan tabi bunun için bilgisayarda mpasm yüklü olması lazım galiba

ete

Makinanda Proteus yüklü ise onun Tools klasörün de MPASM klasörü mevcuttur.  Orayı gösterebilirsin.
Ben onu kullanırım daima.

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

Mucit23

hocam dediğiniz gibi yaptım derleyebiliyorum fakat program nedense çalışmıyor anlayamadım program derlenirken birsürü asm hatası veriyor
ama hexe çeviriyor nerede hata yapmış olabilirim hocam dosyaları ekliyeyim müsaitseniz bi bakın

sigorta ayarları aşağıdaki gibi
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_OFF_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

ama programın başına sizin gönderdiğiniz gibi device 18F452 yazınca orada hata veriyor

dosyalar
http://s1.dosya.tc/ieJ2ug/kulu_kaikisens_rl.rar.html

ete

MPASM kullanınca işin içine protokol giriyor. Nedir bu dersen, P18F452.INC dosyasında sigorta ayarları ne şekilde yer alıyorsa senin programdakilerde aynı olmalı.
Bu yüzden ben hemen P18F452.INC dosyasına baktım (MPASM klasöründe yer almaktadır sonlara bakman gerek).
Bizim listede On yazan yer orada ON şeklinde yazılmış ve MPASM bunu hata olarak nitelendiriyor.
Bu hataları düzeltince hatasız derledi bende. Benim verdiğim liste Proteus 7.6 SP2 de yer alan MPASM ile ilgili idi.

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_OFF_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_OFF_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

Bu arada program isimlerinde Türkçe karekter kullanma ayrıca program adlarında iki kelime arasında boşluk olmasın alttan çizgi ile birleştir en azından. CIFT_SENSOR şeklinde

Bu arada LCD portun program ile verdiğin şemada çakışmıyor. Birinde PortB şemada ise PortC kullanılmış. Bunları yada benzer hataları düzeltmen gerek.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

merhabalar ete hocam kusura bakmayın mesaj yazmakta biraz geciktim
Hocam hala olmadı ben proteus 7.6 sp0 kullanıyorum sorun bundan olabilir diye microchipten mpasm indirip kurdum ve mcs ye gösterdim ama yine derlemedi hata veriyor nerede hata yapıyorum anlayamadım

bide şu ortalama alma işini anlayamadım sadece net ısı değerlerinin ortalamasını alabiliyorum ama virgülden sonraki değerle birlikte nasılortalama alınır bilmiyorum acaba virgülden önceki değerle sonraki değerlerin ayrı ayrımı ortalaması alınması gerek bu konuda bana yardımcı olurmusunuz sizin bildiğiniz bi formül varmı

ete

Mucit,

Öncelikle nasıl bi,r hata çıkıyor görmem gerekiyor. Ona göre sorunu bulabiliriz. Yoksa tarifle bulmak zor. Gerekirse otur yaz yada ekran resmini kayıt et ve yolla bana.

Ortalama alma işine gelince, söylemiştim ondalıklı haneyide hesaba katmak istersen programındaki ısı hesp alt programına göre açıklama yapacağım.
Aşağıdaki satırlara bakarsan yanına' ********* şeklinde işaret koyduğum satırda ısı değerinin 10'a bölünmemiş hali yer almaktadır. İşte bu değeri kullanırsan ondalık hanesinide hesaba katmış olursun. Aynı şeyi diğer sensör içinde yapabilirsin aynı mantık 18B20 sensörünün hesabında da mevcut.
           T1=(-4000+RAW)/100
           T2=((-4000+RAW)//100)/10

Bu örnekte SHT11 den sıcaklık okuması yapılıyor ve sıcaklık değeri tam sayı kısmı T1 ve ondalık kısmıda T2 değişkenlerine yarleştiriliyor.
RAW değerinin 7550 olduğunu var sayarsak;
T1=(-4000+7550)/100=35 değerini buluruz. Bu hesabı şöyle yaparsak;
T1=(-4000+7550)/10= 355 değerini buluruz. İşte bizim ondalık hanesinide hesaba katacağımız değer bu olacaktır.
Çünki normal hesapta sıcaklık 35,5 derece olarak bulunacak idi. Bu şekilde elimizde 355 değeri bulunmakta ve bunu kullanarak ondalık hesabınıda devreye almış olacağız.

İstersen DS18B20 hesabınıda vereyim, Formülü ISI=HAM/16 şeklinde kullanırsak direk sıcaklığın tam sayı kısmını elde ederiz.
Ama şöyle kullanırsak;
ISI = (HAM*10)/16   sıcaklığın 10 ile çarpılmış halini dolayısıyla ondalık kısmınıda kullanmış oluruz. Dikkat edersen ham değeri 10 ile çarptığımız için ondalık hesabını yapabiliriz değilse seıcaklığı 10 kat artırmış oluruz yalnızca. Ama formatımız bu şekilde olmalıdır.

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

Mucit23

Merhabalar ete hocam hocam ortalama alma işini anladım artık buradan sorunum yok artık gerisin ben yaparım
18F derleme sorunuyla ilgilide hatanın resmini çekip vereyim 18F serisi için basit bi  program yazdım
http://img94.imageshack.us/img94/2137/adszsae.jpg

Mucit23

Bide hocam size RB0 kesmesiyle ilgili bi sorum vardı şimdi kuluçka makinası projesinde  ana programda çok fazla gosub komutu olduğu için yani program çok fazla şeye baktığı için menu tuşuna basar basmaz menüye girmiyor en az 3-4 saniye basılı tutmamız gerekiyorki girsin bu çok sinir bozucu bişey
Bende şöyle bişey yaptım menu tuşunu portb.0 a bağladım bu şekilde Rb0 kesmesiyle programı mana menü bölümüne yönlendirdim burada sorunum yoktu menude kesme pasif durumda olacak yine menü tuşunu normal olarak kullanmayı düşünüyordum menüye girebiliyorum ama menüden çıkamıyorum menüden çıktığım anda tekrar kesme oluşuyor ve yine menüye giriyor yani kesme oluşuyor bunu önlemek için ne yapmalıyım kesme ile ana menüye girdiğimde kesme pasif olacak ana menüde çıkıpm ana programa gere döndüğümde tekrar kesme aktif hale gelmesi lazım sizin bu konuda bi fikriniz varmı

ete

Öncelikle 18F derleme ile ilgili problemini çözmeye çalışalım.
MCS de sanki yeni bir bas dosyası yüklermiş gibi,
PBP klasörü içinde bulunan 18F452,INC dosyasını yükle,
Muhtemelen aşağıdaki dosya ekrana gelecektir.
;****************************************************************
;*  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

Bu dosyada görülen __CONFIG ..... ile başlayan bütün satırları yukarıda da gördüğün şekilde satır başına ; koyarak iptal et (silme)
sonra aynı dosyayı tekrar geri kayıt et.
Derleme esnasında hem bu INC dosyası hemde Proteusdaki INC dosyası kullanıldığı için çift işlem oluyor. Bu nedenle PBP içindeki config ayarlarını kapatıyoruz.

RB0 kesmesi kullanımına gelince, Programı vermemişsin bu nedenle sanal olarak yorum yapacağım.
Öncelikle Kesme alt programından ana program içine yönlendirme yapılamaz. RESUME (Etiket) şeklinde bir çıkış yapılabilir. Ancak pek tavsiye etmem. Bunun yerine bir işaret biti kullanırsan daha iyi çalışır.
PortB0 kesmesine girilince Menü (veya başka bir bit değişkenini set et (Menu=1) . Daha sonra kesmeden (RB0 kesme bayrağını sıfırlayarak) çık. Çalıştığın program içinde şayet Menu=1 ise Goto ANAMENU gibi bir satır ekle. Bu şekilde kesme içinde menüye dönüleceğini bir bit değişkeni ile belirlemiş olursun.
Programda da yapılan iş bitince ana menüye dönülmüş olur.

Kesme den sonra yeniden kesme oluşması demek kesme bayrağının sıfırlanmaması demektir yada yeniden kesme oluşturacak bir sebep yaratılmış demektir. Bu ihtimalleride elemelisin.

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

Mucit23

Hocam Allah sizden razı olsun siz olmasaydınız bunu çözmem imkansızdı.
şimdi hiç sorun çıkartmadan Derleniyor..

kuluçka makinasının ise son haliyle vereyim
'****************************************************************
'*  Name    : KULUÇKA.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [Desıgn by Ferhat YOL]         *
'*          : All Rights Reserved                               *
'*  Date    : 21.07.2010                                        *
'*  Version : 2.0                                               *
'*  Notes   :Bu program Kuluçka makinesi için Ferhat YOL        *
'*           Tarafından yazılmıştır                           *                                 
'****************************************************************
DEFINE OSC 8
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

TRISA=%111111
TRISB=%00000001
TRISC=%11110000
PORTA=0
PORTB=0
PORTC=0

DEFINE LCD_DREG		PORTB	
DEFINE LCD_DBIT		4		
DEFINE LCD_RSREG	PORTB	
DEFINE LCD_RSBIT	2	
DEFINE LCD_EREG		PORTB	
DEFINE LCD_EBIT		3		
DEFINE LCD_BITS		4	
DEFINE LCD_LINES	4	
ADCON1 = 7      
'---------------------------değişkenler----------------------------------------- 
    A        VAR    BYTE
    D        VAR    BYTE
    E        var    byte 
    SYC      VAR    BYTE
    AY       var    byte
    YIL      var    byte
    SN       VAR    BYTE
    DAK      VAR    BYTE
    SAAT     VAR    BYTE
    HAFTA    VAR    BYTE
    GUN      VAR    BYTE
    GUN1     VAR    BYTE
    MEM      var    byte 
    ONLAR    VAR    BYTE
    BIRLER   VAR    BYTE
    Y        VAR    BIT 
    SAYAC    VAR    BYTE
    AYAR     VAR    BYTE
    TERM     VAR    BYTE
    NEM      VAR    BYTE
    KONTROL  VAR    BYTE
    ORTAK    VAR    BYTE	   
    ISI1     VAR    BYTE       
    ISI2     VAR    BYTE       
    U1       VAR    BYTE         
    U2       VAR    BYTE
    C0       VAR    BYTE
    Z        VAR    BYTE
    SAYI     VAR    BYTE
    SAY      VAR    BYTE
    ZAM      VAR    BYTE
    H0       VAR    HAMISI.BYTE0
    H1       VAR    HAMISI.BYTE1
    HAMISI	 VAR    WORD
    RAW      var    word
    ISISHT   VAR    WORD 
    RUT      VAR    WORD
    P1       VAR    WORD
    P2       VAR    WORD
    P3       VAR    WORD             
    C        VAR    WORD
    B        VAR    WORD
    W        VAR    WORD
    ORTAISI  VAR    WORD
    FARK     VAR    WORD
    DUR      VAR    BYTE 
    CLK     VAR     PORTA.5
    DTA     VAR     PORTA.3  
    ISARETSHT  VAR     BIT   'sensor değeri 0 ise artı, 1 ise eksi
    SIGN    VAR     BIT      'ısı isareti 0 ise artı 1 ise eksi
    HATA    var     BIT
    MENU    VAR     PORTB.0
    CIKIS   VAR     PORTA.0
    YUKARI  VAR     PORTA.1
    ASAGI   VAR     PORTA.2
    
        'ISI
Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR	WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD       
ISARET_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
EKSI_ISI   CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için
DERECE     CON 223         ' ° işareti
ISARET     VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE       ' Div32 bit hesap için geçici değişken
SYMBOL COMM_PIN=PORTB.1   ' One-wire Data-Pin "DQ" PortB.0 da

    
    symbol ROLE1=PORTC.0
    symbol ROLE2=PORTC.1
    symbol ROLE3=PORTC.2
    SYMBOL ROLE4=PORTC.3
    SYMBOL BUZER=PORTC.7
    
    RTC_RST     var PORTC.5
    RTC_CLK     var PORTC.6
    RTC_DTA     var PORTC.4
'-----------------------------B A Ş L A N G I Ç ------------------------------    
          LOW ROLE1
          LOW ROLE2
          LOW ROLE3
        PAUSE 20
    '	CLEAR: 'TRISA=%00111111:TRISB=0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
         PAUSE 500:ISARET=0
        LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti dataları    
        LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0
        LCDOUT $FE,$50,10,0,17,17,17,17,14,0 'LCD 2. KARAKTER HAFIZASI Ü HARFİ
        LCDOUT $FE,$58,16,8,4,2,4,8,16,0     'LCD 3. KARAKTER HAFIZASI YON İŞARETİ    
GIRIS: 
         LCDOUT $FE,$82, "OTOMATIK KULUCKA"            	
         lcdout $FE,$C5,"MAKINESI"
         lcdout $FE,$95,"TASARIM ve YAZILIM"
         lcdout $FE,$D9,"FERHAT YOL"
         PAUSE 2000
         LCDOUT $FE,1 
         
'-------------------------------------------------------------------------------
BASLANGIC: 
READ $07,GUN:IF GUN=255 THEN GUN=1
READ $01,TERM:IF TERM=255 THEN TERM=0
READ $09,DUR:IF DUR=255 THEN DUR=0
READ $02,NEM:IF NEM=255 THEN NEM=0
READ $0,SAYI:IF SAYI=255 THEN SAYI=0
READ $10,ZAM:IF ZAM=255 THEN ZAM=0
READ $11,A:IF A=255 THEN A=1
gosub ZAMAN_OKU 
           HIGH BUZER:PAUSE 50:LOW BUZER
 
           
BASLA:  
              KONTROL=%00000011:HAMISI=0   'SICAKLIK ÖLÇME
        GOSUB OLCUMAL
        Gosub ISIHESAP
              KONTROL=%00000101:HAMISI=0 'RUTUBET ÖLÇME
        GOSUB OLCUMAL
        GOSUB RUTHESAP:GOSUB SENSOROKU
        GOSUB ORTISI:GOSUB EKRAN1
        GOSUB HAVAKONTROL
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF MENU=1 THEN AYARMENUSU
        
goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------	
EKRAN1:	 
         GOSUB ZAMAN_OKU
         GOSUB DONUSEBAK
         GOSUB GUNEBAK
        lcdout $FE,$80,2,"=",DEC2 ISI1,",",DEC1 ISI2," A=",DEC2 ISI,",",DEC1 (FLOAT)," S=",DEC2 TERM,",",DEC1 A
        lcdout $FE,$C0,"ORTISI=",DEC2 ORTAISI,0,"C  NEM=%",DEC2 U1
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN," ",DEC2 GUN,".GUN"
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN1,"/",DEC2 AY,"/",DEC2 YIL
            IF SN=DUR THEN LOW ROLE3
            IF SAAT=0 AND DAK=0 AND SN=0 THEN 
               GUN=GUN+1
            IF GUN=31 THEN GUN=1
            WRITE $07,GUN
         ENDIF
        RETURN
'''''''''''''''''MOTOR ÇALIŞ '''''''''''''''''             
DONUSEBAK:
         
         READ $10,ZAM
         IF ZAM=255 THEN ZAM=1
         
                 IF ZAM=1 AND DAK=0 AND SN=0 THEN
                 HIGH ROLE3
                 ENDIF

        IF ZAM=2 THEN
                 
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=2 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=4 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                
                 
                 IF SAAT=6 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                 

                 IF SAAT=8 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF

                 IF SAAT=10 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=12 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=14 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF           

                 IF SAAT=16 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF                 

                 IF SAAT=18 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF              
 
                 IF SAAT=20 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF

                 IF SAAT=22 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF
        ENDIF
        
        IF ZAM=3 THEN
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=3 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=6 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                
                 
                 IF SAAT=9 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                 
                  
                 IF SAAT=12 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF
                   
                 IF SAAT=15 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF               
                  
                 IF SAAT=18 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=21 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF
        ENDIF 
                           
        IF ZAM=4 THEN
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=4 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=8 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                
                 
                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                 
                  
                 IF SAAT=16 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF
                 
                 IF SAAT=20 AND DAK=0 AND sn=0 THEN  
                 HIGH ROLE3
                 ENDIF           
        ENDIF
        
              
RETURN

GUNEBAK:
SELECT CASE HAFTA
CASE 1
LCDOUT $FE,$E3,"PTESI"
CASE 2
LCDOUT $FE,$E3," SALI"
CASE 3
LCDOUT $FE,$E3," CARS"
CASE 4
LCDOUT $FE,$E3," PERS"
CASE 5
LCDOUT $FE,$E3," CUMA"
CASE 6
LCDOUT $FE,$E3,"CTESI"
CASE 7
LCDOUT $FE,$E3," PAZR"
END SELECT
RETURN
  
SENSOROKU: 
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
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
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-"  
       ham=~ham+2
    endif
    float = (HAM*10)/16        ' 
    ISI=FLOAT/10  
    RETURN  
'------------------------------- İŞLEM START -----------------------------------
T_START:
      OUTPUT DTA:OUTPUT CLK
        HIGH DTA
         LOW CLK
       PAUSE 1
        HIGH CLK
         LOW DTA
       PAUSE 1
         LOW CLK
       PAUSE 1
        HIGH CLK
       PAUSE 1
        HIGH DTA
         LOW CLK
RETURN
'-----------------------SENSORE KOMUT GÖNDER -----------------------------------
OLCUMAL:
           GOSUB T_Start
        SHIFTOUT DTA,CLK,1,[KONTROL]
           INPUT DTA
         PULSOUT CLK,10
                 HATA=0
             FOR W=0 to 65500
              IF DTA=0 then GIT
            NEXT W
                 HATA=1
GIT:         
              IF HATA=1 then 
           endif
         SHIFTIN DTA,CLK,0,[H1]
          OUTPUT DTA
             LOW DTA
         PULSOUT CLK,10
           INPUT DTA
         SHIFTIN DTA,CLK,0,[H0]
         PULSOUT CLK,10
RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------     
ISIHESAP:  
           If HAMISI<4000 then 
              ISARETSHT=1 'sıcaklık eksi değerde demek
              ISI1=(4000-HAMISI)/100
              ISI2=((4000-HAMISI)//100)/10   
         goto ISISON
        endif
              ISI1=(HAMISI-4000)/100
              ISI2=((HAMISI-4000)//100)/10
ISISON:    
           
           ISI1=(HAMISI-4000)/100
           ISI2=((HAMISI-4000)//100)/10
RETURN       
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
 RUTHESAP: 
              'ISI=ISI1*10+ISI2
              p1=(26542-(54722**HAMISI+hamISI))**HAMISI-25     
              P2=655+(HAMISI*5)+(HAMISI**15917)	      
              P3=(P2**(ISISHT*10+2480))-(P2**2730)+P1   
              U1=p3/10:U2=p3//10
           IF HAMISI>3710 THEN
              U1=0:U2=0
        ENDIF  
return 

ORTISI:
ORTAISI=(ISI1*10+ISI*10)/20
RETURN
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:
         if TERM<ISI then   
          LOW Role1
        ENDIF
        if ISI<TERM then          
         HIGH ROLE1               
       Endif
           
RETURN 
'----------------------------RUTKONTROL-----------------------------------------         
RUTKONTROL:
           if NEM<U1 then   
         HIGH Role2
         ELSE               
          LOW ROLE2
        ENDIF
RETURN

HAVAKONTROL:
FARK=ISI1-ISI
IF FARK.Bit15=1 then FARK=~FARK 
IF FARK>1 then 
   ROLE4=1
ELSE
   ROLE4=0
ENDIF
 
RETURN
'-------------------------------------------------------------------------------
AYARMENUSU:
       WHILE MENU=1:WEND
       GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN 
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=6 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=5
ENDIF
GOSUB DURUM
IF CIKIS=1 THEN GOTO BASLANGIC
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then 
WHILE MENU=1:WEND 
GOTO TERM_KONTROL 
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     " 
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND 
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      " 
LCDOUT $FE,$94,"                    "     
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
END SELECT
RETURN

MANUEL:
GOSUB TEMIZLE 
MANU:
 lcdout $fe,$80,"MOTORU CALISTIRMAK "
 LCDOUT $FE,$C0,"iCiN YUKLARIYA     " 
 LCDOUT $FE,$94,"BASINIZ...          "
       IF CIKIS=1 then             
        WHILE CIKIS=1:WEND
         GOTO AYARLANDI
        ENDIF

        IF YUKARI=1 THEN
         lcdout $fe,$D4,"MOTOR CALISIYOR  " 
        HIGH ROLE3
        ELSE 
        lcdout $fe,$D4,"MOTOR KAPALI    " 
        LOW ROLE3
        ENDIF
        
GOTO MANU

GUNAYARI:
       GOSUB TEMIZLE
       WHILE MENU=1:WEND
       READ $07,GUN
GUNA:      
     LCDOUT $FE,$80,"GUNU AYARLA"  
     lcdout $FE,$C0,"GUN:",DEC2 GUN
     IF CIKIS=1 THEN AYARLANDI
        WHILE CIKIS=1:WEND
        IF YUKARI=1 THEN 
        GUN=GUN+1
        IF GUN=31 THEN GUN=1
        WHILE YUKARI=1:WEND
        ENDIF
        
        IF ASAGI=1 THEN 
        GUN=GUN-1
        IF GUN=255 THEN GUN=30
        WHILE ASAGI=1:WEND
        ENDIF
             
     GOTO GUNA          
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $0,SAYI:SAYI=0
MOTOR_AYAR:

       lcdout $fe,$80,"MOTOR DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"  
           IF MENU=1 THEN M_ZAMANI
        WHILE MENU=1:WEND
           IF YUKARI=1 THEN 
           SAYI=SAYI+1
           WHILE YUKARI=1:WEND
           ENDIF
           IF SAYI=2 THEN SAYI=0 
           SELECT CASE SAYI
           CASE 0
           LCDOUT $FE,$94,3
           CASE 1
           LCDOUT $FE,$D4,3
           END SELECT 
        GOTO MOTOR_AYAR         
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $09,DUR
MOTO_CALISMA:
           IF CIKIS=1 THEN AYARLANDI
        WHILE CIKIS=1:WEND
       lcdout $fe,$C0,"MOTOR CALISMA SURESi " 
       lcdout $FE,$94,"SURE :",DEC2 DUR," SANIYE"
       
           IF YUKARI=1 THEN 
           DUR=DUR+1
           WHILE YUKARI=1:WEND
           ENDIF   
           IF DUR=60 THEN DUR=0
           IF ASAGI=1 THEN 
           DUR=DUR-1
           WHILE ASAGI=1:WEND
           ENDIF
           IF DUR=255 THEN DUR=59
         GOTO MOTO_CALISMA                          
M_ZAMANI:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $10,ZAM
MOTO_ZAMANI:
        IF ZAM=255 THEN ZAM=1
        IF YUKARI=1 THEN
        ZAM=ZAM+1
        WHILE YUKARI=1:WEND
        ENDIF
        IF ZAM=5 THEN ZAM=4
       
        
        IF ASAGI=1 THEN
        ZAM=ZAM-1
        WHILE ASAGI=1:WEND
        ENDIF
        IF ZAM=0 THEN ZAM=1       
        IF MENU=1 THEN M_CALISMA
        
        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE"
        lcdout $FE,$94,"BiR CEViREYiM"
GOTO MOTO_ZAMANI

                                                                                 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
 AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
       LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.."
       WRITE $0,SAYI 
       WRITE $10,ZAM
       WRITE $09,DUR
       WRITE $07,GUN
       WRITE $01,TERM
       WRITE $02,NEM
       WRITE $11,A
       AYAR=1
        PAUSE 1000
        GOSUB TEMIZLE
         goto AYARMENUSU        
TEMIZLE:
        lcdout $fe,1
 RETURN        
'-------------------------------------------------------------------------------
TERM_KONTROL:
       GOSUB TEMIZLE       
SET_AYAR  
LCDOUT $FE,$C0,"ISI LiMiTiNi SECIN"
LCDOUT $FE,$94,"AYAR:",DEC2 TERM,",",DEC1 A          
           IF YUKARI=1 then 
              A=A+1
                IF A=10 THEN 
                A=0:TERM=TERM+1
                ENDIF
              IF TERM=100 THEN TERM=0
              PAUSE 150
           ENDIF
           IF ASAGI=1 then 
              A=A-1
                IF A=255 then 
                A=9:TERM=TERM-1
                ENDIF
              IF TERM=255 THEN TERM=99
              PAUSE 150
           ENDIF 
                
           IF CIKIS=1 THEN
        WHILE CIKIS=1:WEND 
         GOTO AYARLANDI
        ENDIF                  
GOTO SET_AYAR  	
'-------------------------------------------------------------------------------
NEM_KONTROL:
       GOSUB TEMIZLE
NEM_KONT:  
       lcdout $fe,$C0,"NEM LiMiTi"
       lcdout $FE,$94,"AYARI:",DEC2 NEM
        
           IF YUKARI=1 then NEM=NEM+1
        WHILE YUKARI=1:WEND 
           IF NEM=01 then NEM=121
           
           IF ASAGI=1 then NEM=NEM-1
        WHILE ASAGI=1:WEND
           IF NEM=121 then NEM=01        
           IF CIKIS=1 THEN
        WHILE CIKIS=1:WEND 
         GOTO AYARLANDI
        ENDIF                  
         GOTO NEM_KONT 	
       RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
ZAMANAYARI:
GOSUB TEMIZLE
AYAR=1
ZAMANAYAR:
IF MENU=1 THEN 
AYAR=AYAR+1
WHILE MENU=1:WEND
ENDIF
GOSUB BUTONOKU
        LCDOUT $FE,$80,"    ZAMAN AYARI     "       
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN1,"/",DEC2 AY,"/",DEC2 YIL
GOSUB GUNYAZ
IF AYAR=7 THEN ZAMAN_B
GOTO ZAMANAYAR
GUNYAZ:
SELECT CASE HAFTA
CASE 1
LCDOUT $FE,$E3,"PTESI"
CASE 2
LCDOUT $FE,$E3," SALI"
CASE 3
LCDOUT $FE,$E3," CARS"
CASE 4
LCDOUT $FE,$E3," PERS"
CASE 5
LCDOUT $FE,$E3," CUMA"
CASE 6
LCDOUT $FE,$E3,"CTESI"
CASE 7
LCDOUT $FE,$E3," PAZR"
END SELECT
RETURN

BUTONOKU:
SELECT CASE AYAR
CASE 1
LCDOUT $FE,$C0,"SAAT    "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
 SAAT=SAAT+1
 IF SAAT=24 THEN SAAT=0
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
 SAAT=SAAT-1
 IF SAAT=255 THEN SAAT=23
ENDIF 
 
CASE 2
LCDOUT $FE,$C0,"DAKIKA"
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
DAK=DAK+1
IF DAK=60 THEN DAK=0
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
DAK=DAK-1
IF DAK=255 THEN DAK=59
ENDIF

CASE 3
LCDOUT $FE,$C0,"GUN    "   
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
 GUN1=GUN1+1
 IF GUN1=31 THEN GUN=1
 ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
 GUN1=GUN1-1
 IF GUN1=0 THEN GUN1=30 
ENDIF

CASE 4
LCDOUT $FE,$C0,"AY    "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
 AY=AY+1
 IF AY=13 THEN AY=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
 AY=AY-1
 IF AY=0 THEN AY=12
ENDIF

CASE 5
LCDOUT $FE,$C0,"YIL      "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND 
 YIL=YIL+1
 IF YIL=51 THEN YIL=5
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
 YIL=YIL-1
 IF YIL=4 THEN YIL=50
ENDIF

CASE 6
LCDOUT $FE,$C0,"HAFTA     "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND 
HAFTA=HAFTA+1
IF HAFTA=8 THEN HAFTA=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
HAFTA=HAFTA-1
IF HAFTA=0 THEN HAFTA=7
ENDIF
END SELECT
RETURN


ZAMAN_B:
           IF MENU=1 then ZAMAN_B
           AYAR=1
        gosub ZAMAN_YAZ
        GOSUB TEMIZLE
        GOSUB AYARLANDI
         goto AYARMENUSU       
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ZAMAN_OKU:
    high RTC_RST:OUTPUT RTC_DTA
shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, HAFTA, YIL, MEM]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         MEM=HAFTA:GOSUB CEVIR:HAFTA=SAYI
     low RTC_RST 
  return

ZAMAN_YAZ:
         MEM=sn:gosub TERSCEVIR:sn=SAYI
         MEM=DAK:gosub TERSCEVIR:DAK=SAYI
         MEM=SAAT:gosub TERSCEVIR:SAAT=SAYI
         MEM=GUN:gosub TERSCEVIR:GUN=SAYI
         MEM=AY:gosub TERSCEVIR:AY=SAYI
         MEM=YIL:gosub TERSCEVIR:YIL=SAYI
         MEM=HAFTA:GOSUB TERSCEVIR:HAFTA=SAYI

    high  RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'WRT Protek açıldı
     low RTC_RST:PAUSEUS 10 
    high RTC_RST          
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, HAFTA, YIL, 128]  'YAZ
     low RTC_RST
 PAUSEUS 10
  return

CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
  return

TERSCEVIR:
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
  return 
  

END
    
     

Yanlız dediklerinizi pek anlayamadım nasıl yapacağımı bilmiyorum isterseniz bi programa bakın belki daha iyi bi yöntem söyleyebilirsiniz

ete

Bu programda ben kesme göremedim acaba yanlış programmı verdin?
Üstelik programda o kadar çok pause varki bunu kesme kullanacak şekilde düzenlemek çok vakit alacak bir iş. Bütün o pauselerin yerine döngü şeklinde gecikme koyamk gerek. En büyük gecikme Pauseus 5 şeklinde olmalıki kesme alt programına çabuk girilebilsin aksi halde pauseler bitmeden kesme oluşmayacaktır. ANlayacağın kesme kullanman problemli olacak.
En iyisi menüye girişleri daha sık kontrol etmeye bak.

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

Mucit23

hocam doğru söylüyorsunuz en iyisi dediğiniz gibi daha çok menu giriş komutuna bakmak bunun içinde frekans yükseltilmeli ama frekansı yükselttiğimde yani 20 mhz düzelylerine çıkardığımda ne ds 18b20 çalışıyor nede sht11 hiçbirinde ölçüm yapılamıyor bunun sebebi ne olabilir sizce

ete

Sensörler 20 Mhz de çalışır. Programa define osc 20 ilave etmen gerek. Ayrıca shift komutlarını yavaşlatacak define komutları var. Onalrıda ilave etmek gerekiyor programa. Define komutlarını incele istersen.
MCS de program yazarken Define yaz kursorü üzerine getir ve F1 tuşuna bas. Help ekranı karşına gelecektir.
Bu seçenek bütün komutlar için geçerli.

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

Mucit23

hocam son dediğinizi tam olrak anlayamadım tam olarak ne yapmam gerekiyor help menusunden defıne ile ilgili tüm komutları buldum bu komutlarla ne yapıcam

ete

Define komutları içinde yalnızca shiftout YADA shiftin komutlarını yavaşlatacak komut mevcut buda;
DEFINE SHIFT_PAUSEUS 50 'Slow down the Shiftin and Shiftout clock
şeklinde kullanılıyor.
Ama esas ayarlamayı yapan Define OSC 20 komutudur.
Bu komutu ilave etmedi isen sensörler çalışmayabilir. Ama ilave edersen sorunsuz çalışırlar.

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