SHT20 Kullanımı Hakkında

Başlatan Elektronikprojem, 24 Şubat 2022, 00:11:38

amatör

#15
sayın hocam kafanızı ağrıttı isem kusuruma bakmayın lütfen, gerçekten sizide uğraştırıyorum.  İşin gerçeği hocam 1 senedir yavaş yavaş tasarladığım yani görsellik ve mekanik açısından tasarım bana ait ama cihaz devresi ve kodu reklam vermek gibi olacak üzgünüm ama,  320volt.com sitesinden kaynakları aldım cihazıda yaptım çalıştırdım bağzen mucitlikte yaparım kendi çapımda, normalde elektronik meslegim kendimi hergeçen gün geliştiriyorum. Tek istediğim şu projemi hayata geçirebilmek sayın hocam, tam üçkez sipariş ettiğim sht10, yerine sht30 veyahutta sht20 olarak geldi, en sonunda çinden sipariş ettiğim bir buçuk ay beklemem sonucunda gelen yine aynı hüsran oldu hocam sht20 geldi en sonunda artık uğraşmak istemedim 1000 tl lik sensörler elimde kaldı sizin anlayacağınız, sizden ricam ben elinden emekli bir insanım yanlış anlamassanız eğer yardımcı olursanız cezam neyse çekmeye hazırım hocam sonuçta sizde bi emek harcıyorsunuz

sizin gönderdiğiniz kod hocam 


'İŞLEMCİ 16f877A
#header
  errorlevel -306  ; Crossing page boundry
#ENDHEADER
#CONFIG
 __config _HS_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF
#ENDCONFIG
DEFINE OSC 4	 
TRISA=%00000111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=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
MEM      var    byte 
ONLAR    VAR    BYTE
BIRLER  VAR    BYTE
GN      VAR    BYTE
ZAMAN    VAR    BYTE
Y        VAR    BIT
UPC      VAR    BIT
AYR      VAR    BIT
SAYI    VAR    BYTE 
SAYAC    VAR    BYTE
AYAR    VAR    BYTE
TERM    VAR    BYTE
NEM      VAR    BYTE
KONTROL  VAR    BYTE
ORTAK    VAR    BYTE
CNY      VAR    BYTE      
ISI1    VAR    BYTE      
ISI2    VAR    BYTE      
U1      VAR    BYTE        
U2      VAR    BYTE
C0      VAR    BYTE
Z        VAR    BYTE
K        VAR    BYTE
SAY      VAR    BYTE
ZAM      VAR    BYTE
DX      VAR    BYTE
H0      VAR    HAMISI.BYTE0
H1      VAR    HAMISI.BYTE1
HAMISI    VAR    WORD
RAW      var    word 70
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
CHECK    VAR    BYTE 
 
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    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 SCL=PORTA.5
SYMBOL SDA=PORTA.3 	    
symbol ROLE1=PORTC.0
symbol ROLE2=PORTC.1
symbol ROLE3=PORTC.2
SYMBOL ROLE4=PORTC.3
SYMBOL BUZER=PORTE.0


RTC_RST    var PORTC.5
RTC_CLK    var PORTC.6
RTC_DTA    var PORTC.4
'-----------------------------B A Ş L A N G I Ç ------------------------------    
  LCDOUT $FE,1 
  pause 200
  LOW ROLE1
  LOW ROLE2
  LOW ROLE3
  LOW ROLE4
'    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: 
'       HIGH porta.5:HIGH PORTA.3
     PAUSE 1000
	        
'-------------------------------------------------------------------------------
BASLANGIC:
	      SYC=0 
	      AYAR=1
	      READ $07,GN:IF GN=255 THEN GN=1
	      READ $01,TERM:IF TERM=255 THEN TERM=0
	      READ $02,NEM:IF NEM=255 THEN NEM=0
	      READ $09,DUR:IF DUR=255 THEN DUR=0
	      READ $10,ZAM:IF ZAM=255 THEN ZAM=0
	      READ $11,A:IF A=255 THEN A=1
	      READ $06,UPC
	      READ $13,AYR
	      gosub ZAMAN_OKU 
	                     
BASLA:  
        KONTROL=%00000011:HAMISI=0  'SICAKLIK ÖLÇME
        GOSUB OLCUMAL
        GOSUB SENSOROKU
        GOSUB ORTISI
        GOSUB ZAMAN_OKU
        GOSUB GUNEBAK
        GOSUB EKRAN1
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF AYR=0 THEN
          GOSUB HAVAKONTROL
        ELSE
	      LOW ROLE4
	    ENDIF
        IF UPC=1 THEN 
          GOSUB DONUSEBAK
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU
	 
	    goto BASLA      
'---------------------------------------EKRANA YAZ -----------------------------    
EKRAN1:    
 lcdout $FE,$80,2,"=",DEC2 ISI1,",",DEC1 ISI2," A=",DEC2 ISI,",",DEC1 (FLOAT)," S=",DEC2 TERM,",",DEC1 A
        lcdout $FE,$C0,"ORTISI=",DEC2 ORTAISI,",",DEC1 CNY,0,"C NEM%",DEC2 U1
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN," ",DEC2 GN,".GUN"
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
        IF SN=DUR THEN LOW ROLE3
        IF SAAT=0 AND DAK=0 AND SN=0 THEN 
          GN=GN+1
          IF GN=31 THEN GN=1
          WRITE $07,GN
        ENDIF
        RETURN
	'''''''''''''''''MOTOR ÇALIŞ ''''''''''''''''' 
DONUSEBAK:
	'HER SAAT BAŞI ÇEVİR 
           IF ZAM=1 AND DAK=0 AND SN=0 THEN HIGH ROLE3
           
           IF ZAM=2 THEN 'İKİ SAATTE BİR ÇEVİR	                	              
             IF (SAAT//2=0) AND DAK=0 AND sn=0 THEN  HIGH ROLE3	                
             IF SAAT=0 AND DAK=0 AND sn=0 THEN HIGH ROLE3                            
	       ENDIF
	        
	        IF ZAM=3 THEN  '3 SAATTE BİR ÇEVİR
	           IF SAAT=0 AND DAK=0 AND sn=0 THEN HIGH ROLE3
               IF (SAAT//3=0) AND DAK=0 AND sn=0 THEN HIGH ROLE3
	        ENDIF 
	                          
	        IF ZAM=4 THEN '4 SAATTE BİR ÇEVİR
               IF SAAT=0 AND DAK=0 AND sn=0 THEN HIGH ROLE3
               IF SAAT//4=0 AND DAK=0 AND sn=0 THEN HIGH ROLE3	                
            ENDIF 	    
	        RETURN            
	 
GUNEBAK:
        SELECT CASE HAFTA
        CASE 1
        LCDOUT $FE,$E3," PAZR"
        CASE 2
        LCDOUT $FE,$E3,"PTESI"         
        case 3
        lcdout $fe,$E3," SALI"
        CASE 4
        LCDOUT $FE,$E3," CARS"
        CASE 5
        LCDOUT $FE,$E3," PERS"
        CASE 6
        LCDOUT $FE,$E3," CUMA"
        CASE 7
        LCDOUT $FE,$E3,"CTESI"

        END SELECT
        RETURN
	   
	'------------------------------- İŞLEM START -----------------------------------

	'-----------------------SENSORE KOMUT GÖNDER -----------------------------------
OLCUMAL:
START :
	HIGH SCL :Pause 15  'en az 15ms sensör high da tutulmalı diyor data sheet
	HIGH SDA:pauseus 10:LOW SDA :LOW SCL  'START İŞLEMİ

	I2CWRITE SDA,SCL,%10000000,%11110011,[]:pauseus 20 'sıcaklık okuma emrini verdik	 
	I2CREAD  SDA,SCL,%10000001,0,[raw.byte1,raw.byte0]',Check] 'sıcaklığı okuduk 
	HIGH SCL:LOW SDA:pauseus 30:HIGH SDA 'STOP İŞLEMİ
    
	ISISHT= (-46850 + (687*/raw))/100
	ISI1=ISISHT/10: ISI2=ISISHT//10
	 
	HIGH SCL :Pause 15  'en az 15ms sensör high da tutulmalı diyor data sheet
	HIGH SDA:pauseus 10:LOW SDA :LOW SCL
	I2CWRITE SDA,SCL,%10000000,%11110101:pauseus 20 'nem okuma emrini verdik
	I2CREAD  SDA,SCL,%10000001,0,[H1,H0,Check] 'nem okuduk :
	HIGH SCL:LOW SDA:pauseus 30:HIGH SDA

	RUT=-600 + (488 */HamISI)/10
	U1=RUT/100 : U2=NEM//100
	RETURN

	 
ORTISI:
	ORTAISI=(ISISHT+FLOAT)/20 '((ISI1*10+ISI2)+FLOAT)/20
	CNY=((ISI1*10+ISI2)+FLOAT)/2
	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 	
	'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:
	 
	        if TERM<ORTAISI-0 then  
	          LOW Role1
	        ENDIF
	        if ORTAISI+0<TERM+0 then          
	        HIGH ROLE1              
	      Endif
	      IF MENU=1 THEN  GOTO AYAR_MENUSU
	RETURN 
	'----------------------------RUTKONTROL-----------------------------------------        
RUTKONTROL:
	          if NEM<U1 then  
	        HIGH Role2
	        ELSE              
	          LOW ROLE2
	        ENDIF
	        IF MENU=1 THEN  GOTO AYAR_MENUSU
	        RETURN
	 
HAVAKONTROL:
	FARK=ISI1-ISI
	IF FARK.Bit15=1 then FARK=~FARK 
	IF FARK>1 then 
	  ROLE4=1
	ELSE
	  ROLE4=0
	ENDIF
	RETURN
	BIP:
	    HIGH buzer  
	pause 50
	    LOW buzer  
	  RETURN
	BIPBIP:
	    HIGH buzer  
	    PAUSE 50
	      LOW buzer 
	    PAUSE 100
	    HIGH BUZER
	    PAUSE 50
	      LOW BUZER 
	RETURN
	'-------------------------------------------------------------------------------
AYAR_MENUSU:
	GOSUB BIP
	WHILE MENU=1:WEND
	GOSUB TEMIZLE
	SYC=0
	AYARLAR:
	IF YUKARI=1 THEN 
	GOSUB BIP
	WHILE YUKARI=1:WEND
	SYC=SYC+1
	  IF SYC=8 THEN SYC=0
	ENDIF
	 
	IF ASAGI=1 THEN
	GOSUB BIP
	WHILE ASAGI=1:WEND
	SYC=SYC-1
	  IF SYC=255 THEN SYC=7
	ENDIF
	GOSUB DURUM
	GOTO AYARLAR
	 
DURUM:
	SELECT CASE SYC
	CASE 0
	lcdout $fe,$c0,"  ISITICI AYARLARI  "
	LCDOUT $FE,$94,"                    "
	IF MENU=1 then 
	WHILE MENU=1:WEND
	GOSUB BIP 
	GOTO TERM_KONTROL
	ENDIF
	CASE 1
	lcdout $fe,$c0,"    NEM AYARLARI    " 
	LCDOUT $FE,$94,"                    "
	IF MENU=1 then
	WHILE MENU=1:WEND
	GOSUB BIP 
	GOTO NEM_KONTROL
	ENDIF
	CASE 2
	lcdout $fe,$c0,"  CEViRiCi MOTOR  "
	LCDOUT $FE,$94,"      AYARI      "
	IF MENU=1 then 
	WHILE MENU=1:WEND
	GOSUB BIP
	GOTO MOT_AYAR
	ENDIF
	CASE 3
	lcdout $fe,$c0,"  SAAT-TARiH-GUN  "
	LCDOUT $FE,$94,"        AYARI      "  
	IF MENU=1 then 
	GOSUB BIP
	WHILE MENU=1:WEND
	GOTO ZAMANAYARI
	ENDIF
	CASE 4
	lcdout $fe,$C0,"  MANUEL OLARAK    "
	lcdout $fe,$94,"  MOTORU CEVIRME  "
	IF MENU=1 theN
	GOSUB BIP
	WHILE MENU=1:WEND
	GOTO MANUEL
	ENDIF
	CASE 5
	lcdout $fe,$c0,"    GUN AYARI      " 
	LCDOUT $FE,$94,"                    "    
	IF MENU=1 then
	GOSUB BIP 
	WHILE MENU=1:WEND
	GOTO GUNAYARI
	ENDIF
	CASE 6
	lcdout $fe,$c0,"SICAKLIK DENGELEYiCi" 
	LCDOUT $FE,$94,"    FAN AYARI      "
	IF MENU=1 then 
	WHILE MENU=1:WEND
	GOSUB BIP
	GOTO FANKONTROL
	ENDIF 
	CASE 7
	lcdout $fe,$c0,"    MENUDEN CIKIS  " 
	LCDOUT $FE,$94,"                    "  
	IF MENU=1 THEN AYARLANDI
	END SELECT
	RETURN
	 
MANUEL:
	GOSUB TEMIZLE 
	MANU:
	lcdout $fe,$80,"MOTORU CALISTIRMAK "
	LCDOUT $FE,$C0,"iCiN YUKARIYA    " 
	LCDOUT $FE,$94,"BASINIZ...          "
	      IF MENU=1 then
	      GOTO AYAR_MENUSU  
	      ENDIF        
	        
	        IF YUKARI=1 THEN
	        lcdout $fe,$D4,"MOTOR CALISIYOR  " 
	        HIGH ROLE3
	        ELSE 
	        lcdout $fe,$D4,"MOTOR KAPALI    " 
	        LOW ROLE3
	        ENDIF
	        
	GOTO MANU
	 
GUNAYARI:
	      WHILE MENU=1:WEND
	      GOSUB TEMIZLE
	      READ $07,GN
GUNA:      
	    LCDOUT $FE,$80,"GUNU AYARLA"  
	    lcdout $FE,$C0,"GUN:",DEC2 GN
	    IF MENU=1 THEN
	      WRITE $07,GN:PAUSE 2
	      GOTO AYAR_MENUSU 
	      ENDIF
	    
	        IF YUKARI=1 THEN 
	        GN=GN+1
	        IF GN=31 THEN GN=1
	        WHILE YUKARI=1:WEND
	        ENDIF
	        
	        IF ASAGI=1 THEN 
	        GN=GN-1
	        IF GN=0 THEN GN=30
	        WHILE ASAGI=1:WEND
	        ENDIF
	            
	    GOTO GUNA 
	    
FANKONTROL:
	GOSUB TEMIZLE
FANKONT:
	      lcdout $fe,$80,"FAN DURUMUNU"
	      LCDOUT $FE,$C0,"SECINIZ..."
	      lcdout $FE,$94,"  KAPALI"
	      LCDOUT $FE,$D4,"  ACIK"
	      IF MENU=1 THEN
	          WRITE $13,AYR:PAUSE 2
	          GOTO AYAR_MENUSU
	      ENDIF
	          IF YUKARI=1 THEN AYR=1
	          IF ASAGI=1 THEN AYR=0
	          
	          SELECT CASE AYR
	          CASE 0
	          LCDOUT $FE,$D4,3
	          CASE 1
	          LCDOUT $FE,$94,3
	      END SELECT    
	GOTO FANKONT
	    
	            
	''''''''''''''''''''''''''''''''''''''''        
MOT_AYAR:
	        WHILE MENU=1:WEND
	        GOSUB TEMIZLE
	        READ $06,UPC
MOTOR_AYAR:
	      lcdout $fe,$80,"MOTOR DURUMUNU"
	      LCDOUT $FE,$C0,"SECINIZ..."
	      lcdout $FE,$94,"  ACIK"
	      LCDOUT $FE,$D4,"  KAPALI"
	          IF MENU=1 THEN
	          WRITE $06,UPC:PAUSE 2
	          GOTO M_ZAMANI
	          ENDIF
	          IF YUKARI=1 THEN UPC=1
	          IF ASAGI=1 THEN UPC=0
	            
	          SELECT CASE UPC
	          CASE 0
	          LCDOUT $FE,$D4,3
	          CASE 1
	          LCDOUT $FE,$94,3
	          END SELECT        
	        GOTO MOTOR_AYAR        
M_CALISMA:
	        GOSUB TEMIZLE
	        WHILE MENU=1:WEND
	        READ $09,DUR
MOTO_CALISMA:
	          IF MENU=1 THEN 
	          WRITE $09,DUR:PAUSE 2
	          GOTO AYAR_MENUSU  
	          ENDIF
	      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
	        WRITE $10,ZAM:PAUSE 2
	        GOTO M_CALISMA
	        ENDIF
	 
	        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE BiR"
	        lcdout $FE,$94,"CEVRiLSiN.."
GOTO MOTO_ZAMANI
	                                                                                
	''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  
AYARLANDI:
	          IF MENU=1 then AYARLANDI
	      lcdout $fe,1
	      LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.." 
	      GOSUB BIPBIP
	      AYAR=1
	      SYC=0
	      PAUSE 800
	        
	        GOSUB TEMIZLE
	        goto BASLANGIC      
TEMIZLE:
	        lcdout $fe,1
	RETURN        
	'-------------------------------------------------------------------------------
TERM_KONTROL:
	      GOSUB TEMIZLE 
	      READ $01,TERM:READ $11,A      
	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 MENU=1 THEN 
	        WRITE $01,TERM:PAUSE 2
	        WRITE $11,A:PAUSE 2
	        GOTO AYAR_MENUSU
	        ENDIF 
	                      
	       GOTO SET_AYAR      
'-------------------------------------------------------------------------------
NEM_KONTROL:
	      GOSUB TEMIZLE
	      READ $02,NEM
NEM_KONT:  
	      lcdout $fe,$C0,"NEM LiMiT"
	      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 MENU=1 THEN 
	            WRITE $02,NEM:PAUSE 2
	            GOTO AYAR_MENUSU  
	            ENDIF                
	        GOTO NEM_KONT    
	      RETURN
	''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''      
ZAMANAYARI:
	WHILE MENU=1:WEND
	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 GUN,"/",DEC2 AY,"/",DEC2 YIL
	GOSUB GUNYAZ
	IF AYAR=7 THEN ZAMAN_B
	GOTO ZAMANAYAR
	 
GUNYAZ:
	SELECT CASE HAFTA
    CASE 1
    LCDOUT $FE,$E3," PAZR"
	CASE 2
	LCDOUT $FE,$E3,"PTESI"
	CASE 3
	LCDOUT $FE,$E3," SALI"
	CASE 4
	LCDOUT $FE,$E3," CARS"
	CASE 5
	LCDOUT $FE,$E3," PERS"
	CASE 6
	LCDOUT $FE,$E3," CUMA"
	CASE 7
	LCDOUT $FE,$E3,"CTESI"
	
	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
	GUN=GUN+1
	IF GUN=31 THEN GUN=1
	ENDIF
	IF ASAGI=1 THEN
	WHILE ASAGI=1:WEND 
	GUN=GUN-1
	IF GUN=0 THEN GUN=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
        gosub ZAMAN_YAZ
	    goto AYAR_MENUSU      
	''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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

amatör

#16
buda önceki hocam
DEFINE OSC 4
@ __config _XT_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF

TRISA=%111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=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
    MEM      var    byte 
    ONLAR    VAR    BYTE
    BIRLER  VAR    BYTE
    GN      VAR    BYTE
    ZAMAN    VAR    BYTE
    Y        VAR    BIT
    UPC      VAR    BIT
    AYR      VAR    BIT
    SAYI    VAR    BYTE 
    SAYAC    VAR    BYTE
    AYAR    VAR    BYTE
    TERM    VAR    BYTE
    NEM      VAR    BYTE
    KONTROL  VAR    BYTE
    ORTAK    VAR    BYTE
    CNY      VAR    BYTE      
    ISI1    VAR    BYTE      
    ISI2    VAR    BYTE      
    U1      VAR    BYTE        
    U2      VAR    BYTE
    C0      VAR    BYTE
    Z        VAR    BYTE
    K        VAR    BYTE
    SAY      VAR    BYTE
    ZAM      VAR    BYTE
    DX      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    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=PORTE.0
    
    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
          LOW ROLE4
        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,$C3,"MAKINA TASARIM"
        lcdout $FE,$95,"  ASKIN ODEMIS"
        lcdout $FE,$D9,"5459455935 "
        PAUSE 4000
        LCDOUT $FE,1 
        
'-------------------------------------------------------------------------------
BASLANGIC:
SYC=0 
AYAR=1
READ $07,GN:IF GN=255 THEN GN=1
READ $01,TERM:IF TERM=255 THEN TERM=0
READ $02,NEM:IF NEM=255 THEN NEM=0
READ $09,DUR:IF DUR=255 THEN DUR=0
READ $10,ZAM:IF ZAM=255 THEN ZAM=0
READ $11,A:IF A=255 THEN A=1
READ $06,UPC
READ $13,AYR
gosub ZAMAN_OKU 
                    
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 ZAMAN_OKU
        GOSUB GUNEBAK
        GOSUB EKRAN1
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF AYR=0 THEN
        GOSUB HAVAKONTROL
        ELSE
        LOW ROLE4
        ENDIF
        IF UPC=1 THEN 
        GOSUB DONUSEBAK
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU

goto BASLA      
'---------------------------------------EKRANA YAZ -----------------------------    
EKRAN1:    
        lcdout $FE,$80,2,"=",DEC2 ISI1,",",DEC1 ISI2," A=",DEC2 ISI,",",DEC1 (FLOAT)," S=",DEC2 TERM,",",DEC1 A
        lcdout $FE,$C0,"ORTISI=",DEC2 ORTAISI,",",DEC1 CNY,0,"C NEM%",DEC2 U1
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN," ",DEC2 GN,".GUN"
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
            IF SN=DUR THEN LOW ROLE3
        IF SAAT=0 AND DAK=0 AND SN=0 THEN 
              GN=GN+1
            IF GN=31 THEN GN=1
            WRITE $07,GN
        ENDIF
        RETURN
'''''''''''''''''MOTOR ÇALIŞ ''''''''''''''''' 
DONUSEBAK:
'HER SAAT BAŞI ÇEVİR 
                IF ZAM=1 AND DAK=0 AND SN=0 THEN
                HIGH ROLE3
                ENDIF

        IF ZAM=2 THEN 'İKİ SAATTE BİR ÇEVİR
                
              
                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  '3 SAATTE BİR ÇEVİR
                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 '4 SAATTE BİR ÇEVİR
                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+ISI2)+FLOAT)/20
CNY=((ISI1*10+ISI2)+FLOAT)/2
RETURN
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:

        if TERM<ORTAISI-0 then  
          LOW Role1
        ENDIF
        if ORTAISI+0<TERM+0 then          
        HIGH ROLE1              
      Endif
      IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN 
'----------------------------RUTKONTROL-----------------------------------------        
RUTKONTROL:
          if NEM<U1 then  
        HIGH Role2
        ELSE              
          LOW ROLE2
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN

HAVAKONTROL:
FARK=ISI1-ISI
IF FARK.Bit15=1 then FARK=~FARK 
IF FARK>1 then 
  ROLE4=1
ELSE
  ROLE4=0
ENDIF
RETURN
BIP:
    HIGH buzer  
pause 50
    LOW buzer  
  RETURN
BIPBIP:
    HIGH buzer  
    PAUSE 50
      LOW buzer 
    PAUSE 100
    HIGH BUZER
    PAUSE 50
      LOW BUZER 
RETURN
'-------------------------------------------------------------------------------
AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN 
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=8 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=7
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP 
GOTO TERM_KONTROL
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYARLARI    " 
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP 
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"  CEViRiCi MOTOR  "
LCDOUT $FE,$94,"      AYARI      "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"  SAAT-TARiH-GUN  "
LCDOUT $FE,$94,"        AYARI      "  
IF MENU=1 then 
GOSUB BIP
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"  MANUEL OLARAK    "
lcdout $fe,$94,"  MOTORU CEVIRME  "
IF MENU=1 theN
GOSUB BIP
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"    GUN AYARI      " 
LCDOUT $FE,$94,"                    "    
IF MENU=1 then
GOSUB BIP 
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
CASE 6
lcdout $fe,$c0,"SICAKLIK DENGELEYiCi" 
LCDOUT $FE,$94,"    FAN AYARI      "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP
GOTO FANKONTROL
ENDIF 
CASE 7
lcdout $fe,$c0,"    MENUDEN CIKIS  " 
LCDOUT $FE,$94,"                    "  
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN

MANUEL:
GOSUB TEMIZLE 
MANU:
lcdout $fe,$80,"MOTORU CALISTIRMAK "
LCDOUT $FE,$C0,"iCiN YUKARIYA    " 
LCDOUT $FE,$94,"BASINIZ...          "
      IF MENU=1 then
      GOTO AYAR_MENUSU  
      ENDIF        
        
        IF YUKARI=1 THEN
        lcdout $fe,$D4,"MOTOR CALISIYOR  " 
        HIGH ROLE3
        ELSE 
        lcdout $fe,$D4,"MOTOR KAPALI    " 
        LOW ROLE3
        ENDIF
        
GOTO MANU

GUNAYARI:
      WHILE MENU=1:WEND
      GOSUB TEMIZLE
      READ $07,GN
GUNA:      
    LCDOUT $FE,$80,"GUNU AYARLA"  
    lcdout $FE,$C0,"GUN:",DEC2 GN
    IF MENU=1 THEN
      WRITE $07,GN:PAUSE 2
      GOTO AYAR_MENUSU 
      ENDIF
    
        IF YUKARI=1 THEN 
        GN=GN+1
        IF GN=31 THEN GN=1
        WHILE YUKARI=1:WEND
        ENDIF
        
        IF ASAGI=1 THEN 
        GN=GN-1
        IF GN=0 THEN GN=30
        WHILE ASAGI=1:WEND
        ENDIF
            
    GOTO GUNA 
    
FANKONTROL:
GOSUB TEMIZLE:
FANKONT:
      lcdout $fe,$80,"FAN DURUMUNU"
      LCDOUT $FE,$C0,"SECINIZ..."
      lcdout $FE,$94,"  KAPALI"
      LCDOUT $FE,$D4,"  ACIK"
      IF MENU=1 THEN
          WRITE $13,AYR:PAUSE 2
          GOTO AYAR_MENUSU
      ENDIF
          IF YUKARI=1 THEN AYR=1
          IF ASAGI=1 THEN AYR=0
          
          SELECT CASE AYR
          CASE 0
          LCDOUT $FE,$D4,3
          CASE 1
          LCDOUT $FE,$94,3
      END SELECT    
GOTO FANKONT
    
            
''''''''''''''''''''''''''''''''''''''''        
MOT_AYAR:
        WHILE MENU=1:WEND
        GOSUB TEMIZLE
        READ $06,UPC
MOTOR_AYAR:
      lcdout $fe,$80,"MOTOR DURUMUNU"
      LCDOUT $FE,$C0,"SECINIZ..."
      lcdout $FE,$94,"  ACIK"
      LCDOUT $FE,$D4,"  KAPALI"
          IF MENU=1 THEN
          WRITE $06,UPC:PAUSE 2
          GOTO M_ZAMANI
          ENDIF
          IF YUKARI=1 THEN UPC=1
          IF ASAGI=1 THEN UPC=0
            
          SELECT CASE UPC
          CASE 0
          LCDOUT $FE,$D4,3
          CASE 1
          LCDOUT $FE,$94,3
          END SELECT        
        GOTO MOTOR_AYAR        
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $09,DUR
MOTO_CALISMA:
          IF MENU=1 THEN 
          WRITE $09,DUR:PAUSE 2
          GOTO AYAR_MENUSU  
          ENDIF
      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
        WRITE $10,ZAM:PAUSE 2
        GOTO M_CALISMA
        ENDIF

        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE BiR"
        lcdout $FE,$94,"CEVRiLSiN.."
GOTO MOTO_ZAMANI
                                                                                
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  
AYARLANDI:
          IF MENU=1 then AYARLANDI
      lcdout $fe,1
      LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.." 
      GOSUB BIPBIP
      AYAR=1
      SYC=0
      PAUSE 800
        
        GOSUB TEMIZLE
        goto BASLANGIC      
TEMIZLE:
        lcdout $fe,1
RETURN        
'-------------------------------------------------------------------------------
TERM_KONTROL:
      GOSUB TEMIZLE 
      READ $01,TERM:READ $11,A      
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 MENU=1 THEN 
        WRITE $01,TERM:PAUSE 2
        WRITE $11,A:PAUSE 2
        GOTO AYAR_MENUSU
        ENDIF 
                      
GOTO SET_AYAR      
'-------------------------------------------------------------------------------
NEM_KONTROL:
      GOSUB TEMIZLE
      READ $02,NEM
NEM_KONT:  
      lcdout $fe,$C0,"NEM LiMiT"
      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 MENU=1 THEN 
            WRITE $02,NEM:PAUSE 2
            GOTO AYAR_MENUSU  
            ENDIF                
        GOTO NEM_KONT    
      RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''      
ZAMANAYARI:
WHILE MENU=1:WEND
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 GUN,"/",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
GUN=GUN+1
IF GUN=31 THEN GUN=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
GUN=GUN-1
IF GUN=0 THEN GUN=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
        gosub ZAMAN_YAZ
goto AYAR_MENUSU      
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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

amatör

bağzı yerleride kendim düzelttim hocam küçük donkunuşlarla bir fikirden yola çıkarak araştırma yaparak tabi, gerek deneme yanılma yoluyla bu kodda degil ama farklı bir cihaz yapmıştım sadece nem kontrol için, sensör odaklı deiğil ama kodu çalışır vaziyete getirmiştim sabahlara kadar kafa patlatarak elektronikte gayet iyiyim ama kodlamadan anlamam hiç

ete

#18
Her şeyden önce mesaj içinde kod verirken "Code Tag" kullanman gerekiyor. Mesaj yazdığın ekranda yukarıda butonlar var. Orada sağ tarafta bir sayfa içinde <> işareti olan buton. Kursörü üzerinde gezdirirsen Kod diye açıklama veriyor zaten. Bastığın zaman iki kutu açar aralarına kodu yerleştireceksin. Bunu yaparsan yukarıda mesajlarını düzelttiğim şekli ile kodu vermiş olursun.
Hem görünümü güzel hem okuması rahat bunu unutma lütfen.

Benim verdiğim kodları buraya yazmanında bir anlamı yoktu. Zaten bende olan bir şeyi istemem ben. Ben simulasyon dosyasından behsediyordum. Yeniden hazırlarım elbette zahmetli ve zaman alan bir iş. O nedenle senden istemiştim ama yanlış anladın sanırım.

Bu arada verdiğim kod'da bir etiket hatası yapmışım. STOP diye etiket ismi verince bir basic komutu olan STOP programı orada kesip durduruyormuş. Bu sorunu düzelttim.
Ayrıca SHT sıcaklık hesabında bir kusur daha gördüm onuda düzelttim.
Düzeltilmiş programı hem ilk sayfada verdiğim eki değiştirerek orada yeniden verdim. Hemde senin yüklemiş olduğun yukarıda bulunan ve buda sizin dediğin programı değiştirerek doğrusunu orayada koydum. Hangisini istersen alıp bakabilirsin.


Ete

amatör

allah rağzı olsun Sayın hocam sizinde çok kafanızı ağrıttım çok uğraştırdım çok çok sağolun.

amatör

Sayın Ete hocam ekrana herşeyi yazıyo normal ama sensörü hiç okumuyor. sıcaklık 24 derecede sabit nemde ise 41 derecede sabit,  işlemciye kodu yükleyip çalıştırdım sensör hiçbirşekilde ölçüm yapmıyor hocam

amatör

Bu eki görüntüleyemezsiniz.

ete

Öncelikle işlemcine bir bak 16F877 midir yoksa 16F877A mıdır. İkisi arasında komparatör farkı var.
sonu A ile bitiyor ise programın baş tarafına CMCON=7 komutunu eklemek gerekir.

Diğer taraftan I2C formatında çalışan SHT20 sensörünün DATA ce CLK bacaklarında 10K lık pullup direnci olması gerekir. Sende tekinde gözüküyor şemanda.

ete



ete

Simulasyonda sistem kusursuz çalışıyor. Gerçeğinde de çalışmalı. Devrenle isis devresi arasındaki farklılıklara bakmalısın.

Simulasyonda biraz deneme yapınca Sıcaklık okumada sorun olmadığını görebiliyorum. Ancak Rutubet okumada bir noktadan sonra hesap sonuçları word sayı değeri olan 65535'i aştığı için sonuçlar yanlış çıkıyor. Bunu önlemek için okunan değeri en baştan 10 a bölerek sayıyı biraz küçülterek hesap denedim. Bu hesap sisteminde ise 32 bit çarpma ve bölme yaptırarak doğru sonuca ulaştım. Yanlızca %90 ın üzerindeki okumalarda hesaplanan değer %1 fazla çıkıyordu bunuda yazılımla düzelterek bütün kademe için doğru değer vermesini sağladım.
Son değişiklikleri içeren program ilişiktedir.

Ete

amatör

merhabalar Sayın Ete hocam saygılar, işlemcim 16F877A hocam sensör bacaklarında 4.7k'lık direnç var. hocam gerçek devrede de denedim fakat aynı smülasyondaki gibi sensörü hiçbirşekilde okumadı sabit derecelerde kaldı hep dediğiniz yöntemi deneyeceğim hocam size bildireceğim. Size nekadar teşekkür etsem azdır hocam minnettarım

ete

#25
Simulasyonda ben deniyorum bende çalışıyor ve değerler değişiyor. Anında değişikliği görebiliyorum.
Sende bir sorun olsa gerek. Benim verdiğim simulsayon dosyasını dene istersen.
Senin dosya ile denedim şimdi. Eksik direnci tamamlayınca oda çalışıyor ve değerler değişiyor sorun yok.

Ete

amatör

Sayın Ete hocam dediklerinizi harfiyen uyguladım. Simülasyonda da denedim, çalışan devrede de denedim olmadı, bu seferde sürekli reset atıyo hocam ve şu şekilde uyarılar çıkıyor. Simülasyonda nerde hata olabilir ki sayın hocam

Pin '2' modellenmemiş. [BUZ1]
Pin '1' modellenmemiş. [BUZ1]
Pin '1' modellenmemiş.
Pin '2' modellenmemiş.
Pin '1' modellenmemiş.
Pin '2' modellenmemiş.
Pin 'DQ' modellenmemiş. [U1]
Pin 'VCC' modellenmemiş. [U1]
Pin 'GND' modellenmemiş. [U1]
Pin 'A' modellenmemiş.
Pin 'K' modellenmemiş.
Pin 'SDA' modellenmemiş. [U4]
Pin 'SCL' modellenmemiş. [U4]
Pin 'GND' modellenmemiş. [U4]
Pin 'VDD' modellenmemiş. [U4]
Model DS1822 belirtildi ancak U1_#P'de bulunamadı.
Model SHT2XITF belirtildi ancak U4_#P'de bulunamadı.
Güç arayüzü için V+/V- pinleri belirtilmemiş - ITFMOD özelliklerini kontrol edin. [U1_#P]
Güç arayüzü için V+/V- pinleri belirtilmemiş - ITFMOD özelliklerini kontrol edin. [U4_#P]
[PIC16 BELLEK] PC=0x0263. 0x07 yoksayılarak uygulanmamış bellek konumu 0x009C yazma girişimi. [U3]
[PIC16 BELLEK] PC=0x0263. 0x07 yoksayılarak uygulanmamış bellek konumu 0x009C yazma girişimi. [U3]
Ağ #00177'de mantıksal çekişme(ler) algılandı.
[PIC16 BELLEK] PC=0x0263. 0x07 yoksayılarak uygulanmamış bellek konumu 0x009C yazma girişimi. [U3]
[PIC16 BELLEK] PC=0x0263. 0x07 yoksayılarak uygulanmamış bellek konumu 0x009C yazma girişimi. [U3]



ete

Simulasyon programın göçmüş. Yenilemen gerek. Yada aynı devreyi yeniden oluştur.
Benim yapabileceğim bir şey yok bende her şey çalışıyor. İlk fırsatta gerçek devrede de deneyeceğim.

Ete

amatör

Sayın Ete hocam  simülasyon çökme ihtimali yok, sizin gönderdiğiniz herşeyi denedim ama nafile yanlış anlamayın sayın hocam gerçek devrede de aynı şeyi yapıyor. lütfen sizden ricam bana  yardımcı olun ne olur. Hocam saygılar affedin ben sizi çok uğraştırdım özür dilerim.

ete

Sende simulasyon çalımıyor bende çalışıyor. Gerçek devrende çalışmıyor. Mutlaka bir sebebi vardır bunların.
Bunları uzaktan benim bulmam mümkün değil. Ancak devreni komple bana yollarsan bakabilirim.
Başka türlü yardımcı olamam. Kendin bulacaksın sorunun ne olduğunu.
SHT20 -21-25 data sheetlerinde adam belirtmiş standart I2C ile haberleşiyor diye.
Şimdiye kadar standart I2C si olan bir alet ile haberleşemediğim olmadı hiç.
Simulasyon yalan söylemez. Şayet orada çalışıyorsaki bende çalışıyor. Gerçeğinde de çalışması gerekir.
Aşağıdaki linki iyice ve dikkatlice oku ve gereken testlerini yap.

https://etepic.com/index.php/topic,1670.0.html

Ete

Powered by EzPortal