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