2 pic arası udea ile rf iletişim

m@ny@k111

Üye
Katılım
1 Kas 2008
Mesajlar
48
Puanları
1
Yaş
39
slm;
iki pic alıcı ve verici olmak üzere.verici kısımda sensörden aldığım değeri alıcı devreye gönderecem ,alıcı devrede ise hem alıcı kısma bağlı sensörden aldığım değer hemde verici kısımdan gelen degeri 2buton seçimi ile lcd de gösterecem..
RF olarak Udea marka modülleri kullanacam..
hi-tech pic c ile kodu yazmaya çalıştım.udea nın sitesinden elde ettiğin rf kodunuda uygun bi şekilde koduma eklemeye çalıştım fakat proteus simulasyonunda verici kısımdan aldığım bilgiyi(daha doğrusu alamadığım) lcd ekranda gösteremedim..
-----------------alıcı kısım---------------
#include <pic.h>
#include <delay.c>
#include <lcd.c>
#include <stdio.h>
#define rfbilgi RA1

const float lsb=5.0/1024.0;

float sicaklik;
unsigned char gerilim,ust,alt,sicaklik2;
unsigned char sonuc[]="sicaklik = ";
int plus0,plus1,plus2;
int count,say;

unsigned char data=0x00 ;


void bit0();
void bit1();
void data_al();
#define bit_set(var,bitno) ((var)|=(1<<(bitno))) // stenlen b 1 yapan macro
#define bit_reset(var,bitno) ((var)&=~(1<<(bitno)))



void main ()
{

// Port konfigürasyonu
TRISB=0; // PORTB çıkış
TRISA=0b00001000; //
TRISE=0b00000001;
PORTE=3;

// Ön LCD işlemleri
DelayMs(250); // 250ms bekle
lcd_init(); // LCD?yi hazırla
lcd_clear(); // LCD'yi temizle

// ADC ayarlari
ADCON1=0x8E; // AN0 analog giris
ADCON0=0x41; // A/D aktif
lcd_write(0x0C);
lcd_goto(0x00); lcd_puts(" KABLOSUZ ");
lcd_goto(0x40); lcd_puts(" ISI OLCUMU");

DelayMs(250);

while(1){


ADGO=1;
while((ADCON0&4)!=0);
gerilim=ADRESH;
gerilim=256*gerilim+ADRESL;
sicaklik=gerilim*lsb*100.0;
ust=(int)sicaklik;
alt=(int)(10.0*(sicaklik-ust));

while(RE0){
sprintf(sonuc+11,"%d.%dC",ust,alt);
lcd_puts(sonuc);
DelayMs(250);
DelayMs(250);

lcd_clear();
}



while(RE1){
lcd_goto(0x80); lcd_puts("haydar");
bit0();
sicaklik=sicaklik2*lsb*100.0;
ust=(int)sicaklik;
alt=(int)(10.0*(sicaklik-ust));


sprintf(sonuc+11,"%d%d",ust,alt);

}

}
}

void bit0()
{
while(1)
{
if(rfbilgi==0) //senkron 5 b 0x00 aran�yor
{
while(1)
{
DelayMs(1);
plus0++;
if(plus0>=600) // 5 byte 0x00 bulundu
{
while(rfbilgi==0);
bit1(); // 5 bte 0xff arayan programa g
return;
}
if(rfbilgi==1) // 5 byte 0x00 bulunamad�
break;
}
plus0=0; // 0x00 yeterl uzunlubu sablam�yor baaa d”n ara
}
}
}
//-------------------5 bit 0xff arayan program--------------------
void bit1()
{
while(1)
{
if(rfbilgi==1) //senkron 5 byte 0xff aran�yor
{
while(1)
{
DelayMs(10);
plus1++;
if(plus1>=600) // 5 b 0xff bulundu
{
while(rfbilgi==1);
data_al(); // senkron yakaland� data_oku program�na
}
if(rfbilgi==0) // 5 byte ff bulunamad�
{
plus0=0; // 0xff yeterl uzunlubu sablam�yor baaa d”n ara
plus1=0;
return;
}
}
}
}
}



//------------------------------------------------------------------
void data_al()
{
while(say==7) // 8 b data oku
{
if(rfbilgi==1)
bit_set(data,0); // b 1 yap
else
bit_reset(data,0); // b 0 yap
if(say==7)
break;
say++ ;
data=data<<1; // datayi 8 bit sola kaydir
DelayMs(200);
DelayMs(210);


sicaklik2=(int)data;
plus0=0;
plus1=0;
plus2=0;
say=0;
data=0;
return;
}
}
------------------------------------------------------------------------------

---------------------verici kısım---------------
#include <pic.h>
#include <delay.c>
#define DI RB7 // RB7 pini kullanılarak data gönderiliyor
#define button RB6 // gönderme yapmak için kullanılan tu
int count=0; // 1 byte=8 bit
unsigned char gerilim=0x00; // gönderilecek verilerin atandıı deiken
unsigned char data_set=0x00; // bit_reset ve bit_set denetim deikeni
unsigned char mask=0x80;


void p_width()
{
DelayUs(200); // baud rate degerimiz 2400, her bir pluse 416 Us olmalı
DelayUs(175); // send(data) programındaki gecikmeler dikkate alındığından
} // data gönderme sırasında pulse width 375 Us olur

void send(data) // data gönderen alt program
{
while(count<=7)
{
data_set=data & mask;
if(data_set==0x80)
{
DI=1;
}
else
{
DI=0;
}
p_width();
if(count==7)
{
count++;
break;
}
data=data<<1;

count++;
}
count=0;
return;
}


void main() // ana program
{


while(1){

ADCON1=0x8E; // AN0 analog gs
ADCON0=0x41; // A/D akt
ADGO=1;
while((ADCON0&4)!=0);
gerilim=ADRESH;
gerilim=256*gerilim+ADRESL;

DelayMs(250);
DelayMs(250);


TRISB=0X40; // portb nin tüm pinleri çıkı yapıldı



send(0x55); // 5 byte 0x55 (preamble)
send(0x55);
send(0x55);
send(0x55);
send(0x55);
send(0x00); // 5 byte 0x00 ve 5 byte 0xff (senkron)
send(0x00);
send(0x00);
send(0x00);
send(0x00);
send(0xff);
send(0xff);
send(0xff);
send(0xff);
send(0xff);
DI=0; // stop biti
DI=1; // start biti
p_width();
send(gerilim); // gönderilen data
DelayMs(250); // 500 ms gecikme
DelayMs(250);

}
}
//--------------------------------------------------------------------------------------------------------------
 
merhaba,ben de bu tarz bir uygulama yapıyorum ve udea kodlarını inceledim.acaba sorununuza çözüm bulabildiniz mi.ben de kodu geliştirmeye çalışıyorum ama beceremedim,kodunuzu benimle paylaşabilir misiniz acaba?
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Geri
Üst