Pota göre çıkış süresi ayarlama ve farklı iki röleyi aktif etme

Başlatan blueboard, 14 Şubat 2023, 21:54:34

blueboard

Ete hocam, projeleriniz arasında zaman ayarlı start stop rölesi adlı bir konu var.  https://etepic.com/index.php/topic,53.0.html
Bu konu yapmaya çalıştığım devreye çok benziyor. Yapmak istediğimi kısaca açıklamaya çalışayım. Başlangıçta 12f675'e bağlı iki rölem var. Röleler GP4 ve GP5'e bağlı. Devrede tek buton var. Butona ilk defa basıldığında aynen sizin start stop devresinde olduğu gibi potun konumuna göre belirli bir süre GP5'teki röle çekecek . Eğer butona tekrar basılmaz ise potun konumuna göre 2-6 sn çekili kalacak. Bu sürenin sonunda GP5'teki röle bırakacak. Ancak 2-6 saniye aralığında GP5'teki röle çekili iken butona tekrar basılırsa GP5'teki röle bırakacak, GP4'teki röle çekecek. GP4'teki röle çekilince aynen GP5'in senaryosu çalışmaya başlayacak. Yani potun konumuna göre belirli bir süre GP4'teki röle çekecek . Eğer butona tekrar basılmaz ise potun konumuna göre 2-6 sn çekili kalacak. Bu sürenin sonunda GP4'teki röle bırakacak. Ancak 2-6 saniye aralığında GP4'teki röle çekili iken butona tekrar basılırsa GP4'teki röle bırakacak, GP5'teki röle çekecek.  Kısacası GP5 ve GP4 bir bakıma TOGGLE olarak çalışacaklar. Umarım çok karışık anlatmamışımdır.

Sizin dosyanız üzerinde değişiklikler yaparak hemen hemen istediğimi yaptım sayılır. Tek yapamadığım şu oldu: Örneğin GP5 çekili iken butona tekrar basıldığında GP5 bırakıyor. Fakat GP5'i bıraktırıp bu sefer GP4'ü çektirmek için butona ikinci defa basmak gerekiyor. Dosyaları ekliyorum. Teşekkür ederim.

aRci

Merhaba derleme yapmadım denersiniz. mevcut kodlarda zaman kayması dikkate alınmıyor bu şekilde çalışacaktır.


'****************************************************************
'*  Name    : start_stop_ETE.BAS                                *
'*  Author  : [                   E.T.E.                      ] *
'*  Notice  : Copyright (c) 2011  İzinsiz kullanıılır )c        *
'*          : All Rights Reserved                               *
'*  Date    : 19.08.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic12F675                                                     
@ DEVICE pic12F675, WDT_ON             
@ DEVICE pic12F675, PWRT_ON             
@ DEVICE pic12F675, PROTECT_OFF         
@ DEVICE pic12F675, MCLR_off            
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT 
'@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF 

DEFINE OSCCAL_1K 1  

DEFINE OSC 4

DEFINE ADC_BITS 10    
'DEFINE ADC_CLOCK 1    
DEFINE ADC_SAMPLEUS 10 
CMCON = 7

RAW    VAR WORD 56
SURE   VAR WORD 58
ZAMAN  VAR WORD 60
DAK    VAR WORD 62
X      VAR BYTE 64
SN     VAR BYTE 65
'=========================
Pals   var byte
Say    var bit
'=========================



a var byte
a=0
symbol TUS=GPIO.2
SYMBOL LED=GPIO.1
SYMBOL ROLE1=GPIO.5
SYMBOL ROLE2=GPIO.4
OPTION_REG.7=0
GPIO=0
TRISIO=%00000101
ANSEL =%01010001
ADCON0.7=1
WPU.2=1
ROLE1=0
ROLE2=0
PAUSE 300
BASLA:
       ADCIN 0,RAW  
       sure=((raw+1)*/100)/100+1 
       T1CON=%00110101:PIR1.0=0:SN=0
       TMR1H=$0B:TMR1L=$DC:PIR1.0=0 
       WHILE PIR1.0=0 and Tus = 1:wend 
       if Tus = 0 and Role2 = 0 then Say = 1:high Role1:LED=1:ZAMAN=SURE
       if Tus = 0 and Role1 = 0 then Say = 1:high Role2:LED=1:ZAMAN=SURE
       while Tus = 0:pause 50:wend
       if Say = 1 then 
       Pals = Pals + 1
       if Pals >= 2 then
          Pals = 0 
          if Zaman !=0 then 
             Zaman = Zaman - 1
          else
             low Role1:low Role2:Low Led
          endif
       endif
       endif
       
goto basla

ete

Buda benim programım.

Ete

'@ DEVICE pic12F675                                                     
'@ DEVICE pic12F675, WDT_ON             
'@ DEVICE pic12F675, PWRT_ON             
'@ DEVICE pic12F675, PROTECT_OFF         
'@ DEVICE pic12F675, MCLR_off            
'@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT 
#config
 __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF 
#endconfig	 
	DEFINE OSCCAL_1K 1  
	 
	DEFINE OSC 4
	 
	DEFINE ADC_BITS 10    
	'DEFINE ADC_CLOCK 1    
	DEFINE ADC_SAMPLEUS 10 
	CMCON = 7
	 
	RAW    VAR WORD 56
	SURE   VAR WORD 58
	ZAMAN  VAR WORD 60
'	DAK    VAR WORD 62
'	X      VAR BYTE 64
'	SN     VAR BYTE 65
	'=========================
	symbol TUS=GPIO.2
	SYMBOL LED=GPIO.1
	SYMBOL ROLE1=GPIO.5
	SYMBOL ROLE2=GPIO.4
	OPTION_REG.7=0
	GPIO=0
	TRISIO=%00000101
	ANSEL =%01010001
	ADCON0.7=1
	WPU.2=1
	ROLE1=0
	ROLE2=0
	PAUSE 300
	BASLA:
	       ADCIN 0,RAW  
	       sure=((raw*/251)/100)+2 
'1 KESME 500MS O HALDE SURE HESABI 10+2=12/2=6 YANİ 5+1 SN ÜZERİNDEN YAPILDI	
'her bir sn için 2 kesme gerektiği için sürenin 2 katını hesap etmiş oluyoruz.       
	BASLA_BIR:       
	       T1CON=%00110101:PIR1.0=0 
	       TMR1H=$0B:TMR1L=$DC:PIR1.0=0  'KESME SÜRESİ 500MS
	       WHILE PIR1.0=0 
              IF TUS=0 AND ROLE1=0 THEN
                 ROLE1=1:LED=1:ZAMAN=SURE:ROLE2=0
                 WHILE TUS=0:WEND
              ENDIF
              
              IF TUS=0 AND ROLE1=1 THEN
                 ROLE1=0:LED=0:ROLE2=1:ZAMAN=SURE                 
                 WHILE TUS=0:WEND
              ENDIF                    
           wend 
           IF ROLE1=0 AND ROLE2=0 THEN BASLA
           Zaman = Zaman - 1
           IF ZAMAN>0 THEN BASLA_BIR
           low Role1:low Role2:Low Led
	       
	goto basla      

blueboard

Ete Hocam, teşekkür ederim. Çok hızlısınız. Ancak bir yerde sorun var. Butona basıldı ve röle1 aktif oldu. Max süre olan 6 saniye süresince butona basılmadı ve döngü sona erdi. Fakat diyelim ki aradan bir süre geçti. Butona tekrar basıldı. Bu durumda yine röle1 aktif oluyor. Oysa bu aşamada Röle2'nin aktif olması gerekiyordu. Bu kısmı tekrar açıklamam gerekirse ilk butona basmada röle1 aktif.  Max 6 saniyeden sonraki herhangi bir zamanda butona basıldığı zaman Röle 2 aktif,   yani aradan geçen 6 saniyeden sonra her butona basışta Röle2 - Röle 1 dönüşümlü olarak aktif olacaktı. Bu dönüşümü ilk gönderdiğim programdaki gibi a değişkeni atayarak yapabilir miyim?

elektro77

@ete hocam ın programındaki IF ZAMAN>0 THEN BASLA_BIR yerine BASLA_IKI yazılıp bu programın aynısı fakat röle sırası farklı olan BASLA_IKI kısmıma yönlendirilebilir. Oradan da yine basla_bir e gidilebilir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Bu konu ya çok açık anlatılmamıştı yada ben atlamışım halledilir. Gün içinde ilgilenecceeğim.
Ete

ete

Bilgiler parça parça geliyor. Anladığım kadarı ile butona basılmadan geçen süre aktif röle sırasını değiştirecek. Bu durumda sabit bir şey kullanamayız. Zİra 2ci peryottan sonra sıra yeniden Role1 e gelecek diye düşünüyorum. Sonuç olarak şayet durum düşündüğüm gibi ise bir sıra değişkeni(BIT) tutmak gerekir. SIRA=0 ise sıra Role1 de SIRA=1 ise sıra ROLE2 de şeklinde karar mekanizması oluşturlup program düzeltilir. Çok da basite indirgemeyin bu röle aktifleme işinin bir de pasifleme işi var. Onunda halledilmesi gerekir. Bu özellik basit gibi görünsede karmaşık bir teknik gerektirebilir. Olasılıkla konuşuyorum üzerinde fazla düşünmedim.


Ete

ete

Söylediğim gibi bir sıra (BIT) değişkeni ile mesele halloldu

Ete

'@ DEVICE pic12F675                                                     
'@ DEVICE pic12F675, WDT_ON             
'@ DEVICE pic12F675, PWRT_ON             
'@ DEVICE pic12F675, PROTECT_OFF         
'@ DEVICE pic12F675, MCLR_off            
'@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT 
#config
 __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF 
#endconfig	 
	DEFINE OSCCAL_1K 1  
	 
	DEFINE OSC 4
	 
	DEFINE ADC_BITS 10    
	DEFINE ADC_CLOCK 1    
	DEFINE ADC_SAMPLEUS 20 	
	
	CMCON = 7
	 
	RAW    VAR WORD 56
	SURE   VAR BYTE 58
	ZAMAN  VAR BYTE 60

	SIRA   VAR BIT
    '=========================
	symbol TUS=GPIO.2
	SYMBOL LED=GPIO.1
	SYMBOL ROLE1=GPIO.5
	SYMBOL ROLE2=GPIO.4
    OPTION_REG.7=0
	GPIO=0
	TRISIO=%00000101
	ANSEL =%01010001
	ADCON0.7=1
	WPU.2=1
	ROLE1=0
	ROLE2=0
	SIRA=0
	PAUSE 300
	BASLA:
	       ADCIN 0,RAW  
	       sure=((raw*/251)/100)+2 
'1 KESME 500MS O HALDE SURE HESABI 10+2=12/2=6 YANİ 5+1 SN ÜZERİNDEN YAPILDI	       
	BASLA_BIR:       
	       T1CON=%00110101:PIR1.0=0 
	       TMR1H=$0B:TMR1L=$DC:PIR1.0=0  'KESME SÜRESİ 500MS
	       WHILE PIR1.0=0 
              IF TUS=0 AND SIRA=0 THEN
                SIRA=1-SIRA
                ROLE1=1:LED=1:ROLE2=0:ZAMAN=SURE
                 WHILE TUS=0:WEND
              ENDIF
              
              IF TUS=0 AND SIRA=1 THEN
                 SIRA=1-SIRA
                 ROLE2=1:LED=0:ROLE1=0:ZAMAN=SURE                 
                 WHILE TUS=0:WEND
              ENDIF                    
           wend 
           IF ROLE1=0 AND ROLE2=0 THEN BASLA
           Zaman = Zaman - 1
           IF ZAMAN>0 THEN BASLA_BIR
           low Role1:low Role2:Low Led	      
	       goto basla    
    

blueboard


Powered by EzPortal