RS485 haberleşmesi ilgili öneriler ve sorunlar

Başlatan mhk, 22 Mart 2005, 12:36:38

mhk

Sevgili dostlar.RS485 haberleşmesi ile başım belada. Bir yere sıramatik
benzeri bir sistem kurdum. 1 master,27 adet slave cihaz var. slavelerin
12 adeti el terminali, 12 adet kapı üzerindeki displayler ve 12
göstergeli ( herbir gösterge 0-99 rakamlarını gösteriyor)iki  büyük iki
küçük pano.Sorun şu. slaveler masterden gelen verileri tam alamıyor.
Bazen alıyor bazen alamıyor. Veri alamadığında belirli bir süre sonra
kapatma özelliği var. Dolayısıyla veri alamadığında displayler
sönüyor.Sistemin çalışma mantığı ise şöyle, Master el terminallerine
kendi adreslerini yolluyor ve onlardan üzerindeki bilgileri
topluyor.Tüm veri toplama işlemi bittikten sonra yine RS485 hattından
slavelere bu bilgileri gönderiyor. Sistemi kurmadan önce kendi
atölyemizde sorunsuz çalıştı , lakin yerine kurduğumuzda sorunlarla
uğraşıyoruz. Kullandığım RS485 entegresi max485.Kullanılan hat ise
telefon kablosu.Birde Master ve slavelerden birine toplam ikisine bias
dirençleri taktım. Yani +5V tan 560 ohm direnci A ucuna, GND den 560
ohm direncide B ucuna taktım. Sanırım bu dirençler gürültüyü azaltmak
için kullanılıyor.Tabi 120 ohm luk sonlandırıcı dirençleride taktım.Ben
taktığım 560 ohm luk bias dirençlerinden şüpheleniyorum nasip olursa bu
gün onları deneyeceğim. Sizlerden bu soruna önerilerinizi bekliyorum.
Birde RS232 donanım kesmesi kullanarak sıralı veri almayı yapan
arkadaşlar varsa ( örneğin adres gönderip arkasından o adresle ilgili
verileri toplayan)yardımcı olursanız sevinirim. Kullandığım dil pic basic pro ve serin serout komutları ile haberleşme sağlanıyor.İyi çalışmalar.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

arslan74

Merhaba,

Bende bu mantığa benzer bir sistem yapmıştım. Ama sistem Rf ile haberleşiyordu. Ama haberleşme tek yönlü calışıyordu. kumandanın 64 bit seri nosu ve 8 bit data gönderme özeliği vardı. Alıcıyı istediğin kadar artırabiliyordun. Ancak Seri nosu vericiyle aynı olan alıcılar cıkış veriyordu.

Sende bu böyle bir sistem ekleye bilirsin. Displayler tek yönlü calışacağı için bilgi göndermeyi rf ile daha iyi yaparsın. Hem bu sayede kablo derdinden kurtulmuş olursun. Çünkü bu sistemin en zahmetli yani kablo hattını döşemektir.  El terminalleri Ana üniteye yakın olduğu için fazla sorun cıkartmaz. Onları Rs485 ile haberleştirebilirsin.

Calışmalarında Başarılar,

Hasan ARSLAN

Erol YILMAZ

Kullandiginiz hiza yakin iletisim saglayabilen bir RS485 entegresi kullanip deneseniz sonuc alabilirsiniz. 115 -250 ve 500 kBps lik entegreler var.
Mbit lik entegreler le anlasamiyor olabilirsiniz- ki oyle birseye benziyor.

kesmez

rs485 iletiminde kullanılan kablolar 220 volt taşıyan kablolardan çok etkileniyor kendim böyle bir durum yaşadım.. mümkünse 220 kablolarıyla paralel  döşeme eğer döşersen haberleşme kablonu ekranla.. bir noktadan veya birkaç noktadan toprağa ve şasiye bağla..
"İnned dine indallahil İslam" (2-19)

mhk

Cevap yazanlara çok teşekkür ediyorum. Öncelikle haberleşme hızı 250 bps değil sadece 2400 bps, Yani sorun çıkmasın diye bu kadar düşürdüm. Diğer bir husus el terminalleri 16f628 ile yapılmış ve internal osc kullandım.( 4 Mhz. ) master ve diğer küçük slave panolar, 16f877 ve 20 Mhz( Kristal ile ) . Dün 8 test için 8 adet el terminalini yan yana koyup hattın değişik noktalarından testlerimizi yaptık. Gayet güzel çalıştı. Bugün el terminalllerini yerlerine taktık ve olan oldu. Sistem sapıtmaya başladı. Saç baş yolduracak düzeye geldi. Sorunun nereden kaynaklandığını bulmak o kadar zorki bu konuda yardımcı olacak arkadaşlar varsa sevineceğim ve hayır duaları edeceğim  :)  Sorunları yazayım isterseniz; Pic basic pro kullanıyorum. her bir el terminaline bir adres verdim. Örneğin 1.el terminali 181 ikinci 182 vs gibi. Master ilk önce 181 verisini RS485 hattına gönderiyor. sonra bekliyor.( Sadece seri haberleşme alma donanım kesmesi kullandım, göndermeyi yapamadım lakin gönderirken RS485 entegresi enable ucunun aktif olması gerekli.) el terminali kendisine gelen adres doğruysa üzerindeki veriyi hatta gönderiyor. Bu arada diğer küçük slave panolar , master'ın gönderdiği adresi ve sonra el terminalinin verisini birleştirip ilgili satıra yazıyor. Sistem çalıştı lakin el terminallerini devreye soktuğumuzda sapıtmaya başladı. Dün sağlam olarak denediğimiz el terminallerinin bilgilerini master panoda göremediğimiz gibi bilgilerde kaybolmalar. Gidip gelmeler ve hatta farklı aptal aptal değerler gördük. Sorunun ne olduğu konusunda kafam allak bullak oldu. Bu arada slavler bilgiyi alamadığında , üzerindeki bilgiler siliniyor ve bir daha görünmüyor. Mesela kapı üstüne yaptığım bir uygulamada ( 16f628 ile yapılmış ve internal 4 mhz osc kullanılmış ) enerjisini kesip yeniden verdiğimizde doğru bilgilyi gösteriyor. Yani bir yerde kilitlenip kalıyor. Bana MAX 485 entegre kullanarak donanım haberleşmesini ve protokolün nasıl olacağı konusunda yada ilgili hat ile neler yapabileceğim konusunda yardımcı olabilirseniz çok sevienceğim. Bu arada yaptığım projenin tüm programlarını aşağıya yazıyorum. Uzun yazdığım için kusura bakmayın. Lakin bu durum beni üzdü. Şimdiden yardımcı olacak arkadaşlara teşekkür ederim.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mhk

'EL TERMİNALİ PROGRAMI
'işlemci 16F628
@ device pwrt_on & MCLR_OFF
@ device INTRC_OSC_NOCLKOUT
@ device WDT_OFF
@ device protect_on & cpd_on
'PCON=%00000000
cmcon=7
TRISA = %11100000
TRISB = %00000010
porta=0
portb=0        
DEFINE HSER_CLROERR 1
'******** GİRİŞ ÇIKIŞ TANIMLAMALARI ********
'******** GİRİŞLER **********
TXDATA  var portb.2
RXDATA  var portb.1
RE var portb.0
DE var portb.3

butarti  var porta.5
buteksi  var porta.6
butrst  var porta.7

'******** ÇIKIŞLAR ***********
disp10 var portb
disp1 var porta
'************** Değişken tanımlamaları **********
dispdeg1 var byte
dispdeg10 var byte
dvm01   var byte
dvm02   var byte
verial var byte
verigonder var byte
adres1 var byte

'******** DEĞİŞKEN İLK DEĞERLER ************
dispdeg1=0:dispdeg10=0
verial=0
verigonder=0
RE=0
DE=0
adres1=181

'****************** İNTERRUPT TANIMI **********************
PIR1 = %00100000      ' Set PORTA analog and right justify result
PIE1 = %00100000      ' Set PORTA analog and right justify result

SPBRG= 25      ' Set baud rate to 2400 for 4 MHZ osc

TXSTA= %00000000   ' Enable transmit and asynchronous mode BRGH=0 yavaş
RCSTA= %10010000   ' Enable serial port and continuous receive
INTCON=%11000000
'option_reg=0
on interrupt goto kesme        

'///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
'///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
basla:
verigonder=dispdeg10*10+dispdeg1
if dvm01=1 then gecdvm01
if butarti=0 then artirma

gecdvm01:
if butarti=1 then dvm01=0

if dvm02=1 then gecdvm02
if buteksi=0 then azaltma

gecdvm02:
if buteksi=1 then dvm02=0


if  butrst=0 then  resetle

goto basla      
'*********** ARTIRMA ALT PROGRAMI ***********
artirma:
dvm01=1
dispdeg1=dispdeg1+1
   if dispdeg1>9 then dispdeg10=dispdeg10+1:dispdeg1=0
           if dispdeg10>9 then dispdeg10=0:dispdeg1=0
gosub displaygoster
goto basla


'*********** AZALTMA ALT PROGRAMI ***********
azaltma:
dvm02=1
dispdeg1=dispdeg1-1
   if dispdeg1>9 then dispdeg10=dispdeg10-1:dispdeg1=9
           if dispdeg10>9 then dispdeg10=0:dispdeg1=0
gosub displaygoster
goto basla

'*********** RESETLEME ALT PROGRAMI ***********
resetle:
dispdeg1=0:dispdeg10=0
gosub displaygoster

goto basla
'**********************************************************
'***************** KESME ALT PROGRAMI *********************
disable
kesme:
verial=RCREG

if verial=adres1 then
   pause 5
   RCSTA=0:RE=1 : DE=1
       serout2 TXDATA,396,[verigonder]
   RE = 0: DE=0: RCSTA=%10010000
endif
verial=0

resume

'*********** Buton kontrol alt programı ********
'************ DİSPLAY GÖSTERİM ALT PROGRAMI ********
displaygoster:
dispdeg10=dispdeg10<<4
disp10=dispdeg10
disp1=dispdeg1
dispdeg10=dispdeg10>>4

return
End
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mhk

'KAPI GÖSTERGE PROGRAMI
'İşlemci 16F628
@ device pwrt_on & MCLR_OFF
@ device INTRC_OSC
@ device WDT_OFF
@ device protect_on & cpd_on
DEFINE HSER_CLROERR 1
cmcon=7
TRISA =%11110000      ' PORTA çıkış
TRISB =%00001110   ' PORTB giriş
'************* GİRİŞ ÇIKIŞ TANIMLAMALARI ************
'******** GİRİŞLER **********

RXDATA  var portb.1

'******** ÇIKIŞLAR ***********

dispA var porta.0
dispB var porta.1
dispC var porta.2
dispD var porta.3
dispE var portb.4
dispF var portb.5
dispG var portb.6
chip1 var portb.7
chip2 var portb.0

gosub sifir
'********************* Değişken tanımlamaları **********
dispdeg1  var byte
dispdeg10 var byte
verial var byte
veri var byte
sayi var byte
timeout var byte
RSverial var byte
gecik var byte
verisira var byte
adres1  var byte
'******** DEĞİŞKEN İLK DEĞERLER ************

dispdeg1=0:dispdeg10=0
verial=0
veri=0
sayi=0
chip1=0
chip2=0
timeout=0
rsverial=0
verisira=0

adres1=181
'****************** İNTERRUPT TANIMI **********************
PIR1 = %00100000      ' Set PORTA analog and right justify result
PIE1 = %00100000      ' Set PORTA analog and right justify result

SPBRG= 25      ' Set baud rate to 2400 for 4 MHZ osc

TXSTA= %00000000   ' Enable transmit and asynchronous mode BRGH=0 yavaş
RCSTA= %10010000   ' Enable serial port and continuous receive
INTCON=%11000000
on interrupt goto kesme
'///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
'///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
basla:

timeout=timeout+1
   if timeout>200 then timeout=0:verial=0

gosub gecikme

dispdeg1=verial dig 0
dispdeg10=verial dig 1

if verial=0 then gosub sifir:goto basla


veri=dispdeg1:gosub kodcoz:chip1=1:chip1=0
veri=dispdeg10:gosub kodcoz:chip2=1:chip2=0

goto basla

'**********************************************************
'***************** KESME ALT PROGRAMI *********************
disable
kesme:
RSverial=RCREG  

   if verisira=1 then
       verial=RSverial:verisira=0
       if verial>99 then verial=0:goto gecal
       timeout=0
   endif

if RSverial=adres1 then verisira=1

gecal:
RSverial=0

resume

'************ KOD CÖZME ALT PROGRAMI ***********
kodcoz:
if veri=0 then
   dispA=1:dispB=1:dispC=1
   dispD=1:dispE=1:dispF=1:dispG=0
endif

if veri=1 then
   dispA=0:dispB=1:dispC=1
   dispD=0:dispE=0:dispF=0:dispG=0
endif

if veri=2 then  
   dispA=1:dispB=1:dispC=0
   dispD=1:dispE=1:dispF=0:dispG=1
endif

if veri=3 then  
   dispA=1:dispB=1:dispC=1
   dispD=1:dispE=0:dispF=0:dispG=1
endif

if veri=4 then
   dispA=0:dispB=1:dispC=1
   dispD=0:dispE=0:dispF=1:dispG=1
endif

if veri=5 then  
   dispA=1:dispB=0:dispC=1
   dispD=1:dispE=0:dispF=1:dispG=1
endif

if veri=6 then  
   dispA=1:dispB=0:dispC=1
   dispD=1:dispE=1:dispF=1:dispG=1
endif

if veri=7 then  
   dispA=1:dispB=1:dispC=1
   dispD=0:dispE=0:dispF=1:dispG=0
endif

if veri=8 then  
   dispA=1:dispB=1:dispC=1
   dispD=1:dispE=1:dispF=1:dispG=1
endif

if veri=9 then  
   dispA=1:dispB=1:dispC=1
   dispD=1:dispE=0:dispF=1:dispG=1
endif
return

'**********************************************
gecikme:
for gecik=0 to 20
pause 1
next
return
'**********************************************
sifir:

   dispA=0:dispB=0:dispC=0:dispD=0:dispE=0:dispF=0:dispG=0
   chip1=1:chip2=1
   chip1=0:chip2=0

return

End
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mhk

'MAİN PROGRAMI
' İşlemci 16F877 20 Mhz kristal
define osc 20
@ device HS_OSC
@ device WDT_OFF & protect_on & cpd_on &  pwrt_off & bod_off
PCON=%00000000
TRISA = %00000000      ' Set PORTA to all input
TRISB = %00000000          ' PORTB nin tüm bitlerini giriş ve çıkış olarak ayarla
TRISC = %10000000      ' PORTC nin tüm bitlerini çıkış olarak ayarla
TRISD = %00000000      ' PORTC nin tüm bitlerini çıkış olarak ayarla
TRISE =0      ' PORTC nin tüm bitlerini çıkış olarak ayarla

      ADCON1 =7 '%10000100      ' Set PORTA analog and right justify result
porta=0:portb=0:portc=%00001000:portd=0:porte=0
DEFINE HSER_CLROERR 1
pause 5000
'*************** PORT TANIMLAMALARI *****************

TXDATA  var portc.6
RXDATA  var portc.7
RE      var portc.4
DE      var portc.5
chip154  var porte.2
chipsec var portb
datagos var portd
gong    var portc.3
'************* DEĞİŞKEN TANIMLAMALARI I *************

veri var byte
sayi var byte
RSverial var byte
verial var byte[12]
adresal var byte[12]
slave var byte[12]
blinkbitti var byte[12]
blinkzam var byte[12]
blink var byte[12]
timeout var byte[12]
dispveri var byte[12]
yeniveri var byte[12]

blinksin var byte
verigonder var byte
x var byte
verisira var byte
gecik var byte
index var byte
adres1 var byte
'zaman var byte
sayac var byte[12]

DE=0
RE=0
gong=1
'************* DEĞİŞKEN İLK DEĞERLERİ  **************
chip154=1
chipsec=0
veri=0
sayi=0
adresal=0
verisira=0
verigonder=0
adres1=0
sayac=0
'yeniveri=0

for x=0 to 12
   verial
  • =0:adresal
  • =0:slave
  • =0:blinkbitti
  • =1
       blinkzam
  • =0:blink
  • =0:timeout
  • =0:dispveri
  • =0
       yeniveri
  • =0:sayac
  • =0
    next

     
    pause 200
    chip154=0
    chipsec=15

    gosub blinkgoster
    chip154=0
    chipsec=15

    '****************** İNTERRUPT TANIMI **********************
    PIR1 = %00100000      ' Set PORTA analog and right justify result
    PIE1 = %00100000      ' Set PORTA analog and right justify result

    SPBRG= 129      ' Set baud rate to 2400 for 20 MHZ osc
    TXSTA= %00000000   ' Enable transmit and asynchronous mode BRGH=0 yavaş
    RCSTA= %10010000   ' Enable serial port and continuous receive
    INTCON=%11000000

    on interrupt goto kesme        

    '///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
    '///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
    basla:

    for index=0 to 11
           RCSTA=0:RE=1 : DE=1
           adres1=index+181
           serout2 TXDATA,396,[adres1]
           RE=0 : DE=0
           RCSTA=%10010000
           gosub gecikme

           if adresal[index]=adres1 then
               if verial[index]>yeniveri[index] then blink[index]=1:blinkbitti[index]=0:blinkzam[index]=0:gong=0
                           yeniveri[index]=verial[index]
                           veri=yeniveri[index]':verial[index]=0
                           gosub kodcoz
                               dispveri[index]=sayi
                                      if blink[index]=1 then datagos=%11111111:goto dvm01
                           datagos=255:datagos=dispveri[index]
               dvm01:
                           chipsec=index:pauseus 1000:chipsec=15:pauseus 1000

           
                       if blinkbitti[index]=1 then bit01
                           blinkzam[index]=blinkzam[index]+1
                              sayac[index]=sayac[index]+1
                              if sayac[index]=1 then blink[index]=1
                              if sayac[index]=>2 then blink[index]=0:sayac[index]=0

                           if blinkzam[index]=>20 then blink[index]=0:blinkzam[index]=0:blinkbitti[index]=1
               bit01:
         
           endif

    timeout[index]=timeout[index]+1
    if timeout[index]>20 then verial[index]=0:timeout[index]=0:dispveri[index]=0:datagos=255':yeniveri=0
    '       zaman=zaman+1:if zaman>11 then zaman=0
           
    next



         gong=1
         

    chipsec=15
    goto basla
    '**********************************************************
    '***************** KESME ALT PROGRAMI *********************
    disable
    kesme:
    datagos=255
    chipsec=15
    RSverial=RCREG
       verial[index]=RSverial:adresal[index]=adres1
       timeout[index]=0
    RSverial=0

    'RCSTA.4=0
    'RCSTA.4=1

    resume

    '************** BCD KOD ÇÖZME ALT PROGRAMI ***********
    kodcoz:
    '************ 0   1  2 3  4  5  6   7   8   9 10 11 12 13 14 15 16 17  18  19 20 21 22 23 24 25  26  27 28 29 30 31 32 33 34 35 36  37  38 39 40 41 42 43 44 45 46  47  48  49 50 51 52 53 54 55 56   57 58  59 60 61 62 63 64 65  66 67  68  69 70 71 72 73 74 75 76  77  78  79 80 81 82 83 84 85 86  87  88  89 90 91 92 93 94 95 96  97  98  99
    LOOKUP veri,[255,16,32,48,64,80,96,112,128,144,1,17,33,49,65,81,97,113,129,145,2,18,34,50,66,82,98,114,130,146,3,19,35,51,67,83,99,115,131,147,4,20,36,52,68,84,100,116,132,148,5,21,37,53,69,85,101,117,133,149,6,22,38,54,70,86,102,118,134,150,7,23,39,55,71,87,103,119,135,151,8,24,40,56,72,88,104,120,136,152,9,25,41,57,73,89,105,121,137,153],sayi
    if veri>99 then veri=0:sayi=255
    return

    '*********** BLİNK YAPMA ALT PROGRAMI ********
    blinkgoster:

    for chipsec=0 to 12
    datagos=%11111111
    pause 30
    next

    for chipsec=0 to 12
    datagos=%10001000:pause 300
    next

    for chipsec=0 to 12
    datagos=%11111111:pause 300
    next
    return

    '********* GECİKME ALT PROGRAMI **************
    gecikme:
    for gecik=0 to 50
    pause 1

    next

    return



    End
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mhk

'SLAVE KÜÇÜK PANOLAR
' İşlemci 16F877 20 Mhz kristal
define osc 20
@ device HS_OSC
@ device WDT_OFF & protect_on & cpd_on &  pwrt_off & bod_off
PCON=%00000000
TRISA = %00000000      ' Set PORTA to all input
TRISB = %00000000          ' PORTB nin tüm bitlerini giriş ve çıkış olarak ayarla
TRISC = %10000000      ' PORTC nin tüm bitlerini çıkış olarak ayarla
TRISD = %00000000      ' PORTC nin tüm bitlerini çıkış olarak ayarla
TRISE =0      ' PORTC nin tüm bitlerini çıkış olarak ayarla

      ADCON1 =7 '%10000100      ' Set PORTA analog and right justify result
porta=0:portb=0:portc=%00001000:portd=0:porte=0
DEFINE HSER_CLROERR 1
pause 5000
'*************** PORT TANIMLAMALARI *****************

TXDATA  var portc.6
RXDATA  var portc.7
DE      var portc.5
chip154  var porte.2
chipsec var portb
datagos var portd
gong    var portc.3
'************* DEĞİŞKEN TANIMLAMALARI I *************

veri var byte
sayi var byte
RSverial var byte
verial var byte[12]
adresal var byte[12]
slave var byte[12]
blinkbitti var byte[12]
blinkzam var byte[12]
blink var byte[12]
timeout var byte[12]
dispveri var byte[12]
yeniveri var byte[12]

blinksin var byte
verigonder var byte
x var byte
verisira var byte
gecik var byte
index var byte
adres1 var byte
'zaman var byte
sayac var byte[12]
verialyed var byte[12]
indexal var byte
adrestara var byte
deger var byte

DE=0
gong=1
'************* DEĞİŞKEN İLK DEĞERLERİ  **************
chip154=1
chipsec=0
veri=0
sayi=0
adresal=0
verisira=0
verigonder=0
adres1=0
sayac=0
indexal=0
deger=0

for x=0 to 12
   verial
  • =0:adresal
  • =0:slave
  • =0:blinkbitti
  • =1
       blinkzam
  • =0:blink
  • =0:timeout
  • =0:dispveri
  • =0
       yeniveri
  • =0:sayac
  • =0:verialyed
  • =0
    next

     
    pause 200
    chip154=0
    chipsec=15

    gosub blinkgoster
    chip154=0
    chipsec=15

    '****************** İNTERRUPT TANIMI **********************
    kesmeayarla:

    PIR1 = %00100000      ' Set PORTA analog and right justify result
    PIE1 = %00100000      ' Set PORTA analog and right justify result

    SPBRG= 129      ' Set baud rate to 2400 for 20 MHZ osc
    TXSTA= %00000000   ' Enable transmit and asynchronous mode BRGH=0 yavaş
    RCSTA= %10010000   ' Enable serial port and continuous receive
    INTCON=%11000000

    on interrupt goto kesme        

    '///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
    '///////////////// ANA PROGRAM \\\\\\\\\\\\\\\\\
    basla:
    for index=0 to 11
        adres1=index+181
          gosub gecikme

     '      if adresal[index]=adres1 then
               if verial[index]>yeniveri[index] then blink[index]=1:blinkbitti[index]=0:blinkzam[index]=0:gong=0
                           yeniveri[index]=verial[index]
                           veri=yeniveri[index]
                           gosub kodcoz
                               dispveri[index]=sayi
                                      if blink[index]=1 then datagos=%11111111:goto dvm01
                           datagos=255:datagos=dispveri[index]
               dvm01:
                           chipsec=index:pauseus 1000:chipsec=15:pauseus 1000

           
                       if blinkbitti[index]=1 then bit01
                           blinkzam[index]=blinkzam[index]+1
                              sayac[index]=sayac[index]+1
                              if sayac[index]=1 then blink[index]=1
                              if sayac[index]=>2 then blink[index]=0:sayac[index]=0

                           if blinkzam[index]=>20 then blink[index]=0:blinkzam[index]=0:blinkbitti[index]=1
               bit01:
         
    '        endif

    timeout[index]=timeout[index]+1

    if timeout[index]>20 then
           verial[index]=0:timeout[index]=0:dispveri[index]=0:datagos=255
    endif
    '       zaman=zaman+1:if zaman>11 then zaman=0
           
    next



         gong=1
         

    chipsec=15
    goto basla
    'goto kesmeayarla

    '**********************************************************
    '***************** KESME ALT PROGRAMI *********************
    disable
    kesme:
    datagos=255
    chipsec=15

    RSverial=RCREG

    if verisira=1 then  verial[0]=RSverial:timeout[0]=0:verisira=0
    if verisira=2 then  verial[1]=RSverial:timeout[1]=0:verisira=0
    if verisira=3 then  verial[2]=RSverial:timeout[2]=0:verisira=0
    if verisira=4 then  verial[3]=RSverial:timeout[3]=0:verisira=0
    if verisira=5 then  verial[4]=RSverial:timeout[4]=0:verisira=0
    if verisira=6 then  verial[5]=RSverial:timeout[5]=0:verisira=0
    if verisira=7 then  verial[6]=RSverial:timeout[6]=0:verisira=0
    if verisira=8 then  verial[7]=RSverial:timeout[7]=0:verisira=0
    if verisira=9 then  verial[8]=RSverial:timeout[8]=0:verisira=0
    if verisira=10 then  verial[9]=RSverial:timeout[9]=0:verisira=0
    if verisira=11 then  verial[10]=RSverial:timeout[10]=0:verisira=0
    if verisira=12 then  verial[11]=RSverial:timeout[11]=0:verisira=0
    verisira=0

    if RSverial=181 then verisira=1
    if RSverial=182 then verisira=2
    if RSverial=183 then verisira=3
    if RSverial=184 then verisira=4
    if RSverial=185 then verisira=5
    if RSverial=186 then verisira=6
    if RSverial=187 then verisira=7
    if RSverial=188 then verisira=8
    if RSverial=189 then verisira=9
    if RSverial=190 then verisira=10
    if RSverial=191 then verisira=11
    if RSverial=192 then verisira=12

    'RSverial=0

    'RCSTA.4=0
    'RCSTA.4=1

    resume

    '************** BCD KOD ÇÖZME ALT PROGRAMI ***********
    kodcoz:
    '************ 0   1  2 3  4  5  6   7   8   9 10 11 12 13 14 15 16 17  18  19 20 21 22 23 24 25  26  27 28 29 30 31 32 33 34 35 36  37  38 39 40 41 42 43 44 45 46  47  48  49 50 51 52 53 54 55 56   57 58  59 60 61 62 63 64 65  66 67  68  69 70 71 72 73 74 75 76  77  78  79 80 81 82 83 84 85 86  87  88  89 90 91 92 93 94 95 96  97  98  99
    LOOKUP veri,[255,16,32,48,64,80,96,112,128,144,1,17,33,49,65,81,97,113,129,145,2,18,34,50,66,82,98,114,130,146,3,19,35,51,67,83,99,115,131,147,4,20,36,52,68,84,100,116,132,148,5,21,37,53,69,85,101,117,133,149,6,22,38,54,70,86,102,118,134,150,7,23,39,55,71,87,103,119,135,151,8,24,40,56,72,88,104,120,136,152,9,25,41,57,73,89,105,121,137,153],sayi
    if veri>99 then veri=0:sayi=255
    return

    '*********** BLİNK YAPMA ALT PROGRAMI ********
    blinkgoster:
    for chipsec=0 to 12
    datagos=%11111111
    pause 30
    next

    for chipsec=0 to 12
    datagos=%10001000:pause 300
    next

    for chipsec=0 to 12
    datagos=%11111111:pause 300
    next
    return

    '********* GECİKME ALT PROGRAMI **************
    gecikme:
    for gecik=0 to 50
    pause 1

    next

    return



    End
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mhk

Sevgili arkadaşlar. Çok uzun olduğunu biliyorum kusura bakmayın burada DE ve RE tanımlamaları MAX 485 kontrol uçları.Diğerleri bağlı olan lojik entegrelerin kontrol uçları vs. Hepinize iyi çalışmalar.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mhk

Bu arada el terminalleri ve kapı üst göstergeleri 16F628 ler internal osc ile çalışıyor. Diğerleri 16F877 20 Mhz osc ile. Bu bir sorun teşkil edermi Bilmiyorum lakin dışarıda denediğimizde çalıştı.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

arslan74

Merhaba mhk,

Ben daha önceleri bu işin kurulmunda calışıyordum. Bir cok Ziraat Bankası'nın SıraMatik sistemerini kurdum. Ziraat bankasının sistemleri Nemoq diye bir isvec firmasından geliyordu. Adamlar bu sıra verme işini ilk yapan kişiler, Q-Matic şirketinde Nemo-Q şirektinden ayrılan personelin kurduğu bir şirkettir. Yani adamlar bu işte bir numarlar.

Sözün özüne gelirsem, sistemin elektronik devre şemasını incelediğimde RS485 ile haberleştirmemişler. TLP ile başlayan lojik çıkış veren optokupler kullanmışlar. Entegrenin tam numarası şimdi aklımda değil. El terminalleri ve göstergeler için iki ayrı cıkış var. bu cıkışları içinde TLP seri entegrelerin olduğu hup tarzındaki karta bağlaniyordu. El panellerinide bu karta bağlıyorduk. Göstergelerde ayrı bir cıkıştan böyle hup ile bağlanıyordu. RS485 sadece printer ile haberleşmede kullanılıyordu.
Sistem gayet güzel ve sorunsuz calışıyordu.

Sende haberleşme sistemini lojik yada normal optokopler ile yaparsan daha sağlıklı ve sorunsuz haberleştirebilirsin.

Calışmalarında başarılar,

Hasan ARSLAN

Erol YILMAZ

Hızı 250 bps ye dusurdum diyorsun ya. benim aklıma PIC in parazit almasi geliyor. Yani senden bagımsız sinyal almasi sonucu yanlış sayılar üretebilir.
RS485 in bir tarafından sürekli olarak 10101010 gönder mesela.
Alıcı taraftan da incele sinyali duzgun geliyor mu gelmiyor mu diye...
problemi sıkıştırman lazım :)
Kolay Gelsin...

sarikayamusa

Merhabalar,

   
Sunlara dikkat et derim:

 --> Hat kablolarının saglamlıgı cok onemli.Kopukluk,eziklik vs cok onemli. (Bence buyuk ihtimal sorun bundan). Ve kabloların devre ye baglantısı onemli.Bence klasik yontem olan lehim kullan.Saglam olsun.Cunku hatta en ufak bir empedans farklılıgı digerlerini de etkiliyor..Ve mümkünse kablo topolojisi,Ring olsun,yani master ve slave hat baglantısı ard arda baglansın.
      Yine olmazsa şu sonlandırma direnclerini kaldır! (Mantıksız ama bizde calıstı!)
      Birde,max 485 entegrelerinin RE ve DE enable uclarını gonderirken ,alırken duruma gore aktif veya  pasif yapmayı heralde biliyosundur demeye gerek yok sanırım...

     Umarım faydası olur yazdıklarımın, Ve sorunu cozersin.Ozellikle atolyede calısıp ta sahada calısmıyorsa demekki sahanın yapısından ve kablolarından kaynaklanıyor demekki...!
    Elektronik böyle işte naparsın. Sac bas yoldurur adama ama guzel meslektir...
    Allah yardımcın olsun...............................

Ziya

rs485 için twisted pair kablo kullanman gerekir. Bildiğim kadarıyla telefon kabloları birbirine dolanmamış paralel giden kablolar.  Twisted pairde kablo üzerine gelen gürültü her iki bakır uca eşit dağıldığı için sinyal kaybını azaltır.

628in dahili osilatörleri çok hassas olmadığı için ve masterin hızı çok yüksek olmadığı için belki sorun oluşturabilir. Master bilgi gönderirken iki gönderme arasına delay koy. Garanti olması açısından pina5 (MCLR) yi Vcc ye dirençle çek. Zaten sadece input olabiliyor. Sorun teşkil etmez.

Son olarak mikrokontrolorlerin Vcc ve toprağı arasına 100nF lık kondansatör koyduğundan emin ol. (aslında bunu ilk sırada yazmam gerekirdi) Dahili eeprom ve seri haberleşmelerde derde devadır.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey