avatar_Bahri Bilir

Birden fazla slave Tek master ?

Başlatan Bahri Bilir, 09 Eylül 2015, 17:26:38

Bahri Bilir

#15
Ana Pano (Biraz karışık gelebilir ama oradaki tük klemenslerin şeması ve uç kısımlarının neye bağlı olduğu yazıyor)
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

Sinyal Panosu

Resimlerde de görüldüğü gibi şu anda veriler paralel olarak 40 kablo ile sağlanıyor.Ama şu an en az 70-80 bit data aktarımı ihtiyaç ki şu anda bile 40 bit için 40 kablo sıkıntılı bir durum.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

F®T

Bu sistemin çalışması nasıl resimlerden pek anlayamadım.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Bahri Bilir

#18
Mesaj uzun olmasın diye pek ayrıntıya girmedim.Genel olarak bahsedeyim.
Makinanın belli kısımlarında 5 li klemensler var.Bazı daha çok hat gerektiren kısımlarda 10 lu.Bu klemenslere karşılık olarakta ana pano olarak adlandırdığım panoda klenemsler var.Yani hem ana panoda 5. klenms var hem makinanın belli bir kısmında.Bu 5. iki klemens aralarında 5x2,5 li bir kablolyla birbirine bağlı.
Yani panodaki 5. klemensin yeşil hattına (her klamens 5 hattan oluşuyor) 12 v verdiğimde (5. klemensin makinanın halat sarıcının altındaki klemens olduğunu varsayarak) halat sarıcının altındaki 5. klemensin yeşil hattından 12 v alıyorum.

Bu sayede tüm sistem giriş ve çıkışlarını ana panoda toplamış oluyorum.Burada klamensler arası köprülerle hangi hattın verisi hangi cihazı kontrol edeceğini hangi sensörün hangi valfi kontrol edeceğini belirleyebiliyor ve tüm sistem arıza kontrollerini yapabiliyorum.

Ana panun görevi genel olarak bu kadar.

Ana pano çok fazla ve yüksek ampere sahip sinyallerle dolu olduğu için bu panoda sinyal işlemek imkansız oluyor.Yani pano tam bir elektronik gürültü yatağı.Ve ana hatların dolaştığı bir pano olduğu için nem ve tozdan korunamıyor.Hatta bazen makina basınçlı su sistemi patlayıp içine çamur doluyor.Ve çeşmeyle yıkanıyor :)

Sensör okuma,uzaktan kontrol verileri,bilgisayar sinyalleri gibi verileri sağlıklı bir şekilde işleyebileceğim olumsuz etkilerden uzak 2. bir pano oluşturdum.Bu panoyada sinyal panosu adını verdim.Ana panodaki gerekli tüm veriler lojik değerlere düşülüyor sonra sinyal panosuna gönderiliyor.Aynı şekilde sinyal panosundaki tüm gerekli veriler panodan lojik olarak çıkıyor ve ana panodaki role kartına girerek role sürüyor.Bu şekilde ana pano ve sinyal panosu arasında parelel bir veri akımı sağlanıyor.Ama bu 20-40 bit veriye kadar mümkün sayılabilecek derecedeydi.Ama resimlerde gürülen 40lı kablo şu an bile büyük sıkıntılar çıkarmaya başladı ki sistem de şu an en az 70 bitlik bir veri aktarımı ihtiyaç.Bunu için 70 li bir hat kablosu kullanmak mümkün değil.O yüzden bu paralel veri akışını seri veri iletimine dönüştürmem gerekiyor.Bu ilerdeki bir çok tasarımında önünü açıyor.örneğin direk rf modülden alınan veriler sinyal panosunda işlenip ana panoya aktarılabilecek. gibi gibi...


Ana pano resimlerinde gördüğünüz ili kalın soketli hat sinyal panosunun parelel 40 lı hattıdır.20 giriş-20 çıkış
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

F®T

Maşallah Allah kolaylık versin.işin baya zor görünüyor.Tüm kontrol edeceğin sistemleri tek panoda toplasanda tek işlemci ile sistemi kontrol etsen olmuyormu.Neticede tüm işler kamyonun üzerinde bitecek.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Bahri Bilir

#20
Önerilerin için teşekkürler F.T.
Bahsettiğiniz şekilde sistem karışıklığının önüne geçmenin daha zor olacağını düşünüyorum.Şu anda bile oldukça karışık değil mi?Ve asıl amaç hep ileriye yönelik projeler.Ki her zamanda daha da geliştirmeyi gerektiriyor.Bu makina ya çook planlarım var.Tam otomatik bir makina planlıyorum inşallah.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Mucit23

Alıntı yapılan: BİLİRSHOP - 10 Eylül 2015, 13:38:44
SPI araştırmalarım ve denemelerim sonucunda elde ettiğim sonuçlar:

SPI yı tek taraflı kullanırken memnundum.Ama çift taraflı iletişimden beklediğimden de saçma bir hal aldı.Mesela CLK ucu verici picde çıkışken alıcıda giriş yapılmalı.Ee ozaman çift taraflı iletişimde clk için 2 hat gerekiyor.DataIn Ve data Out hattı için iki hat daha etti 4.Birde senkron yakalayabilmek için ki clk ile senkron tutturamadım 2 hatta burdan yani SPI da karşılıklı iletişim için 6 hatta net verim aldım.Neyse hadi diyelim tüm bu sacmalıklara tamam dedik dünkü çalışmama ve araştırmalarıma göre bu 6 hattan aynı anda sadece 8 bit data gönderilebiliyor.

Ki eğer öyleyse bu iletişimin adı seri olsun diye altı hatla saçmalıklar yaşamaya gerek yok direk 8 hatla paralele en hızlı iletişimi sağlarım.Bir seferde 8 bit :)

Çıkardığım Sonuçlar:
1-Çift taraflı iletişim için 2 CLK hattı gerekli

2-SPI ile tek seferede max 1 bayt veri gönderilebiliyor

3-SPI ile çift taraflı iletişim için 2 clk,2 select pin ve data out ,data in pinleriyle toplam 6 adet hatta ihtiyaç var.

3-İletişim hızı olarak usart tan hat sayısına değer bir hız farkı olduğunu sanmıyorum (donanımsal ısp ile denemedim illaki daha hızlı olacaktır ama ne kadar daha hızlı)

4-SPI da qualifier kullanımı mümkün değil.

Sonuç:Yukardaki bahsettiğim 6 hatla mod 2 de güzel bir verim elde ettim.Ama yukarıda da söylediğim gibi hız olarak ölçüm yapmadım ama gözle görülür bi avantajı olduğunu sanmıyorum

Eklemem gereken bir nokta var. SPI'da Çift taraflı iletişim için sadece 1 adet clock hattı yeterlidir. Sadece 1 master ve 1 Slave için CLK, MOSI ve MISO pinlerine ihtiyaç vardır. SPI'ın güzel tarafı donanımsal olarak haberleşildiğinde aynı anda veri gönderip veri almasıdır. Yani her bir clock darbesinde bufferdeki 1 bitlik veri dışarı çıkarken 1 bitlik veride içeri alınır. Toplamda 8 clock'da 1 byte veri gitmiş 1byte veride gelmiş olur. Fakat 1 den fazla slave için, slave cihaz sayısı kadar CS pini çıkartılmalı. Slavlerde seçim işlemi yapılmalı. Bunu yazılımsal olarak da yapabilirsiniz fakat hıza etkiyecektir. Her seferinde sorgulama felan yapılması gerekir.

SPI ne kadar hızlı?

SPI yeterince hızlıdır. SPI'da haberleşme hızını slavlerin çalışma hızına kadar yükseltebilirsiniz. Genellikle master cihazlar çok yüksek frekanslarda data basabiliyor. Örneğin 74HC595 20Mhz clock frekansına kadar çalışabildiği belirtilmiş. Ben P10 Panellere 20Mhz'de veri bastım. Yani 20mbps de veri basılıyorki buda saniyede 2,5Mbyte veri anlamına gelir.

P10 içerisindeki Shift registerlerin sınırlarını zorladığımı söyleyebilirim. İstersem dahada hızı yükseltme kapasitem vardı. Ama belirli bir frekanstan sonra hattın kendi empedansından dolayı kare dalgaları bozulmaya başlıyordu. Yani sinyal kare dalgadan ziyade sinüse benzemeye başlıyor. İşte bu aşamadan sonra donanım saçmalamaya başlıyor. Güvenli çalışma bölgesini iyi tespit etmek gerek.

Bana kalırsa sizin bukadar hızlı bir sisteme ihtiyacınız yok. Birşeyleri yanlış yaptığınızı düşünüyorum.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Hattuşa

SLM arkadaşlar;
birden fazla slave ve tek masterli bir devrem mevcut, devremde 1 tane 18F4520 masterim, 5 tane 16f628a slavem mevcut, masterden gönderdiğim bilgiler slaveden alınabiliyor, yalnız slaveden mastere geri bilgi yolladığımda master bunu almıyor. yani tek taraflı 5 slave bilgileri alıyor. acaba masterin usart configrasyonu mu uymuyor diye test amaçlı devrede 1 tane slave bırakıp diğerlerini devreden çıkardığımda bilgi alış-verişi master-slave arasında gerçekleşiyor, fakat 5 tanesini birden bağladığımda slavelerden mastere neden bilgi gitmez, gitmesi için nasıl bir çözüm üretmeliyim.

ete

Bu proje bir kablolu bağlantı ilemi çalışıyor yoksa RF ilemi çalışıyor?
RF ileçalışıyor ise sorun aynı and aidğer vericilerinde açık olması sorunudur.
Kablolu çalışıyor ise çalışması gerekir. Tabiiki ne programını görebiliyoruz nede devre şemanı görebiliyoruzki yorum yapabilmek için bunları görmek gerek. Master2in RX pini doğru yerdemi yada doğru pindemi (USART kullanıyor isen) ve giriş olarak ayarlanmışmı ona bak bakalım.
Bu gibi durumlarda bir protokol ayarlanmalı. Zira bütün slave ler bilgi yolluyor ise bağlantı çorbaya döner. Sıralama yapmak gerekir.

Ete


Hattuşa

#24
hocam iki ayrı kart şeklinde ve kartlar arası kablo bağlantılı, mantık ise şu 5 adet 628a larda 12 şer adet role bağlı, master ilgili işlemcide ilgili roleyi aç diye komut yolluyor, slave olan ise komut verilen roleyi açtıktan sonra mastere "tamam roleyi açtım" veya ""roleyi kapattım" diye bilgi vermesini istiyorum. slaveler masterden gelen komutları alıyor istenilen roleyi açıyor ancak teyit için açma ve kapama bilgisini master alamıyor. ekte slavenin 1 tanesinin dosyasını ekliyorum. aynı şekilde masterin test kodunuda ekledim.

Device 16F628A
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_OFF, WDT_OFF, LVP_OFF, MCLRE_ON, INTRC_OSC_NOCLKOUT, DATA_CP_OFF
Xtal =4
Declare All_Digital TRUE
CMCON =7
TRISA =%00100000
TRISB =%00000010
PORTA =0
PORTB =0
'LEDLERIN ATANMASI
Symbol P1_R1 =PORTB.0
Symbol P1_R2 =PORTA.3
Symbol P1_R3 =PORTA.2

Symbol P2_R1 =PORTB.3
Symbol P2_R2 =PORTA.0
Symbol P2_R3 =PORTA.1

Symbol P3_R1 =PORTA.7
Symbol P3_R2 =PORTA.6
Symbol P3_R3 =PORTB.7

Symbol P4_R1 =PORTB.6
Symbol P4_R2 =PORTB.5
Symbol P4_R3 =PORTB.4

'bütün ledler çıkış olarak yönlendirildi
Output P1_R1
Output P1_R2
Output P1_R3

Output P2_R1
Output P2_R2
Output P2_R3


Output P3_R1
Output P3_R2
Output P3_R3

Output P4_R1
Output P4_R2
Output P4_R3


P1_R1 =0        'sistemi boşa alıyoruz
P1_R2 =0
P1_R3 =0

P2_R1 =0         
P2_R2 =0
P2_R3 =0

P3_R1 =0         
P3_R2 =0
P3_R3 =0

P4_R1 =0         
P4_R2 =0
P4_R3 =0

PORTA.4 =0

OPTION_REG =%10000000
Declare Hserial_Baud  = 2400      ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000  ' Bit7 SPEN: Serial Port Enable bit
Declare Hserial_TXSTA = %10100100  ' Bit5 TXEN: tx enable , Bit3 BRGH: High Baud Rate Select
Declare Hserial_Clear = On         ' Optionally clear the buffer before receiving
Declare Hserial_SPBRG =103        ' 20MHZ osilatör ve 9600 baud rate için SPBRG=129 bkz.datasheet
Declare FSR_CONTEXT_SAVE =On


Symbol RCIE = PIE1.5   ' USART Receive Interrupt Enable
Symbol TMR1IF = PIR1.0 ' TMR1 Overflow Interrupt Flag
Symbol RCIF = PIR1.5   ' USART Receive Interrupt Flag


RCIE =1


Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7  ' Global Interrupt Enable


GIE =1
PEIE =1
 
GIE =0
On_Hardware_Interrupt GoTo KeSMe


Dim dEgEr As Byte
Dim KoNum As Byte
Dim sIfrE As Byte
Dim X As Word
Dim TeMp As Byte
Dim BaKA As Bit
Dim BaKB As Bit
Dim BaKC As Bit
Dim BaKD As Bit

Dim ProBA As Byte
Dim ProBB As Byte
Dim ProBC As Byte
Dim ProBD As Byte


ProBA =1    'PROBLARIN ATAMASI BURDAN YAPILIR
ProBB =2
ProBC =3
ProBD =4
BaKA =0
BaKB =0
BaKC =0
BaKD =0
sIfrE =0
KoNum =0

GIE =1

BaSLa:
If BaKA =1 Then GoTo RolE1
If BaKB =1 Then GoTo RolE2
If BaKC =1 Then GoTo RolE3
If BaKD =1 Then GoTo RolE4
DelayMS 1000
GoTo BaSLa


'---------ROLE KONUMLARI----------
'konum 1: _________________BOSTA
       'role1 =0
       'role2 =0
       'role3 =0
'konum 2: __________________300v (A)
       'role1 =0
       'role2 =1
       'role3 =0
'konum 3: __________________300vGND (B)
       'role1 =0
       'role2 =1
       'role3 =1
'konum 4: __________________M
       'role1 =1
       'role2 =0
       'role3 =0
'konum 5: __________________N
       'role1 =1
       'role2 =1
       'role3 =0       

RolE1:
If KoNum =1 Then
       P1_R1 =0        'BOSTA
       P1_R2 =0
       P1_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       BaKA =0
       EndIf
If KoNum =2 Then
       P1_R1 =0        '300v (A)
       P1_R2 =1
       P1_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       BaKA =0
       EndIf
If KoNum =3 Then
       P1_R1 =0        '300v GND (B)
       P1_R2 =1
       P1_R3 =1
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       BaKA =0
       EndIf

If KoNum =4 Then
       P1_R1 =1        'M
       P1_R2 =0
       P1_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       BaKA =0
       EndIf
If KoNum =5 Then
       P1_R1 =1        'N
       P1_R2 =1
       P1_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBA,KoNum]
       BaKA =0
       EndIf

GoTo BaSLa

RolE2:
If KoNum =1 Then
       P2_R1 =0        'BOSTA
       P2_R2 =0
       P2_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       BaKB =0
       EndIf
If KoNum =2 Then
       P2_R1 =0        '300v (A)
       P2_R2 =1
       P2_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       BaKB =0
       EndIf
If KoNum =3 Then
       P2_R1 =0        '300v GND (B)
       P2_R2 =1
       P2_R3 =1
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       BaKB =0
       EndIf

If KoNum =4 Then
       P3_R1 =1        'M
       P3_R2 =0
       P3_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       BaKB =0
       EndIf
If KoNum =5 Then
       P2_R1 =1        'N
       P2_R2 =1
       P2_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBB,KoNum]
       BaKB =0
       EndIf


GoTo BaSLa

RolE3:
If KoNum =1 Then
       P3_R1 =0        'BOSTA
       P3_R2 =0
       P3_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       BaKC =0
       EndIf
If KoNum =2 Then
       P3_R1 =0        '300v (A)
       P3_R2 =1
       P3_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       BaKC =0
       EndIf
If KoNum =3 Then
       P3_R1 =0        '300v GND (B)
       P3_R2 =1
       P3_R3 =1
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       BaKC =0
       EndIf

If KoNum =4 Then
       P3_R1 =1        'M
       P3_R2 =0
       P3_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       BaKC =0
       EndIf
If KoNum =5 Then
       P3_R1 =1        'N
       P3_R2 =1
       P3_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBC,KoNum]
       BaKC =0
       EndIf


GoTo BaSLa

RolE4:
If KoNum =1 Then
       P4_R1 =0        'BOSTA
       P4_R2 =0
       P4_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       BaKD =0
       EndIf
If KoNum =2 Then
       P4_R1 =0        '300v (A)
       P4_R2 =1
       P4_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       BaKD =0
       EndIf
If KoNum =3 Then
       P4_R1 =0        '300v GND (B)
       P4_R2 =1
       P4_R3 =1
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       BaKD =0
       EndIf

If KoNum =4 Then
       P4_R1 =1        'M
       P4_R2 =0
       P4_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       BaKD =0
       EndIf
If KoNum =5 Then
       P4_R1 =1        'N
       P4_R2 =1
       P4_R3 =0
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       DelayMS 10
       HSerOut ["$RF",ProBD,KoNum]
       BaKD =0
       EndIf



GoTo BaSLa


KeSMe:
Context Save
HSerIn 20,ATLA,[Wait("$RF"),sIfrE ,dEgEr]
If sIfrE =ProBA Then KoNum =dEgEr  :BaKA =1
If sIfrE =ProBB Then KoNum =dEgEr  :BaKB =1
If sIfrE =ProBC Then KoNum =dEgEr  :BaKC =1
If sIfrE =ProBD Then KoNum =dEgEr  :BaKD =1
Toggle PORTA.4
ATLA:
TeMp =RCREG
Context Restore

End




Device 18F4520
Config_Start
   OSC = XT ; HS oscillator
   FCMEN = OFF ; Fail-Safe Clock Monitor disabled
   IESO = OFF ; Oscillator Switchover mode disabled
   PWRT = OFF ; PWRT disabled
   BOREN = OFF ; Brown-out Reset disabled in hardware and software
   WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit)
   MCLRE = On ; MCLR pin enabled; RE3 input pin disabled
   LPT1OSC = OFF ; Timer1 configured for higher power operation
   PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
   STVREN = OFF ; Stack full/underflow will not cause Reset
   LVP = OFF ; Single-Supply ICSP disabled
   XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
   Debug =OFF ; Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
Config_End
Xtal 4
Declare All_Digital TRUE

TRISA =%00000111
TRISB =%00011111
TRISC =%10000000
TRISD =%00000000
TRISE =%00001010
PORTA =0
PORTB =0
PORTC =0
PORTD =0
PORTE =0
DelayMS 100
A0_SeMbOL:
Symbol MeNu =PORTB.0
Symbol EnTeR =PORTB.1
Symbol EsC =PORTB.2
Symbol uP =PORTB.3
Symbol DowN =PORTB.4
Symbol InVErTER =PORTC.1
Symbol PuLsVeR=PORTE.2
Symbol A_LeD =PORTA.5
Symbol B_LeD =PORTE.0
Symbol M_LeD =PORTA.3
Symbol N_LeD =PORTA.4

Output A_LeD
Output B_LeD
Output M_LeD
Output N_LeD
Output InVErTER
Output PuLsVeR
Input MeNu
Input uP
Input DowN
Input EnTeR
Input EsC

DelayMS 500
A_LeD =0
B_LeD =0
M_LeD =0
N_LeD =1
InVErTER =0
PuLsVeR =0


DelayMS 100

Declare LCD_DTPort =PORTD
Declare LCD_ENPin =PORTB.7
Declare LCD_RWPin =PORTC.5
Declare LCD_RSPin =PORTC.2
Declare LCD_CS1Pin =PORTB.5
Declare LCD_CS2Pin =PORTB.6
Declare LCD_Type = Graphic
Declare Internal_Font = On
Declare Font_Addr =0
Declare GLCD_CS_Invert =OFF' On

Cls
DelayMS 300
A0_CoNfIg_SerIAL:
Declare Hserial_Baud  = 2400      ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000  ' Bit7 SPEN: Serial Port Enable bit
Declare Hserial_TXSTA = %10100100  ' Bit5 TXEN: tx enable , Bit3 BRGH: High Baud Rate Select
Declare Hserial_Clear = On         ' Optionally clear the buffer before receiving
Declare Hserial_SPBRG =103       ' 20MHZ osilatör ve 9600 baud rate için SPBRG=129 bkz.datasheet  8mhz =51, 4mhz =25
Declare FSR_CONTEXT_SAVE = On
DelayMS 100


Symbol RCIE = PIE1.5   ' USART Receive Interrupt Enable
Symbol RCIF = PIR1.5   ' USART Receive Interrupt Flag


RCIE =1

DelayMS 100

A0_cOnfIg_aDc:
CMCON =7
ADCON0 =%00000001
ADCON1 =%00001100 '3 kanal secildi
ADCON2 =%10000000
Declare Adin_Res =10             ' 10-bit result required
Declare Adin_Tad =FRC           ' RC OSC chosen
Declare Adin_Stime  =50            ' Allow 50us sample time





A0_coNfIg_InTErruPt:
INTCON2.7 =0       'portb_pulluplar aktif

Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7    ' Global Interrupt Enable
PEIE =1
GIE =0

On_Hardware_Interrupt GoTo Z_KeSMe



A1_dEgIsKeNLeR:
Dim TeMp As Byte
Dim sIfRE As Byte
Dim KoNuM As Byte     :KoNuM =1
Dim DeGeR As Byte
Dim PrOb As Byte      :PrOb =1
Dim bAk As Bit        :bAk =0
Dim MeNum As Byte     :MeNum =1
Dim LeDbAk As Bit     :LeDbAk =1

Print At 1,1," TEST KODU    "
Print At 2,3,"PROB :"
Print At 3,3,"KONUM:"
Print At 4,3,"300V :"
Print At 5,3,"1 HZ :"
Print At 6,1,"AKIM:"
DelayMS 100

GIE =1
TeSTMaIn:

If MeNu =0 Then
   While MeNu =0 :Wend
   MeNum =MeNum +1
   If MeNum >4 Then MeNum =1
   LeDbAk =1
   EndIf
If MeNum =1 Then
   Print At 2,1,">"
   Print At 5,1," "
   EndIf
If MeNum =2 Then
   Print At 3,1,">"
   Print At 2,1," "
   EndIf
If MeNum =3 Then
   Print At 4,1,">"
   Print At 3,1," "
   EndIf
If MeNum =4 Then
   Print At 5,1,">"
   Print At 4,1," "
   EndIf


If LeDbAk =1 Then
   LeDbAk =0
   A_LeD =0
   B_LeD =0
   M_LeD =0
   N_LeD =0
   EndIf
If uP =0 Then
   While uP =0 :Wend
   If MeNum =1 Then
      PrOb =PrOb +1
      If PrOb >20 Then PrOb =20
      EndIf
   If MeNum =2 Then
      KoNuM =KoNuM +1
      If KoNuM >5 Then KoNuM =5
      EndIf
   If MeNum =3 Then InVErTER =1
   If MeNum =4 Then PuLsVeR =1
   
EndIf

If DowN =0 Then
   While DowN =0 :Wend
   If MeNum =1 Then
      PrOb =PrOb -1
      If PrOb <1 Then PrOb =1
      EndIf
   If MeNum =2 Then
      KoNuM =KoNuM -1
      If KoNuM <1 Then KoNuM =1
      EndIf
   If MeNum =3 Then InVErTER =0
   If MeNum =4 Then PuLsVeR =0
EndIf

If KoNuM =1 Then Print At 3,9,"BOSTA"
If KoNuM =2 Then Print At 3,9,"A    "
If KoNuM =3 Then Print At 3,9,"B    "
If KoNuM =4 Then Print At 3,9,"M    "
If KoNuM =5 Then Print At 3,9,"N    "
If InVErTER =0 Then
   Print At 4,9,"OFF"
   Else
   Print At 4,9,"ON "
   EndIf
If PuLsVeR =0 Then
   Print At 5,9,"OFF"
   Else
   Print At 5,9,"ON "
   EndIf
Print At 2,9,Dec PrOb," " 

If EnTeR =0 Then
   While EnTeR =0 :Wend     
   HSerOut ["$RF",PrOb,KoNuM] 
   HSerOut ["$RF",PrOb,KoNuM] 
   HSerOut ["$RF",PrOb,KoNuM]
   EndIf
     
If bAk =1 Then
   bAk =0
   If KoNuM =2 Then A_LeD =1
   If KoNuM =3 Then B_LeD =1
   If KoNuM =4 Then M_LeD =1
   If KoNuM =5 Then N_LeD =1
   EndIf

GoTo TeSTMaIn



Z_KeSMe:
Context Save
Toggle A_LeD
HSerIn 20,ATLA,[Wait("$","R","F"),sIfRE ,DeGeR]
If sIfRE =PrOb Then KoNuM =DeGeR  :bAk =1
A_LeD =1

ATLA:
TeMp =RCREG
Context Restore

End
Include "FONT.INC"   



EDIT :ETE hocam son cümleniz benim çözüm noktam;
Alıntı YapBu gibi durumlarda bir protokol ayarlanmalı. Zira bütün slave ler bilgi yolluyor ise bağlantı çorbaya döner. Sıralama yapmak gerekir.

isisde USART sinyallerini görüyorum. sanırım bir protokol oluşturmak gerekiyor. Ancak bunu mantıken çözemedim. burda nasıl bir mantık kurmalıyım ki slavelerin cevapları masterin kafasını karıştırmasın.

ete

Aşağıdaki linkte bu konu ile ilgili bir detaylı uygulama yapmış idik. Oradaki protokole bir göz at istersen.
Master'in her şeyi kontrol etmesi gerekir. Örneği incelersen anlarsın.

http://etepic.com/index.php/topic,57.0.html

Diğer taraftan  aşağıdaki değerlerde de bir uyumsuzluk var gibi.
Declare Hserial_TXSTA = %10100100       
Declare Hserial_SPBRG =103

TXSTA değeri , 00100100 ($24) olarak verilmesi gerekir.
Yine SPBRG değeri ise 129 olarak verilmesi gerekirdi.

Ete

Hattuşa

Alıntı yapılan: ete - 11 Nisan 2016, 13:02:57
Aşağıdaki linkte bu konu ile ilgili bir detaylı uygulama yapmış idik. Oradaki protokole bir göz at istersen.
Master'in her şeyi kontrol etmesi gerekir. Örneği incelersen anlarsın.

http://etepic.com/index.php/topic,57.0.html

Diğer taraftan  aşağıdaki değerlerde de bir uyumsuzluk var gibi.
Declare Hserial_TXSTA = %10100100       
Declare Hserial_SPBRG =103

TXSTA değeri , 00100100 ($24) olarak verilmesi gerekir.
Yine SPBRG değeri ise 129 olarak verilmesi gerekirdi.

Ete


tamam hocam verdiğiniz bilgileri bir inceleyeyim, cevap için tşk ederim

Hattuşa

ETE hocam; slave olan 628A ları tek tek deniyorum çalışıyor yani hangi salavenin TX girişini mastere bağlarsam ordan gelen bilgiyi masterden okuyabiliyorum. ancak 2 veya daha fazla slavenin TX ini mastere bağladığımda data gelmiyor. özellikle masterin içerisinde  USART interruptunun başında  bir ledi toggle ediyorum ne var ki led yanmıyor yani usart kesmesine girmiyor. bir yerde hata yapıyorum ya nerede bilemiyorum. hatalıda olsa usart kesmesine girmesi gerekmiyor mu? bu arada verdiğiniz linki okudum.

ete

Bu sorun bana kalırsa protokol eksikliği. Bilgi kime gidecek ise o almalı. Diğerleri es geçmeli.
Bu tür sorunları bulmak için sürekli çalıştırıp davranışına göre gerekli yerlere bakmak gerekir. değilse bu şekilde ben programlara bakarım onlar bana. Zor bulmak.

Ete

Hattuşa

ETE hocam yukarıdaki şema uygulamasını yaptım. masterin TX i slavelerin RX ine bağlı, masterin Rx i de slavelerin TX ine bağlı arada hiç bir malzeme koymadım. sizin uygulamanızda max485 mevcut acaba sorunu bundan mı kaynaklı? slavelerin TX leri birleşince master bişey alamıyor. hatta usart kesmesi dahi oluşmuyor. skoptan bakıyorum diğerleri de bilgi yollayıp masterin interruptunu mu bozuyor die düşündüm ama komut yollamadığım slaveler kesinlikle bilgi yollamıyor. işin kötüsü kartı bastım slavelerin bulunduğu kart 50 cm x25 cm, böylesi bir hata varsa marmara çırası gibi yandım ben  ;D  ;D  ;D

Powered by EzPortal