Merhaba arkadaşlar Dursuncanteknik arkadaşın programını yazmış olduğu kuluçka makinası devresini yaptım fakat devrede bazı sorunlar var bu konuda siz değerli arkadaşlardan yardım istiyorum
öncelikle ilk sorun devredeki ısı limit çıkışı devreyi çalıştırdıktan 1-2 saniye sonra 1 konumuna geçiyor yanı set değeri felan dinlemiyor ama nem kısmında sorun yok diğer bi konu ise çevirici motorun ayarladığım zmanlar dışında çalışması çalışma zamanlarını ayarladıktan sonra her dakika başında motor kaç saniye çalışacaksa okadar çalışıp duruyor bu her dakika için devam ediyor
devrenin programın veriyorum arkadaşlar ısı ve nem ölçme kodları ete hocamızın kodlarıdır bu konuda ete hocamızın bi fikri olur inş
Devrenin aççık kodlarını ben kendi bilgisayarımda derlemeye çalışıyorum fakat bir türlü derlenmiyor Fattal error:out of memory diye bi hata veriyor galiba hafıza ile ilgili bu sorunu nasıl çözebilirim
Ayrıca Microcode studioya mplabı tanıtmak gerekiyormuş arkadaşlar bunu nasıl yapmam gerekiyor.
Mplab olmadan galiba 18F serisi picler için program yazılamıyor
Devrenin açık kodları
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2009 [dursuncanteknik@hotmail.com] *
'* : All Rights Reserved *
'* Date : 14.09.2009 *
'* Version : 1.2 *
'* Notes :Bu program Kuluçka makinesi için Dursun CAN *
'* Tarafından yazılmıştır *
'****************************************************************
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
TRISA=%111111
TRISB=%00000000
TRISC=%11110000
PORTA=0
PORTB=0
PORTC=0
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
ADCON1 = 7
'---------------------------değişkenler-----------------------------------------
E var byte
AY var byte
YIL var byte
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
MEM var byte
ONLAR VAR BYTE
BIRLER VAR BYTE
Y VAR BIT
SAYAC VAR BYTE
TERM VAR BYTE
NEM VAR BYTE
KONTROL VAR BYTE
ISI1 VAR BYTE
ISI2 VAR BYTE
U1 VAR BYTE
U2 VAR BYTE
C0 VAR BYTE
Z VAR BYTE
SAYI VAR BYTE
SAY VAR BYTE
H0 VAR HAM.BYTE0
H1 VAR HAM.BYTE1
HAM VAR WORD
RAW var word
ISI VAR WORD
RUT VAR WORD
P1 VAR WORD
P2 VAR WORD
P3 VAR WORD
C VAR WORD
B VAR WORD
W VAR WORD
DUR VAR BYTE
ZAMAN VAR BYTE
ZAMAN1 VAR BYTE
ZAMAN2 VAR BYTE
ZAMAN3 VAR BYTE
ZAMAN4 VAR BYTE
ZAMAN5 VAR BYTE
CLK VAR PORTA.5
DTA VAR PORTA.3
ISARET 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
symbol ROLE1=PORTC.0
symbol ROLE2=PORTC.1
symbol ROLE3=PORTC.2
SYMBOL BUZER=PORTC.3
RTC_RST var PORTC.5
RTC_CLK var PORTC.6
RTC_DTA var PORTC.4
'-----------------------------B A Ş L A N G I Ç ------------------------------
LOW ROLE1
LOW ROLE2
LOW ROLE3
PAUSE 20
' CLEAR: 'TRISA=%00111111:TRISB=0
PAUSE 500:ISARET=0
LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0 'derece işareti dataları
LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0
'-------------------------------------------------------------------------------
LCDOUT $FE,1, "KULUCKA MAKiNESi"
lcdout $FE,$C0," version 1.2 "
pause 3000
LCDOUT $FE,1
HIGH BUZER:PAUSE 50:LOW BUZER
BASLA:
KONTROL=%00000011:HAM=0 'SICAKLIK ÖLÇME
GOSUB OLCUMAL
Gosub ISIHESAP:GOSUB EKRAN1
'PAUSE 250
KONTROL=%00000101:HAM=0 'RUTUBET ÖLÇME
GOSUB OLCUMAL
GOSUB RUTHESAP
'GOSUB EKRAN2
pause 200
GOSUB ISIKONTROL
GOSUB RUTKONTROL
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO AYAR_MENULERI
ENDIF
goto BASLA
'---------------------------------------EKRANA YAZ -----------------------------
EKRAN1:
GOSUB DONUSEBAK
GOSUB ZAMAN_OKU
READ $07,GUN
lcdout $FE,$80,DEC2 ISI1,".",dec1 ISI2 ,0,"C ",DEC2 GUN,".GUN"
lcdout $FE,$C0,"NEM:",DEC2 U1 ," ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
READ $09,DUR
IF SN = DUR THEN LOW ROLE3
IF SAAT=0 AND DAK=0 AND SN=0 THEN
GUN=GUN+1
IF GUN=31 THEN GUN=1
WRITE $07,GUN
PAUSE 300
ENDIF
RETURN
'''''''''''''''''MOTOR ÇALIŞ '''''''''''''''''
DONUSEBAK:
READ $0,SAYI
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF SAYI=1 THEN
IF SAAT AND ZAMAN AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN1 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN2 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN3 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN4 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN5 AND SN=0 THEN
HIGH ROLE3
ENDIF
ENDIF
RETURN
''''''''''''''''TEK BIP'''''''''''''''''''''''''''''''''
BIP:
HIGH buzer
for sayac=0 to 2
pauseus 65535
next
LOW buzer
RETURN
''''''''''''''''ÇİFT BİP''''''''''''''''''''''''''
BIPBIP:
HIGH buzer
PAUSE 50
LOW buzer
PAUSE 100
HIGH BUZER
PAUSE 50
LOW BUZER
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 EXIT
NEXT W
HATA=1
EXIT:
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 ham<4000 then
ISARET=1 'sıcaklık eksi değerde demek
ISI1=(4000-HAM)/100
ISI2=((4000-ham)//100)/10
goto ISISON
endif
ISI1=(HAM-4000)/100
ISI2=((HAM-4000)//100)/10
ISISON:
ISI1=(HAM-4000)/100
ISI2=((HAM-4000)//100)/10
RETURN
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
RUTHESAP:
'ISI=ISI1*10+ISI2
p1=(26542-(54722**ham+ham))**ham-25
P2=655+(HAM*5)+(HAM**15917)
P3=(P2**(ISI*10+2480))-(P2**2730)+P1
U1=p3/10:U2=p3//10
IF ham>3710 THEN
U1=0:U2=0
ENDIF
return
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:
read 1,TERM
if TERM<ISI1-0 then
LOW Role1
ELSE
ENDIF
if ISI1<TERM+0 then
HIGH ROLE1
Endif
RETURN
'----------------------------RUTKONTROL-----------------------------------------
RUTKONTROL:
READ 2,NEM
if NEM<U1 then
HIGH Role2
ELSE
LOW ROLE2
ENDIF
RETURN
'-------------------------------------------------------------------------------
AYAR_MENULERI:
WHILE MENU=1:WEND
GOSUB TEMIZLE
ISI_AYARI:
lcdout $fe,$c0," ISI LiMiTi "
IF MENU=1 then
WHILE MENU=1:WEND
GOTO TERM_KONTROL
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO NEM_AYARI
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO GUNN
ENDIF
GOTO ISI_AYARI
NEM_AYARI:
lcdout $fe,$c0," NEM LiMiTi "
IF MENU=1 then
WHILE MENU=1:WEND
GOTO NEM_KONTROL
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO CIK
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO ISI_AYARI
ENDIF
goto NEM_AYARI
CIK:
WHILE MENU=1:WEND
GOSUB TEMIZLE
CK:
lcdout $fe,$c0," MENUDEN CIKIS "
IF MENU=1 then
WHILE MENU=1:WEND
GOTO BASLA
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO MOTO
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO NEM_AYARI
ENDIF
goto CK
MOTO:
GOSUB TEMIZLE
MOTOR:
lcdout $fe,$c0," CEViRiCi MOTOR "
IF MENU=1 then
WHILE MENU=1:WEND
GOTO MOT_AYAR
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO SAATT
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO CIK
ENDIF
goto MOTOR
SAATT:
GOSUB TEMIZLE
SAT:
lcdout $fe,$c0," SAAT AYARI "
IF MENU=1 then
WHILE MENU=1:WEND
GOTO SAATAYAR1
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO GUNN
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO MOTO
ENDIF
goto SAT
GUNN:
GOSUB TEMIZLE
GUNU:
lcdout $fe,$c0," GUNU SIFIRLA "
IF MENU=1 then
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO ISI_AYARI
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO SAATT
ENDIF
goto GUNU
GUNAYARI:
GOSUB TEMIZLE
WHILE MENU=1:WEND
GUNA:
READ $07,GUN
lcdout $FE,$C0,"GUN:",DEC2 GUN
IF MENU=1 THEN AYARLANDI
WHILE MENU=1:WEND
IF YUKARI=1 THEN GUN=1
PAUSE 10
WRITE $07,GUN
GOTO GUNA
''''''''''''''''''''''''''''''''''''''''
MOT_AYAR:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTOR_AYAR:
READ $0,SAYI
lcdout $fe,$80," MOTOR DURUMU "
IF MENU=1 THEN M_ZAMANI
WHILE MENU=1:WEND
IF YUKARI=1 THEN SAYI=SAYI+1
WHILE YUKARI=1:WEND
IF SAYI=2 THEN SAYI=0
WRITE $0,SAYI
IF SAYI=1 THEN lcdout $FE,$C0," ACIK "
IF SAYI=0 THEN LCDOUT $FE,$C0," KAPALI "
GOTO MOTOR_AYAR
M_CALISMA:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_CALISMA:
READ $09,DUR
IF MENU=1 THEN AYARLANDI
WHILE MENU=1:WEND
lcdout $fe,$80,"MOT.DONUS SURESi"
lcdout $FE,$C0,"SURE :",DEC2 DUR," SANIYE"
IF YUKARI=1 THEN DUR=DUR+1
WHILE YUKARI=1:WEND
IF DUR=60 THEN DUR=0
IF ASAGI=1 THEN DUR=DUR-1
WHILE ASAGI=1:WEND
IF DUR=255 THEN DUR=59
WRITE $09,DUR
GOTO MOTO_CALISMA
M_ZAMANI:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_ZAMANI:
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF MENU=1 THEN M_ZAMANI1
WHILE MENU=1:WEND
lcdout $fe,$80,"D.SAATLERi :",e=0,DEC2 ZAMAN
lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
IF YUKARI=1 THEN ZAMAN=ZAMAN+1
WHILE YUKARI=1:WEND
IF ZAMAN=24 THEN ZAMAN=0
IF ASAGI=1 THEN ZAMAN=ZAMAN-1
WHILE ASAGI=1:WEND
IF ZAMAN=255 THEN ZAMAN=23
WRITE $10,ZAMAN
GOTO MOTO_ZAMANI
M_ZAMANI1:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_ZAMANI1:
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF MENU=1 THEN M_ZAMANI2
WHILE MENU=1:WEND
lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN
lcdout $FE,$C0,e=0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
IF YUKARI=1 THEN ZAMAN1=ZAMAN1+1
WHILE YUKARI=1:WEND
IF ZAMAN1=24 THEN ZAMAN1=0
IF ASAGI=1 THEN ZAMAN1=ZAMAN1-1
WHILE ASAGI=1:WEND
IF ZAMAN1=255 THEN ZAMAN1=23
WRITE $11,ZAMAN1
GOTO MOTO_ZAMANI1
M_ZAMANI2:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_ZAMANI2:
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF MENU=1 THEN M_ZAMANI3
WHILE MENU=1:WEND
lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN
lcdout $FE,$C0,DEC2 ZAMAN1,":",e=0,DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
IF YUKARI=1 THEN ZAMAN2=ZAMAN2+1
WHILE YUKARI=1:WEND
IF ZAMAN2=24 THEN ZAMAN2=0
IF ASAGI=1 THEN ZAMAN2=ZAMAN2-1
WHILE ASAGI=1:WEND
IF ZAMAN2=255 THEN ZAMAN2=23
WRITE $12,ZAMAN2
GOTO MOTO_ZAMANI2
M_ZAMANI3:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_ZAMANI3:
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF MENU=1 THEN M_ZAMANI4
WHILE MENU=1:WEND
lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN
lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",e=0,DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
IF YUKARI=1 THEN ZAMAN3=ZAMAN3+1
WHILE YUKARI=1:WEND
IF ZAMAN3=24 THEN ZAMAN3=0
IF ASAGI=1 THEN ZAMAN3=ZAMAN3-1
WHILE ASAGI=1:WEND
IF ZAMAN3=255 THEN ZAMAN3=23
WRITE $13,ZAMAN3
GOTO MOTO_ZAMANI3
M_ZAMANI4:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_ZAMANI4:
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF MENU=1 THEN M_ZAMANI5
WHILE MENU=1:WEND
lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN
lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",e=0,DEC2 ZAMAN4,":",DEC2 ZAMAN5
IF YUKARI=1 THEN ZAMAN4=ZAMAN4+1
WHILE YUKARI=1:WEND
IF ZAMAN4=24 THEN ZAMAN4=0
IF ASAGI=1 THEN ZAMAN4=ZAMAN4-1
WHILE ASAGI=1:WEND
IF ZAMAN4=255 THEN ZAMAN4=23
WRITE $14,ZAMAN4
GOTO MOTO_ZAMANI4
M_ZAMANI5:
GOSUB TEMIZLE
WHILE MENU=1:WEND
MOTO_ZAMANI5:
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF MENU=1 THEN M_CALISMA
WHILE MENU=1:WEND
lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN
lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",e=0,DEC2 ZAMAN5
IF YUKARI=1 THEN ZAMAN5=ZAMAN5+1
WHILE YUKARI=1:WEND
IF ZAMAN5=24 THEN ZAMAN5=0
IF ASAGI=1 THEN ZAMAN5=ZAMAN5-1
WHILE ASAGI=1:WEND
IF ZAMAN5=255 THEN ZAMAN5=23
WRITE $15,ZAMAN5
GOTO MOTO_ZAMANI5
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
AYARLANDI:
IF MENU=1 then AYARLANDI
lcdout $fe,1," AYARLANDI "
PAUSE 1000
gosub BIPBIP
GOSUB TEMIZLE
goto CIK
TEMIZLE:
lcdout $fe,1
RETURN
'-------------------------------------------------------------------------------
TERM_KONTROL:
GOSUB TEMIZLE
TERM_KONT:
lcdout $fe,$80," ISI LiMiTi "
lcdout $FE,$C0,"AYARI:",DEC2 TERM
IF YUKARI=1 then TERM=TERM+1
WHILE YUKARI=1:WEND
IF TERM=01 then TERM=121
IF ASAGI=1 then TERM=TERM-1
WHILE ASAGI=1:WEND
IF TERM=121 then TERM=01
WRITE 1,TERM:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO AYARLANDI
ENDIF
GOTO TERM_KONT
RETURN
'-------------------------------------------------------------------------------
NEM_KONTROL:
GOSUB TEMIZLE
NEM_KONT:
lcdout $fe,$80," NEM LiMiTi "
lcdout $FE,$C0,"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
WRITE 2,NEM:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO AYARLANDI
ENDIF
GOTO NEM_KONT
RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SAATAYAR1:
lcdout $fe,1
IF MENU=1 then SAATAYAR1
gosub EKRAN0
SAATAYAR:
PAUSE 200
lcdout $fe, $c7, dec2 SAAT
lcdout $fe,$0e
lcdout $fe, $10
E=0
button MENU, 1, 255, 255, E, 1,DAKIKAAYAR1
button YUKARI,1,255,255,E,1,SAATIARTIR
button ASAGI,1,255,255,E,1,SAATIAZALT
goto SAATAYAR
SAATIARTIR:
IF YUKARI=1 then SAAT=SAAT+1
IF SAAT=24 then SAAT=0
goto SAATAYAR
SAATIAZALT:
IF ASAGI=1 then SAAT=SAAT-1
IF SAAT=255 then SAAT=23
goto SAATAYAR
DAKIKAAYAR1:
IF MENU=1 then DAKIKAAYAR1
lcdout $fe,1
gosub EKRAN0
DAKIKAAYAR:
PAUSE 200
lcdout $fe, $ca, dec2 DAK
lcdout $fe,$0e
lcdout $fe, $10
E=0
button MENU, 1, 255, 255, E, 1,ZAMAN_B
button YUKARI,1,255,255,E,1,DAKARTTIR
button ASAGI,1,255,255,E,1,DAKAZALT
DAKARTTIR:
IF YUKARI=1 then DAK=DAK+1
IF DAK=60 then DAK=0
goto DAKIKAAYAR
DAKAZALT:
IF ASAGI=1 then DAK=dak-1
IF DAK=255 then DAK=59
goto DAKIKAAYAR
ZAMAN_B:
IF MENU=1 then ZAMAN_B
gosub ZAMAN_YAZ
GOSUB TEMIZLE
GOSUB AYARLANDI
goto CIK
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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, MEM, 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
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
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, 0, 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
EKRAN0:
lcdout " SAATi AYARLA "
lcdout $fe,$c0,"SAAT : ",dec2 SAAT,":",dec2 DAK,":",dec2 SN
return
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
END
Devre ile ilgili tüm dosyalar
http://www.dosya.tc/5HNFy2/16F877ileKulu_kaMakinesi.rar.html
lütfen arkadaşlar bana bu konuda yardım edin arkadaşlar bu programı daha sade bir şekilde nasıl yazabilirim
Mucit23,
Programın yazılma mantığı gerçekten kötü. Yanlış anlaşılmasın işin kontrol kısmından bahsediyorum. Yoksa programa bakarsan %50 den fazlası zaten ETE kodlarıdır (kimse belirtmemiş ama ben belirteyim).
Her şeyden önemlisi programda değişkenler kullanılmasına rağmen yinede bütün bilgi sürekli eeproma yazılıp oradan okunup işleme sokulmaktadır. Eeproma önceden bir şey yazmadan oradan okuma yaparsanız ilk okumada 255 değerini okursunuz daima.
Sorun buradan kaynaklanıyor. Bu konuda bir tedbir alınmamış.
Programın aşağıdaki kısmına bir bakarsan;
ISIKONTROL:
read 1,TERM
if TERM<ISI1-0 then
LOW Role1
ELSE
...
...
RETURN
İlk çalıştırmada TERM değeri 255 olarak okunacak ve bu değer ISI1 değerinden büyük olacağı için Role1 aktif olacaktır. Aynı sorun Nem kontrol kısmında da mevcut. Çözüm ilk okumalarda 255 değerinin okunma ihtimaline karşın bu değerin değiştirilmesi şeklinde uygulanmalıdır. Nasıl dersen,
ISIKONTROL:
read 1,TERM
' IF TERM=255 then TERM=0 '......çözüm bu işte
if TERM<ISI1-0 then
LOW Role1
ELSE
if ISI1<TERM+0 then HIGH ROLE1
ENDIF
RETURN
Daha sade bir program yazmak istersen mantığı değiştirmen gerekir.
Bütün kontrol kısmını çıkar yeniden yaz. Bilgi değiştiği zaman eeproma yazılsın ama ilk çalıştırmada bir kere programın başında eepromdan okunsun. Hepsi bu kadar.
Ete
Hocam ilginiz için teşekkür ederim
Programda değişiklik yaparak hiç bir şekilde microcode studioda derleyemiyorum "Fattal error :Out of memory "yani hafıza yok diyor programı nasıl derlemişler hala çözemedim aslında bence bu program için 16 f serisi yetersiz kalıyor 18 f serisi ile yapılması şart gibi görünüyor ama yine aynı şekilde basicdede 18 f serisi için program yazamıyorum bi ayarı yapılması gerekiyormuş. Protonda yazmam gerek programı
Ayrıca dün ilginç bir şeye şahit oldum aynı programı başka bi 877 yükleyince ısı kontrol kısmı çalıştı orada sorun yok ama lakin bu seferde nem kısmında sorun var nem kısmı olduğundan çok fazla değerler gösteriyor ve nem çıkışı daima bir konumunda
Motor kısmı ise biraz daha karışık ayarladığım zamanların dışında çalışıyor her dakikanın başında motorun çalışma süresini kaç saniyeye ayarlamışsam o kadar çalışıp duruyor. Şimdilik sorunlar bunlar inş çabucak çözüm getiririm
Benimde derlemede bir sorunum yok. Sorun senin MCS ve PBP kurulumunda.
PBP yu C ana klasörüne kurman tavsiye edelir.
Çalıştığın dosya isimlerinde Türkçe karekter olmamalı. AYrıca yol (path) uzunluğu 65 karekteri geçmemelidir.
Verilen hata hafıza hatası değildir. Olsa bende de olurdu. Muhtemelen derleyicin eskidir.
Program bu hali ile 5800 civarında word yer tutuyor. Makismum 8192 olması gerek sanırım. Dolayısıyla hafıza ile ilgili bir sorun yok henüz.
Programda EXIT diye bir etiket var. Onu başka bir isimle değiştir.
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 EXIT
NEXT W
HATA=1
EXIT:
Ete
Tamam hocam deniyeyim şu anda bilgisayarımda microcode studio plus yüklü siz hangi versiyonunu tavsiye ediyorsunuz yada yükleme ve kurulumda bana önereceğiniz bir konu varmı
Hiç bir zaman Plus kullanmadım. Gereksiz. Onun yerine normal olan ve free olan MCS yi kullanıyorum.
MCS sadece bir editör ahım şahım bir fonksiyonu yok zaten. O olmuş bu olmuş fark etmez ama kullanmadığın özellikleri olan bir şeyi kullanmak yerine sade olanı tercih etmek daha akıllıca olmazmı?.
aşağıdaki linki incele.
https://www.picproje.org/index.php?topic=27652.0
Linke direk tıklarsan yüklemiyor. Onun yerine kopyala ve yapıştır yöntemini kullan. Adminlere duyurulur!!!!!!!!!!!!!!!!
Ete
Hocam ne diyeyim allah sizden razı olsun Allah size uzun ve rahat bir ömür versin .Dediklerinizi uyguladım ve şimdi derleyebiliyorum :) sayenizde bişeyler öğrendim
hocam şimdilik ısı ve nemde sorun kalmadı daha yeni devreyi çalıtırdım ısı ve nemde sorun yok şimdilik tek bir sorun kaldı cevirici motor kısmı motorda nedense ayarladığım saatler dışında çalışıyor her dakikanın vbaşında motorun çalışma süresini ne kadara ayarlamışsam o kadar çalışıyor ve duruyor anlayamadım hocam bu sorun için bana önereceğiniz bi değişiklik varmı sizceneden olabilir
Motor Röle3' ilemi aktif oluyor?
Eğer öyle ise programın o kısmına birlikte bakalım;
DONUSEBAK:
READ $0,SAYI
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF SAYI=1 THEN
IF SAAT AND ZAMAN AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN1 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN2 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN3 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN4 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF SAAT AND ZAMAN5 AND SN=0 THEN
HIGH ROLE3
ENDIF
ENDIF
RETURN
Bir defa aynı eeprom okuma sorunu burada da mevcut. Bunların hepsine okunan değer 255 ise değer=0 ilavesi gerekiyor.
Sonra;
Sence aşağıdaki komut ne anlama geliyor?
IF SAAT AND ZAMAN AND SN=0 THEN
Bence kullanım amacına ters gelen bir komut bu. Aslında anlamı Saat=1 ise ve Zaman=1 ise ve SN=0 ise Then demek oluyor.
Ama burada yanlış sonuçlara sebep olmakta bu komut. Bence sorun burada;
Ohalde doğrusu nedir?
IF SAAT=ZAMAN AND SN=0 THEN HIGH ROLE3
Şeklinde olmalı. Açıklamak gerekir ise o andaki saat değeri ile motorun dönme saati eşit ise motor dönmeli.
Bu birinci zaman ve diğer zamanlar için aynı olmalıdır.
Kolay Gelsin
Ete
hocam anlayamadım
Dediğiniz gibi motor röle 3 ile aktif oluyor burada epromdan okunan değerler için 255 olmasını önlemek için aşağıdaki gibimi yazılması gerekiyor
DONUSEBAK:
READ $0,SAYI
READ $10,ZAMAN
READ $11,ZAMAN1
READ $12,ZAMAN2
READ $13,ZAMAN3
READ $14,ZAMAN4
READ $15,ZAMAN5
IF SAYI=1 THEN
IF ZAMAN=255 THEN ZAMAN=0
IF SAAT=ZAMAN AND SN=0 THEN
HIGH ROLE3
ENDIF
IF ZAMAN1=255 THEN ZAMAN1=0
IF SAAT=ZAMAN1 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF ZAMAN2=255 THEN ZAMAN2=0
IF SAAT=ZAMAN2 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF ZAMAN3=255 THEN ZAMAN3=0
IF SAAT=ZAMAN3 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF ZAMAN4=255 THEN ZAMAN4=0
IF SAAT=ZAMAN4 AND SN=0 THEN
HIGH ROLE3
ENDIF
IF ZAMAN5=255 THEN ZAMAN5=0
IF SAAT=ZAMAN5 AND SN=0 THEN
HIGH ROLE3
ENDIF
ENDIF
RETURN
Eğer yanlış anlamadıysam kodun doğru yazılışı böyle olması gerekiyor
Evet yadıkların doğru. İlk zaman ayarları yapılıncaya kadar bu ayarların sıfır yada sıfırdan farklı bir şekilde mesela hiç bir şekilde ulaşılamayan bir saat değerine 70 gibi bir değere eşitlenebilir. Sıfır yaparsan gece yarısı saat değeride sıfır olacağı için eşitlik sağlanabilir. Aslında hiç dokunmasan belki 255 de kalmaları daha uygunda olabilir . İnsan sesli düşününce bu kısımda epromdan okunan değerler 255 de kalabilir tabiiki ilk ayarı verinceye kadar. İlk ayar verinceye kadar motorun aktif olmamasını sağlamak lazım.
Emin olayım dersen 255 okunan değerleri 70 yap istersen.
Ete
Hocam dediklerinizi uyguladım fakat sorun yine aynı şekilde belliki bizim farkedemediğimiz başka bir sorun var aslında yapamıyorsak eğer o kadar uğraşmanıza gerek yok hocam sizi fazla yormak istemiyorum.Benim için önemli olan ısı ve nemdi onlarda sorun kalmadı. motorda her dakikanın başında çalışyor bende çalışma süresini minimuna indiririm bu şekilde motor 4 saatte bir değilde her dakikanın başında adım adım hareket eder bu böylece 21 gün boyunca devam eder
Sen sorunu tam olarak bana açıklarmısın. Ona göre bakayım.
Birde mümkünse pic'in eepromunu bir oku ve bana 0-10 adresleri arasında ne kayıtlı onlarıda söyleyiverki ona göre karşılaştırma yapabileyim.
Ete
Hocam sorunu tam olarak açıklayayım
programda ana menüden cevirici motor kısmına girdiğimiz zaman ilk önce motor açıkmı kapalımı onu şeçiyoruz, açığı seçtikten sonra motorun dönüş saatleri ni girmemiz isteniyor.
kuluçka makinelerinde yumurtaların en az 4 saatte bir çevrilmesi gerekir buda 24 saatte 6 kez döndürülmesi anlamaına geliyor tekrar menüye dönersek ;
sırasıyla yumurtaların dönüş saatlerini giriyoruz
00,04,08,12,16,20
dönüş saatlerini bu şekilde giriyoruz yani bu şekilde saat 00 birkez döner durur saat 4 oldumu tekrar döne bu böylece devam eder
tekrar menü tuşuna bastığımızda bu seferde motorun kaç saniye boyunca çalışacağını girmemiz istenir bunu saniye cinsinden 0 ile 59 arasında bir sayı girilerek yapılır .
tüm ayarlamaları yaptıktan sonra normal çalışma moduna geri döndüğümüzde motorun ayarladığımız saatlerde değilde her dakikanın başında kaç saniye dönmesi gerekiyorsa o kadar dönüyor
Örnek vermek gerekirse
diyelimki saat 12:08:32 bu şekilde motor çalışmıyor ama saat 12:09:00 olduğu anda motor kaç saniye dönmesini istemişsek okadar dönüp duruyor bu her dakikanın başında tekrarlanıyor ana sorun budur hocam
yanlız bu eprom okuma işini anlamadım bunu nasıl yapıcam
Sorunu anladım. Muhtemelen eeproma saat değil dakika değerleri kayıt edilmiş olmasın?.
Ama her dakika sıfırlandığında bu olay meydana geliyorsa sorun başka yerdedir bakayım.
Eepromu okumak için pici yerinden sök ve programlayıcıya tak. READ komutunu çalıştır ve eeprom değerlerine bak.
Orada sıfırncı adresten itibaren okuduğun değerleri bir yere not et. Bu değerler sorunun bulunması için önem arzediyor.
Ete
hocam ben pic brener kullanıyorum brenerde nasıl pici okutup epromuna bakıcam pc programında sadece okumayla ilgili " read from PİC into new HEX-file" diye bir seçenek var oda pic içerisindeki programı okuyup ayrı bir hex dosyası yapıyor.Brenerde eproom okuma nasıl yapılıyor
Brenneri bende tanımıyorum.
Ete
Motor dönüşlerinin her dakika başında tekrar etmesi son derece normal. Sebebi yalnızca saat bilgisinin değerlendirilmiş olması dakikanın göz ardı edilmiş olmasıdır.
Şimdi sesli düşünelim. Saat 12 de motor bir kere çalışsın denilmiş.
Komuta bakalım;
IF (ZAMAN=SAAT) AND SN=0 THEN HIGH ROLE3
Saat=12 ve ZAMAN=12 olduğuna göre her sn=0 olduğunda yani her dakika değiştiğinde bu motor bir kere döncektir. Taaki saat 13 oluncaya kadar. O halde çözüm SN=0 yerine Dak=0 seçeneğini kullanmaktır bence. Böylece komut;
IF (ZAMAN=SAAT) AND DAK=0 THEN HIGH ROLE3
şeklinde değişecektir. Bu şekilde dakika yalnızca bir kere sıfır olacağı için saat 12 olduğunda motor çalışacak ama sonra dakika sıfırdan farklı olacağı için bir daha çalışmayacaktır.
Hepsini bu şekilde düzeltmen gerekir.
Programda bir kusur daha var oda henüz zaman okuması yapılmadan motor dönme kontrolüne gidiliyor. Bu durumda saat=0 ve dak=0 olduğu için motor direk çalışıyor taaki yeniden SN=0 oluncaya kadar. Bunu önlemek için programın başla satırından evvel;
GOSUB ZAMAN_OKU komutunu ilave etmek gerekiyor. Ayrıca EKRAN1 etiketi altında yer alan ilk iki satırda yer değiştirmende yarar var. Önce zaman okusun sonra motor dönmeye baksın.
Ete
H0cam dediklerinizi uyguladım ufak bi değişme oldu gibi
artık her dakikanın başında çalışmıyor. Diyelimki saat 16:00:00 da 15 saniye çalışması gerekiyorsa saat 16:00:00 olduğunda 15 saniye çalışıyor saat 16:00:15 olduğunda röle bırakıyor ardından hemen bidaha çekiyor taki saat 16:01:15 olana kadar bunun sebebi ne olabilir acaba yani zaman dolduktan sonra neden bidaha çeksinki
Buda mantıklı. Motorun çalışma süresi 60 sn den az ise daha dakika=0 değeri değişmediği müddetçe program oraya bir daha bakacak ve şart yerine geldiği için motoru yeniden çalıştıracaktır.
Bu durumda saniyeyi de işe katmak gerek.
IF SAAT=ZAMAN AND DAK=0 AND SN=0 THEN HIGH ROLE3
Ete
ozaman en doğru şekilde yazarsak "IF (ZAMAN=SAAT) AND DAK=0 AND SN=0 THEN HIGH ROLE3" gibi bir komut yazmamız gerekiyor ben hemen düzenlemeleri yapıp deniyeyim
Ete hocam çok çok teşekkür ederim Allah sizden razı olsun şimdi hiçbir sorun kalmadı herşey tıkırında gidiyor sayenizde :) Ben elazığda yaşıyorum eğer benden ve elazığdan özel bi isteğiniz olursa ben herzaman hazırım .Bir gün elazığa işiniz düşerse sizi ağırlamaktan şeref duyarım.
Mucit23,
Bende sana teşekkür ederim. Bir gün yolum oralara düşerse aramayı isterim doğrusu .
Hoşçakal.
Ete
Tabiki hocam sizin gibi ilimli insanlara her zaman kapımız açıktır buyrun gelin :) :)
Merhabalar Ete hocam
hocam sizi bi konuda daha rahatsız edicem. Dünden beri devreyi çalıştırıyorum Devrede saat kısmı nem kısmı ısı kısmı ve çevirici motor kısmında hiçbir sorun yok hepsi tıkır tıkır çalışıyor fakat bu sabah devreyi incelediğimde gün kısmının 3 olduğunu gördüm ama dün ben günü 1 olarak ayarlamaıştım gece 12 den sonra 1 artması lazım fakat ikişer ikişer artıyor hocam programı incelediğimde ben bir sorun göremedim programda gün kısmı ekran1 başlığı altında ele alınmış
'---------------------------------------EKRANA YAZ -----------------------------
EKRAN1:
GOSUB ZAMAN_OKU
GOSUB DONUSEBAK
READ $07,GUN
lcdout $FE,$80,DEC2 ISI1,".",dec1 ISI2 ,0,"C ",DEC2 GUN,".GUN"
lcdout $FE,$C0,"NEM:",DEC2 U1 ," ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
READ $09,DUR
IF SN = DUR THEN LOW ROLE3
IF SAAT=0 AND DAK=0 AND SN=0 THEN
GUN=GUN+1
IF GUN=31 THEN GUN=1
WRITE $07,GUN
PAUSE 300
ENDIF
RETURN
görüldüğü gibi burada IF SAAT=0 AND DAK=0 AND SN=0 THEN
GÜN=GÜN+1 demiş bu şekilde yapılmış Mantıklıda zaten ama işte böyle yapınca gece 12 den sonra ikişer arttırıyor günü Sizce bunun sebebi ne olabilir neden kaynaklanır bu sorun
Hocam sorunu az çok anladım gibi aslında biraz daha devreyi incelediğimde saat gece 12 den sonra sıfı olduğunda saniye hemen ilerlemiyor biraz bekliyor hızlı bir şekilde ilerliyor eğer saniye biraz geç ilerlerse gün iki defa artıyor. Ama her zaman bu böyle olmuyor düzgün bir şekilde çalıştığıda oluyor diyorumki çalışma frekansını yani kristalin değerini 8 MHz ye çıkarsak devre açısından bi faydası olurmu yada ısı ve nem ölçümlerinde bi sorun olurmu
DS1302 ninbazı kötü yönleri var. Bu nedenle ben artık onu kullanmıyorum. Yerine DS1307 kullanıyorum.
Kötü yönü dedim şayet 1 sn içinde iki defa okuma yaparsan sn hızlı artıyor. Bana anlamsız geliyorç Mademki kendi osilatörü var neden hızlı artsınki. Bu nedenle genelde kesme kullanıp her 900ms de bir okuma yaparım . Baktımda 300 ms lik bir gecikme var programda. Belki oraya bir 300 ms daha koysan sorun giderilebilir. Bunun dışında osilatör frekansını artırmak işi çözmeyecektir.
Ete
Merhabalar ete hocam
Hocam dediğiniz gibi oradaki gecikmeyi 600ms olarak değiştirdim sorun düzeldi gibi artık günü iki defa arttırmıyor saniye daha düzenli ilerliyor yani bu gecikme faydalı oldu.
peki hocam ds1302 ile ds1307 arasındaki fark nedir acaba okumada ve yazmada farklılık varmıdır
Evet okuma ve yazma farklı. DS1307 I2C çalışıyordu yanlış hatırlamıyorsam.
Ete
Tamam Hocam teşekkür ederim
sayın hocam son hex dosyasını burda paylaşmanız mümkünmü acaba teşekkürler.
Hocam derken kimi kast ettiniz bilmiyorum zira burada herkes hoca artık.Her ne kadar ben düzeltmiş olsamda proje sahibi Mucit23 dür. Onun buraya koyması gerekir.
Ete
Tabiki vereyim herkes fayadalansın istediği gibi değişiklikler yapsın
Buyrun ;)
http://www.dosya.tc/dWfjrH/son_al__ma.rar.html
Merhaba arkadaşlar merhaba Ete hocam :)
arkadaşlar bugün devreyle ilgilenirken aklıma şöyle bişey geldi bende hemen işe koyuldum
bundan önceki son verdiğim programda günde 8 defa çevrim işlemi yapılıyordu yani 3 saatte bir kez çevirici motoru çalıştırıyordu.Benim aklıma gelen şey ise menüde motorun 1 gündeki çevirme saatleri yerine motorun kaç saatte bir çevirileceğini ayarlamak.Şimdi sizlere soruyorum;sizce eğer motor 3 saatte bir dönecekse tekrardan motorun dönüş saatlerini ayarlamak mantıklımı sizce bence çok gereksiz.Ben bunu düşünerek programda motor kaç saatte bir çevirilsin diye bir menü ekledim. Bu menü ile motorun kaç saatte bir çevirileceği 1 ile 4 arasında ayarlanıyor örnek vereyi
diyelimki 1 e ayarladık
bu sefer motor saat başı çalışır.
ikiye ayarlarsak motorun dönüş süreleri 00,02,04,06,08,10,12,14,16,18,20,22 motoru bu saatlerde çalışır
eğer 3 e ayarlarsak bu sefer 3 saatte bir çeviriliyor aynısı 4 içinde geçerli
bu şekilde program çok daha sadecelşti programın boyutu küçülmüş oldu.Eskidem program 6583kword iken şimdi 5426kword oldu.
Ben sadece en yüksek verim için çalışıyorum internette bu iş için tüm bilgileri okudum ve olabildiğince programa yansıtmaya çalışıyorum.Umarım faydalı olurum
Tüm dosyaları ekledim pcb,isis,hex vs
http://www.dosya.tc/PajxVh/sonhali.rar.html
Sayın Mucit23 suan en son hex dosyasını indirip denedim gözlemledigim bazı sorunları aktarmak istiyorum cevirme motorunu 8 sn cevir e ayarladım suan 8 dakika gecti hala role kapanmamakta. ekrandaki saatin saniyeleri 7 sn de bir ekrana yansıyor birde sıcaklık kısmındaki dereceleri hassas olamsı acısından bucuklu yapabilirmiyiz? örnegin 37.2 veya 37.8 vs. teşekkürederim....
sayın mucit23 devreyi 40 saatten fazla çalıştırdım ve gözlemledıgım bı hatayı daha aktarmak ısterım bunca saat calışmıs olmasına ragmen displaydeki 1. gün 2.güne geçmedi... projenız gerckten guzel devre tasarımında hata bulunmuyor sadece bi kac programsal hata mevcut bızımle paylaştıgınız için teşekkürederiz...
Merhabalar
3-4 gündür benim projeyle uğraşıyordum kaç gündür internete giremediğim için mesajlarınızı görmemişim;
Benim devrede hiç bir sorun kalmadı herşey tıkır tıkır çalışıyor sorun mutlaka sizde olmalı mümkünse pici tekrardan programlayıp deneyiniz bu dediklerinizin olmaması lazım
sayın mucit23 devreyi herşeyiyle kontrol ettim tasarımda sıkıntı yok pic i belki 10 defa tekrar tekrar programladım ama sonuc aynı son dosya hatalı olabilirmi acaba?yada tekrar yükleyebilirmisin son iki dosyayıda yükledim degişmedi.teşekkürler
evet devreyi başından sonuna kadar inceledim pic i 3 4 defa farklı programlayıcılarda programladım sonuc aynı...
http://www.upload.gen.tr/d.php/s12/djjepbwv/son_hali.rar.html (http://www.upload.gen.tr/d.php/s12/djjepbwv/son_hali.rar.html)
buyur emin olmak için tekrardan bu kodlarla pici programladım bu kodlarla devrem çalışıyor bi değişiklik olmadı sorun sende olmalı
Benzer sorunları forum sitelerinde yüzlerce defa gördüm. Hemen hepsinin sebebi aşağıdakilerden birisi çıktı.
1. Piyasadaki DS1302 nin kristalleri her nedense son derece kalitesiz. En azından bizim piyasadakiler sanki bozuk mallar toplanmışta bizim piyasada satılıyormuş gibi. EN iyisi çalışan bir küçük saat devresinden bir kristal sökmek olur. Sorun genelde kaliteli bir kristal ile çözülmektedir.
Bazı bozuk kristaller bir müddet çalışmakta sonra arada bir durmakta ve sonra yeniden çalışmaktadır. Kristal frekanslarıda çok bozuk olduğundan saatelerde çok fazla ileri geri çalışma durumu meydana gelmektedir.
2. Nadir de olsa DS1302 ninde bozuk çıktığı görülmüştür. Değiştiridikten sonra devre normal çalışmaya başlamıştır.
3. DS1302 nin devreye yerleştirilmesi ve özllikle kristal bağlantısının etrafının GND ile nasıl çevrileceği data sheet de gösterilmiştir. Bu tedbirin alınmadığı PCB lerde devre genelde sorunlu çalışmaktadır. Hiç sorun çıkmadığı devrelerde olmuştur ama çoğunluk sorunlu çalışmaktadır. Bu nedenle data sheet de kristal bağlantısının nasıl yapılması gerektiği gösterilmiştir.
DS1302 nin pil bağlantı ayağı vardır. Prensip olarak pil yada besleme bacaklarındaki voltajların hangisi büyük ise DS1302 otomatik olarak oradan besler kendisini. Data sheet den hangi bacağın pil hangi bacağın +5V beslemesi olduğuna bakılmalı ve PCB de buna dikkat edilmelidir.
Ete
hocam Verdiğiniz bilgiler için teşekkür ederim maviveda arkadaş için kesinlikle faydalı olacaktır
Sayın Ete abi yorumlarınız okudum ve devreyi yaptım ares cizimindeki eleman degerleri isisinkinden farklı arese göre yapılan devrede maviveda arkadasın dedigi gibi hatalar görülmekte.direnc degerlerini isis cizimindeki gibi takıldıgında devree normal calışıyor fakat tek sorunu var nem kontrolü yapmıyor.örnegin sınırı 60 yaptıgımızda devre röleyi 61 de çekiyor NEM kısmı tam ters olmuş sizce asm kodunda nerenın degişmesi gerekir.
2.sorum projenın sahibi mucit23 bey'e öncelikle paylaşımlarınızdan dolayı forum olarak teşekkürederiz.Devrenin sorunsuz çalıştıgını idda etmişsiniz ama dedigim gibi nem kısmı kontrol etmiyor girilen degerin üstündeyken röle çekiyor.bütün eleman ları ve baglantı şekillerini birebir inceledim direnc degerleri dışındaki bütün herşey dogru,ben yazılımdan başka bir sorun göremedim.peki siz ne dersiniz bu duruma sorun bizdemi yoksa sizin verdiginiz hex temi? teşekürederim.
Alfa,
Programa baktım. Okunan Ortam Nemi , Set edilen değerden büyük ise röle çekiyor. Program bu şekilde ayarlanmış.
Bunun neresi ters?
Bunun anlamı şudur. Ortam nemi yüksek ise röle çekecek ve buna bağlı bir fan vs. çalışıp içerideki havayı dışarı atarak yerine taze hava alacak ve böylece nem oranını düşürecektir. Yada buna benzer bir şey olmalı.
Senin mantığında ise Ortam nemi (okunan nem) set edilenden düşük ise röle çeksin ve ortama nem versin şeklinde olmalı. Ben bu konunun uzmanı değilim . İşi iyi bilen birisi cevaplarsa hangisinin daha doğru olduğunu belirtirse program ona göre değiştirilebilir.
Ete
Sayın Ete abi ben istiyorum ki nem set edilen degerde sabit kalsın.60 girildiyse 59 röle çeksin 60 oldugunda bıraksın.yani deger 60 da sabit tutulsun.bu şekilde bi düzenleme yapılabilirmi.birde rica etsem gün kısmına bi bakarmısın bi anormallik varmı.bazen gün degişmiyor ve lcd de karakterlerde bozulma oluyor.Saygılar.
merhabalar ETE hocamın da dediği gibi nem değeri set değerinin üzerine çıkınca çalışıyor yani ben öyle ayarlamıştım röle çekince fan çalışıyor ve içerideki havayı dışarı atıyor böylece nem çabucak düşüyor böylesi çok verimli oldu.zaten içeriye koyduğunuz su nemi çok çabuk arttırıyor yani dışarıdan ayrıca nem vermenize gerek yok.
merhabalar ete hocam
ben bu aralar yeni bir projeyle uğraşıyorum fakat projemde bazı sorunlar var bu yüzden sizin önerilerinize ve bilgilerinize ihtiyacım var
projeyle ilgili ayrıntılı bilgiyi bu başlık altında anlatmışım belki görmüşsünüzdür
https://www.picproje.org/index.php/topic,28824.0.html
projemdeki en önemli sorun röleyi kontrol etmeyle ilgili
aşağıdaki yazımda sorununne olduğunu anlatmışım
Alıntı Yapprogramdada anlaşılacağı gibi röleyi kontrol etmek için aşağıdaki komutları kullandım
ZAMANA_BAK:
READ $0,SAYI
READ $1,PTESI:IF PTESI=255 THEN PTESI=0
READ $2,SALI:IF SALI=255 THEN SALI=0
READ $3,CARS:IF CARS=255 THEN CARS=0
READ $4,PERS:IF PERS=255 THEN PERS=0
READ $5,CUMA:IF CUMA=255 THEN CUMA=0
READ $6,CTESI:IF CTESI=255 THEN CTESI=0
READ $7,PAZAR:IF PAZAR=255 THEN PAZAR=0
IF SAYI=1 THEN
IF (PTESI=1)AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (SALI=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (CARS=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (PERS=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (CUMA=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (CTESI=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (PAZAR=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
ENDIF
RETURN
burada sayı değişkeni pompanın açıkmı kapalımı olduğunu temsil ediyor eğer birse açık sıfırsa pompa kapalıdır
günler i açıklamak gerekirse eğer gün birse o gün sulama yapılır sıfırsa sulama yapılmaz yani menüde onay işareti koymaklar günün 1 veya sıfır olmasını değiştiriyorduk .Motoru kontrol etmek için bu kodları kullandım ama devreyi ilk çalıştırdığımızda hemen röle çekiyor
ve bir sonraki dakikada pompa kaç saniye çalışacaksa o kadar çalışıp röle bırakıyor ayrıca günlerede uymuyor diyelimki sadece pazartesi günü çalışması gerekiyorsa pazartesi dahil hergün boyunca ayarladığım saatte çalışıyor program nedense birtek ayarladığım saat ve dakikayı dikkate alıyor diğer durumları pass geçiyor anlayamadım gitti
acaba ıf sorgulamasınımı yanlış yapıyorum bir türlü program günleri dikkate almıyor sadece saat ve dakikaya uyuyor bu sorunu nasıl çözebilirim
Diğer bi konu ise ds 1302 yavaş ilerliyor yani saatin normal hızından çok daha yavaş ilerliyor .Bu konuyla ilgili programda şunları keşfettim .
galiba sorun frekansla ilgili bende programdan osc frekansını 8mhz yapıp şemadada kristalfrekanslarını 4 mhz yapınca ds 1302 normal çalışıyor ve ilerliyor onda bir sorun kalmıyor ama bu seferda ds18b20 bozuluyor ısı devamlı -0,1 derecede takılıp kalıyor ama tüm frekansları 8 mehz yada tüm frekansları 4 mhz yapınca ds18b20 normal çalışyıro ama yine saat yavaşlıyor
BEnim gözlemlerim bunlar acaba boşunamı bu kadar uğraşıyorum gereçk hayatta ds1302 normal çalışırmı bu konuda ne önerirsiniz .
programın tüm kodlarını vereyim anlamanız açısında size yardımcı olabilir
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 25.06.2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE OSC 8
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, HS_OSC
TRISA=%00000111
TRISB=%00000000
TRISC=%00001111
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 2
ADCON1 = 7
E VAR BYTE
AY var byte
YIL var byte
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
MEM VAR BYTE
ONLAR VAR BYTE
BIRLER VAR BYTE
SAYAC VAR BYTE
SAYI VAR BYTE
SAAT1 VAR BYTE
DAK1 VAR BYTE
DUR VAR BYTE
HAFTA VAR BYTE
PTESI VAR BYTE
SALI VAR BYTE
CARS VAR BYTE
PERS VAR BYTE
CUMA VAR BYTE
CTESI VAR BYTE
PAZAR VAR BYTE
'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=PORTC.3 ' One-wire Data-Pin "DQ" PortB.0 da
LCDOUT $FE, $50, $06, $09, $09, $06, $00, $00, $00, $00 ' dERECE İŞARETİ
MENU VAR PORTA.0
YUKARI VAR PORTA.1
ASAGI VAR PORTA.2
RTC_RST var PORTC.0
RTC_CLK var PORTC.1
RTC_DTA var PORTC.2
SYMBOL ROLE=PORTA.3
PAUSE 300
LCDOUT $FE,$40,0,1,2,20,8,0,0,0 'LCD 0. KARAKTER HAFIZASI ONAY İŞARETİ
LCDOUT $FE,$48,0,17,10,4,10,17,0,0 'LCD 1. KARAKTER HAFIZASI ÇARPI İŞARETİ
LCDOUT $FE,$50,16,8,4,2,4,8,16,0 'LCD 2. KARAKTER HAFIZASI YÖN İŞARETİ
LCDOUT $FE,1," OTOMATIK CICEK "
LCDOUT $FE,$C0," SULAYICI "
PAUSE 1500
LCDOUT $FE,1
GOSUB SENSOROKU
BASLA:
GOSUB ZAMAN_OKU
GOSUB SENSOROKU
GOSUB EKRANAYAZ
GOSUB ZAMANA_BAK
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO AYAR_MENUSU
ENDIF
GOTO BASLA
'---------------------------ALT PROGRAMLAR-------------------------------------
EKRANAYAZ:
READ $0,SAYI:IF SAYI=255 THEN SAYI=0
READ $10,DUR:IF DUR=255 THEN DUR=0
LCDOUT $FE,$80,ISARET,DEC ISI,",",DEC1 (Float),Derece,"C ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
IF SN=DUR THEN LOW ROLE
IF SAYI=1 THEN LCDOUT $FE,$C0,"P. ACIK"
IF SAYI=0 THEN LCDOUT $FE,$C0,"P. KAPALI"
IF HAFTA=1 THEN
LCDOUT $FE,$CB,"PTESI"
ENDIF
IF HAFTA=2 THEN
LCDOUT $FE,$CB," SALI"
ENDIF
IF HAFTA=3 THEN
LCDOUT $FE,$CB," CARS"
ENDIF
IF HAFTA=4 THEN
LCDOUT $FE,$CB," PERS"
ENDIF
IF HAFTA=5 THEN
LCDOUT $FE,$CB," CUMA"
ENDIF
IF HAFTA=6 THEN
LCDOUT $FE,$CB,"CTESI"
ENDIF
IF HAFTA=7 THEN
LCDOUT $FE,$CB," PAZR"
ENDIF
RETURN
ZAMANA_BAK:
READ $0,SAYI
READ $1,PTESI:IF PTESI=255 THEN PTESI=0
READ $2,SALI:IF SALI=255 THEN SALI=0
READ $3,CARS:IF CARS=255 THEN CARS=0
READ $4,PERS:IF PERS=255 THEN PERS=0
READ $5,CUMA:IF CUMA=255 THEN CUMA=0
READ $6,CTESI:IF CTESI=255 THEN CTESI=0
READ $7,PAZAR:IF PAZAR=255 THEN PAZAR=0
IF SAYI=1 THEN
IF (PTESI=1)AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (SALI=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (CARS=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (PERS=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (CUMA=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (CTESI=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
IF (PAZAR=1) AND SAAT1=SAAT AND DAK1=DAK AND SN=0 THEN HIGH ROLE
ENDIF
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
TEMIZLE:
LCDOUT $FE,1
RETURN
AYARLANDI:
lcdout $FE,1," AYARLANDI "
PAUSE 1000
GOSUB TEMIZLE
GOTO CIK
AYAR_MENUSU:
GOSUB TEMIZLE
SAATAYARI:
LCDOUT $FE,$80," SAAT AYARI"
IF MENU=1 then
WHILE MENU=1:WEND
GOTO SAATAYAR1
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO MOTOR_AYARI
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO CIKIS
ENDIF
GOTO SAATAYARI
MOTOR_AYARI:
GOSUB TEMIZLE
MOTOAYARI:
LCDOUT $FE,$80," POMPA AYARI"
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO MOTORAYAR
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO CIK
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO AYAR_MENUSU
ENDIF
GOTO MOTOAYARI
CIKIS:
GOSUB TEMIZLE
CIK:
LCDOUT $FE,$80," MENUDEN CIKIS"
IF MENU=1 THEN
WHILE MENU=1:WEND
LCDOUT $FE,1
GOTO BASLA
ENDIF
IF ASAGI=1 then
WHILE ASAGI=1:WEND
GOTO AYAR_MENUSU
ENDIF
IF YUKARI=1 then
WHILE YUKARI=1:WEND
GOTO GUN_AYARI
ENDIF
GOTO CIK
MOTORAYAR:
GOSUB TEMIZLE
MOTOAYAR:
READ $0,SAYI
IF SAYI=255 THEN SAYI=0
LCDOUT $FE,$80," POMPA DURUMU "
IF MENU=1 THEN
WHILE MENU=1:WEND
GOSUB M_ZAMANI
ENDIF
IF YUKARI=1 THEN SAYI=SAYI+1
WHILE YUKARI=1:WEND
IF SAYI=2 THEN SAYI=0
WRITE $0,SAYI
IF SAYI=1 THEN lcdout $FE,$C0," ACIK "
IF SAYI=0 THEN LCDOUT $FE,$C0," KAPALI "
GOTO MOTOAYAR
M_ZAMANI:
GOSUB TEMIZLE
P_TESI
READ $1,PTESI
IF PTESI=255 THEN PTESI=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
PTESI=PTESI+1
IF PTESI=2 THEN PTESI=0
WHILE YUKARI=1:WEND
ENDIF
IF PTESI=1 THEN LCDOUT $FE,$C0,"PAZARTESI ",0
IF PTESI=0 THEN LCDOUT $FE,$C0,"PAZARTESI ",1
WRITE $1,PTESI:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO SALIGUNU
ENDIF
GOTO P_TESI
SALIGUNU:
GOSUB TEMIZLE
SALI_:
READ $2,SALI
IF SALI=255 THEN SALI=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
SALI=SALI+1
IF SALI=2 THEN SALI=0
WHILE YUKARI=1:WEND
ENDIF
IF SALI=1 THEN LCDOUT $FE,$C0,"SALI ",0
IF SALI=0 THEN LCDOUT $FE,$C0,"SALI ",1
WRITE $2,SALI:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO CARSAMBA
ENDIF
GOTO SALI_
CARSAMBA:
GOSUB TEMIZLE
CARS_:
READ $3,CARS
IF CARS=255 THEN CARS=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
CARS=CARS+1
IF CARS=2 THEN CARS=0
WHILE YUKARI=1:WEND
ENDIF
IF CARS=1 THEN LCDOUT $FE,$C0,"CARSAMBA ",0
IF CARS=0 THEN LCDOUT $FE,$C0,"CARSAMBA ",1
WRITE $3,CARS:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO PERSEMBE
ENDIF
GOTO CARS_
PERSEMBE:
GOSUB TEMIZLE
PERS_:
READ $4,PERS
IF PERS=255 THEN PERS=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
PERS=PERS+1
IF PERS=2 THEN PERS=0
WHILE YUKARI=1:WEND
ENDIF
IF PERS=1 THEN LCDOUT $FE,$C0,"PERSEMBE ",0
IF PERS=0 THEN LCDOUT $FE,$C0,"PERSEMBE ",1
WRITE $4,PERS:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO CUMAGUNU
ENDIF
GOTO PERS_
CUMAGUNU:
GOSUB TEMIZLE
CUMA_:
READ $5,CUMA
IF CUMA=255 THEN CUMA=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
CUMA=CUMA+1
IF CUMA=2 THEN CUMA=0
WHILE YUKARI=1:WEND
ENDIF
IF CUMA=1 THEN LCDOUT $FE,$C0,"CUMA ",0
IF CUMA=0 THEN LCDOUT $FE,$C0,"CUMA ",1
WRITE $5,CUMA:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO CUMARTESI
ENDIF
GOTO CUMA_
CUMARTESI:
GOSUB TEMIZLE
CTESI_:
READ $6,CTESI
IF CTESI=255 THEN CTESI=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
CTESI=CTESI+1
IF CTESI=2 THEN CTESI=0
WHILE YUKARI=1:WEND
ENDIF
IF CTESI=1 THEN LCDOUT $FE,$C0,"CUMARTESI ",0
IF CTESI=0 THEN LCDOUT $FE,$C0,"CUMARTESI ",1
WRITE $6,CTESI:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO PAZARGUNU
ENDIF
GOTO CTESI_:
PAZARGUNU:
GOSUB TEMIZLE
PAZAR_:
READ $7,PAZAR
IF PAZAR=255 THEN PAZAR=0
LCDOUT $FE,$80," SULAMA GUNLERI"
IF YUKARI=1 THEN
PAZAR=PAZAR+1
IF PAZAR=2 THEN PAZAR=0
WHILE YUKARI=1:WEND
ENDIF
IF PAZAR=1 THEN LCDOUT $FE,$C0,"PAZAR ",0
IF PAZAR=0 THEN LCDOUT $FE,$C0,"PAZAR ",1
WRITE $7,PAZAR:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO M_CALISMA
ENDIF
GOTO PAZAR_
M_CALISMA:
GOSUB TEMIZLE
SAAT_AYARLA:
READ $8,SAAT1:IF SAAT1=255 THEN SAAT1=0
READ $9,DAK1:IF DAK1=255 THEN DAK1=0
LCDOUT $FE,1
IF MENU=1 THEN SAAT_AYARLA
SAAT_AYAR:
LCDOUT $FE,$81,"CALISMA SAATI"
LCDOUT $FE,$C4,2,DEC2 SAAT1,":",DEC2 DAK1
IF YUKARI=1 THEN
SAAT1=SAAT1+1
IF SAAT1=24 THEN SAAT1=0
WHILE YUKARI=1:WEND
ENDIF
IF ASAGI=1 THEN
SAAT1=SAAT1-1
IF SAAT1=255 THEN SAAT1=23
WHILE ASAGI=1:WEND
ENDIF
WRITE $8,SAAT1:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO DAK_AYARLA
ENDIF
GOTO SAAT_AYAR
DAK_AYARLA:
READ $8,SAAT1
READ $9,DAK1:IF DAK1=255 THEN DAK1=0
LCDOUT $FE,1
IF MENU=1 THEN DAK_AYARLA
DAK_AYAR:
LCDOUT $FE,$81,"CALISMA SAATI"
LCDOUT $FE,$C4,DEC2 SAAT1,":",2,DEC2 DAK1
IF YUKARI=1 THEN
DAK1=DAK1+1
IF DAK1=59 THEN DAK1=0
WHILE YUKARI=1:WEND
ENDIF
IF ASAGI=1 THEN
DAK1=DAK1-1
IF DAK1=255 THEN DAK1=59
WHILE ASAGI=1:WEND
ENDIF
WRITE $9,DAK1:PAUSE 10
IF MENU=1 THEN
WHILE MENU=1:WEND
GOTO M_SURE
ENDIF
GOTO DAK_AYAR
M_SURE:
GOSUB TEMIZLE
MSURE:
READ $10,DUR
IF MENU=1 THEN AYARLANDI
WHILE MENU=1:WEND
lcdout $fe,$80,"POMPA CALISMA"
lcdout $FE,$C0,"SURESI:",DEC2 DUR," SANIYE"
IF YUKARI=1 THEN DUR=DUR+1
WHILE YUKARI=1:WEND
IF DUR=60 THEN DUR=0
IF ASAGI=1 THEN DUR=DUR-1
WHILE ASAGI=1:WEND
IF DUR=255 THEN DUR=59
WRITE $10,DUR:PAUSE 10
GOTO MSURE
SAATAYAR1:
lcdout $fe,1
IF MENU=1 then SAATAYAR1
SAATAYAR:
PAUSE 200
lcdout $FE,$80," SAATi AYARLA "
lcdout $FE,$C0,"SAAT :",2,dec2 SAAT,":",dec2 DAK,":",dec2 SN
E=0
button MENU, 1, 255, 255, E, 1,DAKIKAAYAR1
button YUKARI,1,255,255,E,1,SAATIARTIR
button ASAGI,1,255,255,E,1,SAATIAZALT
goto SAATAYAR
SAATIARTIR:
IF YUKARI=1 then SAAT=SAAT+1
IF SAAT=24 then SAAT=0
goto SAATAYAR
SAATIAZALT:
IF ASAGI=1 then SAAT=SAAT-1
IF SAAT=255 then SAAT=23
goto SAATAYAR
DAKIKAAYAR1:
IF MENU=1 then DAKIKAAYAR1
lcdout $fe,1
DAKIKAAYAR:
lcdout $FE,$80," SAATi AYARLA "
lcdout $FE,$C0,"SAAT :",dec2 SAAT,":",2,dec2 DAK,":",dec2 SN
E=0
button MENU, 1, 255, 255, E, 1,GUN_AYARI
button YUKARI,1,255,255,E,1,DAKARTTIR
button ASAGI,1,255,255,E,1,DAKAZALT
DAKARTTIR:
IF YUKARI=1 then DAK=DAK+1
WHILE YUKARI=1:WEND
IF DAK=60 then DAK=0
goto DAKIKAAYAR
DAKAZALT:
IF ASAGI=1 then DAK=dak-1
WHILE ASAGI=1:WEND
IF DAK=255 then DAK=59
goto DAKIKAAYAR
GUN_AYARI:
GOSUB TEMIZLE
GUNAYARI:
LCDOUT $FE,$84,"GUN AYARI"
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
IF HAFTA=1 THEN
LCDOUT $FE,$C0,"GUN= PAZARTESI "
ENDIF
IF HAFTA=2 THEN
LCDOUT $FE,$C0,"GUN= SALI "
ENDIF
IF HAFTA=3 THEN
LCDOUT $FE,$C0,"GUN= CARSAMBA "
ENDIF
IF HAFTA=4 THEN
LCDOUT $FE,$C0,"GUN= PERSEMBE "
ENDIF
IF HAFTA=5 THEN
LCDOUT $FE,$C0,"GUN= CUMA "
ENDIF
IF HAFTA=6 THEN
LCDOUT $FE,$C0,"GUN= CUMARTESI "
ENDIF
IF HAFTA=7 THEN
LCDOUT $FE,$C0,"GUN= PAZAR "
ENDIF
button MENU, 1, 255, 255, E, 1,ZAMAN_B
GOTO GUNAYARI
ZAMAN_B:
IF MENU=1 then ZAMAN_B
gosub ZAMAN_YAZ
GOSUB TEMIZLE
GOSUB AYARLANDI
goto CIK
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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
Umarım anlatabilmişimdir hocam sormak istedikleriniz olursa ben buradayım
Sayın Mucit23 ve Ete abi öncelikle saygılarımı sunarım.Mucit23 dedigin gibi düşüncen güzel fakat set edilen degerin üstünde röle fanı actıgında içerdeki ısıda düşmekte ve dengesizlik yaratmakta.sizden rica etsem ısıtıcı kısmı gibi set edilen degerde sabit tutma degişikligini yapıp dosyayı burda paylaşırmısınız? yada degişecek yeri belirtin ben degiştireyim.Saglıcakla kalın.
normaldede sizin dediğiniz gibidir zaten ısıtıcı ayarladığımız değerin altına inice çalışır yine aynı şekilde ayarladığımız değerin üstüne çıkınca kapanır .
@alfa;
rölenin normal-açık ve normal kapalı olmak üzere iki kontağı vardır.Biri olmuyorsa diğerini kullanabilirsin.
Mucit 23 öyle diyosunda röle degerin üstüne cıkınca calışıyor. ısı ayarı gibi yapman mümkün değilmi?
yani ısı ayarında toleransmı olmasını istiyorsunuz?
Yok hayır nem kısmınında ısı ayarı gibi çalışmasını istiyorum.bu haliyle set edilen degerin üstüne cıkılınca röle açıyor ben set edilen degere uluşıncaya kadar acık kalıp o degerde sabit kalmasını istiyorum.
Sayın mucit23 bu devreyi kuluçka makinamda kullanmak üzere yaptım çalıştırdım emek verip bizimle paylaşan herkese teşekkür ederim. SHT11 lehimlemekten korktugum için sht 71 kullandım devreyi çalıştırdım. yanlız bi sorunum var 7805 aşırı ısınıyor soğutucu kullandığım halde. Roleler çekili olmadığı zamanlarda bile ısınıyor. baskı devreyi inceledim şase falan göremedim sizce normalmi 7805 in ısınması
yorulmaz06 devreyi kaç volt la besliyorsun?
12v 7 ah kuru aküyle besliyorum ısınma sorununu çözdüm lcd aydınlatmaya direç koymamıştım yeşil lcd çok akım çekiyo o yüzden ısınıyormuş
bende ilk başta 12v kuru akü ile besliyordum sonra 6v 7a akü kullandım ısı problemı kalmadı ama elektrık olmadıgızaman fazla dayanmıyordu. gene 12v kuru akuye gectım 7805 i termal macunla kaplayıp sogutu ılave ettim simdi sorun yok tavsiye ederim...
Sayın hocalarım devre sonunda bitti makinaya koyacağım yanlız aklıma takılan birşey var şuan açık havada nem 85 in altına inmiyor ankarada bu saatte bu nem çok fazla deilmi
şuan saat 19:30 meteorolojide nem 35 benim devre 100 ü geçti acaba pici tekrar programladım 16f877 denedim 16f877a denedim hep aynı acaba calibre etmemmi gerekiyor yardımlarınızı bekliyorum
http://www.dmi.gov.tr/tahmin/il-ve-ilceler.aspx?m=ANKARA
Alıntı YapNemliliğin en yüksek olduğu saatler; genellikle, hava sıcaklığının en düşük olduğu gece saatleridir, sıcaklığın en yüksek olduğu öğle saatleri ise genellikle nemliliğin en düşük olduğu saatlerdir.
Ek: Doğal olarak ilçelere göre farkediyor. Mesela merkezde en yüksek %83, Kızılcahamam'da en yüksek %96.
Alıntı yapılan: JKramer - 13 Temmuz 2010, 19:31:57
http://www.dmi.gov.tr/tahmin/il-ve-ilceler.aspx?m=ANKARA
Alıntı YapNemliliğin en yüksek olduğu saatler; genellikle, hava sıcaklığının en düşük olduğu gece saatleridir, sıcaklığın en yüksek olduğu öğle saatleri ise genellikle nemliliğin en düşük olduğu saatlerdir.
Ek: Doğal olarak ilçelere göre farkediyor. Mesela merkezde en yüksek %83, Kızılcahamam'da en yüksek %96.
Hocam ilgin için teşekkürler
bulunduğum ilçede en düşük 41 en yüksek 87 ama devrede ölçülen ise 103 şu anda
devreyi kapının önüne dışarıya koydum orada ölçüyorum
Sevgili hocalarım
Çok çok az program bilgimle kodları incelerken ETE hocamın derslerinde rutubet hesap kısmının
RUTHESAP:
ISI=ISI1*10+ISI2
p1=(26542-(54722**ham+ham))**ham-40
P2=655+(HAM*5)+(HAM**15917)
P3=(P2**(ISI*10+2480))-(P2**2730)+P1 ' kompanse edilmiş değer
U1=p3/10:U2=p3//10
IF ham>3710 THEN
u1=0:U2=0
GOTO SENSORYOK
ENDIF
return
olduğunu gördüm
kuluçka makinasının programında ise
RUTHESAP:
'ISI=ISI1*10+ISI2
p1=(26542-(54722**ham+ham))**ham-25
P2=655+(HAM*5)+(HAM**15917)
P3=(P2**(ISI*10+2480))-(P2**2730)+P1
U1=p3/10:U2=p3//10
IF ham>3710 THEN
U1=0:U2=0
ENDIF
return
böyle
yani birinde p1=(26542-(54722**ham+ham))**ham-25
diğerinde p1=(26542-(54722**ham+ham))**ham-40
benim nemi çok yüksek görmem bununla alakalı olabilirmi?
Bende ankaradayım ama bende %68 gösteriyor sensor olarak ne kullandın?
sht71 kullandım
ben sht11 kullandım biraz pahalı ama iyi iş görüyor.datasheet ine bakmak lazım ikisi farklı oalbilir
SHT11 ile SHT71 arasında yalnızca kılıf farkı var. Belki braz hassasiyet farkıda vardır ama her ikisinide kullandım. Ölçüm değerlerinde bir farklılık görmedim.
Hatta aynı ande iki sensörüde bir birinin aynısı iki devrede aynı anda kullandım. Her ikiside aynı değeri gösterdi.
Bu nedenle bu gibi şeylere kafanızı takmayın.
BU sensörü ilk kullandığımda internette bile henüz örnek ne devre nede hesaplama şekli ile ilgili bir bilgi var idi.
Oturdum excelde tamamen integer hesaplama yöntemi ile bir hesaplama şekli oluşturdum. Araya 32 bit hesaplama mantığınıda ilave ederek sonuca ulaştım. Ancak sonradan İnternette daha kısa yazılan ama üretilen kod açısından farkı olmayan örnekler çıktı.
Bunlarla benim hesaplama yöntemimide karşılaştırdım. Sonuç yine aynı idi.
Sonuç olarak verdiğim formüller doğrudur. Bazıları isis simulasyonunda çıkan farklı değerler nedeni ile benim kodları değiştirip kendilerine göre uyduruyorlar. Bu yanlış. İsteyen istediğini yapabilir tabiiki ama kodlarla oynamak yalnızca sonucun yanlış çıkmasını sağlar bunuda belirtmek isterim.
Bakın ilk kullandığım hesaplama şekli aşağıdadır.
ISIHESAP: T1=(-4000+HAM)/100
T2=((-4000+HAM)//100)/10
RETURN
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
RUTHESAP: P1=28*HAM
P2=div32 100
P1=P2*HAM
P2=div32 1000
P1=405*HAM
P3=div32 100
C=(P3-P2-400)
B=(1000+(8*HAM))/10
ISI=T1*10+T2
If ISI>250 then
P1=((ISI-250)*B)
P2=div32 1000
RUT=C+P2
else
P1=((250-ISI)*B)
P2=div32 1000
RUT=C-P2
endif
U1=RUT/100:U2=(RUT//100)/10
RETURN
Bütün değişkenler word tipindedir.
Ete
İyi hoş konuşmussunda ete abi şimdi benim aklıma kurt düştü bu son verilen hex te senin orjinal formulünmü var değiştirilmiş mi,eger degiştirildiyse senin izninle bizde ona göre düzenleme yapalım...senin kullandıgın formul nedir acaba?
Yukarıda verilmiş benim kullandığım. Derslerde de açıklamış idim zaten.
Ete
bilgiler için teşekkürler ETE hocam
p1=(26542-(54722**ham+ham))**ham-25 bu satırı sizin örneklerinizde olduğu gibi ham-40 olarak değiştirip deniyeceğim
peki ete abi bu derecenin set ayarında ben dereceyi ondalıklı olarak ayarlamak istiyorum onun için ne gibi bir yol izlemeliyim programda?
Bu iş için tek bir sistem var. Elde edilen sonuç 10 katı olarak hesaplanmalıdır.
Örnek vermek gerekir ise 35 derece için 350 bulunmalı bunu 10 ile mod alma işlemi yaparsanız size ondalık kısmını verecektir.
350/10 size tam sayı kısmını 350//10 ise size ondalıklı kısmı verecektir.
Programda bulunan değerlerin 10 ile çarpılmış halini hesapla ve sonucu 10 ile mod alma işlemine sok olsun bitsin.
Ete
teşekkürederim ete abi.valla sen olmasan bizim gibi bu işe yeni başlayanlar ne yapacaktı ALLAH razı olsun.
Konuyu okudum da... 14 yıl önce sadece rölelerle kurduğum mantık kapılarıyla bir kuluçka makinası yapmıştım.
Bir mantık hatasına değinmek istiyorum. Demişsiniz ki 4 saatte bir motorun dönmesi için saatleri giriyoruz sisteme.
Buna ne gerek var?
Ben bıldırcın için yapmıştım, saatte bir 45 derece sağa, 45 derece sola döndürmek gerekiyordu. Ve dönüş saatlerini girmeye filan da gerek yoktu. Sizin için de gerek yok.
Bence tmr0 ile 1/128 prescaler kullanın. Bu prescaler ayarında tmr0 1 taşması 4MHz kristal ile 32,768 milisaniyede gerçekleşir.
Her taşmada sayac değişkenini 1 arttırın. Sayac değişkeni 30 olduğunda 1 saniye (çok yaklaşık olarak) geçmiş olacaktır.
sayac değişkenini bu noktada sıfırlayın.
saniye diye bir değişkeni sayacın her 30 olmasında 1 arttırın. saniye 60 olunca da dakika değişkeni için aynı işlemi yapın.
4 saat 240 dakika yapar. dakika değişkeninin her 240 olması halinde motoru çalıştırın.
Sağ ve sol limitler için limit switc koyun. Motor çalıştığında mesela sağ limit swice basılı olacaktır. O zaman sola basana kadar çalışmaya devam ettirin. Bu arada sayacı da durdurun.
Yani motorun çalışma saatlerini programlanabilir yapmakla uğraşmayın. Hiç bir kuluçka makinası bunu yapmaz. Eğer bunu siparişle yapıyorsanız, alıcınız ya işten anlamıyor, ya da işi yokuşa sürüyor.
Çok çok programlanabilir olan motorun kaç saatte bir döneceği olabilir. Saat kaçlarda döneceği değil...
Bu özelliği siz ekliyorsanız, hiç kimse saat kaçlarda tepsiyi bükeceği programlanabiliyor diye bir kuluçka makinasını almaz.
Kuluçka makinası, konulan 100 döllü yumurtanın kaçının yumurtadan çıktığı, yumurtadan çıkanların kaçının sağa sola düşmeden sağ kalabildiği gibi performanslarla alınır.
100 döllü yumurtadan daha fazla verim elde etmek için de içerideki ısı ve nem ölçümü ve dağılımının çok iyi olması gerekir. Bunun için 2 veya 3'er sensör ile kontrol yapmaya enerji harcamanız çok daha verimli bir cihaz yapmanızı sağlayacaktır.
Selam ve saygılar
Arkadaşlar kusura bakmayın bu aralar çok fazla projeyle uğraştığım için konuyla fazla ilgilenemedim.
Hayırlısıyla benim ilk civcivler çıktı hepsi çok sağlıklılar aslında bi iki tane fire verdi onun sebebinide buldum ben hata yapmıştım ısı sensörünü makinanın üst taraflarına koymuştum bu yüzden ortam sıcaklığı biraz yüksek görünüyor sensör 38 derece gösterirken yumurtalıkların seviyesindeki sıcaklık 36,5 - 37 derece civarındaydı bence enbüyük sorun buydu gerçi şimdi projemi dahada geliştiriyorum şimdiki projemde iki adet ısı sensörü kullanıyorum bitanesi altta diğeri yani sht 11 üstte olacak set değeri bu iki sensörün ortalama sıcaklığı alınarak çıkan değerle karşılaştırılacak ve iki sensör arasındaki ısı farkı 2 dereceden büyük olunca makinanın yanlarındaki ısı dengeleyici fanlar çalışacak ısı dengelenince yandaki fanlar kapanacak ayrıca devreyle ilgili tüm bilgileri aynı anda görmek için 20x4 lcd ekran kullandım programını bitirdim sayılır 16F877 ağzına kadar doldu neredeyse kristal frekansınıda 20 mhz ye çıkarmayı düşünüyorum Ayrıca ekranda tarih gün gibi bilgilerde görülecek şimdilik düşüncelerim bunlar
Alıntı Yappıcker
AYrıca yanlış hatırlamıyorsam son verdiğim programda ısı ayarlama sistemi senin dediğin gibi yapmıştım sen sadece 1 ile 4 arasında kaç saatte bir girileceğini seçiyorsun okadar gerisini program hallediyor
Sayın mucit23 hocam
emek verip yaptıgın projeyi bizlerle paylaştığın için teşekkür ederim. devreyi kurdum çalıştırdım ama nemden verim alamıyorum sürekli çok yüksek gösteriyo. yakınımdaki bir eczanede bulunan digital nem ölçerle karşılaştırdım 30-35 derece fazla gösteriyo makinanın içinde ise çok daha fazla. 140 150 lerde gösteriyo acaba benim sht71 arızalı olabilirmi.
bu ikinci sht71 ilki 7805 e taktığım soğutucu bacaklarına şase yapınca ekranla birlikte mefta oldu. acaba bu şase sırasında sht ye bağladığımız direncin falan değeri değişmiş olabilirmi. yeni bitane daha sht alayım diyecem ama sht71 45 lira ankarada. sence bu sorun neden kaynaklanıyo olabilir? yardımcı olursan sevinirim.
yeni projeni sabırsızlıkla bekliyorum kolay gelsin
projeyi bitirip çalıştırınca paylaşacağım inşaallah sht 11 bende çok düzgün çalışıyor sen sht 71 kulanmışsın arada kılıfharicinde pek fark olduğunu düşünmüyorum ama bende sht 11 sorunsuz çalışıyor ölçümler çok doğru karşılaştırmalar yaptım arada pek fark yok sende istersen biraz karşılaştırmalar yap test et ortam nemi çok yüksek olabilir bilmiyorum bende
mucit23 bey yeni projenizi merakla bekliyoruz teşekkürler.size bir sorum olacak saga ve sola cevirme işini nasıl hallettiniz benim bildigim kadarıyla bu devre sadece tek yöne çeviriyor?
syn alfa. herkesin sistemi farklı mesela benim motor hep bir yöne dönüyor. ustalarımız daha iyi bilir ama sağa sola dönmeyi şöyle yapabilirsin. devreye bir role daha ekleyip tek saatlerde birinci röle çift saatlerde ikinci röle çektirebilirsin ama 2 saatte bir ayarlarsan hep bir tarafa döner 1 saat veya 3 saatte bir dönsün dersen olur gibi. yinede ustalarımız daha iyi bilir. ben sana kendi sistemimi tarif edeyim. 10 rpm redüktörlü motor aldım 5 kg ya kadar rahat kaldırabiliyo.
(http://img716.imageshack.us/img716/5331/motorc.jpg)
resim çizmeyi pek beceremem kusura bakmayın ama umarım size bir fikir veriri
yaptığım sistem çok iyi oldu mekanik olarak çok verimli çalışıyor Yaptığım sitemi kelimelerle anlatamam en iyisi çalışırken bir videosunu çekmek böylesi daha açıklayıcı ve fikir verici olur
Bizde merak la bekliyoruz yeni projeni başarılarının devamını dilerim.
devreni indirdim fakat simulasyonda sorun var lcd de hiç bişey görünmüyor son verdigin kodları derledim gene çalışmadı ama ilginç birşey dikkatimi çekti program f877A ya göre yazılmış simulasyonda kullanılan 18f452 bunlardan hangisini kullanacagız ?
merhaba arkadaşlar ben ete hocanın yapmış oldugu (16F628A)ısı nem kontrol devresini kuluçka makinasına uyarladım ilk yaptıgım devre oldukça kararlı çalışıyor bir çok termometre ile denedim (a class civalı) fakat 2. devremde ilkine göre 0,6 derece fazla öllçüyor bunun kalibrasyonu nasıl yapabilirim bu konuda yardımcı olabilecek birisi varmı
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
define lcd_RWREG PORTB
define LC_RWBIT 2
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
OPTION_REG.7=1
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_ON
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
'@ DEVICE pic16F628A,BOD_off
'---------------------------değişkenler------------------------------
ILK VAR BIT
Y VAR BIT
KONTROL VAR BYTE
DUR VAR BYTE 'EN SON SHT SENSÖR OKUMA BÖLÜMÜ
ISI1 VAR BYTE 'BU PROGRAMDA VAR.
ISI2 VAR BYTE 'YAPILDI. İYİ ÇALIŞIYOR.
ALARM1 VAR BYTE
ALARM2 VAR BYTE
U1 VAR BYTE
U2 VAR BYTE
C0 VAR BYTE
Z VAR BYTE
ALRM VAR BYTE
SEC VAR BYTE
H0 VAR HAM.BYTE0
H1 VAR HAM.BYTE1
HAM VAR WORD
RAW var word
RAI var word
ISI VAR WORD
' RUT VAR WORD
NEM VAR WORD
ALT VAR WORD
P1 VAR WORD
P2 VAR WORD
P3 VAR WORD
C VAR WORD
B VAR WORD
W VAR WORD
CLK VAR PORTA.0
DTA VAR PORTA.1 'PORTA.2 DE ROLE BAĞLI OLACAK
ISARET VAR BIT 'sensor değeri 0 ise artı, 1 ise eksi
SIGN VAR BIT 'alarm ısı isareti 0 ise artı 1 ise eksi
HATA var BIT
RAW2 VAR WORD 'EK
NEM2 VAR WORD 'EK
'-----------------------------B A Ş L A N G I Ç ---------------------------
CLEAR:TRISA=%00111000:TRISB=0:CMCON=7:Z=1:low PORTB.2
' %00 ÇIKIŞ
' %11 GİRİŞ
PAUSE 200: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,1
' data @$20,"TERMOMET":DATA @$28," V.13 " 'PROGRAM ADI VE VER NO
' GOSUB OKU
' IF ALT>400 THEN
' ALT=005:GOSUB ISIYAZ:ENDIF
' IF NEM>1000 THEN
' NEM=100:GOSUB NEMYAZ:ENDIF
gosub reset :GOSUB T_START:SEC=0
' ***************************'EK ***********************************************
LOW PORTA.6 'NEMLENDİRİCİ
LOW PORTA.7 'ISITICI
LOW PORTB.0 'ISI NEM OUT
ALT=377
NEM=550
'-------------------------------------------------------------------------------
BASLA: SEC=1-SEC
IF SEC=0 then ESAS
KONTROL=%00000011:HAM=0 'SICAKLIK ÖLÇME
GOSUB OLCUMAL
'HAM=4000 sıfır dereceye tekabül ediyor, HAM=3000 -10 derece oluyor.
' ham=7850
RAI=HAM
Gosub ISIHESAP:GOSUB EKRAN1
IF ALRM=1 THEN
LCDOUT $FE,2,1
ELSE
LCDOUT $FE,2," "
ENDIF
PAUSE 50
KONTROL=%00000101:HAM=0 'RUTUBET ÖLÇME
GOSUB OLCUMAL
' ham=710 'HAM=3710 bu değer %100 rutubete eşdeğerdir.
GOSUB RUTHESAP:GOSUB EKRAN2
'--------BU ARAYA ISI VE RUTUBETE BAĞLI KONTROL RUTİNİ YERLEŞTİRİLECEK--------------------
ESAS: IF PORTA.3=0 THEN 'SELECT TUŞU PORTA.3 DE
WHILE Z<22
ILK=0
GOTO SECIM
WEND
ENDIF
IF PORTA.5=0 then
ALRM=1-ALRM:GOSUB DURUM
WHILE PORTA.5=0
WEND
ENDIF
IF PORTA.4=0 then
ALRM=1-ALRM:GOSUB DURUM
WHILE PORTA.4=0
WEND
ENDIF
'------------------------------------------------------------------------------------------
GOSUB GERIHESAP
IF (Y=0) then
if (RAI=<RAW) THEN 'ISI ayarlanandan düşük ise
HIGH PORTA.7 'ısı aç
ELSE 'değil ise
LOW PORTA.7 'ısı kapat
ENDIF
endif
IF NEM>P3 THEN 'nem ayarlanandan düşük ise
HIGH PORTA.6 'nem aç
ELSE 'değil ise
LOW PORTA.6 'nem kapat
ENDIF
ATLA: Z=1
SLEEP 1
' GOTO BASLA
GOTO OUT
'------------------------------------------------------------------
' BENİM İLAVE
OUT:
RAW2=RAW+40 'RAW2 DEGİŞKENİ ISI SET'İN 0,4 DERECE ÜSTÜ
IF(RAI=>RAW2)THEN 'AYARLANAN ISI SET DEĞERİNİN 0,4 DERECE ÜZERİNDE İSE
HIGH PORTA.2 'ISI OUT ON
ELSE 'DEGİL İSE
LOW PORTA.2 'ISI OUT OFF
ENDIF
NEM2=NEM+50
IF P3=>NEM2 THEN 'AYARLANAN NEM SETDEĞERİNİN %10 ÜZERİNDE İSE
HIGH PORTA.2 'NEM OUT ON
ENDIF
IF P3=NEM+1 THEN 'NEM AYARLANAN SET DEGERİNE GELDİ İSE
LOW PORTA.2 'NEM OUT OFF
ENDIF
GOTO BASLA
'------------------------------------------------------------------
AC: PORTA.2=1::Y=1:ALRM=1:PORTA.2=0
ACBIR:
' LCDOUT $FE,2
' LCDOUT " ISI DUSUK "
Z=0:ILK=0:PAUSE 100
RETURN
KAPA: PORTA.2=0:Y=0:ALRM=0:PORTA.2=1
KAPABIR:
' LCDOUT $FE,2
' LCDOUT " ALARM KAPALI "
Z=0:ILK=0:PAUSE 100
RETURN
DURUM: IF ALRM=0 THEN
low PORTA.2
gosub KAPABIR
ELSE
HIGH PORTA.2
GOSUB ACBIR
ENDIF
Z=0
RETURN
'---------------------------------------EKRANA YAZ ------------------------------------------------
EKRAN1: LCDOut $FE,2
if ISARET=1 THEN
LCDOut " ISI :-",DEC2 ISI1 , "," , DEC1 ISI2," ",0,"C ":RETURN
endIF
LCDOut " ISI : ",DEC2 ISI1 , "," , DEC1 ISI2," ",0,"C ":RETURN
EKRAN2: LCDOut $FE,$C0:
ALARM1=ALT/10:ALARM2=ALT//10
' LCDOUT "RAI=",#RAI,"HAM=",#HAM
LCDOut " NEM : ",DEC2 U1 , "," , DEC1 U2," % "
RETURN
'----------------------------------------------------------------------------------
SECIM: pause 50:LCDOUT $FE,1
IKINCI: Z=20
IKIBIR: GOSUB EKRAN3
IF PORTA.5=0 THEN
IF SIGN=1 THEN
alt=alt-1
IF alt=65535 THEN
alt=1:SIGN=0
ENDIF
GOTO ARACIK
ENDIF
ALT=ALT+1
ENDIF
IF PORTA.4=0 THEN
IF SIGN=1 THEN
alt=alt+1:GOTO ARACIK
ENDIF
ALT=ALT-1
IF ALt=65535 THEN
SIGN=1
ALT=1
ENDIF :ENDIF
ARACIK: GOSUB ISIYAZ:PAUSE 15
IF PORTA.3=0 THEN
IF Z=20 THEN IKIBIR
GOTO NEMALRM:ENDIF
Z=22:GOTO IKIBIR
NEMALRM:
GOSUB EKRAN4
IF PORTA.5=0 THEN
NEM=NEM+1
IF NEM=1001 THEN NEM=1000
GOTO NEMARA
ENDIF
IF PORTA.4=0 THEN
NEM=NEM-1
IF NEM=65535 THEN NEM=0
ENDIF
NEMARA: GOSUB NEMYAZ:PAUSE 25
IF PORTA.3=0 THEN
IF Z=22 THEN NEMALRM
GOTO BASLA:ENDIF
Z=30:GOTO NEMALRM
EKRAN3: LCDOUT $FE,$80," ALARM-ISI AYARI"
TOP: LCDOut $FE, $C0
ALARM1=ALT/10:ALARM2=ALT//10
IF SIGN=1 THEN
LCDOut " ALARM: -",#ALARM1 ,"," , DEC1 ALARM2," ",0,"C "
goto TOPCIK
ENDIF
LCDOut " ALARM: ",#ALARM1 ,"," , DEC1 ALARM2," ",0,"C "
TOPCIK: PAUSE 150
RETURN
EKRAN4: LCDOUT $FE,$80," ALARM-NEM AYARI"
LCDOut $FE, $C0
ALARM1=NEM/10:ALARM2=NEM//10
LCDOut " NEMALARM: ",#ALARM1 ,"," , DEC1 ALARM2,"%"
GOTO TOPCIK
'------------------------------- İŞ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
'-----------------------------R E S E T -----------------------------------------------------------
RESET: OUTPUT DTA:OUTPUT CLK':TRISA.0=0:TRISA.1=0'
high DTA=1
FOR W=0 TO 9
HIGH CLK
pause 1
LOW CLK
Next W
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 CIKIS
NEXT W
HATA=1
CIKIS:
IF HATA=1 then
gosub SENSORYOK
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 ham<4000 then
ISARET=1 'sıcaklık eksi değerde demek
ISI1=(4000-HAM)/100 'ısı kalibre
ISI2=((4000-ham)//100)/10'ısı kalibre
goto ISISON
endif
ISI1=(HAM-4000)/100 'ısı kalibre
ISI2=((HAM-4000)//100)/10'ısı kalibre
ISISON: if HAM>16384 then
ISI1=0:ISI2=0
endif
RETURN
GERIHESAP:
IF ISARET=1 THEN
raw=4000-(ALT*10)
else
raw=4000+ALT*10
ENDIF
RETURN
'-------------------------RUTUBET HESAP ALT PROGRAMI-------------------------------------------------
RUTHESAP:
ISI=ISI1*10+ISI2
p1=(26542-(54722**ham+ham))**ham-40
P2=655+(HAM*5)+(HAM**15917)
P3=(P2**(ISI+2480))-(P2**2730)+P1
U1=p3/10:U2=p3//10
IF ham>3710 THEN
u1=0:U2=0
GOTO SENSORYOK
ENDIF
return
'----------------------------------------------------------------------------------
OKU:
READ 8,ALT.BYTE0
READ 9,ALT.BYTE1
READ 10,SIGN
READ 15,NEM.BYTE0
READ 16,NEM.BYTE1
RETURN
ISIYAZ:
WRITE 8,ALT.BYTE0:PAUSE 10
WRITE 9,ALT.BYTE1::PAUSE 10
WRITE 10,SIGN ::PAUSE 10
RETURN
NEMYAZ:
WRITE 15,NEM.BYTE0:PAUSE 10
WRITE 16,NEM.BYTE1:PAUSE 10
RETURN
SENSORYOK: LCDOUT $FE,$02," SENSOR YOK "
LCDOUT $FE,$C0," LUTFEN TAKINIZ "
PAUSE 1000
RETURN
END
arkadaşlar sorun çözüldü ihtiyaç duyabilecek arkadaşlar için kodları aşağıdaki gibi değiştirdim ete hocanın değine göre bu sensörün hatasından meydana gelebiliyor ama asıl degerin 4000 olması gerekiyormuş
dağişen kodlar :ISIHESAP:
if ham<4000 then
ISARET=1 'sıcaklık eksi değerde demek
ISI1=(4060-HAM)/100 'ısı kalibre
ISI2=((4060-ham)//100)/10'ısı kalibre
goto ISISON
endif
ISI1=(HAM-4060)/100 'ısı kalibre - 0,6 derece
ISI2=((HAM-4060)//100)/10'ısı kalibre
ISISON: if HAM>16384 then
ISI1=0:ISI2=0
endif
RETURN
GERIHESAP:
IF ISARET=1 THEN
raw=4060-(ALT*10)
else
raw=4060+ALT*10
ENDIF
RETURN
arkadaşlar ben bu makineyi paçalı küçük süs tavuklarını çıkartmak için kullanmak istiyorum.bana bu devrenin en son çalışan halinin isis ve ares çizimleri parça model listesi ile bas ve hex dosyalarını verebilir misiniz.parçaları il dışından kargo ile spariş edeceğimden dolayı model farkından sorun çıkmasını da istemiyorum.çünkü ideğiştirmek sorun olacak.ayrıca devrenin sürekli güncelleşmesi kafamı karıştırdı en son hali ne oldu.birde ben ares çizimini proteus 7.4 ile de açamadım versiyon eski diyor.hangi versiyonda çizildi.
evrenk devreyi bir koy bakalım.
Alıntı yapılan: samsun33 - 24 Temmuz 2010, 22:36:05
arkadaşlar ben bu makineyi paçalı küçük süs tavuklarını çıkartmak için kullanmak istiyorum.bana bu devrenin en son çalışan halinin isis ve ares çizimleri parça model listesi ile bas ve hex dosyalarını verebilir misiniz.parçaları il dışından kargo ile spariş edeceğimden dolayı model farkından sorun çıkmasını da istemiyorum.çünkü ideğiştirmek sorun olacak.ayrıca devrenin sürekli güncelleşmesi kafamı karıştırdı en son hali ne oldu.birde ben ares çizimini proteus 7.4 ile de açamadım versiyon eski diyor.hangi versiyonda çizildi.
Buyur arkadaşım Devrenin en son çalışan hali aşağıdaki linktedir .şema ve pcb dosyalarını isis7 ve üstünde açılacak şekilde düzenledim. 7.4 ile açılması gerek.
http://hotfile.com/dl/84037348/8442335/kuluka_son_hali.rar.html (http://hotfile.com/dl/84037348/8442335/kuluka_son_hali.rar.html)
Alıntı yapılan: evrenk - 24 Temmuz 2010, 18:51:19
arkadaşlar sorun çözüldü ihtiyaç duyabilecek arkadaşlar için kodları aşağıdaki gibi değiştirdim ete hocanın değine göre bu sensörün hatasından meydana gelebiliyor ama asıl degerin 4000 olması gerekiyormuş
dağişen kodlar :ISIHESAP:
if ham<4000 then
ISARET=1 'sıcaklık eksi değerde demek
ISI1=(4060-HAM)/100 'ısı kalibre
ISI2=((4060-ham)//100)/10'ısı kalibre
goto ISISON
endif
ISI1=(HAM-4060)/100 'ısı kalibre - 0,6 derece
ISI2=((HAM-4060)//100)/10'ısı kalibre
ISISON: if HAM>16384 then
ISI1=0:ISI2=0
endif
RETURN
GERIHESAP:
IF ISARET=1 THEN
raw=4060-(ALT*10)
else
raw=4060+ALT*10
ENDIF
RETURN
Sayın @everenk programınızda if ile başlayan satırda 4000 kullanmanıza ramen diğer satırlarda 4060 olarak devam etmişsiniz. İlk satırdaki if karşılaştırması ölçülen ısı değerinin + ya da - olduğuna karar verir.
Yani bu hesaplamada 4000 ile başlayan değerler 0 derece orjini olup hepsi eşit olmalı.
Ayrıca SHT datasheetlerini incelediğinizde ölçüm sonuçlarının tam lineer olmadığını, sensörün teknik verilerindeki hassasiyette ölçüm alabilmek için daha karmaşık işlemler yapılması, daha doğrusu ek bir düzeltme hesaplaması yapılması gerektiğini göreceksiniz. Farklı sıcaklıklarda farklı ölçüm hataları gözlemleyebilirsiniz. Bunlar yaklaşık 0.8 derece civarı olacaktır.
arkadaşlar verdiğiniz linkler calışmuyor indiremiyoruz ilgilenirseniz sadece 1-2 kişi değil bu işe gönül veren herkes faydalanır.
Buyrun doosyaları tekrar yükledim.
http://hotfile.com/dl/108011897/7d693b1/lk_versiyon.rar.html
Merhabalar. Öncelikle Mucit23 arkadaşım kuluçka sevenlere ön ayak olduğun için teşekkür ederim. Teknik lise elektronik bölümü mezunu olarak ( 8 sene geçti üzerinden ) kendim yapabileceğime inandığım projenizi hayata geçirmek istiyorum. Yaklaşık 2012 temmuz ayında paylasımlarına ulasmıstım fakat biraz ara verdim ve tekrar paylasımlarına ulaştım. Bi kaç tane kuluçka makinam var gayette stabil çalışıyorlar ama kendim full otomatik ve büyük buzdolabından makina yapmayı düşünüyorum. Hazır satılan sistemlerde gün tarih saat sayan gösteren ekranlar olmadıgı için sizin paylaşımlarınızı tekrar buldum. Benim ögrenmek istedigim 4x20 lcd ekran yerine 128x64 veya 240x128 yada en son ihtimal 4x40 lcd ekran kullanabilirmiyiz?
Konunun üzerinden epey bi zaman geçmiş affınıza sıgınarak yorum yazıyorum.
mrb mucit 23, bi arkadasıma, amcama ve değerli bir hocama lazım olduğu için onlara yardımcı olmak anlamında tamamen karsılıksız(ki ben eczacıyım) bi kuluçka makinesi yapayım dedim,sizin tasarladığınız bu kontrol devresini yaptım sensör olarak sht 11 yerine sht10 kullandım ve sonuçta Ü=03,3 nem%00 bu sorunu ete hocaya da sordum,kendisine sor dedi.sizin yaptığınız örnekte devre gayet ii calısıyor gözüküyor, aynı sorun başka arkadaslarda da olmus programda sorun yok gibi. sizin kendi kullandığınız hex sitedeki ise benim devre neden calısmıyor
SHT10'un data sheet'ine bakın 11 ile aynımı ? bence değildir . Ekranda gördüğünüz değerler sensörün devre tarafından algılanmadığı anlamına gelir hiç sensör takmasanızda bu değerleri görürsünüz.
Konu eski ama belki elinde
@Mucit23 hocanın devresi olanlar yüklerse iyi olacak konudaki hiçbir link çalışmıyor...
Peace41 arkadasim mucit23 arkadasin devresi sende varsa yükleyebilir misin kulucka en son halini
hocam Verdiğiniz bilgiler için teşekkür ederim maviveda arkadaş için kesinlikle faydalı olacaktır
_______________________________________________________________________________________________________
ステッピングモータエンコーダ (https://www.skysmotor.com/category-33-b0-%E3%82%B9%E3%83%86%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%82%BF%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC.html)|ブラシレスDCモータ (https://www.skysmotor.com/category-37-b0-%E3%83%96%E3%83%A9%E3%82%B7%E3%83%AC%E3%82%B9DC%E3%83%A2%E3%83%BC%E3%82%BF-BLDC-.html)