sn75176 RS485 İLE 2 TANE PİC'İ HABERLEŞTİRMEK YARDIM!!

Başlatan anti_cheist, 17 Şubat 2014, 09:03:52

anti_cheist

arkadaşlar merhaba,

projemde iki adet pic'i haberleştirerek veri alışverişi yapmam gerekiyor.bunun için öncelikle 1.picteki butona bastığımda 2.pic'deki ledi yakmam gerekiyor.Haberleşmeyi sn75176 entegresiyle RS485 yapmak en doğrusu gibi görünüyor.Ancak bir türlü ccs c de bunu çalıştıramadım

1.PİC

#include "C:\Users\admin\Desktop\projee\haberleşme deneme\18f4620.h"

#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7,enable = PIN_C5)

#define RS485_RX_BUFFER_SIZE 64
#define RS485_USE_EXT_INT FALSE

#define  RS485_ID             0x09
#define  ADAPTER_RS485_ID  0x7f
#define RS485_ENABLE_PIN      PIN_C5
#define RS485_TX_PIN       PIN_C6
#define RS485_RX_PIN       PIN_C7

#include <rs485.c>
#include <stdlib.h>


#define buton pin_A0


int x;

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF|ADC_TAD_MUL_0);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(False);

set_tris_a(0b00000001);
set_tris_b(0x00);

output_high(RS485_ENABLE_PIN);
       rs485_init();

basla:

x=input(pin_a0);

output_bit(pin_b0,x);
goto basla;

}
   // TODO: USER CODE!!





2.PİC
#include "C:\Users\admin\Desktop\projee\haberleşme deneme\buton-led deneme rs485.h"

#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7,enable = PIN_C5)

#define RS485_RX_BUFFER_SIZE 64
#define RS485_USE_EXT_INT FALSE

#define  RS485_ID             0x09
 #define  ADAPTER_RS485_ID  0x7f
#define RS485_ENABLE_PIN      PIN_C5
#define RS485_TX_PIN       PIN_C6
#define RS485_RX_PIN       PIN_C7

#include <rs485.c>
#include <stdlib.h>




void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   output_low(RS485_ENABLE_PIN);
       rs485_init();
   // TODO: USER CODE!!

}





Recep METE

Arkadaşım 1. pic verici, ikinci pic alıcı mı? Mutlaka öyledir.Alıcıdaki kodlarda eksiklik var gibime geliyor.Şimdi işteyim eve gidince örnek olabilecek kodu atacağım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

esensoy

Bu kodun çalışmadığından bahsediyor konumunda iseniz CCS üzerinde ilk adımlardan başlamanız daha doğru olacaktır,
Önce led yakın söndürün,
Sonra rs232 den pc ye bilgi gönderin,
Sonra iki pic i arada 485 entegresi (sn75176 olmadan pic1 rx --> pic2 tx, pic1 tx --> pic2 rx) olmadan haberleştirin,
En son 75176 yı ekle projeyi bitirirsiniz,
En tehlikeli an "zafer" anıdır.

anti_cheist

esensoy  hocam pek de yeni sayılmam daha önce de projeler yaptım uzun satırlar alan yardımlarınızı bekliyorum.  :( .   semfero hocam sizin de yardımlarınızı bekliyorum..

burak ozturk

hocam öncelikle merhaba siz hernekar rs485 entegreleri kullansanızda rs232 iletişim yapar gibi düşeneceksiniz . sadece fazladan enable pinine ihtiyacınız olacak o yüzden programınızdaki

#define RS485_RX_BUFFER_SIZE 64
#define RS485_USE_EXT_INT FALSE

#define  RS485_ID             0x09
#define  ADAPTER_RS485_ID  0x7f
#define RS485_ENABLE_PIN      PIN_C5
#define RS485_TX_PIN       PIN_C6
#define RS485_RX_PIN       PIN_C7

#include <rs485.c>


kısımlarına aslında ihtiyacınız yok.

sanırım basic kökenlisiniz c de sonsuz dongu kurmak için

basla:

x=input(pin_a0);

output_bit(pin_b0,x);
goto basla;


yerine

while(1)
{
..
..
..
}



ya da

for(;;)
{
...
...
...
}


tarzı döngü kullanmanız daha şık olacaktır. c de kod yazanlar go to komutunu cok tercih etmez hatta yok sayarlar.

programınız su şekilde çalışmalı , verici kısım rs232 baglantısı ile sizin belirleyeceginiz bir veri basmalı , alıcı taraf ise kesme ile datayı alıp karşılaştırmalı aynı ise ledi yakmalı. bu esnada rs485 chiplerinizin enable pinlerini rx/tx durumuna gore ayarlı ve iki picin seri iletişim hızları aynı olmalı.
happy coding.

anti_cheist

burak ozturk   hocam yardımlarınız için sağolun.  sonsuz while döngüsünü biliyorum.dediklerinizi anladım.yani;

1.picin programında butona basıldığı anda 2.pic kesme fonksiyonu devreye girecek ve led yanacak.ancak iste buna uygun yazılımı oluşturamıyorum.bir de bu program ısın mantıgını anlamak ıcın yapılıyor.aslında veri iki yönlü de olacak.asıl devre çok daha karmasık yanı.