İki Tane Picin Haberlestirilmesi

Başlatan tyfrydn, 09 Kasım 2015, 09:44:49

tyfrydn

Arkadaslar merhaba,

Yapmakta olduğum bir projede   ds18b20den aldığım sıcaklık bilgisini bağlı olduğu verici entegreden  baska  bir alıcı entegreye  sıcaklık bilgisini göndermek istiyoum ve o sıcaklık bilgisini karşılastırarak cıkışları kontrol etmem gerekli internette anladığım kadarıyla aşağıdaki kodlar ile yapılabilmekte ancak ısısda çalıştıramadım yani neyin eksik olduğunuda çözemedim.Benim için Önemli olan vericideki bir sıcaklık değerini diğer pic'e göndermek.

Isısda;
pic1 in  rx i pic2 nin tx e bağlı
pic1 in tx i  pic2 nin rx e bağlı

Neresi yanlış veya eksik bulamadım.ilginiz için teşekkür ederim

--------------------------------VERİCİ KODU ------------------------------------------------------

#include <16F877a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay (clock=4000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
#include <ds18b20.c>

void main()
{
   float temp;

   while(1)
   {
      temp=ds1820_read();
      putc(temp);
   }
   
}

-------------------------------------------ALİCİ KODU -----------------------------------------

#include <16F877a.h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
float deger;

void main()
{
     
   while(1)
   {
      deger=getc();

      if(deger < 25)
      {
         output_high(pin_b0);
         delay_ms(100);
      }
     
      if(deger> 25) 
      {
         output_low(pin_b0); 
         delay_ms(100);
      }
   }

}



ferdem

Gönderici tarafa putc(15); alıcı tarafa da
int data=0;
data=getc();
if(data==15)
..
if(data==16)
..
gibi basit kodlarla deneme yaptınız mı?

Kod bu haliyle iş görebilir ancak seri haberleşme seri data kesmesiyle yapılması gerekir. Forumda #use rs232, int_rda anahtar kelimeleriyle arama yapabilirsiniz.

skara1214

fuses ta hs yi xt olarak değiştir
data aktarımını alıcı kısımda interrupt ile yap
Herkes ölür ama herkes gerçekten yaşamaz

tyfrydn

#3
Merhaba,

Söylemek İstedikleriniz Bu şekilde mi? işte olduğum için kodları deneyemedim eve gittiğimde deneyeceğim

Verici.c
#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)
#include <ds18b20.c>
void main()
{
	float temp;
	while(1)
	{
	temp=ds1820_read()   	
   	putc(temp);
   	delay_ms(1000);
	}
}



Alici.c
#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)
int deger=0;

#int_rda

void seri_data_geldi()
{
	disable_interrupts(int_rda);
	deger=getc();	
}

void main()
{
	enable_interrupts(GLOBAL);
	enable_interrupts(INT_RDA);
	while(1)
	{
		if(deger < 25)
      			{
         		output_high(pin_b0); 
         		delay_ms(100);
      			}
      
      		if(deger> 25)  
      			{
         		output_low(pin_b0);  
         		delay_ms(100); 
      			}	
	}
}

RaMu

İlk programın daha iyiydi, oradan devam et bence.
Şimdi:
float temp;
tanımlaması doğru çünkü;
      temp=ds1820_read();
ds okuma fonksiyonu float (virgüllü sayı) değer döndürür.
Ama
putc(temp);
dediğinde işler karışır,
çünkü putc() fonksiyonu float gönderemez ancak 1 byte gönderir (int8, unsigned int8 gibi.)

Forumdaki "ccsc uart rs232 float sayı gönderme" gibi kelimeleri içeren konulara bir bakın derim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

tyfrydn

Merhaba,

Bu şekilde sıcaklığı alt tabana yuvarlayarak iki Pic haberleşmesi sağlandı.ilgili codu ihtiyacı olanlar için paylaşıyorum,selamlar.

Verici.c

#include <16F877a.h>
#include <math.h>
#fuses HS,NOWDT,NOPROTECT
#use delay (clock=4000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)  
#include <ds18b20.c>
int32 tam;
void main()
{
   float temp;

   while(1)
   {
      temp=ds1820_read();
      tam=ceil(temp);
      putc(tam);
      delay_ms(1000);
   }
    
}


Alici.c

#include <16F877a.h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)  
int32 tam;
 
void main()
{
     
   while(1)
   {
      tam=getc();
 
      if(tam < 25)
      {
         output_high(pin_b0); 
         delay_ms(100);
      }
      
      if(tam> 25)  
      {
         output_low(pin_b0);  
         delay_ms(100); 
      }
   }

}