F

hi tech c ile seri port rf iletişimi???

Başlatan ferdi0435, 08 Ocak 2012, 06:05:18

ferdi0435

iyi günler ...

aşağıda hitech c ile seri port iletişimi yaptım rf aracılıgı ıle alıcıda bır sorun yok cunku verıcı kısmında pınlere led baglayarak bunu test ettım...
sorun şu pc den serı olarak xsol veya xsag gelınce  pic wsag veya wsol gonderecek bunu rf olmayınca dırekt kablo ıle cozebılıyorum fakat rfyı uyandırmak ıcın yazdıgım fonksıyonu cagırınca kalk(); fonksiyonunu ıkıncı dongude  kıtlenıyor... iflerin içindekı pınlere baglı ledler  ile kıtlenmeyı gorebılıyorum..... kalk fonksiyonlarını kaldırınca calısıor fakat bu sefer rf alıcıyı uyandırma ımkanım olmuor ....acaba neden oluor ?




#include <stdio.h>
#include <pic.h>
#include"delay.h"
#include "usart.h"
#include <string.h>
__CONFIG(XT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN& DEBUGDIS & UNPROTECT);

/* A simple demonstration of serial communications which
* incorporates the on-board hardware USART of the Microchip
* PIC16Fxxx series of devices. */


void kalk(void)
{
   int i;
   char uyan[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0}; //rf modül uyandırma
for(i=0;i<15;i++)
{
putch(uyan [ i ] ); 
}

}


void main(void){
   int i;

   char ver[3];
   char al='q';
   
TRISD=0x00;
PORTD=0x00;

   INTCON=0;// purpose of disabling the interrupts.

   init_comms();   // set up the USART - settings defined in usart.h

   // Output a message to prompt the user for a keypress   
   
   while(1){
     
      do
      {
         al=getch();
      }while(al!='x');
     
     
   for(i=0;i<3;i++)
{     
   ver=getch();
   
     
}

         if (strncmp (ver,"sag",2) == 0)//kısa karakter karşılaştırılması 3 sayısı en az kaçtaensin
  {                                 //uygun olması gerektiğini belirtiyor

   //kalk();   //bunları kaldırınca calısıor ?????fakat bu sefer rf modulu uyandıramam???
   

printf("wsag");
PORTD=0;
RD2=1;

  }


 
            if (strncmp (ver,"sol",2) == 0)//kısa karakter karşılaştırılması 3 sayısı en az kaçtaensin
  {                                 //uygun olması gerektiğini belirtiyor

   //kalk();//bunları kaldırınca calısıor ?????fakat bu sefer rf modulu uyandıramam???

printf("wsol");

PORTD=0;
RD1=1;
  }

   al='q';
   
   }
}

Analogic

Hitech'e pek hakim değilim ama, genel mantıkla düşününce, cihazın uyanabilmesi için yeterli zamanı sağlamak amacıyla, kalk komutundan sonra kısa bir delay koymanız gerekebilir belki.

ferdi0435

#2
hocam  benım sorunum cıhazı kaldıramakta degıl sorun surda ıf dongusunun ıcınde kalk kullanınca ılk dongude kıtlenıor bırdaha pc den sol gonderdıgımde almıor fakat kalk fonksıyonunu silince rahat calısıor sag deyınce sag led yanıor sol deyınce sol led yanıor kalk fonksıyonunu cagırınca sag deyınce sagyanıor fakat sol deyınce sagda takılı kalıor  veya sol deyınce solda takılı kalıor????

est32

ben C bilmem ama yanlış yorumlamamışsam bir tuşa basılınca 15 defa ardı ardına uyandırma sinyali yollanıyor,ardından bir sefer data yollanıyor.
Eğer böyle ise o data yolda kayba uğrar veya parazit nedeniyle bozulur,farklı bir veri haline dönüşür.
Bence her uyandırma sinyalinden sonra veri yollanmalı ya da uyandırma sinyalinin ardından veri 15 defa yollanmalı veya daha da fazla.Çünkü tek yönlü iletişim var,verinin karşıya ulaşıp ulaşmadığı verici tarafından bilinemez.

ferdi0435

 orda bır dızı ıcıne uyandırma sınyalı atılmıs sırasıyla dızının ıcındekıler cagrılıor 15 defa uyandırma sınyalı gonderılmıor .....

Analogic

if döngülerinin sözdiziminde hata yok gibi görünüyor ama, ikinci if döngüsünü else if olarak deneyebilirmisin.

Yani şu şekilde


#include <stdio.h>
#include <pic.h>
#include"delay.h"
#include "usart.h"
#include <string.h>
__CONFIG(XT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN& DEBUGDIS & UNPROTECT);

/* A simple demonstration of serial communications which
* incorporates the on-board hardware USART of the Microchip
* PIC16Fxxx series of devices. */


void kalk(void)
{
   int i;
   char uyan[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0}; //rf modül uyandırma
for(i=0;i<15;i++)
{
putch(uyan [ i ] );
}

}


void main(void){
   int i;

   char ver[3];
   char al='q';
   
TRISD=0x00;
PORTD=0x00;

   INTCON=0;// purpose of disabling the interrupts.

   init_comms();   // set up the USART - settings defined in usart.h

   // Output a message to prompt the user for a keypress   
   
   while(1){
     
      do
      {
         al=getch();
      }while(al!='x');
     
     
   for(i=0;i<3;i++)
{     
   ver=getch();
   
     
}

if (strncmp (ver,"sag",2) == 0)//kısa karakter karşılaştırılması 3 sayısı en az kaçtaensin
  {                                 //uygun olması gerektiğini belirtiyor

kalk();   //bunları kaldırınca calısıor ?????fakat bu sefer rf modulu uyandıramam???
   

printf("wsag");
PORTD=0;
RD2=1;

  }

else if (strncmp (ver,"sol",2) == 0)//kısa karakter karşılaştırılması 3 sayısı en az kaçtaensin

{                                 //uygun olması gerektiğini belirtiyor

kalk();//bunları kaldırınca calısıor ?????fakat bu sefer rf modulu uyandıramam???

printf("wsol");

PORTD=0;
RD1=1;
  }

   al='q';
   
   }
}


ferdi0435


Powered by EzPortal