avatar_ete

Uzaktan Kumanda İle Saat Ayar Sistemi

Başlatan ete, 13 Aralık 2012, 17:43:41

ete

Konu başlığından da anlaşılacağı üzere saatlerin uzaktan kumanda ile ayarlanması amacı ile bir devre geliştirdim.
Yalnız bu sistemi henüz deneyemedim. Teorik olarak çalışabilmesi gerekir diye düşünüyorum. Sorun çıkarsa bildirirsiniz bakarım.

Aslında önceden aynı amaca yönelik bir RF sistemini proje olarak vermiş idim.
Bu tasarladığım sistem içinde bir başka RF sistemi daha var fakat sistem akıllı kumanda temeline dayandığı için onu veremiyorum. İhtiyacı olanlar diğer devreyi kullanabilirler. Çok isteyen olursa ücreti mukabilinde programlanmış işlemci yollarım.
BU sistem piyasada satılan 3-4 butonlu elcik (içinde PT2260-2262 olması gerekir) kumandalarla çalışmaktadır.
Şifre ne olursa olsun bu devreye şifreleri önce öğretecek sonrada kullanacaksınız.

IR sisteme gelince SONY IR kumanda sistemine göre düzenledim. Daha sonra RC5 ilede yapmayı düşünüyorum.
Şimdilik 1-2-3 nolu tuşları kullandım. Ama program açık olduğu için istediğiniz tuş kodlarını kullanabilirsiniz.
PCB şemalarıda hem Sprintlayout hem jpg olarak verilmiştir.

Deneyip sonuç alan olursa haber versin lütfen.

Ete

Not: RC5 sistemini de dosyaya ilave ettim. RAR dosyası yenilenmiştir.  (14-12-2012)

yankigsm

slm

Hocam ben denedim çalışıyor fakat bekleme sürelerinde ufak bi değişiklik yaptım

sizin hazırlamış olduğunuz saat 4e5 dosyası ile denedim
düzenlediğim haliyle ekliyorum
teşekkürler

ali

#2
merhaba ,
  16f628a  göre yazılımı nasıl yapabilirim.yazılımdan fazla anlamıyorum şöyle birşey denedim.fakat çıkış alamadım.yardımcı olursanız sevinirim.

      '****************************************************************
'*  Prog.Adı: SIRC_628.BAS                                      *
'*  Author  : ETE-EROLEC-ERO                                    *
'*  Notice  : Copyright (c) 2008 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 13.01.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                  *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628A
@ DEVICE PIC16F628A, WDT_Off
@ DEVICE PIC16F628A, LVP_Off
@ DEVICE PIC16F628A, PWRT_ON             'Power on timer açık
@ DEVICE PIC16F628A, MCLR_Off
@ DEVICE PIC16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4

CMCON = 7
PORTA=0:TRISA=%00000001
PORTB=0:TRISB=%00000000

IR_AL var word(12)
ZAMAN VAR WORD
PAKET VAR WORD ' Holds 12-bit RC5 code
I     var Byte
Tus   Var Byte
Cihaz Var Byte
sayac var byte
HATA  VAR BIT
Led   var Bit
Symbol IR_Goz=PORTA.0


PAUSE 500
   led=0
'---------------------------------------------------------------------------
'Tus Kodları:

SYMBOL SECPIN=portb.2
SYMBOL ARTIRPIN=portb.5
SYMBOL AZALTPIN=portb.6


BASLA:
   gosub tusgir
     
    IF tus=255 THEN BASLA     
    if TUS= 1 then SEC
    if Tus = 18 then ARTIR
    if Tus = 19 then EKSILT
    portb=0
    goto BASLA


      If TUS=21 Then
        Toggle led
        PORTB.7=led
     
      EndIf
  SEC:
    SECPIN=1

    PAUSE 50
    GOTO BASLA
                         
ARTIR:
      ARTIRPIN=1

      PAUSE 50
      GOTO BASLA

EKSILT:     
       AZALTPIN=1

       PAUSE 50
       GOTO BASLA
               
     gosub ses2
      pause 100
      goto basla
tusgir:
       pulsin ir_goz,0,paket
       if paket<200 or paket>270 then  basla

       for i=0 to 11
         pulsin ir_goz,0,ir_al(i)
       next
       
       tus=127
ayikla:
       for i=0 to 6
         if ir_al(i)<80 then tus.bit0[i]=0
       next

       tus = tus + 1
       if tus=10 then tus=0

       cihaz=%00011111
       for i=0 to 4
         if ir_al(7+i)<80 then cihaz.bit0[i]=0
       next
       return

ete

#3
Ali,

Hangi sisteme göre bunu yapmak istiyorsun. Sony sistemine göremi yoksa RC5 (Phillips-Vestel-Beko vs) göremi?.
Yazdıkların daha çok SOny kodlarına benziyor. Aşağıdaki ni dene.

Ete

@ DEVICE pic16F628
@ DEVICE PIC16F628, WDT_Off
@ DEVICE PIC16F628, LVP_Off
@ DEVICE PIC16F628, PWRT_ON             'Power on timer açık
@ DEVICE PIC16F628, MCLR_Off
@ DEVICE PIC16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
CMCON = 7
OPTION_REG=%10000000

TRISA=%00000001:PORTA=0
TRISB=%00000000:PORTB=0

IR_AL var word(12)
Paket var word
I     var Byte
Z     var BYTE
Tus   Var Byte
Cihaz Var Byte
sayac var byte
HATA  VAR BIT

SYMBOL IR_Goz=PORTA.0
SYMBOL SECPIN=PORTB.0
SYMBOL ARTIRPIN=PORTB.1
SYMBOL AZALTPIN=PORTB.2
SYMBOL LED=PORTA.1

pause 500

BASLA:
    gosub IR_OKU   
    IF HATA=1 OR TUS>120 THEN
      PORTB=0:Led=0     
      goto BASLA
    endIF       
    if TUS= 1 then SEC
    if Tus = 2 then ARTIR
    if Tus = 3 then EKSILT
    PORTB=0:led=0
    goto BASLA

SEC:
    SECPIN=1
    LED=1
    PAUSE 2
    GOTO BASLA
                         
ARTIR:
      ARTIRPIN=1
      LED=1
      PAUSE 2
      GOTO BASLA

EKSILT:     
       AZALTPIN=1
       LED=1
       PAUSE 2
       GOTO BASLA
               
IR_OKU:

       sayac=0:hata=0
       while IR_GOZ=1
         sayac=sayac+1:pause 1
         If sayac>26 then
          HATA=1:PORTB=0
          return
         endif
       wend
       sayac=0 
IR_BIR:       
       PuLSIN IR_Goz,0,PAKET :SAYAC=0         
       if PAKET<200 OR PAKET>270 then IR_OKU
       
       for I=0 to 11
         pulsin IR_Goz,0,IR_AL(I)
       next
       
       Tus=127
AYIKLA:
       For I=0 to 6
         if IR_AL(I)<80 then Tus.bit0[I]=0
       next

       Tus = Tus + 1
       If Tus=10 then Tus=0

       Cihaz=%00011111
       for I=0 to 4
         IF IR_AL(7+I)<80 then Cihaz.Bit0[I]=0
       next
       RETURN



ali

#4
hocam sistem sony kumandaya göre olacaktı,yazmayı unutmuşum kusura bakmayın
kısacası .söyle birşey  istiyorum.
port b.7 on of olacak .kumandanın on-of(21)tusuna basmadan program baslamayacak.
tus-1 tus-2 tus 3 portb deki pinlere basılı tutdugu müddetçe çıkış verecek.
verdiğiniz yazılımı denedim.
sadece portb deki pin yerlerni değiştirdim.
SYMBOL ARTIRPIN=portb.5
SYMBOL AZALTPIN=portb.6
if TUS= 1 then SEC


şöyle birşeyle karşılastım.sony kumandadak tus2(artır) bastıgımda portb.5 bağlı led yanıyor.tusu bırakınca led yanık kalıyor. sony kumandadan tus3 basmadan portb.5 teki led  sönmüyor.ve tekrar tus2(artır)bhastıgımda hiç bir işlem yapmıyor.
ve port.a1 gösterge led sürekli yanıyor..

ete

Programda,
IR_OKU:  etiketi altına  aşağıdaki satırı ilave edip yeniden deneyiver.
       Tus=255

Ete

ali

IR_OKU:  etiketi altına tus=255i satırı ilave edip denedim.sonuç yine aynı.  IF HATA=1 THEN BASLA  olan satırı   IF tus=255 THEN BASLA   
şeklinde değiştiripte girdim sonuç değişmedi.artır /tus2)basınca portb.5 led yanıyo bırakınca  led sönmüyor.porta.1 led sürekli yanıyor.
ne şekilde denediysem basarılı olamadım.
   

ete

#7
Anlaşıldı benim denemem gerekiyor.
Bu arada yanan ledleri söndürecek komut BASLA etiketi ile GOTO BASLA etiketi arasında yer alan
PORTB=0 komutudur.
Bu komut PortB de yanan ledler içindir. Dolayısıyla çıkışları başka yere verdin ise çalışmayacaktır.

Ete

Not: Denemeyi yaptım ve verdiğim programı değiştirdim. Oradan yeniden alıver.
        Ana dosyalarıda yeniledim. Eskiden yüklemiş olanlar yeniden yükleyebilirler.

sinan5541

Ete hocam iyi günler bu son yaptığınız güncelleme ile eklediğiniz hex dosyası 16f628a da çalışır mı teşekkürler

ete

Anlamak çok kolay. Dosyayı yükle bak kimini çin yazılmış. Hemen anlarsın sanırım.
2013 yılında yapılmış bir şeyi soruyorsun bana hatırlamam mümkün değil.

ete

mehmetemin

Ete Hocam, devreyi yaptım, sony kumanda ile müstakil olarak problemsiz çalışıyor. Yine sizin ete 44_DS1307 devrenize  bağladığımda devre çalışmıyor , kumandanın 1 tüşuna sürekli basılırsa saat, ay gün ve ısı normal çalışıyor. Uzaktan kumanda devresinde tuşa basınca + 5 V çıkıyor. Oysa devre ise pull-up dirençlerden dolayı - V  istiyor. Pratik olarak ne yapmalıyım. Cevabınız için teşekkürler..

ete

#11
Kolay çözüm tuşa basınca + veren kumanda çıkışlarını GND verecek şekle çevirmektir.
Bu iki şekilde yapılır programdan yazılımla veya dere çıkışlarına transistör bağlayarak donanımsal olarak.
Herbir çıkışa birer BC547 bağlarsın. Çıkışa seri 1K direnç bağlarsın onu transistörn Beys ucuna girersin.
BC547 nin Emitter ucunu GND ye bağlarsın. Collector ucunu ise 220 Ohm dirrrenç ile seri olarak Saat ayar buton ucuna bağlarsın. Böylece sen butona basınca HIGH veren sistemin LOW vermiş olacaktır.

Program yanımda değil ama onu izah etmeye bile gerek yok sanırım. Açılışta çıkışları HIGH yapmak ve butona basılma durumunda o çıkışı HIGH değil LOW yapmak gerekir. Hepsi bu kadar.

Bakrımda PCB hazırlamışsın sanırım. O nedenle programı değiştirdim. İlişiktedir. Dene istersen.
ete

mehmetemin

Hocam çok teşekkürler harika çalışıyor, Selam ve saygılarımla..

Dtmf

#13
Hayirli sabahlar ete hocam bir yerde yakildim yardim olurmusunuz

for i=0 to 6 
         if ir_al(i)<80 then tus.bit0[i]=0 
       next 

Buradaki eger ir_al(i) kucuk ise 80 den sonraki bolumu anlayamadim tus degiskeninin 0.bitinden baslayarak i 0 ile 6 arasi degiskenlere 0 mi yukluyor.aciklayabilirmisiniz

ete

#14
Bu bir değişken belirleme metodu. Mantığını şöyle düşünmüştüm.
Ir_al(i) dizi değişkeninde kayıtlı olan süreler her bit'in HIGH yada LOW olmasını belirliyor.
Süre 800 us nin altında ise ona karşılık gelen bit sıfır üzerinde ise karşılık gelen bit BIR yani HIGH oluyor.
Normalde bu işi şöyle yapar pek çok insan;
IF IR_AL(I)<80 THEN
  Tus.bit0[I]=0
ELSE
  Tus.bit0[I]=1
Endif

Ama ben öyle yapmadım. Döngüye başlarken TUS=255 diyerek önce bütün bitlerini kafadan HIGH yaptım. Sonra döngü kurarak LOW olması gerekenleri LOW yapınca iş kolaylaşmış ve daha az kodla bu iş yapılmış oluyor. Nasıl oluyor dersen bit sıfır oalcak ise onu sıfırlıyorum ama bir olacak ise işlem yapmadan atlıyorum çünki o bit zaten BIR durumunda.
Umarım anlamışsındır.
Ete

Powered by EzPortal