Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

rf veri iletimi ccs c ??

Başlatan zafermavi, 25 Nisan 2009, 16:23:42

zafermavi

arakadaşlar bitirme ödevim için bir pic ten rf ile diğer pice veri gönderip lcd ye yazmam gerkiyor  pic olarak 16f877 kullanıyorum dil olarakta ccs c dilini kullanıyorum. lütfen bilen arkadaşlar varsa yardım edebilirlermi?

Salih

Öncelikle isis de hangi pic serisi kullanacaksan onları birbirine bağla. Seri haberleşmede ne yapmak istiyorsan işlemini tamamla. Forumda bu konuda çokca örnek bulacaksın. Isisde programları tamamen çalıştırdıktan sonra  gerçek modüller ile çok problem çıkacağını zannetmiyorum. Programlara başla problem olursa yardımcı olan çıkar.

mucit07

seri haberleşme  ancak rf  vericiyi uyandırmak icin  0xaa,axff gibi kodlar gondermelisindaha sonra kendini nasıl bir algoritmayla kodluyorsan sana kalmış

zafermavi

aşıdaki gibi isiste çalışan bir program var fakat bunu gerçek piclere attığımda araya rf modül değilde kablo koyduğumda çalışıyor ama rf modülleri yerleştirdiğimde çalışmıyor sizce sırun nerede?
alıcı kısım:
#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)

#include "LCD_zafer.c"

float sicaklik;

unsigned char sayac,yazdir;
unsigned char gelen[5];

#INT_RDA
void SeriVeriAl(void)
{
  unsigned char veri,i;
  veri=getc();
 
  if(veri=='S')
  {
     for(i=0;i<5;i++)
     {
        gelen=0;
     }
     sayac=0;
     yazdir=0;
  }
  else if(veri=='F')
  {
     LCD_goto_xy(10,1);
     for(i=0; i<5; i++)
     {
        LCD_putc(gelen);
     }
     printf(LCD_putc,"'C");
  }
  else
  {
     gelen[sayac]=veri;
     sayac++;
  }
}


void main()
{

setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);

enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);


lcd_init();

while(true);

}


verici kısım:
#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)

#include "LCD_zafer.c"
unsigned long int bilgi;
float voltaj,sicaklik,dizi[10];
int i;

//ANA PROGRAM
void main()
{
unsigned char veri[5],i;
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_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);//A PORTU GİRİŞ
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0);

lcd_init();

set_adc_channel(0);

delay_us(20);



while(true)
{
for (i=0;i<10;i++)
{
bilgi=read_adc();
voltaj=(0.0048828125*bilgi)*1000;
sicaklik=(voltaj/10);
dizi = sicaklik;
delay_ms(50);
}
sicaklik = (dizi[0]+dizi[1]+dizi[2]+dizi[3]+dizi[4]+dizi[5]+dizi[6]+dizi[7]+dizi[8]+dizi[9]);
sicaklik = (sicaklik/10);
LCD_goto_xy(10,1);
printf(lcd_putc,"%4.1f'C",sicaklik);

putc('S'); //diger pice baslama isaretini yolla
delay_ms(10);

sprintf(veri,"%4.1f",sicaklik); //sayiyi char a dönüştür

for(i=0; i<5; i++) //karaktere ayrılmış sayıy tek tek yolla
{
  putc(veri);
  delay_ms(10);
}

putc('F'); //pic e bitirme işaretini yolla

delay_ms(100);

}
}

lcd için kütüphane:
LCD_zafer.c

/* for 4x20 LCD
* Filename : lcd.c
* Hardware : Controller  -> all pic series
*/

/**** LCD pinleri ****/
#define LCD_en PIN_D2  //lcdyi yetkilendirmek icin
#define LCD_rs PIN_D3  //konut yada kod yapmak icin
#define LCD_D7 PIN_D7  //lcd veri yolu pin tasarrufu için 4 bit kullandık
#define LCD_D6 PIN_D6
#define LCD_D5 PIN_D5
#define LCD_D4 PIN_D4
/*********************/
//LCD_rw ucu 0'a bagli

#define lcd_line_bir  0x80 // LCD RAM adres 1. satir
#define lcd_line_iki  0xC0 // LCD RAM adres 2. satir
#define lcd_line_uc   0x94 // LCD RAM adres 3. satir
#define lcd_line_dort 0xD4 // LCD RAM adres 4. satir

/***************************************************
* Prototype(s)                                    *
***************************************************/
void LCD_yetkilendirme();                          // LCD yetkilendirme
void LCD_komut(unsigned char komut);               // LCD komut
void LCD_putc(unsigned char ascii);                // LCD tek karakter yazma
void LCD_string_yaz(unsigned char *lcd_string);    // LCD string yazma
void LCD_init();
void LCD_goto_xy(unsigned char x,unsigned char y);

/***************************************************
* Sources                                         *
***************************************************/

//===================================================
void LCD_yetkilendirme()
//===================================================
{
   output_bit( LCD_en , 0); /* Clear bit EN */   //lcd yi bir kere yetki,lendirmek için
   delay_ms(2);
   output_bit( LCD_en , 1); /* Set bit EN */
}

//===================================================
void LCD_komut(unsigned char komut)   //lcdye komut gönder
//===================================================
{
  unsigned char nibble;
  output_bit( LCD_rs , 0); /* Clear bit RS */
  nibble = (komut>>4) & 0x0F;  //ilk 4 bitini gönderdik
  output_bit(LCD_D4 , (nibble & 0x01) );       //pinlere tek tek gönderdik. buton tek seferde göndermediği için
  output_bit(LCD_D5 , (nibble>>1 & 0x01) );
  output_bit(LCD_D6 , (nibble>>2 & 0x01) );
  output_bit(LCD_D7 , (nibble>>3 & 0x01) );
  LCD_yetkilendirme();
  nibble = komut & 0x0F;
  output_bit(LCD_D4 , (nibble & 0x01) );      
  output_bit(LCD_D5 , (nibble>>1 & 0x01) );
  output_bit(LCD_D6 , (nibble>>2 & 0x01) );
  output_bit(LCD_D7 , (nibble>>3 & 0x01) );
  LCD_yetkilendirme();
  delay_ms(2);
  }
//===================================================
void LCD_putc(unsigned char ascii)   //karakter gönderir. tek karakter
//===================================================
{  
  unsigned char nibble;
  output_bit( LCD_rs , 1); /* Set bit RS *///veri gönderdiğin için 1 oldu.
  nibble = (ascii>>4) & 0x0F;//0x0f ile maskeliyor.
  output_bit(LCD_D4 , (nibble & 0x01) );       //pinlere tek tek gönderdik. buton tek seferde göndermediği için
  output_bit(LCD_D5 , (nibble>>1 & 0x01) );
  output_bit(LCD_D6 , (nibble>>2 & 0x01) );
  output_bit(LCD_D7 , (nibble>>3 & 0x01) );
  LCD_yetkilendirme();
  nibble = ascii & 0x0F;
  output_bit(LCD_D4 , (nibble & 0x01) );  
  output_bit(LCD_D5 , (nibble>>1 & 0x01) );
  output_bit(LCD_D6 , (nibble>>2 & 0x01) );
  output_bit(LCD_D7 , (nibble>>3 & 0x01) );
  LCD_yetkilendirme();
  delay_ms(2);
}

//===================================================
void LCD_string_yaz(unsigned char *lcd_string)
//===================================================
{
  while (*lcd_string)
  {
     LCD_putc(*lcd_string++);
  }
}

void LCD_init()
{
   output_bit( LCD_en , 1); /* Set bit EN */
   output_bit( LCD_rs , 0); /* CLr bit RS */  
   LCD_komut(0x33);
   LCD_komut(0x32);
   LCD_komut(0x28);
   LCD_komut(0x0C);
   LCD_komut(0x06);
   LCD_komut(0x01); /* Clear */
   delay_ms(100);
}

//===================================================
void LCD_goto_xy(unsigned char x, unsigned char y)   //lcdye istediğimiz yere veri yazmamızı sağlar. satir ve sütün olarak
//x ,y=sutun,satir
//===================================================
{
int adres;  //ramdeki adresi tutar

  switch( y )
  {
  case 1:
  adres = lcd_line_bir;
  break;
  case 2:
  adres = lcd_line_iki;
  break;
  case 3:
  adres = lcd_line_uc;
  break;
  case 4:
  adres = lcd_line_dort;
  break;
  }

  adres += x-1;    
  LCD_komut(adres); //lcdye veri gönderiyor
}
ilgilenen olursa hazır dosyaları:
http://rapidshare.com/files/226485063/termo_rs232_2pic.rar.html

alaattincindarik

zafermavi merhabalar ben de rf ile ilgileniyorum ve seninle aynı sorunları yaşıyorum eğer bu sorunu çözmüş isen nasıl çözdüğünü ve kodları benimle paylaşır mısın? şimdiden teşekkürler...