Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Teğmen - 25 Eylül 2017, 16:39:15

Başlık: Seri Haberleşme
Gönderen: Teğmen - 25 Eylül 2017, 16:39:15
Merhaba
1 Master 2 Slave olacak şekilde rs485 ile haberleşme yapmaya çalışıyorum.
Simülasyonda slave lerin ucuna verilerin geldiğini sanal terminalden görebiliyorum.Fakat Lcd ekrana yazdıramıyorum.Sanırım farklı 2 veriyi alıp
hangisinin kendisinin olduğuna bakıp işlemesi gerekiyor.
Yardım edebilirseniz
(https://s26.postimg.cc/kzcapv0yt/Ads_z.png) (https://postimg.cc/image/kzcapv0yt/)

MASTER KODU



#include <master.h>
#include <lcd.c>
#include <rs485.c>

//////////////////////////////////////////////////LCD pin connect//////////////////////////////////////////////////////////////

#define LCD_ENABLE PIN        PIN_D0       
#define LCD_RS_PIN            PIN_D1
#define LCD_RW_PIN            PIN_D2
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)


/////////////////////////////////////////// RS-485 SETTINGS ////////////////////////////////////////////////////////////////////

#define RS485_USE_EXT_INT_FALSE
#use rs232(baud=9600,xmit=RS485_TX_PIN,rcv=RS485_RX_PIN,enable=RS485_ENABLE_PIN,bits=9,long_data,errors,stream=slave_1)
#use rs232(baud=9600,xmit=RS485_TX_PIN,rcv=RS485_RX_PIN,enable=RS485_ENABLE_PIN,bits=9,long_data,errors,stream=slave_2)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void main()
{
   set_tris_b(0x00); output_b(0x00);
   set_tris_c(0x80); output_c(0x00);
   set_tris_d(0x00); output_d(0x00);
   
   lcd_init();                        delay_us(20);
   rs485_init();                      delay_us(20);
   
   while(TRUE)
   {
     printf(lcd_putc,"\f Veri Gonderme");
     delay_ms(500);
     
     
     output_high(RS485_ENABLE_PIN);
     fprintf(slave_1,"\f Veri1=%s","Elma");  delay_us(20);
     fprintf(slave_2,"\f Veri2=%s","Armut"); delay_us(20);   
     
     
   }

}


Slave 1 Kodu

#include <slave_1.h>
#include <lcd.c>
#include <rs485.c>

//////////////////////////////////////////////////LCD pin connect//////////////////////////////////////////////////////////////

#define LCD_ENABLE PIN        PIN_D0       
#define LCD_RS_PIN            PIN_D1
#define LCD_RW_PIN            PIN_D2
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)


/////////////////////////////////////////// RS-485 SETTINGS ////////////////////////////////////////////////////////////////////

#define RS485_USE_EXT_INT_FALSE
#use rs232(baud=9600,xmit=RS485_TX_PIN,rcv=RS485_RX_PIN,enable=RS485_ENABLE_PIN,bits=9,long_data,errors,stream=slave_1)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

char x,y;


void main()
{
   set_tris_b(0x00); output_b(0x00);
   set_tris_c(0x80); output_c(0x00);
   set_tris_d(0x00); output_d(0x00);
   
   lcd_init();                        delay_us(20);
   rs485_init();                      delay_us(20);
   
   while(TRUE)
   {
     printf(lcd_putc,"\f Haberlesme");
     delay_ms(500);
     
     
     output_low(RS485_ENABLE_PIN);
     x=fgets(y,slave_1);
     printf(lcd_putc,"\f Veri Alindi  %s",x);
     delay_ms(500);
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
   }

}



Slave2 Kodu


#include <slave2.h>
#include <lcd.c>
#include <rs485.c>

//////////////////////////////////////////////////LCD pin connect//////////////////////////////////////////////////////////////

#define LCD_ENABLE PIN        PIN_D0       
#define LCD_RS_PIN            PIN_D1
#define LCD_RW_PIN            PIN_D2
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)


/////////////////////////////////////////// RS-485 SETTINGS ////////////////////////////////////////////////////////////////////

#define RS485_USE_EXT_INT_FALSE
#use rs232(baud=9600,xmit=RS485_TX_PIN,rcv=RS485_RX_PIN,enable=RS485_ENABLE_PIN,bits=9,long_data,errors,stream=slave_2)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

char y;


void main()
{
   set_tris_b(0x00); output_b(0x00);
   set_tris_c(0x80); output_c(0x00);
   set_tris_d(0x00); output_d(0x00);
   
   lcd_init();                        delay_us(20);
   rs485_init();                      delay_us(20);
   
   while(TRUE)
   {
     printf(lcd_putc,"\f Communication");
     delay_ms(500);
       
   
     output_low(RS485_ENABLE_PIN);
     fgets(y,slave_2);
     delay_us(50);
     output_high(RS485_ENABLE_PIN);
     printf(lcd_putc,"\f Veri Alindi \n%c",y);
     
     delay_ms(500);
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
   }

}


Başlık: Ynt: Seri Haberleşme
Gönderen: Teğmen - 26 Eylül 2017, 07:52:42
Bu konudan anlayan olmaması ihtimali yok diye düşünüyorum
Başlık: Ynt: Seri Haberleşme
Gönderen: dumansiz - 26 Eylül 2017, 08:26:00
Transceiver'lar nerede?
Master ve slave ID lerine dikkat ettin mi?
TX ve RX leri ters bağlamış olabilir misin?
Başlık: Ynt: Seri Haberleşme
Gönderen: Teğmen - 26 Eylül 2017, 08:30:11
@dumansiz
(https://s26.postimg.cc/d6oe64omd/Ads_z2.png) (https://postimg.cc/image/d6oe64omd/)


diğerleri kodda yazıyor master ve slave ID kısmını çok bilmiyorum ama yaptım sanırım
Başlık: Ynt: Seri Haberleşme
Gönderen: Teğmen - 26 Eylül 2017, 10:37:06
Ya çok basit bir problem aslında

atıyorum puts(':',elma );
gibi bir kod yazılmayacak mı baştaki : slave1 in adresi olacak yani onu görünce alması gerektiğini anlayacak ve alıp işleme tabi tutacak.
Başlık: Ynt: Seri Haberleşme
Gönderen: dumansiz - 26 Eylül 2017, 10:48:45
LCD lere en başta yazdırdığın;

     printf(lcd_putc,"\f Veri Gonderme");

     printf(lcd_putc,"\f Haberlesme");

     printf(lcd_putc,"\f Communication");

yazılarını LCD lerde görüyor musun?

Bir de A ile B arasına koyduğun 10K değerlerini nasıl seçtin?
Başlık: Ynt: Seri Haberleşme
Gönderen: dumansiz - 26 Eylül 2017, 10:58:06
Slave lerde kullandığın fgets() fonksiyonu ne işe yarar?
1 byte lık veri mi alır, yoksa string tarzı dizi mi alır?
Kullanımında hata yapıyor olabilir misin?
Başlık: Ynt: Seri Haberleşme
Gönderen: Teğmen - 26 Eylül 2017, 11:05:02
@dumansiz
o yazıları lcd de görüyorum
dirençlerde de sıkıntı yok tek tek haberleşme yaptığımda yapılabiliyor.
Sıkıntı şu master bir veri gönderdiğinde slavelerin hepsi bu veriyi görüyor.Sadece kendine mi gönderilmiş başkasına mı bunun taramasını yapıp ona göre işleyecek.
Bu olayı koda çeviremedim
Başlık: Ynt: Seri Haberleşme
Gönderen: dumansiz - 26 Eylül 2017, 11:31:28
"slave1.h" ve "slave2.h" dosyalarında id ler olması lazım. O dosyaları inceleyebilirsin.
Alıntı YapSıkıntı şu master bir veri gönderdiğinde slavelerin hepsi bu veriyi görüyor
Master veri gönderdiğinde bilgi tüm slavelere gider. Slaveler gelen paketteki id ye bakıp paketin kime geldiğini anlar. "rs485.c" nin içerisinde yapılıyor olması lazım.
Sanal terminalde gördüğün için, tüm slaveler bu veriyi alıp, id sini kontrol etmeden işliyor, diye düşünüyorsan yanılıyorsun.
Yok eğer slave LCD lerinde aynı şeyi görüyorsan( "elma" ve "armut") slave idleri aynı tanımlanmış olabilir.
Başlık: Ynt: Seri Haberleşme
Gönderen: Teğmen - 26 Eylül 2017, 11:38:45
@dumansiz
Sıkıntı tamda bu
ıd verme ve bunu okuma olayını yapamıyorum kodsal olarak
Başlık: Ynt: Seri Haberleşme
Gönderen: dumansiz - 26 Eylül 2017, 11:48:45
rs485.c
slave1.h
slave2.h

Bu dosyaların içerisindeki kodları siz mi yazdınız,yoksa hazır kütüphane olarak mı kullandınız?
İçlerindeki kodu buraya ekleyebiliyor musunuz?
Başlık: Ynt: Seri Haberleşme
Gönderen: kudretuzuner - 26 Eylül 2017, 11:56:38
https://www.picproje.org/index.php/topic,56452.0.html
Başlık: Ynt: Seri Haberleşme
Gönderen: Teğmen - 26 Eylül 2017, 12:10:02
@dumansiz bunları ne için soruyorsun anlayamadım .
Başlık: Ynt: Seri Haberleşme
Gönderen: kudretuzuner - 26 Eylül 2017, 12:23:07
Merhaba,
SPI hakkında tam bilgim yok fakat  slavlerden kullanmak istediğinizin SS pinini Masterde yazılımsal olarak low a çekiniz ve datayı sonra yollayınız.
Başlık: Ynt: Seri Haberleşme
Gönderen: dumansiz - 27 Eylül 2017, 08:13:52
fprintf() ve fgets() fonksiyonları,
RS485 paketini ayıklayıp mı, veriyi alıyorlar?
Yoksa, sadece usart bufferındaki bilgileri aynen alıyor mu?

Yani; RS485 protokolünü başlatıyorsun ama RS485 paket alma, paket gönderme fonksiyonlarını kullanıyor musun?
rs485.c dosyasının içinde paket alma fonksiyonu varsa onu kullan.