W

Pic to Pic Rs485 - 1 Master 2 slave

Başlatan worldwideweb, 07 Şubat 2014, 06:06:12

worldwideweb

Merhaba,  Günlerden beri bu proje yüzünden çıldırıcam, Gerçekten 4 günden beri sabahlara kadar çözmeye kaynak aramaya çalışıyorum ama bir türlü beceremedim şu işi. RS232 ile çalışıyor fakat rs485 ile çalışmıyor.

Master ile veri gönderiyorum, Master veriyi sorunsuz gönderiyor. Slave ulaşıyor fakat Slave veriyi işlemiyor. Kaç kere programı baştan yazdım bir ben birde Allah biliyor. Hani yapmak istediğim basit bir şey. Buton veriyi gönderiyorum, slaveden ledi  yakmak istiyorum ama olmuyor. Veri gidiyor(virtual-terminalde) verinin gittiğini görüyorum. RX ayağına led bağladığımda, ledin yanıp sönmesi slave'nin bilgiyi aldığını gösteriyor.

İnternetten araştırmaya başladım. ve her çeşit kodu denedim. Farklı farklı kodlarla veri gönderdim fakat slave bu veriyi işlemedi. Yardımcı olursanız sevinirim.  Sadece ufak bir koda ihtiyacım var( rs485 veriyi al-getc,getch,rs485gect, rs485 get message, gets, getchar) bir 2 tane daha denemiştim fakat bir türlü işletemedim. Kodlar aşşağıda.

denemediğim yol kalmadı, yardımcı olursanız çok ama çok sevinirim.


Master(verici)
#include <16f877a.h>
#fuses XT,NOBROWNOUT,NOPUT,NODEBUG,NOWDT,NOWRT,NOPROTECT,NOCPD,NOLvP
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=9)
#define use_portb_lcd TRUE
#include <rs485.c>
#include <lcd.c>
#define TX PIN_C6   // Data gonderme pini
#define RX PIN_C7   // data alma pini
#define ENABLE PIN_C5   // Control Pini  RX low, TX high. Olursa Data gonderır, TX low, RX high, Control pinide low olursa daha alır
#define RS485_ID  0x10


// Programın ana ayarları //


void main()
{



// KULLANICAĞIM PORTLARIN, GİRİŞ ÇIKIŞ AYARI//
set_tris_a(0xFF);  // bütün pinler giriş yapıldı 1111 1111
set_tris_b(0x00);  // bütün pinler çıkış yapıldı 0000 0000

//GONDERME AYARI//
output_low(TX); // TX PİNİ low OLARAK AYARLANDI
output_low(RX); // RX PİNİ LOW OLARAK AYARLANDI
output_high(ENABLE); // ENABLE PİNİ HİGH OLARAK AYARLANDI
delay_ms(50);

//rs485 ve lcd start ayarı//
rs485_init();
delay_ms(20);
lcd_init(); // lcd'yi çalıştır
printf(lcd_putc,"RS485 VERICI");
//printf("\rRS485 VERICI");
delay_ms(1000);
fputs("X",RS485);
delay_ms(50);
fputs("Y",RS485);
delay_ms(1000);

//yapılacak işlemler//
while(1)  //sonsuza kadar devam et
{
if(input(pin_a0))  // buton 0 a basılırsa
{
printf(lcd_putc,"\fLED YAKMA KOMUTU\nGONDERILDI");
delay_ms(50);
putc('X'); //Kanal bilgisi yollandı
delay_us(50);
putc('Y');// yakma kodu yollandı
delay_ms(50);
delay_ms(1000);
}
if(input(pin_a1)) // buton 1 e basılırsa
{
putc('X'); // kanal bilgisi yollandı
delay_us(50);
putc('S'); // sondurme kodu yollandı
printf(lcd_putc,"\fLED SONDURME KOMUTU\nGONDERILDI");
delay_ms(50);
}


}




#include <16f877a.h>
#fuses XT,NOBROWNOUT,NOPUT,NODEBUG,NOWDT,NOWRT,NOPROTECT,NOCPD,NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=9)
#define use_portd_lcd TRUE
#include <rs485.c>
#include <lcd.c>
#define led PIN_B0
#define TX PIN_C6   // Data gonderme pini
#define RX PIN_C7   // data alma pini
#define ENABLE PIN_C5   // Control Pini  RX low, TX high. Olursa Data gonderır, TX low, RX high, Control pinide low olursa daha alır
#define RS485_ID  0x01


char veri;

char data[10];

void main()
{
// rs485 data almaya ayarlandı//

//giris-çıkış komutları//
set_tris_b(0x00);
set_tris_d(0x00);
set_tris_c(0x00);
output_b(0x00);


output_high(RX);
output_low(TX);
output_low(ENABLE);
delay_ms(75);

//rs485 ve lcd calıstırma komutları verildi//
rs485_init(); // rs485 calıstırıldı
delay_ms(50);
lcd_init(); // lcd calıstırıldı
printf(lcd_putc,"rs485-ALICI");
delay_ms(1000);


while(1)
{

if(fgetc()=='X')
{
veri=getch();
delay_ms(10);
}
if(veri=="Y")
{
output_high(led);
delay_ms(20);
printf(lcd_putc,"\fYak Verisi alındı\n   LED YANDI!!");
}
if(veri=='S')

{
output_low(led);
delay_ms(20);
printf(lcd_putc,"Son Verisi alındı\n   LED SONDU!!");
}
}
}



//  output_high(RS485_ENABLE_PIN);    //veri aktarımı var
// output_high(RS485_TX_PIN);   //'pic452 den max485'e veri gönderme izni iptal
// output_low(RS485_RX_PIN);    //'com dan max485'e veri gönderme izni verildi
//fgets(data,RS485);

Powered by EzPortal