[İlk Endüstriyel Uygulamam] Uzun Mesafe Dc Akım , Bol Bol Motor

Başlatan M82Robotik, 30 Eylül 2014, 06:28:25

M82Robotik

Öncelikle merhaba . Ben konyadan metin. 18 yaşındayım. aranıza bugün yeni katıldım. Pic anlamında daha yeni sayılırım ve bu uygulama benim ilk endüstriyel projem olacak.Piyasadaki elektronik elemanlara tam anlamıyla hakim değilim.Sizin de tavsiyelerinizi almak istedim. 

Öncelikle sistemi kısaca anlatacak olursak 30 adet 24 volt redüktörlü ,enkoderli dc motor var elimizde.
bizden istenen bu motorların buton aracılığıyla saga ve sola 90 derece açı oluşturacak şekilde dönmesi.motor sağa ve sola 90 derece döndüğü zaman motor mili metale yaslanıyor  böylece kapak açılıyor veya kapanıyor.
Bizim asıl sıkıntımız mesafe. motorlar 10arlı olarak 3 grup şeklinde bağlanacak ve her grup arasında  yaklaşık 20şer metre var. 10 motor yan yana dizildiği zaman 44 metre mesafeye ulaşıyor. motorlar arası 4 metre.Basit bir çizim yaptım. daha iyi anlamanız için.

[IMG]http://i.imgur.com/5hFZN5G.gif[/img]

çizimdede görüldüğü gibi küçük panolardan onundeki motorları yönetecek bi sistem düşündüm. çünki 24 v dc akımı ne kadar az mesafe de taşırsak bizim için o kadar avantajlı oldugunu öğrendim.

Bu sistemi çalıştırmak için ilk olarak pic 16f876 ile enkoderden(a ve b olarak iki çıkışı var, çizgili) okuma yaptım .
Sadece A çıkışındaki pulsleri sayarak l298p ile sürerek istediğim değerde döndürdüm. Fakat hem elektrik kesintileri olabileceği ihtimalini göz önüne getirince hem puls kaçırabileceği ihtimali hem de  saçma sapan nedenlerden dolayı 3 tane motor sürücü yakınca sağlıklı olacağını düşünmedim.

Limit swicthde kablo metrajı artacağı için mantıklı gelmedi.
Son olarak akım okuyarak bu işi yapmak da karar kıldım. Hem kablodan kazanacağım hemde motor pozisyonunu tam net programsal bileceğim.Bi devre buldum bunun için . Roleyle bilgi alabilirim.piclere



Bundan 10arlı motorlara 1 adet yapmayı düşünüyorum.
küçük panolara ayrı ayrı devreler yapacağız. Ana panodan butona basıldığı anda pic sinyal alacak küçük panolardaki pici uyaracak. picde roleleri çektirerek. motorları sürecek. Motor metal kısma yaslandığı zaman fazla amper çekecek ve anında elektronik sigorta motora giden voltajı kesecek.Ana panodan teker teker motorlar döndürülecek.Motorun konumuna görede ana panoda kapalı veya açık motor su anda diye led veya başka daha uygun ışık kaynağı varsa yancak.
İsiste ve pbp de bir çalışmada yaptım[ekte].Irfz44n mosfet ilede motorları sürmeyi denedim ama bi türlü çalıştıramadım. 1 kaçda mosfet yaktım :).Programı pic basicde yazmayı düşünüyorum.

Sistemde değişik düzenlemeler yapılabilir maliyeti düşürücü mantıklı sağlıklı fikirler doğrultusunda. Burda sizin tavsiyeleriniz ve tecrübeleriniz benim için çok önemli.40 defa ölç 1 defa biç demişler.Ve aklıma takılan 1 kaç soru var.



1-) 4 panoda ayrı ayrı dc hattan mı beslenmek zorunda ? Çünki 3 veya daha fazla pic kullanılacak. Bunlar birbiriyle haberleştirileceği için bir sorun yaratırmı ?

2-)Bildiğim kadarıyla en çok 40 pinli picler var ?16f877 kullanmayı düşünüyorum Buna göre 4 den fazla Pic kullanılacak illaki. Bu picler ve  roleler oluşturulan devrede gürültü yaratmaz mı ? Nasıl bir filtreleme gerekir ?

3-) Sağlıklı bir enerji iletimi için kaçlık kablo gerekir ? (Motor normalde 0.70 Amper Kilitlendiğinde 3.5 Amper çekiyor)

4-) İsiste devreyi bi türlü çalıştıramadım . Hatalar veriyor benim bilgisayarımda.

Teşekkürler.




Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

M82Robotik

Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

ete

İşin boyutu çok büyük. Şahsen ben el atmaya çekindim. Tamamen profesyonellerin halletmesi gereken bir proje olarak görüyorum. Zira proje , çok fazla bilgi birikimini gerektiriyor. Bende o bilgiler var diyorsan mesele yok yolun açık olsun.
Ama sorularına bakınca bilgi eksikliğin ortaya çıkıyor. Yinede bilgim oranında cevaplamaya çalışayım.

Ayrı yerlerde bulunan kontrol panoları elbette ayrı besleme kaynaklarından beslenmesi gerekir. Her birinin kendi beslemesi kendi içinde olmalıdır. Haberleşmede bu sorun yaratmaz.

Picler gürültü yaratmaz gürültüden etkilenirler. Bu etkilenmeyide sürekli reset atarak gösterirler genellikle. Ortamda yer alan bir sürü röle mutlaka sorun yaratacaktır. Ama tam izolasyon (galiba adına galvanik izolasyon deniliyor) yapılması gerekecek (opto Coupler izolasyonu). Mümkün olduğunca röle yerine SSR (Solid State Relay) kullanılması işini kolaylaştıracaktır.
Mikro işlemcileri ve gerekirse röleleri mutlaka Switch tip regülatörlerle beslemelisin.

Kabloların mm2 sinin ne kadar akım çektiği bir yerlerde yazıyor olması gerekir. ben olsam 1 lik kablodan aşağı kullanmazdım. Ama yinede mesafe bu işte etkin rol oynar. 44 m de kablonun direncini hesaplamak gerekir.

İsis in verdiği hataları bilmeden yorum yapmak imkansız.

Ete

M82Robotik

anladım hocam.
Galvanik izalasyon mu yoksa optik izalasyon mu gerekli ?
Bide motorları sürmek için panosonic
https://www.jameco.com/Jameco/Products/ProdDS/843260.pdf

bu roleyi düşünüyorum. Datasheetine baktım fakat içinde parazit önleyici diyot varmı yokmu anlayamadım .Sizce uygunmudur ?
Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

ete

Bu kadar kapsamlı bir proje yapmadım ve bu nedenle izolasyon türüne karar vermem zor. Önce kolayını yap sorun çıkarsa diğerine geçersen. Bildiğim tek şey izolasyon gerektiğidir.

Bahsi geçen röle bu işe uygun değil galiba bak emke isimli arkadaş ne söylemiş;
"arkadaşlar iyi günler hepinize sorunu en sonunda çözdüm tamamen rölelerin kalitesizliğimi desem ne desem bulamıyorum dicek birşey bulamıyorum kullandığımkız röleler panasonıc aldp112w-5a serisi 12vdc rölelerdi yerine kontak akımı daha kuvvetli ve marka olarak dandik bir röle taktık ve sorun ortadan kalktı."

Daha güçlü röleler kullanmalısın. Çift sıra kontak yerine tek sıra kullan ama kontaklar güçlü olsun.

Ete

M82Robotik

Öncelikle teşekkürler hocam.

bi sıkıntım var.

SN75176bp entegresi ile haberleşme sağladım iki pic arasında. Masterdan bilgi yolladım slavedan aldım. Fakat Slave ulaşan bilgi gerekli pın değişimlerini yaptıktan sonra ben bunları yaptım diye Efendiye(master) bilgi gönderecek.  masterda bu bilgiyi aldıktan sonra tekrar tx olacak.Bilgiye göre led yakacak. Programı yazdım fakat normalde çalışan devre bu programdan sonra çalışmadı. Master devresinde sn7576bp entegresinin vcc bacağı normalde takılı iken picin vccsi 2.4Vta düşüyor. Modulun vccsini çıkardığım zaman. 5 v nominal değerlerine ulaşıyor.

Sanırım sıkıntı program kaynaklı. Algoritmayı kafamda kuramadım.

Program:

MAster PİC:

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


define OSC 20
ON INTERRUPT GoTo KESME
OPTION_REG=%10000101      'Pull up dirençleri İPTAL- Bölme oranı 101=1/64.
INTCON=%10100000          'Kesmeler aktif ve TMR0 kesmesi aktif
ADCON1=7
TMR0=0

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



SYMBOL GIRIS=PORTC.6
SYMBOL CIKIS=PORTD.2
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

MOT1=0
onay=1
LED=0
PAUSE 200
'------------------- ANAKONTROL---------------------------
BASLA:
IF BUTON1=1 THEN  GOSUB SAGADON

IF BUTON2=1 THEN GOSUB DURDUR

IF LED=1 THEN
LED2=0
PAUSEUS 100
LED1=1
ENDIF
IF LED=2 THEN
LED1=0
PAUSEUS 100
LED2=1
ENDIF
ONAY=1

serOUT2  CIKIS, 396,[REP $AA\5, rep $00\5, rep $FF\5]
SEROUT2  CIKIS, 396,["M","8","2",MOT1]
SEROUT2  CIKIS, 396,["M","8","2",MOT1]
PAUSE 10


GOTO BASLA

SAGADON:
MOT1=66
ONAY=1
serOUT2  CIKIS, 396,[REP $AA\5, rep $00\5, rep $FF\5]
SEROUT2  CIKIS, 396,["M","8","2",MOT1]
SEROUT2  CIKIS, 396,["M","8","2",MOT1]
ONAY=0
GEL:
SERIN2  GIRIS, 396,[WAIT("M82"),LED]
SERIN2  GIRIS, 396,[WAIT("M82"),LED]
IF LED=2 THEN RETURN
GOTO GEL

DURDUR:
MOT1=33
ONAY=1
serOUT2  CIKIS, 396,[REP $AA\5, rep $00\5, rep $FF\5]
SEROUT2  CIKIS, 396,["M","8","2",MOT1]
SEROUT2  CIKIS, 396,["M","8","2",MOT1]
ONAY=0
GEL2:
SERIN2  GIRIS, 396,[WAIT("M82"),LED]
SERIN2  GIRIS, 396,[WAIT("M82"),LED]
IF LED=1 THEN RETURN
GOTO GEL2



DISABLE
KESME:

CIK: INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE

END



Slave PİC:

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


define OSC 20
ON INTERRUPT GoTo KESME
OPTION_REG=%10000101      'Pull up dirençleri İPTAL- Bölme oranı 101=1/64.
INTCON=%10100000          'Kesmeler aktif ve TMR0 kesmesi aktif
ADCON1=7
TMR0=0

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

SYMBOL GIRIS=PORTD.2
SYMBOL CIKIS=PORTC.4
SYMBOL ONAY=PORTD.3
SYMBOL M1DON=PORTB.7
SYMBOL AKIMIPTAL=PORTB.6
SYMBOL AKIM=PORTE.1
MOT1 VAR BYTE
LED VAR BYTE

PAUSE 200
ONAY=0
MOT1=0
LED=0

BASLA:
IF MOT1=66 AND LED<>2 THEN GOTO MOT1DON
IF MOT1=33 THEN  LED=1

SERIN2  GIRIS, 396,[WAIT("M82"),MOT1]
SERIN2  GIRIS, 396,[WAIT("M82"),MOT1]
SERIN2  GIRIS, 396,[WAIT("M82"),MOT1]
SERIN2  GIRIS, 396,[WAIT("M82"),MOT1]
SERIN2  GIRIS, 396,[WAIT("M82"),MOT1]

GOTO BASLA




MOT1DON:
M1DON=1
LED=1
onay=1
serOUT2  CIKIS, 396,[REP $AA\5, rep $00\5, rep $FF\5]
SEROUT2  CIKIS, 396,["M","8","2",LED]
SEROUT2  CIKIS, 396,["M","8","2",LED]
SEROUT2  CIKIS, 396,["M","8","2",LED]
onay=0
IF  AKIM=1 THEN GOTO MUHURLEME
GOTO MOT1DON





MUHURLEME:
M1DON=0
AKIMIPTAL=1
PAUSE 300
AKIMIPTAL=0
LED=2
ONAY=1
serOUT2  CIKIS, 396,[REP $AA\5, rep $00\5, rep $FF\5]
SEROUT2  CIKIS, 396,["M","8","2",LED]
SEROUT2  CIKIS, 396,["M","8","2",LED]
ONAY=0
goto basla



DISABLE
KESME:
CIK: INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE

end

Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

ete

Yollama komutlarında yollanacak değişkeni verdikten sonra ,10,13 ekle . Örnek vereyim,
SEROUT2  CIKIS, 396,["M","8","2",MOT1,10,13]  şeklinde kullan.

Programda kesme kullanılmış ama bir fonksiyon gözükmüyor. Takıldığı yerlerden kurtarmak için mi kullandın acaba.?
Öyle için olsa bile program içinde o kadar fazla pause kullanmamak daha doğru olurdu.

Gönderme ve alma komutlarını peş peşe vermek çok da avantajlı değildir. Gönderme yapılırken en fazla 2 tane yazmak yeterlidir. Alırken tek olması daha uygun olur.

Karşılıklı haberleşilen sistemlerde protokolün çok iyi ayarlanması gerekir. En ufak bir çakışma kimsenin bilgi alamamasına sebep olur. Bu nedenle dikkatli olmak gerekir.
Programların mevcut hali ile sistemin sağlıklı çalışmasını beklemek pek de mantıklı değil.
Bu sistem için mutlaka USART haberleşmesi kullanılması ve alma işlemi için kesinlikle kesme kullanılması gerekir. Aksi halde senkron tutturmak son derece zor olacaktır. Bilgi bir kere kaçırılırsa program neyin kaçırıldığını anlamayacaktır. Bilgi alındı varsayılıp boşuna cevap gelmesi beklenecektir. Bu nedenle bir bilgi yollanınca onayının alınması daha doğru olur.
Bence USART kesmesi ile çalışan Seri iletişim projelerini iyice inceleyiniz.

Ete



M82Robotik

hocam 20 mhz için defıne komutlarını aldım.

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

şimdi komut gönderirken

HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
HSEROUT ["E","T","E",ZAMAN,SAYI]

alırken

HESERIN ,5,ATLA, [WAIT("ETE"),ZAMAN,SAYI]

kullanacağım.

Devrede pic tx ucunu sn7576bp NİN "D" ucuna
                  rx ucunu                      "R ucuna mı bağlayım ??

normalde köprülediğimiz "RE" ve "DE" uçlarını high low yapmama gerek varmı ?
Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

ete

Göndermede HSEROUT ["E","T","E",ZAMAN,SAYI,10,13] şeklinde yap.
Alırken,
HESERIN ,5,ATLA, [WAIT("ETE"),ZAMAN,SAYI] şeklinde alma yapabilirsin. Bu komutta yer alan 5 sayısı ETE bilgisi yerine başka bir şey geliyor se program orada en fazla 5 ms bekler. Gelirse alır gelmez ise ATLA isimli etikete atlar.
Bu sayede ATLA etiketinden önce şayet ALDI=1 dersen ana program içinde bilginin yenilendiğini yada yeni bilgi geldiğini kolaylıkla anlayabilirsin. Böylece yalnızca bilgi geldiği zaman işlem yapmış olursun. İşlem yaptıktan sonra ALDI=0 yapmayı unutma.
Pic TX ucu D ucuna ,Pic RX ucu R ucuna bağlanacaktır.
RE ve DE uçları birleştirilip Pic pinine bağlanacak. Normalde bu uç sürekli LOW da bekleyecek ki bu RX (Alma) modudur, bir bilgi yollanacak iken aynı uç HIGH yapılıp (TX - Gönderme modu) göndermeden sonra hemen LOW yapılacaktır.

Gerisi bildiğin kurallar.

Ete

M82Robotik

Teşekkürler hocam hemen deneyip bilgileri aktaracağım.
Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

M82Robotik

HOCAM BÜTÜN BAĞLANTILAR DOĞRU FAKAT ÇALIŞTIRAMADIM MALESEF PROGRAMI ATIYORUM.

MASTER:

define OSC 20
ON INTERRUPT GoTo KESME
OPTION_REG=%10000101      'Pull up dirençleri İPTAL- Bölme oranı 101=1/64.
INTCON=%10100000          'Kesmeler aktif ve TMR0 kesmesi aktif
ADCON1=7
TMR0=0
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

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



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

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:
ALDI=1
HSERIN ,5,ATLA, [WAIT("ETE"),LED]
ATLA:
ALDI=0
CIK: INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE

END


SLAVE:

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 01.10.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877a
@ DEVICE pic16F877a, WDT_OFF
@ DEVICE pic16F877a, PWRT_ON
@ DEVICE pic16F877a, PROTECT_OFF
@ DEVICE pic16F877a, HS_OSC


define OSC 20
ON INTERRUPT GoTo KESME
OPTION_REG=%10000101      'Pull up dirençleri İPTAL- Bölme oranı 101=1/64.
INTCON=%10100000          'Kesmeler aktif ve TMR0 kesmesi aktif
ADCON1=7
TMR0=0
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

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

SYMBOL GIRIS=PORTC.7
SYMBOL CIKIS=PORTC.6
SYMBOL ONAY=PORTD.3
SYMBOL M1DON=PORTB.7
SYMBOL AKIMIPTAL=PORTB.6
SYMBOL AKIM=PORTE.1
MOT1 VAR BYTE
LED VAR BYTE
ALDI VAR BYTE

PAUSE 200
ONAY=0
MOT1=0
LED=0
'-------------------- ANADÖNGÜ-----------------------------------
BASLA:

IF ALDI=1 THEN GOSUB ISLE


GOTO BASLA
'-----------------------------------------------------------------
ISLE:
IF MOT1=66 THEN GOTO MOT1DON
ALDI=0
RETURN


MOT1DON:
M1DON=1
LED=1
ALDI=0
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
goto basla



DISABLE
KESME:
ALDI=1
HSERIN ,5,ATLA, [WAIT("ETE"),MOT1]
ATLA:
ALDI=0
CIK: INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE

end

Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

ete

Programları mesaj içine yerleştirme. Dosya içinde ve ek de bas uzantılı olarak versen daha iyi olacak.
İkinci konu bu sistemde bir şema yokmudur. Şema olmadan neyin doğru neyin yanlış olduğunu nasıl anlayacağım.?
Mümkünse simule dosyasınıda ekde veriver.

Programlara bakıyorum. Master işi yöneten olmalıdır her zaman. Bu nedenle hem bilgi yollayacak hemde onay alacaktır.
O halde USART kullanacak ise Usart kesmeside aktif edilmeli değilmi?
Programında (Master) USART kesmesi aktif edilmemiş.
Nasıl edilir dersen;
INTCON registeri 6 nolu biti (PEIE) Peripheral kesmeleri aktive eder. Bu biti set edeceksin.
PIE1 Registeri (peripheral Kesmeleri ayarlama registeri) 5 nolu biti USART Receive Kesmesi Enable biti dir. Bu biti de set etmen gerekiyor. Tabiiki INTCON.7 bitinide set ederek kesmeleri aktif hale getiriyorsun. Bu aşamadan sonra USART kesmesi aktif olacaktır.

Bilmen gereken bir başka husus da USART kesme bayrağı nın PIR1 registerinin 5 nolu bitinde yer aldığıdır. Ancak bu bayrak,
PIR1.5=0 denilerek sıfırlanamıyor. Sıfırlanması çin RCREG (Alma) registerinin içinin boşaltılması gerekmektedir. TEMP=RCREG şeklinde bir komut satırı bu boşaltma işlemini yapacaktır.

Peki sen ne yapmışsında çalışmıyor? anlamsız bir şekilde TMR0 kesmesini aktive etmişsin neden? belli değil. Çünki bu kesmenin kullanımına ait programda en ufak bir komut satırıyok maalesef. Anlamsız ve kod kopyalamaktan kaynaklanan bir şey olsa gerek.

Kesme kısmında ALDI=1 ifadesini alma komutundan önce yerleştirmişsin. Ya gelen bir parazit ise o zaman kesmeden bilgi almadan ve ALDI=1 yapılarak çıkılacaktır. Buda yanlış tabiiki ALDI=1 ifadesi Hserin komut satırından hemen sonrasına yazılmalıdır. Zira gelen yanlış bilgi ise program ATLA satırına geçecek ve dolayısıyla Aldı=1 yapılmayacaktır.
Ancak sen yine anlamsız bir şekilde ATLA etiketi altına ALDI=0 yazmışsın bunu neden yazdın ?. Olurmu hiç. ALDI değişkenini neden kullanıyoruz bir taze bilgi geldiğini ana program içinde anlayabilmek için. Onu önce set edip çıkmadan önce sıfırlamak ne işine yarayacak bu konuları mantık çerçevesinde düşünmüyormusun?. Biraz kafayı çalıştır lütfen. sonucunu irdelemediğin komutları yazma. Her bir komut satırının bir anlamı ve görevi vardır. Bunları bilmeden hiç bir komut yazma bence.
Master programında hiç sigorta ayarı yok diğerinde var bu neden?. İkisinde de olmalı.
USART kesme bayrağı yerine TMR0 kesme bayrağını sıfırlamışsın. Buda yanlış o satırı siliyoruz ve yerine,
TEMP=RCREG yazarak kesme bayrağını sıfırlıyoruz. Hemen ATLA isimli satırın altında bunu yapıyoruz. Tabiiki programda Temp isimli değişken tanımlanmamış oluyor. Onuda değişkenler kısmında tanımlaman gerek. Aldı isimli değişken yalnızca 1 veya sıfır olabiliyor. Tam da bit değişkenine uygun bir format olduğu için bu değişkenin byte olması gerekmiyor. Bu nedenle onun tanımınıda BIT olarak değiştir. 16F877A da PORTA önce komparatör sonra analog sonrada digital olabilir. Digital kullanım için önce Comparatörler iptal (CMCON=7) edilmeli sonra analog girişler iptal edilmeli (ADCON1=7) böylece port digital olarak kullanılabilir.
PORTC.7 pini USART'a ait RX pinidir. Bu pin giriş olmalıdır . Sen çıkış olarak ayarlamışsın.


Slave programına gelince, kesme tanımlamaları aynen bu program içinde geçerli.
CMCON=7 ilave edilecek.
TMR0 kesmesi iptal edilip yerine USART kesmesi aktif edilecek.
Kesme etiketi altındakiler yukarıda anlatıldığı şekilde yeniden düzenlenecek.

Sonra deneme yaparsın bakalım çalışıyormu.?
Unutmadan söyleyeyim. Master TX pini (PORTC.6) Slave in RX pinine (PORTC.7) bağlanacak. Slave TX pini de Master RX pinine bağlanacaktır.
Bu sistemde yalnızca 1 master ve 1 slave olabilir. Şayet slave lerin adedi artacak ise mutlaka sistemi RS485'e çevirmen gerekir.

Ete

Not: bu söylediklerimin tamamını uygulayarak sistemi çalıştırdım. Ancak eksikler var onları şimdilik söylemeyeceğim. Protokol üzerinde yoğunlaşman gerekir. Şöyle düşün master de Buton1 e bastın ve slave bilgi gitti oda aldım deyip ilk bilgiyi yolladı ama AKIM ucunun HIGH olmasını bekliyor Bu aşamada master ne yapıyor Virtual terminalden izle bakalım. Tam o sırada AKIM ucu 1 oldu diyelim ama sende master tarafında butona bastın ne olacak hem slave bilgi yollayacak hemde master yollamaya kalkışacak bu doğrumu sence?
İşte yalnızca bir tarafın bilgi yollamasını sağlamak protokol oluyor. Bunu garantiye almalısın.

M82Robotik

Hocam öncelikle çok teşkkür ederim. Programı hemen deneyip nerelerde hata yaptığıma da bakacağım. Ayrıca sanal ortamda bile adamı kendine getiren uslubunuz gerçekten çok iyi :) Bayramınız kutlu olsun.  En kısa zamanda bilgilendireceğim.
Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

M82Robotik

Hocam programı ilk yüklediğimde çalıştıramadım. Sonradan sorunun Picde olduğunu fark ettim. yeni pic taktığımda program çalıştı. Usart ile haberleşme sağladım . Çok teşekkür ederim.
Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

M82Robotik

Hocam role kartını tasarladım. Yarında basacağım inşallah. Önerileriniz var mıdır ? 8)

Siz yeterki hayal edin. Hayalleriniz plan, planlarınız gerçek olur.   -M82-

Powered by EzPortal