rf ile pc ye veri aktarımı

Başlatan eyupcalis, 14 Nisan 2010, 04:14:49

eyupcalis

arkadaşlar bitirme ödevi olarak kablosuz sıcaklık ölçümü yapacam yani bilenler için lm35 sensörüyle sıcaklığı ölçecem bunu bu devre üzerindeki bir lcd ye yazdıracam aynı zamanda rf verici ile sıcaklık bilgisini rf alıcı sayesinde alıcı devresine atacam ve bu alıcı devresini max232 entegresi üzerinden bilgisayarın seri portuna seri porttan iletecem.benim ilk sorum alıcı devresinde yani bilgisayara bağlayacağım devrede pic kullanmak zorunda mıyım? kullandığım rf alıcı-verici udea firmasına ait 433MHz de veri alıp gönderiyor.pic olarak ta verici tarafta 16f877 kullanacam. proteus dosyalarını eklicektimde yapamadım onu böle yazdım lütfen yardım edin bunu yapmam lazım buna cevap aldıktan sonra donanım kısmı tamam olacak yani ne kullanacağımı çözmüş olacam ve artık yazılım kısmına geçecem tabi orda da baya yardımınızı almayı düşünüyorum lütfen ilgilenin

tayyar

udea kitlerinin çıkışları ttl seviyesinde diye hatırlıyorum pc kısmındaki alıcıda max232 (yada türevi) kullanman gerekir. pic gerekmez. yazılımsal olarak çözüme gitmelisin.

verici kısmında ise lcd kullanmaktan vazgecersen 12f675 işini görür.
lcd illaki olacak dersen ( aslında ilk başta debug yapmak için olması güzel olur ) daha büyük bir pic gerekebilir.

yada 74h595 entegresiyle lcd ye 3 kablolu erişim saglayabilirsin bu sayede yine 12f675 işini görür. (örnek projeler forumda mevcut)

ufak bir not: yapacam edecem diye bir şey yoktur yapacağım edeceğim vardır.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

ferdem

Merhaba Eyüp hocam, RF modüllerle haberleşme kablolu haberleşmeden biraz farklı. Gönderici tarafın veriden önce uyandırma işareti(alıcıyı uyandırma) göndermesi ve sonra veriyi arka arkaya birkaç defa göndermesi gerekiyor. Bu durumda alıcıda da durumlar değişiyor, alıcının gelen veriyi küçük bir ayıklama işlemine tâbi tutması gerekiyor. Ayıklama işini ya PIC yapacak ya da bilgisayar yapacak, ikisi de mümkün. Bence adım adım ilerlerseniz hem takılıp kalma riskiniz düşer hem de kendi kararınızı kendiniz verebilirsiniz, adımlar:

1) İki PIC i kablolu seri haberleştirelim, alıcı PIC aldığı veriyi LCD de yazsın.
2) PIC ten bilgisayara kablolu veri gönderelim, bilgisayar tarafında bir terminal programı veya sizin yazdığınız bir program(C#, VB gibi.) veriyi göstersin.
3) İki PIC i kablosuz haberleştirelim, alıcı PIC aldığı veriyi LCD de yazsın.
Gerisi açılacaktır zaten.
Forumda benzer konular çok konuşuldu, o başlıkları bulup okumalısınız. Anahtar kelimeler: preamble, uyandırma, udea, keymark, rf modül, max232

İyi çalışmalar.

eyupcalis

cevap verdiğiniz için ikinizede teşekkürler bu arada uyarını dikkate alacağım tayyar arkadaşım:) şunu da sizlere danışmak istiyorum 1. sorum rf veri iletiminde veri kaybının önüne geçebilmek için alıcı tarafta da pic kullanmak daha mantıklı mı olur yazılımda bunun önüne bi nebze de olsa geçilebilir..2. sorum da eğer iki tarafta da pic kullanırsam yazılımda iki tane mi seri haberleşme yapacağım yani 1.si iki pic arasında diğeride alıcı devresindeki pic ve pc arasında doğru mu düşünüyorum. ve bu iletişimlerin baud rate i ne olacak çünkü udea rf modüller maksimum 2400 oranına izin veriyo alıcı pic le bilgisayar arasındaki iletişimin baud rate 2400 olursa sorun olur mu pc ile baktığım örneklerin hepsinde baud rate 9600 olarak belirlenmiş ... projeyi yapmam için 1 buçuk ay gibi bi sürem var bu işlede yeni yeni haşır neşir oluyorum bu yüzden çok şey soruyor olabilirim kusura bakmayın yardımlarınız için şimdiden teşekkürler... özellikle sayın fatih erdem internette bu konuyla alakalı birçok dökümanını indirdim okudum çok faydalı oldular ayrıyetten çok teşekkürler tez yazımımda isminizi kullanacağımı söylemek isterim bilmeden yaılarınızla ana yardımcı olduğunuz için şimdiden teşekkürler

tayyar

yüne udea nın daha hızlı çalışabilen kitleri olması gerekli sitelerini tekrardan bir incele istersen.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

ferdem

#5
Alıntı yapılan: eyupcalis - 15 Nisan 2010, 23:07:21
1. sorum rf veri iletiminde veri kaybının önüne geçebilmek için alıcı tarafta da pic kullanmak daha mantıklı mı olur yazılımda bunun önüne bi nebze de olsa geçilebilir.
2. sorum da eğer iki tarafta da pic kullanırsam yazılımda iki tane mi seri haberleşme yapacağım yani 1.si iki pic arasında diğeride alıcı devresindeki pic ve pc arasında doğru mu düşünüyorum. ve bu iletişimlerin baud rate i ne olacak çünkü udea rf modüller maksimum 2400 oranına izin veriyo alıcı pic le bilgisayar arasındaki iletişimin baud rate 2400 olursa sorun olur mu

1) Alıcıda PIC kullanmanın veya sadece bilgisayar kullanmanın veri iletim doğruluğuna bir etkisi olmaz, iki durumda da doğruluk RF alıcı modülün doğruluğuna bakıyor. Alıcı tarafta da PIC kullanırsanız daha iyi olur çünkü: Basit RF modüller veri gelsin gelmesin sürekli veri geliyormuş gibi davranacaktır, sürekli gelen bir veriyle bilgisayarı meşgul etmek pek güzel bir hareket değil. Alıcı tarafta PIC olsun, gelen veriyi ayıklasın bilgisayara sadece gerekli veriyi söylesin.

2) Modüllerle de bilgisayarla da 1200, 600 gibi bir hızla haberleşirseniz bir sorun olmaz.

eyupcalis

arkadaşlar şimdi iki pic i seri haberleştirip verici de bulduğum float tipteki sıcaklik değerini(örneğin 22.6'C) vericiye  gönderip vericideki lcd ye yazdıracağım.bu ondalıklı sayıyı nasıl karşı tarafa atabilirim yardımcı olabilir misiniz

JKramer

Vericide dijitale çevirdiğiniz bilgiyi gönderip hesapları alıcıda yapsanız nasıl olur?

eyupcalis

arkadaslar devreyi bord üzerine kurdum fakat proteusta çalışan devrem bord üzerinde çalışmıyor.çalışmıyor derken şöyle vericideki lcd de sıcaklığı görebiliyorum fakat alıcıdaki lcd de sıcaklığı göremiyorum.Nerde sorun olmuş olabilir programda sorun olmadığını düşünüyorum çünkü 2 farklı şekilde veriyi alıcıdaki lcd ye yazdırıyorum proteusta fakat bordda alıcıdaki lcd de sıcaklık değerini göremiyorum.Nedeni ne olabilir acaba .bu arada devreyi kablolu kurdum .vericideki RC6 dan alıcının RC7 sine kabloyla giriyorum.

Lütfi AYYILDIZ

Programınızda preample kullandınızmı ve bir başlangıç verisi?, veya programınızı gönderin inceleyelim.

eyupcalis

mail adresinizi verirseniz 2 farklı program var ikisinide yollama isterim

Lütfi AYYILDIZ

forumda paylaşabilirsiniz veya rapide yükleyin,bu şekilde daha çok yardım almış olursunuz.


Lütfi AYYILDIZ

Malesef c bilgim yeterli değil.anladığım kadarıyla 9600 baud hız kullanmışsınız bu hızı modüller desteklemeyebilir.Ayrıca proteusda çalışıyorsa geriye sadece modüller kalıyor hızınızı modüllerin datasheetinde ki değerlere göre ayarlayın sorun düzelecektir.
verici:
#include <16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7)
#use fast_io(a)
#define use_portb_lcd TRUE
#include <lcd.c>

unsigned long int bilgi;
float voltaj,sicaklik;
int i;
//int s;
//----------ANA PROGRAM------------
void main()
{
 char veri[5];
 
 setup_PSP(PSP_DISABLED);
 setup_timer_1(T1_DISABLED);
 SETUP_timer_2(T2_DISABLED,0,1);
 setup_CCP1(CCP_OFF);
 setup_CCP2(CCP_OFF);
 set_tris_a(0x01);
 setup_adc(adc_clock_div_32);
 setup_adc_ports(AN0);
 set_adc_channel(0);
 delay_us(20);
 lcd_init();

  printf(lcd_putc,"\r\n");
  
  for(;;)
  {
   bilgi=read_adc();
   voltaj=(0.0048828125*bilgi)*1000;
   sicaklik=voltaj/10;
     
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Sicaklik:%5.1f'C",sicaklik);

   delay_ms(10);
   sprintf(veri,"%5.1f",sicaklik);
   putc(0b01010101);
   putc(0b01010101);
   putc(0b01010101);
   putc('S');
   for (i=0;i<5;i++)
   {
    putc(veri[i]);
   }
  
   putc(13);
   delay_ms(500);
  } 
  
 }


alıcı:

#include <16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7)
#use fast_io(a)
#define use_portb_lcd TRUE
#include <lcd.c>

//unsigned long int bilgi;
//float voltaj;
char sicaklik[10];
//int i;

#int_RDA 
void serial() 
{ 
//   disable_interrupts(int_rda);
   if (getc()=='S')
   {
   fgets(sicaklik);
   }
}

//----------ANA PROGRAM------------
void main()
{
 
 setup_PSP(PSP_DISABLED);
 setup_timer_1(T1_DISABLED);
 SETUP_timer_2(T2_DISABLED,0,1);
 setup_CCP1(CCP_OFF);
 setup_CCP2(CCP_OFF);

   enable_interrupts(int_RDA);
   enable_interrupts(global);
 
 delay_us(20);
 lcd_init();

  printf(lcd_putc,"\r\n");
  
  for(;;)
  {
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Sicaklik:%5.1s'C",sicaklik);
  }
 }

nekoist

merhaba arkadaşlar,
bu projenin aynısı üzerine çalışmaya başlayacağım..dosyaları verilen linkte bulamadım..elinde olan varsa yükleyebilir mi acaba?
bana çok yardımı olacağını düşünüyorum.
kolay gelsin.