iki pic haberleşme rs485 yardım

Başlatan hmg, 06 Şubat 2008, 12:01:03

hmg

16f876 a 1 adet analog değer okuyorum 10 bit olarak bu değeri 50-100 metre arası mesafeki ikinci bir 16 f876 a gönderip bu değeri 2 digit olarak 7 segmentte göstermek istiyorum. analog değeri okuyup 2 digit 7 segmentte değeri gördüm ama haberleşme ile bilgim ve uygulamam olmadı.bu mesafe için rs 485 uygun diye duydum ama emin deilim.
yardımız olursa tşk.

Logan

RS485 300 m'ye kadar sorunsuz veri iletebiliyor. Projenizde problem yaratacağını zannetmiyorum. Bilgiyi seri olarak gönderir, karşı tarafta da alır ve işlersiniz.
İmza.

ete

RS232 çıkışını bir RS485 entegresine verdinmi mesafen yaklaşık 1200 metre ye kadar uzayabilir. Her hangi bir sorun olacağını sanmıyorum. Karşı tarafta yine RS485 hattından gelen bilgiyi bu sefer aynı entegreyi kullanarak RS232 ye çevirmen gerek.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mucitotomasyon

75176 VEYA DS 481 VEYA MAX481 VEYA DİYECEM YETER DİGERLERİNİ İLERLEYEN ZAMANLAR BAHSEDERİM

Veli B.

2 digit ile gosterecekseniz ve amaciniz sadece degeri gostermek ise neden 10 bit ornekleme aliyorsunuz. Size 7 bit dahi yeterli...

hmg

sn75176 kullanarak rs 485 haberleşmesi yaptığımda iki pic kullanacağım için
iki tane 75176 mı kullanacağım yoksa 1 adet yeterlimi.?ayrıca 10 bit bilgi gönderebilirmiyom bu entegre ile ?

ete

75176 bir çevirici entegredir. Yani RS232 yi 485'e çevirebildiği gibi 485 ide 232 ye çevirir. Bu durumda bir tarafta 232 yi 485'e çevirdin. Diğer tarafta tekrar 232 ye çevirmez isen bu bilgiyi kullanamazsın. Dolayısıyla her iki tarafta birer tane kullanmak zorundasın.

Gönderilecek bitlerle bu entegrenin bir alakası yok. Sen sistemini RS232 ile çalışıyormuş gibi düşüneceksin. BU durumda gerekirse 10 bitlik bilgiyi 2 bayt halinde göndermen gerekecek.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

hmg

ilk önce aydınlattığın için tşk. ete kardeş.
analog değeri okuyan,alan entegreye aşağıdaki proğramı yazdım ,doğrumu tam bilmiyorum?

#include <16f876.h>
#device ADC=6
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
int1 timer_flag=0;
#INT_TIMER2
void timer2_isr() {
  timer_flag=1;}
int value;

void main() {
setup_port_a(ALL_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel( 0 );
setup_timer_2(T2_DIV_BY_4, 250,10) ;
enable_interrupts(int_timer2);
enable_interrupts(global);

while( TRUE )
 {
   if(timer_flag)
     {
      value=read_adc();
      putc(value);
      timer_flag=0;
     }
 }

}
 
---- bu bilgiyi yüz metre ileride alan entegreye aşağıdakini yazdım?(analog değeri iki digit 7 segmentte göstermek için )

#include <16f876.h>
#use delay(clock=4000000) // Gecikme fonksiyonu için kullanılan
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
#use fast_io(a) // Port yönlendirme komutları a portu için geçerli
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli
char birler=0, onlar=0, sayi=0;      
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};

int value;

void main ()
{
set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
  set_tris_c(0x00);
  output_b(0x00);
 output_b(0x3F);
   output_c(0x3F);
while(1)
 {
 if(kbhit())
   {
    value=getc();
    sayi=value;
              birler=sayi%10;          // birler hanesi hesaplanıyor
              onlar=sayi/10;
              output_c(digit[birler]); // displaye bilgi gönderiliyor
              output_b(digit[onlar]);  // displaye bilgi gönderiliyor
        delay_ms(500);

   }
 }
}

ete

CCS den anlamam o yüzden bilen birisi cevaplasın lütfen.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

hmg

arkadaşlar yazdığım kodlara yorum yapan olmadı. ayrıca 75176 nın bacak bağlantılarını nasıl yapılacağını bilen varsa.şimdiden tşk.

sarikayamusa



MAX485 te ve SN75176 da şekilde görüldüğü gibi RE ve DE enable uçlarını kısa devre ediyorsun. TX-RX pic'e A ve B uçları ise diğer max485in a ve besine gidiyor. Fakat dikkat etmen gereken, sonlandırma direçnlerini ihmal etmemen 120R uygundur.
Saygılar

hmg

Musa kardeş cevabın için sağol. re-de kısa devre yapıp pic in bacağına verilmiş şekilde. bunu ccs de nasıl göstereriz. yani kısa devre yapılan bacağın içeriği kod da belirtilecekmi?
ayrıca bilen bir arkadaş varsa 876 entegresinden diğer bir 876 ya 0-yada 1 yani 1 bitlik bilgiyi gönderen ve alan c kod örneği gönderirse çok memnun olcam. çünkü mantığı anlamaya çalışıyorum.

sarikayamusa

Hayır hiç gerek yok RE ve DE pinini picten 1 yaptıgında Gönderme Enable, 0 yaptıgında ise Alma Enable olur. İşte buna göre veri alırken ve alırken ayarlama yapacaksın amaç zaten alma ve göndermelerin karışmaması yani aynı anda gönderim ve alım yapılmamasıdır.

Lojik 1 yada 0 gönderme: Karakter olarak gönderebilirsin putc('1'); ile ve bunuda karsıdan, gelen=getch(); ile alırsın kolay bişey yani.