Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Kumanda Kodu Çözmede PIC farkı

Başlatan kostebek, 23 Haziran 2008, 12:15:06

kostebek

Arkadaşlar uzun zamandır PIC ile IR kontrol ile bir uygulama yapmak ya da uygulamalarımda kullanmak istiyorum.

İnternette gezerken Sony SIRC için CCS C  kodu buldum. Aşağıya ekliyorum.

//  Author:       Aurelian Nichita     nicksubzero@yahoo.com
//  Based on:     http://www.xs4all.nl/~sbp/knowledge/ir/sirc.htm
#include <18F452.h>

#fuses XT,NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP

#use delay(clock=4000000)

#include "flex_lcd.c"#define TIMER0_CONFIG   RTCC_INTERNAL | RTCC_DIV_1

#define ONE_MIN  1675

#define ONE_MAX  1925

#define ZERO_MIN 1075

#define ZERO_MAX 1325

int16 irframes[13];

int8 ircount = 0;

int1 irdone = FALSE;

#int_ext

void ext_isr() {

  if (irdone) return;

 irframes[ircount] = get_timer0();

if (ircount >= 13)

irdone = TRUE;

ircount++;

set_timer0(0);

}

int1 decode_ir(int8 &addr, int8 &cmd) {

int8 i;

int8 mask;

int8 bits[13];

addr = 0;

cmd = 0;

for (i=1; i<=12; i++) {

if ((ONE_MIN <= irframes[i]) && (irframes[i] <= ONE_MAX))

bits[i] = 0x01;

else

if ((ZERO_MIN <= irframes[i]) && (irframes[i] <= ZERO_MAX))

bits[i] = 0x00;

else        // Error

return FALSE;

}

mask = 0x01;

for (i=1; i<=7; i++) {

if (bits[i])

cmd = cmd | mask;

mask <<= 1;

}

mask = 0x01;

for (i=8; i<=12; i++) {

if (bits[i])

addr = addr | mask;

mask <<= 1;

}

return TRUE;

}

void start_ir() {

  //bütün irframesler 0 la doldurulur

  memset(irframes, 0×00, sizeof(irframes));

ircount = 0;

irdone = FALSE;

set_timer0(0);

}

void main() {

int8 addr, cmd;

int1 ok;

addr=0;cmd=0;

setup_timer_0(TIMER0_CONFIG);

ext_int_edge(L_TO_H);

enable_interrupts(INT_EXT);

enable_interrupts(GLOBAL);

lcd_init();

delay_ms(133);

start_ir();

while(1){

if (irdone) {

ok = decode_ir(addr, cmd);

printf(lcd_putc, "\fKomut  %3u\nAdres %3u", cmd, addr);

if (!ok)

lcd_putc("\Hata");

else

start_ir();

}

}

}


Alıcı B0 bacağında olacakmış..

Şimdi sormak istediğim burdaki 18 serisi PIC in bir kullanılma sebebi var mı . Ben bunun yerine 16F877 kullanabilirmiyim. Kullanırsan nasıl değişiklik yapmak gerekiyor.

Teşekkürler

OG

mini mini 1K'lık 12F629'u bile kullanabilirsiniz.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

erkan06

18F452 sık kullanılan bir pic. Genelde web'de örneklerde oldukça fazla kullanılıyor. Ayrıca IR kontrolda extra bişey kullanmıyorsun. Herşeyi yazılıma yüklüyosun. Donanımsal olarak gereken işi zaten alıcı göz hallediyor. Bu yüzden kullanılan işlemcinin ister B0 ister herhangi bacağı, veyahut da farklı bir denetleyici kullanman hiç problem değil.. Saygılar
Ne mutlu Türküm diyene!

forsa1975

Kesme bacağı kullanmadan çözmen çok zor. Örneğin RC5 te yükselen kenar düşen kenarı yakalamak gerekiyor. Normal input pininden bunu yapmak çok zor. Hemde sağlıklı olmasa gerek.  16f628 ile RC5 okuyabiliyorum.

kostebek

Arkadaşlar sizin de bildiğiniz Kızıl Ötesi kumanda projeleri varsa paylkaşırsanız sevinirim. Ben bugun bu projeyi yapıyorum yarın kafeye tektar gelebilirsem. Video ve fotoğrafları getiririm.

Kolay gelsin hepinize.

kostebek

Ben kodun header dosyasını 16F877.C yaparak derledim. LCD içinde D portunu kullandım. LCD normal şekilde çalışıyor.

Programı bağlattımda bekliyor. Sonra kumandadan herhangi bir tuşa basar basmaz LCD de yazılar görünüyor KOMUT: 0
ADRES:0

şeklinde ve yanında aynı zamanda HATA yazıyor.

TSOP1138 in OUT  pinini kontrol ettiğimde ise normalde +5V görünüyor ben kumandadan bir tuşa bastığımda o değer değişiyor. Yani infraled alıcımda çalışıyor.(diye düşünüyorum).

Kumandam da zaten Sony video kameramın kumandası.

Sizce problem nerede olabilir…

not: aşağıdaki düzenekte butonlar ile transistörlerin normal devreyle bağlantısı yok step motor sürmek için koymuştum sökmedim.















erkan06

Bu kod, hangi Sony kumanda çeşidi içindir acaba? Çünkü hatırladığım kadarıyla TV, Müzik Seti, Kamera, Video vs.. hepsinin farklı idi. Eğer TV içinse senin kodda bunu değiştirmen gerekir diye düşünüyorum. Kodu bulduğun yere bir bakarsan
Ne mutlu Türküm diyene!

erkan06

Tüm kodu değil de, protokolün ilgili yerini...
Ne mutlu Türküm diyene!

kostebek

Sony lerin zaten kumandaları aynı şekilde kod gönderiyor. Kumanda orjinal olmasa birşey demeyeğim ama kumanda da orjinal kumanda.

Yapmam gereken osiloskop bulup 1  0 sürelerini bir ölçmek ama işte sevdiğimin(!) (konya) da bir tane osiloskop bulamadım.

Elektronikçiy girdim adama PIC var mı dedim;

O ne dedi...

Güler misin ağlar mısın?

keshh

Abi selamlar Konya büyük şehir ve ordaki TCDD'de kesinlikle osiloskop vardır. Ben ilk osiloskopu TCDD atelyesinde görmüştüm. Telsiz vb. tamiri yaparlar. Garın oraya git atelye veya sinyalizasyon binası nerde de gösterirler, ordaki teknisyenler de genelde iyi oluyor. Amcam demiryolcuydu de yardım ederler gerekirse babamın adını verirsin :) Orda da yoksa gir Konya EMO'ya :))
ct[/url]