12F675 sleep komutu kullanımı hakkında !

Başlatan sinasos, 03 Nisan 2014, 02:28:14

sinasos

merhaba,
aşağıdaki RF verici için yazmış olduğum kodlar gayet güzel çalışıyor. Ancak vericiyi akü ile çalıştırmam gerektiği için en az şekilde enerji harcamasını sağlamam gerekiyor. Bunu da sanırım "Sleep" komutu kullanarak yapabilirim ! Ama yapamadım bir türlü... Algoritmayı kuramadım diyebilirim.
SORU : kodlarda bulunan "VER" butonu 0 "sıfır" olduğunda proğram gönderime başlıyor ve alıcıyı ON yapıyor. Sonrasında ver 1 olduğunda ise farklı bir kod gönderip alıcıyı OFF konuma getiriyor. VER butonu OFF olduktan sonra belirli aralıklarla uyuyup uyanmasını istiyorum. (örneğin dakikada bir uyanıp kontrol edip VER butonunun konumunda değişiklik yoksa geri uyu şeklinde.
      Teşekkür ederim.
@ DEVICE pic12F675                      'işlemci                               
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF         'Kod koruma kapalı
@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
DEFINE OSCAL_1K 1

GPIO=0
TRISIO=%000010
ANSEL=0
cmcon=7

SYMBOL TUS=GPIO.1
SYMBOL VER=GPIO.0

VERICI VAR BYTE
VERICI=0
PAUSE 500


BASLA:
   
IF TUS=0 THEN
VERICI=10
GOSUB GONDER
    PAUSE 100
ENDIF

IF TUS=1 THEN
VERICI=20
GOSUB GONDER
PAUSE 100
ENDIF

GOTO BASLA


GONDER:
SEROUT2 VER,396,["T","S","R","M",VERICI]
SEROUT2 VER,396,["T","S","R","M",VERICI]
SEROUT2 VER,396,["T","S","R","M",VERICI]
SEROUT2 VER,396,["T","S","R","M",VERICI]
RETURN


END

ete

Sleep komutu ile en güzeli aşağıdaki sistem olurdu.

- Tuşun basılma tespiti için INT0 (bir başka deyişle POrtB.0) kesmesi aktive edilir. Bunun için GPIO.2 de tuş bağlı olması gerekir Şayet GPIO.1 de bağlı olan tuşu kullanmak istersen o zaman GPIO change kesmesi kullanman gerekir.
- basla satırından sonra gelen goto basla satırından evvel;
  @Sleep
   yasılıp program uykuya sokulur.
- Tuşa basılınca işlemci uykudan uyanır ve kesme etiketine gider. Orada ver=20 yapılıp program kesmeden çıkar
- Hemen basla satırına döner. Basla satırından sonra ise şu satırları yazarsın,
IF VER=10 then
   Gosub Gonder
Endif

IF ver=20 then
   ver=10:gosub Gonder
Endif
@sleep
Goto basla

Port değişiklik veya INT kesmesi için tus pini giriş olarak ayarlanmış olması,
- INTCON=%10010000 (INT kesmesi için) veya  INTCON=%10001000   change kesmesi için şeklinde değer verilmesi
- Change kesmesi kullanılacak ise ayrıca IOC=%00000010  verilmesi
- Basla satırından evvel ON INTERRUPT GOTO KESME komut satırının ilave edilmesi gerekir

INT kesmes ikullanılmış ise kesme içinde,
VER=20
INTCON.1=0
RESUME
ENABLE
demen yeterli.

Şayet Change kesmesi kullanırsan; Değişken kımısnda TEMP VAR BIT şeklinde bir değişken tanımlaman da gerekiyor
VER=20
TEMP=GPIO.1
RESUME
ENABLE
şeklinde çıkman gerekir.

Ete

sinasos

çok teşekkür ederim ETE hocam,
tuş yeerini değiştirmek sorun değil. en kısa sürede bunu gerçekleştireceğim. birde size sormak istediğim bir sorum daha olacak. ben ticari amaçlı bir proğram yazdım. bunun algoritmasını sanırım biraz karmaşık hazırlamış olmalıyım ki proğram biraz büyük oldu ve 877 kullandım. şu an çalışır durumda ancak nasıl sadeleştiririm ve birkaç ilave nasıl yapabilirim. bu konuda nasıl yardımcı olabilirsiniz ? (boş vaktiniz olduğunda) onu soracaktım. ticari amaçlı olduğundan dolayı forumda yayınlamam doğru olmaz. size özel mail atabilirmiyim tüm dosyaları ?
saygılarımla.

ete

Ticari programı bana bile vermemen gerekir. Bakmamayı tercih ederim.
Madem çalışıyor dokunmamak daha uygun olur aksayan taraf vsrsa onu bildir bakayım.

Ete

sinasos

sayın ETE,
ben insanlara güvenmeyi tercih eden bir yapıya sahibim. (tabi her insana değil:) sizin yazılarınızı uzun süredir takip ediyorum. o yüzden size çok güveniyorum. ayrıca proğram aslında basit ama ben sizin derslerinizi okuyup bilmeyen birisi olarak hazırladığım için bana çok kapsamlı geliyor. ve bunu çamaşır makinalarında kullanıyorum. o yüzden inceleyebilir ve fikrinizi bana ileterek yardımcı olabilirseniz sevinirim. ama tabi tercih yine sizin.
saygılarımla

ete

Bir güven duygusu yaratmış isem ne mutlu bana. Hemen belirteyim bu duygu tamamen karşılıksız ve özverili çalışmam sayesinde yaratılmış oldu. Şimdi sen Ticari amaçla yazılmış bir programı kontrol edip varsa hataları bulmam onları düzeltmem ve programı sadeleştirmemi (sadeleştirmek demek daha iyi algoritmalarla aynı işi yaptırma anlamına geliyor) istiyorsun. Bu benim kriterlerime göre etik olarak uygun bir istek değil maalesef. Bu işle ilgili para almışsın ama olası kusurları bana düzelttirmeyi amaçlıyorsun bu sence uygunmu? Bence değil o yüzden bakmak istemedim. Umarım anlarsın.

Ete

sinasos

sizi anlıyor ve teşekkür ediyorum sayın ETE hocam,
şunu düzeltmek istiyorum. bu proje için herhangi bir para almadım. bunu ben satabilmek düşüncesiyle gerçekleştirdim. ve burada bir yurt yetkilisine göstermek için hazırladım. bunu satıp satamayacağım konusunda bir fikrim yok. ama çaba bunun için sarfedeceğim elbette. bir yer için bunu hazırlamış olsam ve bundan kazanç sağlasam size bu şekilde sormazdım zaten. diyeceğim şey şu olurdu " hocam bir iş aldım ve bunun proğramı konusunda sıkıntım var ! ben halledemedim siz veya bu sitedeki arkadaşlardan profesyonel olanlar bana ücreti karşılığında yardımcı olabilirmi ?"
ama bunu söylemem için işi almam, buna bedel biçip peşinatını veya tamamını almam ve bu işin içinden çıkamamam gerekirdi. ama ben hem kendimi geliştirip hemde bunu nasıl ekmek parasına çevirebilirim düşüncesi içerisinde size sordum.
size yanlış anlattığım için kusura bakmayın. bu yazılımda boğazımdan tek bir kuruş dahi geçmedi emin olun. eksik kaldığım şeyler vardı onu soracaktım ve fikrinizi alacaktım. ama sorun değil onlarıda zamanla tamamlamaya çalışırım.
yinede ilgi ve alakanıza çok teşekkür ederim.
saygılarımla.

Powered by EzPortal