PIC 12F675 ile gecikme yapmak

Başlatan HASAN48, 17 Ekim 2014, 15:19:14

HASAN48

Ete hocam öncelikle saygılar.12f675 ile bir program yazdım ama hata veriyor.Yapmak istediğim şey bir motoru 3dk çalıştırıp 3 saat durdurmak sonrasında yine 3dk çalışma bu şekilde döngü halinde devam edecek. Yardımlarınızı bekliyorum şimdiden teşekkürler.

'@ DEVICE pic12F675
'@ DEVICE pic12F675, WDT_ON 'Watch Dog timer açık
'@ DEVICE pic12F675, PWRT_ON 'Power on timer açık
'@ DEVICE pic12F675, PROTECT_OFF 'Kod Protek kapalı
'@ DEVICE pic12F675, MCLR_off 'MCLR pini kullanılmıyor.
'@ DEVICE pic12F675, XT_OSC_ 'Harici osilatör kullanılacak

@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF

DEFINE OSC 4
DEFINE OSCCAL_1K 1

CMCON = 7
ANSEL = 0

GPIO=0
TRISIO=%00000001
SYMBOL TUS1= GPIO.0
SYMBOL MOTOR = GPIO.4
I  VAR BYTE

PAUSE 200

BASLA:
IF TUS1=1 THEN
HIGH MOTOR
for I=1 TO 10
pause 18000
NEXT

low MOTOR
ENDIf
SLEEP 10800
GOTO BASLA         
END



ete

Yazdıklarını doğrusu ile değiştirdim.
PAUSE 180.000 komutundaki 180000 rakamı 32 btlik bir rakam olduğu için ona itiraz ediyor. Onu döngü ile 10 defa 18.000 olarak yapılınca düzeldi. Eksiklikleride tamamladım.

Ete

HASAN48

hocam allah razı olsun teşekkür ederim.

HASAN48

Hocam SLEEP 10800 de 3saat olarak düşündüm doğrumudur.yoksa yine aynı şekilde yukarıdaki gibi döngülü bir şekildemi yapmamız gerek 3saat için.

ete

Sleep komutu saniye bazında çalışır. Verilen her rakam saniye olarak değerlendirilir ve maksimum rakam değeri 65535 olabilir.
3 saat=3 * 60 dakika * 60 sn =10800 eder komut doğrudur. Rakamda 16 bit sınırları içinde olduğu için sorun olmaz. Olsa zaten derleyici itiraz edip hata verir.

Ete

HASAN48

Sağolun hocam sayenizde pic öğreniyorum yavaş yavaş allah sizden razı olsun.

. Kağan

#6
ETE hocam,

Sleep komutunu kullanmak istedim fakat program 10 saniyelik sleep ten sonra başa dönmüyor.

BASLA:
    ...................
.......................
     IF ISI>20 AND ISI<30 THEN  'SICAKLIK 20-30 DERECE ARASINDA İSE
     GOSUB UYU                  'UYU ETİKETİNE GİT
     ELSE                       'DEĞİLSE
     GOSUB UYAN                 'UYAN ETİKETİNE GİT
     ENDIF
     Goto basla                 'BAŞA GİT

     UYU:
     SLEEP 10            'SLEEP MODE SANİYE BAZINDA ÇALIŞIR.
     GOTO BASLA
     
     UYAN:
     GPIO.1=1             ' KIRMIZI LEDİ YAK
     PAUSE 5000
     GPIO.1=0             ' LEDİ SONDUR
     PAUSE 1000
     RETURN
END

ete

GOSUB UYU diyerek UYU alt programına dönmek üzere gidiyorsun. GOSUB ile gidilen yerden dönüş mutlaka RETURN ile olmalıdır. Aksi taktirde stack taşması oluşu ve program kilitlenir.

SEN GOSUB ile gittiğin yerden GOTO BASLA ile dönüyorsun kusur budur.

Ya GOSUB UYU yerine GOTO UYU ve UYU altında GOTO BASLA veya
GOSUB UYU ile gidip UYU altında GOTO BASLA yerine RETURN kullanmalısın.

Ete


. Kağan

#8

IF ISI>20 AND ISI<30 THEN  'SICAKLIK 20-30 DERECE ARASINDA İSE
     GOto UYU                  'UYU ETİKETİNE GİT
     ELSE                       'DEĞİLSE
     GOSUB UYAN                 'UYAN ETİKETİNE GİT
     ENDIF
     Goto basla                 'BAŞA GİT

     UYU:
     SLEEP 10            'SLEEP MODE SANİYE BAZINDA ÇALIŞIR.
     GOTO BASLA
     
     UYAN:
     GPIO.1=1             ' KIRMIZI LEDİ YAK
     PAUSE 5000
     GPIO.1=0             ' LEDİ SONDUR
     PAUSE 1000
     RETURN


Yine çalışmadı. GOSUB ile alt menüye gönderip RETURN ile geri döndüğümde de çalışmıyor.
UYU: dan çıkmıyor. Fakat UYAN: dan geri dönüyor.

EDIT: WDT_ON yapmayı unutmuşum. Sleep komutunun çalışması için WDT açık olması gerektiğini ETE http://etepic.com/index.php?topic=1345.0 topiğinde belirmiş.

Bir kez daha teşekkürler ETE.

HASAN48

Ete hocam devre tama kurdum çalıştırdım düşük akımda gayet iyi ,fakat 12v/50w lık bir ampülü çıkışını bdx53 ile sürerek röleyi çektirdiğimde 3dk dadurmadan çalışabiliyo yada durursa 3 saatin sonunda uykudan uyandığında röleyi tık tık tık tık diyerek devreye sokamıyor.Bunun için daha güçlü bür transistörmü kullanmam lazım yoksa pic bişeylerden etkileniyormu.

rexo

#10
Yaklaşık 4 amper çekiyorsunuz kullandığınız  besleme trafosunda gerilim çökmesi oluyor sanırım besleme gerilimini yükte iken ölçün kaç volta düşüyor.

HASAN48

tam yükte dediğiniz gibi 4amp civarında çekiyor ben bunu 12v/50w ampül ile denedim fakat asıl kullanacagım yer 220v AC/4w değerindeki düşük devir ileri geri motorda kullanacağım.Onda denemedim .Fazı röle üzerinden geçirip bir nevi anahtarlama olarak kullanacağım.Ondada deneyip yazarım.Teşekkürler.

Powered by EzPortal