Kumanda ile pic haberleşmesi

Başlatan The_Daywalker, 05 Aralık 2007, 14:33:23

The_Daywalker

herkese kolay gelsin benim bir sorum olacaktı ben tv kumandasıyla bir picin bacağına bağlanmış olan ledi yakmak istiyorum ben kumandanın gönderdiği komutu girder ile okuttum ve 1A90 yazıyor. ben bunu nasıl pic basicde yazıp pic'in içine atabilirim ve tv kumandasına bastığımda led yansın. bunu nasıl yapabilirim? yardımlarınız için şimdiden teşekkürler birde ben bu alıcı işini tsop1736 ile yapacağım baud hızını nasıl seçebilirim?  :?:  :?:  :?:

ddavut

ne tür bir kumanda kullanıyorsunuz öncelikle?

kullandığın kumandanın IR protokulunu araştırmanız lazım. bu tur devrelerde 38kHzde IR yayın yapılır ve piyasada alıcı göz olarak bilinen TK19 gibi IR alıcılar kullanılır.

dediğim gibi önce kullandığınız kumandanın markasını belirtmelisiniz

The_Daywalker

ben kumanda olarak sony tvnin rm-836 kumandasını kullanıyorum. ben bunu girder ile okuttuğumda 1A90 yazıyordu alıcı göz olarak ise tsop1736 ır alıcısını kullanıyorum

bcavlak

Bilgiler, paylaşıldıkça değer kazanır.

tolga.onder

merak ettiğim için soruyorum. Girder nedir ?

ddavut

sony kumandalar sırc adında bir protokol kullanır. mesala cihaz kodu, tuş kodu, start biti falan. googledan aratırsan bir çok şey bulacağından eminim. alıcı gözlerde de genelde marka pek fark etmiyor çok hassas çalışmalar dışında.

Fixxer

Slm arkadaşım ETE hocamızın derlerinde tv kumandası ile ilgili bir proje vardı yanılmıyorsam araştırıp bir incelersen işini fazlası ile göreceğine inanıyorum kolay gelsin
...............................

The_Daywalker

arın için teşekkürler ama sayın ETE hocamızın tv kumandasıyla ilgili bir projesini bulamadım ama başka bir çok projesini buldum seri iletişim ile ilgili bir sürü projesi vardı ama hiç bir tv kumandasıyla ilgili değildi ya da ben bulamadım daha fazla yardımcı olursanız sevinirim tekrardan herkese teşekkürler
bide ben bir şey daha eklemek istiyorum ben bu kumanda ile sadece picin bacağına bağladığım ledleri bağlamak istiyorum bunun için benim bu protokolleri kullanmama gerek olmadığını düşünüyorum ben sadece elime geçen herhangi bir kumandayı alıp girderde okutup oradaki kodu picin içine gömüp bu picin bacaklarınada ledler bağlamak istiyorum ben bunu nasıl yapabilirim???
örneğin ben elimdeki sony kumandanın bir tane tuşunu okuttuğumda bana bu tuşun kodu 1A90 diyor girder bende bu sayıyı alıp pice gömmek istiyorum ve bunun sonucunda bu tuşa bastığımda picin bacağına bağlı led yanacak işte bunun gibi
ben bunu nasıl yapabilirim???
bu sayede elimdeki kumandayı değerlendirmek istiyorum benim bildiklerim ve istediklerim bunlar bilmiyorum yanlışmı düşünüyorum????

melihh

Merhaba arkadaş ETE hocanın daha önce yayınlamış olduğu 16F628 ve sony tv kumandası kullanılan on/off kodları kolay gelsin

@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_on
@ DEVICE pic16F628, PWRT_On
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_On
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
CMCON=7          'BU PROGRAM TOGGLE ÇALIŞIR
clearwdt
TRISA=%00000001
TRISB=0               '            TUS KODLARI:
DEFINE OSC 4         '            (0 = 1 Tusu)-(8 = 9 Tusu)-(9 = 0 Tusu)               
'PAKET   Equ   12                     16= PROGRAM +
'P_Val   Equ   14                     17= PROGRAM -
'BUTON   Equ   15                     18= VOLUM +
'ALET   Equ   16                     19= VOLUM -
'Cntr   Equ   17                     20= MUTE
'Bitcnt   Equ   18                     21= ON/OFF
'---------------------- DEĞİŞKENLERİMİZ --------------------------------------------------
'TUS    VAR BYTE            'Alet kodları, 1=TV , 2=VCR-1, 4=VCR-2
Tmp1   var byte             '              6=lazer disk, 12=ses cihazları
Tmp2   VAR BYTE             '              16=mini kaset radyo, 17=CD Çalar
Bayrak VAR BYTE
flama  var BYTE                
ERO    VAR BYTE
Bit_Cntr VAR BYTE
Cmd_Byte var byte
Dev_Byte  var byte
POZ    VAR BIT
LoX    VAR BYTE

BUTON  VAR BYTE
ALET   VAR BYTE

'------------------------------------------------------------------------------------------
clear
PORTB=0:PORTA=2
Pause 200
porta=0
pause 200
porta=2
pause 200
porta=0
pause 200
porta=2
pause 200
ero=0
PORTA=0
poz=0
read 0,buton
portb=buton
if buton>0 then HIGH PORTA.1
'------------------------ PROGRAM BAŞLANGICI ----------------------------------------------
BASLA: BUTON=200
      IF PORTB=0 THEN PORTA=0
ARA:   low bayrak.7: gosub TUSBAK
      pause 10
      if bayrak.7=1 then
       poz=0
       goto ara
       endif
      IF (BUTON>21) AND (ero=1) THEN        
       POZ=0
       goto ara
      endif
      IF BUTON=0 Then SIFIR  ' 1 tuşu oluyor
      IF BUTON=1 Then BIR    ' 2 TUŞU
      IF BUTON=2 Then IKI     ' 3 tuşu
      IF BUTON=3 Then UC     ' 4 tuşu
      IF BUTON=4 Then DORT   ' 5 tuşu
      IF BUTON=5 THEN BES    ' 6 TUSU
      IF BUTON=6 THEN ALTI   ' 7 TUSU
      IF BUTON=7 THEN YEDI   ' 8 TUSU
      IF BUTON=21 Then YIRMIBIR   ' ON/OFF tuşu
      Ero=1
      GOTO BASLA
'-----------------------------------------------------------------------------------
YIRMIBIR:   
         IF POZ=1 THEN basla
             IF PORTB=0 THEN
               PORTB=31:PORTA=2
             ELSE
               PORTB=0:PORTA=0
             ENDIF
           goto CIK
               
SIFIR:    
          IF POZ=1 THEN basla
          TOGGLE PORTB.0
GIT:       IF PORTB>0 THEN PORTA=2
         
CIK:       POZ=1
          ero=0
          ALET=portb & %11111111
          write 0,ALET
          PAUSE 10
          GOTO basla

BIR:
          IF POZ=1 THEN basla
          TOGGLE PORTB.1
          GOTO GIT
         
IKI:  
          IF POZ=1 THEN basla
          TOGGLE PORTB.2
          GOTO GIT
         
UC:  
          IF POZ=1 THEN basla
          TOGGLE PORTB.3
          GOTO GIT
         
DORT:  
          IF POZ=1 THEN basla
          TOGGLE PORTB.4
          GOTO GIT  
BES:  
          IF POZ=1 THEN basla
          TOGGLE PORTB.5
          GOTO GIT
         
ALTI:
          IF POZ=1 THEN basla
          TOGGLE PORTB.6
          GOTO GIT            
         
YEDI:          
          IF POZ=1 THEN basla
          TOGGLE PORTB.7
          GOTO GIT  
'---------------------------------------------------------------------------------------
TUSBAK:
Asm
Start   clrwdt
       call   ReadIR         ;IR SİNYALİ OKU
endasm
return

';       retlw   0x00
ASM
ReadIR   clrwdt
        call   R_Pulse
         btfss   _flama,   1
         goto   ReadIR         ;start pulse bekle (2.4mS)

Get_Data
        clrwdt
         movlw   0x07         ;7 bit okumaya hazırlan
        movwf   _Bit_Cntr
        clrf    _Buton
       
Next_RcvBit2    
        call   R_Pulse
         btfsc   _flama,   1   ;başka bir start biti buldu isen çık
         goto   ReadIR
         btfsc   _flama,   0      ;hata varsa yine çık
         goto   ReadIR
        bcf     STATUS    , C
        btfss   _flama,    3
        bsf     STATUS    , C
        rrf     _Buton  , f
        decfsz  _Bit_Cntr  , f
        goto    Next_RcvBit2
        rrf     _Buton  , f      ; 7 bit ayarlaması
       
Get_Cmd   movlw   0x05         ;5 bit alet kodu oku
       movwf   _Bit_Cntr
       clrf    _Dev_Byte
Next_RcvBit
       call   R_Pulse
        btfsc   _flama,   1   ;başka bir start biti buldu isen çık
        goto   ReadIR
        btfsc   _flama,   0      ;hata varsa yine çık
        goto   ReadIR
       bcf     STATUS    , C
       btfss   _flama,    3
       bsf     STATUS    , C
       rrf     _Dev_Byte  , f
       decfsz  _Bit_Cntr  , f
       goto    Next_RcvBit
       rrf     _Dev_Byte  , f      ;5 biti ayarla
       rrf     _Dev_Byte  , f      
       rrf     _Dev_Byte  , f      
       retlw   0x00
;end of ReadIR

R_Pulse
       clrwdt
       clrf   _LoX
        btfss   PORTA,    0   ;high oluncaya kadar bekle
       goto    $-1
        clrf   _tmp1
        movlw   0xC0         ;yeni bir tuş için bekle
        movwf   _tmp2         ;toggle tusu için bekle
S_High   
      clrwdt
      btfss   PortA,  0   ;low'a çekilinceye kadar bekle
      goto    Next
       incfsz   _tmp1,f
       goto   S_High
       incfsz   _tmp2,f
       goto   S_High
       bsf   _Bayrak ,   7      ;bayrağı set et
       goto   S_High
Next   
     nop
      nop
      nop
      nop
      nop            ;zaman ayarlama gecikmeleri
      nop            ;
      nop
      nop
      nop
      nop
      nop
      nop
      incf   _LoX,   f
     btfss   PortA,0
     goto    Next         ;high oluncaya kadar bekle
      
Chk_Pulse   clrf   _flama

TryError
      movf    _LoX,   w      ; puls çok kısamı bak
        addlw    255 - 20      ; if LoX <= 20
        btfsc   STATUS    , C
        goto    TryZero
       bsf       _flama,   0      ; hata bulundu, set flama
       retlw   0x00

TryZero   
       movf   _LoX,   w      ; sıfırmı bak
        addlw    255 - 60      ; if LoX <= 60
        btfsc   STATUS    , C
        goto    TryOne
       bsf       _flama,   3      ; sıfır bulundu, set flama
       retlw   0x00

TryOne
      movf  _LoX,   w      ; bir mi?
        addlw    255 - 112      ; if LoX <= 112
        btfsc   STATUS    , C
        goto    TryStart
       bsf       _flama,   2      ; bir bulundu, set flama
       retlw   0x00

TryStart
        movf    _LoX,   w      ; start bitimi
          addlw    255 - 180      ; if LoX <= 180
          btfsc   STATUS    , C
          goto    NoMatch
         bsf       _flama,   1   ; Start palsi bulundu
         retlw   0x00
NoMatch                  ; pals çok uzunmuş
        bsf       _flama,   0      ; hata bulundu, set flag      
         retlw   0x00
EndAsm
End