Sn7576bp Usart Haberleşme

Başlatan M82Robotik, 02 Ekim 2014, 17:21:01

M82Robotik

Arkadaşlar şimdiden ilgilenenlere teşekkür ederim. Rs485 haberleşme sistemini çok araştırdım. Fakat pic konusunda yeni olduğum için bi türlü anlayamadım. Yaptığım devrede tek taraflı veriyi gönderdim. Fakat işin içine geri bildirim girince ortalık karıştı. sistemdee 2 adet 16f877 pic var. Benim istediğim. Master pici veriyi gonderdikten sonra Slavede veriyi alıp işleyip tekrar mastera göndermeli
ve master bu geri bildirim geldikten sonra gerekli ledi yakmalı.

USART ile  16f877 ve sn7576bp entegresi bağlantıları nasıl olacak ?
sn7576bp de köprülediğimiz bacakları high low yapılacak mı ?
Sistemin algoritma mantığını çözebilmem için basit pbp kodu yazarsanız sevinirim.

OG

Kolay yöntem;
75176 ların pin 2 ve 3 ü birleştirilir.
Bu pinler H yapılırsa 75176 TX pozisyonuna gecer.
Bu pinler L yapılırsa 75176 RX pozisyonuna gecer.

Ünite enerjilendiği gibi bu pini LOW yapmalıdır ki TX konumuna geçip hatta var olması muhtemel bir haberleşmeyi bozmasın.

MCU nun çıkış olabilen bir pini bu TX/RX kontrolu için kullanılır. Sistem enerjilendiği anda vakit gecirmeden bu pin LOW olmalıdır.

Bunun en hızlı yöntemini şu şekilde buldum. Diyelimki bu kontrol için PORTB.0 ı kullanacağım. Programın delarationundan hemen sonra yani diğer tanımlamalara bile geçmeden önce

PORTB = %xxxxxxx0     ''' x ler işe göre atanır , PORTB.0 ın low yapılması durumu
TRISB =  %yyyyyyy0      ''' y ler işe göre atanır , PORTB.0 ın çıkış yapılması durumu
PORTB = %xxxxxxx0     ''' x ler işe göre atanır , PORTB.0 ın low yapılması durumu

Bu şekilde yapıldığında enerjilenen MCU ilgili pini çok hızlı LOW yapıyor.

Sonra haberleşme için gereken RX ve TX uçlarının belirlenmesi.

Haberleşme yazılımsal olacaksa (hız sınırı donanımsala göre çok daha aşağıdadır ve haberleşme komutu anında MCU başka işlem yapamaz;
Komutu Serin / Serout veya Serin2/Serout2 dir. Serin2/Serout2 daha kullanışlıdır.
TX pin seçimi çıkış olarak atanabilen herhangi bir pin,
RX pin seçimi giriş olarak atanabilen herhangi bir pin,

Haberleşme donanımsal (usart ile) olacaksa (Hızı oldukça yüksektir ve haberleşme için yazılımsal beklemelerle uğraşmazsınız, gelen ve gidenin tespiti donanımsal kesme ile algılanabilir);
Komutu HSERIN - HSEROUT dur.
TX pin seçimi MCU'nun TX pini,
RX pin seçimi MCU'nun RX pini,

Bunlarda belirlendikten sonra
75176'nın pin 1 i (RX ucu) , MCU nun RX pinine
75176'nın pin 4 i (TX ucu) , MCU nun TX pinine  bağlanır.
75176'nın pin 2/3 ü belirlemiştik PORTB.0 a bağlı

---
algoritma ana çatısı.
Her ünitenin bir ID si  (kimlik bilgisi) var. 1..40 a diyelim. Ana ünitenin kimliğide 0 olsun.
Açılış pin2/3 LOW , RS485 hat dinleme konumunda.

Gelen ve buna cevap verilecek olan bir durum oluştu ise
veya
gidecek olan bir durum var ise
PORTB.0 --> H yapılıp bilgi RS 485 hattına basılır hemen PORTB.0 --> L yapılıp dinleme pozisyonu alınır.

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

M82Robotik

Alıntı YapHaberleşme donanımsal (usart ile) olacaksa (Hızı oldukça yüksektir ve haberleşme için yazılımsal beklemelerle uğraşmazsınız, gelen ve gidenin tespiti donanımsal kesme ile algılanabilir);
Komutu HSERIN - HSEROUT dur.
TX pin seçimi MCU'nun TX pini,
RX pin seçimi MCU'nun RX pini,

USART KULLANIRKEN RX TX PİNLERİNİ PORT TANIMLARKEN GİRİŞ VE ÇIKIŞ OLARAK MI YAZACAĞIZ ?

OG

USART modulun bağlı olduğu pinlerde RX giriş,  TX çıkış, USART açınca zaten TX pini çıkış, RX pini giriş oluyor diye hatırlıyorum ama siz TRIS registerinede yazın.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

M82Robotik

hocam bi türlü haberleştiremedim 2 pici kafayı yiyecem. Hiç bir tepki yok piclerde .Bağlantılar düzgün.

Master pic

@ DEVICE pic16F877a
@ DEVICE pic16F877a, WDT_OFF
@ DEVICE pic16F877a, PWRT_ON
@ DEVICE pic16F877a, PROTECT_OFF
@ DEVICE pic16F877a, HS_OSC


define OSC 20
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 129 ' 9600 Baud @ 0.16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically



ON INTERRUPT GOTO KESME
ADCON1=7


PORTA=0:TRISA=0
PORTB=0:TRISB=%11000000
PORTC=0:TRISC=%00000000
PORTD=0:TRISD=%00000000
PORTE=0:TRISE=%00000000

SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
SYMBOL GIRIS=PORTC.7
SYMBOL CIKIS=PORTC.6
SYMBOL ONAY=PORTD.3
SYMBOL BUTON1=PORTB.7
SYMBOL BUTON2=PORTB.6
symbol LED1=PORTC.4
symbol LED2=PORTC.5

MOT1 VAR BYTE
LED  VAR BYTE
ALDI VAR BYTE
TEMP VAR BYTE

RCIE=1
PEIE=1
GIE=1
ALDI=0
MOT1=0
onay=0
LED=0

PAUSE 200
'----------------------------------------------------------------
'----------------------------------------------------------------
'------------------- ANAKONTROL---------------------------
BASLA:
IF BUTON1=1 THEN  GOSUB MOT1DON
IF ALDI=1 THEN GOSUB LEDYAK
GOTO BASLA
'----------------------------------------------------------------

LEDYAK:

IF LED=1 THEN
LOW LED2
HIGH LED1
ENDIF
IF LED=2 THEN
HIGH LED2
ALDI=0
ENDIF
RETURN
'----------------------------------------------------------------

MOT1DON:

MOT1=66
ONAY=1
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
HSEROUT ["E","T","E",MOT1,10,13]
HSEROUT ["E","T","E",MOT1,10,13]
ONAY=0
RETURN
'----------------------------------------------------------------

DISABLE
KESME:
GIE=0
HSERIN ,5,ATLA, [WAIT("ETE"),LED]
ALDI=1

ATLA:
GIE=1
TEMP=RCREG
RCIF=0
RESUME
ENABLE

END



Slave pic:::

@ DEVICE pic16F877a
@ DEVICE pic16F877a, WDT_OFF
@ DEVICE pic16F877a, PWRT_ON
@ DEVICE pic16F877a, PROTECT_OFF
@ DEVICE pic16F877a, HS_OSC


define OSC 20
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 129 ' 9600 Baud @ 0.16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


ON INTERRUPT GOTO KESME
ADCON1=7
PORTA=0:TRISA=0
PORTB=0:TRISB=%00000000
PORTC=0:TRISC=%00000000
PORTD=0:TRISD=%00000000
PORTE=0:TRISE=%00000010

SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
SYMBOL GIRIS=PORTC.7
SYMBOL CIKIS=PORTC.6
SYMBOL ONAY=PORTD.3
SYMBOL M1DON=PORTB.7
SYMBOL AKIMIPTAL=PORTB.6
SYMBOL AKIM=PORTE.1
SYMBOL YAK=PORTB.4
MOT1 VAR BYTE
LED VAR BYTE
ALDI VAR BYTE
TEMP VAR BYTE

RCIE=1
PEIE=1
GIE=1
ONAY=0
MOT1=0
LED=0
ALDI=1

PAUSE 200
'----------------------------------------------------------------
'----------------------------------------------------------------
'-------------------- ANADÖNGÜ-----------------------------------
BASLA:

IF ALDI=1 THEN GOSUB ISLE
IF ALDI=0 THEN
HIGH YAK
ENDIF


GOTO BASLA
'----------------------------------------------------------------
'----------------------------------------------------------------
'-----------------------------------------------------------------
ISLE:
IF MOT1=66 THEN GOTO MOT1DON
LOW YAK
RETURN
'----------------------------------------------------------------

MOT1DON:
M1DON=1
LED=1
onay=1
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
HSEROUT ["E","T","E",LED,10,13]
HSEROUT ["E","T","E",LED,10,13]
onay=0
IF  AKIM=1 THEN GOTO MUHURLEME
GOTO MOT1DON

'----------------------------------------------------------------



MUHURLEME:
M1DON=0
AKIMIPTAL=1
PAUSE 300
AKIMIPTAL=0
LED=2
ONAY=1
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
HSEROUT ["E","T","E",LED,10,13]
HSEROUT ["E","T","E",LED,10,13]
ONAY=0
ALDI=0
goto basla

'----------------------------------------------------------------
'----------------------------------------------------------------
'----------------------------------------------------------------
DISABLE
KESME:
GIE=0
HSERIN ,5,ATLA, [WAIT("ETE"),MOT1]
ALDI=1

ATLA:
GIE=1
TEMP=RCREG
RCIF=0
RESUME
ENABLE

end



OG

isis de dahil kodları dosya haline getirip biryere yükleyin bakalım.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

M82Robotik

#6
Hocam şema ve program içindedir. İsis de  devreyi görmeniz için çizdim. Similasyon kısmı çalışmayabilir.Motor zorlandığı zaman eksi hattındaki role çekiyor. Diğer rolede tristörü iletimini kesmek için. (Daha basit yöntemler varsa yapabilirim.Picle kesebileceğim.) Bütük bi ihtimalle PBPdeki Tanımlamaları yapamadım gibi hocam. Saygılar

http://www.dosya.tc/server35/JsKVxh/v3.rar.html

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

M82Robotik

UJT akımı ölçen taş direncin tetiklemesiyle iletime geçip roleyi çektiriyor.