HSERIN PROBLEMI??

Başlatan My75, 03 Mart 2007, 23:28:30

My75

Selam arkadaslar,hserin komutuyla bir veri aldıktan sonra etikete gönderiyorum,burada 2sn.gecikme veriyorum ve hseroutla bilgi gönderiyorum,normal çalışıyor fakat 2sn. gecikme içinde başka bir veri geldiğinde pic kilitleniyor,veri gelmezse süre sonunda tekrar hserin etiketine gidip normal çalışıyor...

Merak ettiğim pause sürecinde hserin neden başka veriyi algılayıp pic'i kilitliyor? Normalde o anki işini yapması gerekmiyormu?


Yada pause komutu işlerken hserin almacını kapatmammı gerek? öyle bir sey varsa nasıl yaparım?Sanırım bu sadece kesmede uygulanıyordu??

Eğer bu şekil olmaz diyorsanız for next yada usart kesme kullanacagım...Buda işimi zorlaştıracak çünkü usart kesmede hala acemiyim...


Lütfen yardım  arkadaslar...
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

mhk

pic'in 2 byte olan bufferı dolduğunda bu kilitlenmeyi yapacaktır. Bunu önlemek için 2sn gecikme süresini küçük peryotlarla döngü içinde yapmak ve dolan buffer hatasını silmek ( if RCSTA.1 = 1 then RCSTA.4 = 0:RCSTA.4 = 1) daha mantıklı olacaktır. Pause 2000 yerine bir döngü içinde pause 10 yapıp bunu 200 defa tekrarlamak ve içinde bufferı her defasında kontrol edip buffer doldu bayrağını silmek gerekir.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

My75

Teşekkür ederim mhk...

Umudu kesmiştim cevap geldi.Çokmu zor bir soru sordum diye düşünmeye başlamıştım.. :D

Silmesi için DEFINE HSER_CLROERR 1 yapmıştım,ama dediğin gibi yapmak lazım..Zaten gecikmeleri kaldırdığımda pic deneme kartı üzerinde sorunsuz çalısıyor,ama yaptığım devreye uyguladıgımda ilk veride çalışıyor bir dahada çalışmıyor...

Anlamıyorum pic' i etkileyecek ne olabilir?? İlk veride çalışıyor röle çekiyor,hserout ile veriyi gönderiyor birdahada çalışmıyor...reset ve porta.3 bacaklarını pull up yaptım ama sorun hala var çözemedim...

rx ve tx girişlerde hex inverter kullanıyorum(4069)...Bu sorun olsa ilk veriyide almaz değilmi?? Cevap için tekrar sağol mhk...
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

mhk

Tam olarak anlayamadım. Tx ve rx te neden invert kullandın. Donanım haberleşmesinde en sağlıklı yöntem çevirici entegreler ( MAX232 vs ) kullanmaktır.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

My75

İnvert entegreler max232 ve benzeri entegrelerin yaptığı işi yapıyor zaten,gelen veriyi oldugu gibi tersliyor ve pic' ile voltaj seviyeleri aynı seviyede(5v)..Bilmiyorum kullandıgım bir devrede gördüm,80C32 rx ve tx uçları direkt olarak hex invertere bağlı,bende aynı olayı 16F628 üzerinde denedim çalışıyor,sence sorun bundan olabilirmi?? Sorun olsa ilk gelen veridede çalışmaz değilmi?Zaten bu kafamı karıştırıyor..Ben 16f628'in portb.5.6.7 uçlarıyla gelen veriye göre 3 adet röleyi çektiriyorum(merak etme direkt bağlamadım:)) porta.0.1 uçlarıda ledlere bağlı ve rx hariç tüm uçlar çıkış olarak ayarlı,kullanmadıgım uclar sorun teşkil etmez değilmi? Deneme kartında çalışıyor,benim kartta çalışmıyor,anlayamadım programıda defalarca kontrol ettim ama yok...Program aşagıda bir incele istersen....Basitce yazdım..


@ DEVICE pic16F628                      'işlemci 16F628                                
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak



DEFINE HSER_RCSTA 90h '(alma yazmacının Enable edilmesi)
DEFINE HSER_TXSTA 24h '(gönderme yazmacının Enable edilmesi)
DEFINE HSER_SPBRG 207
DEFINE HSER_BAUD 1200 '(Haberlesme hızının belirlenmesi)
DEFINE HSER_CLROERR 1

TRISA=%00000000
TRISB=%00000010
PORTA=0
CMCON=7
OPTION_REG.7=0

PAROLA  VAR BYTE
A       VAR BYTE
BINA    VAR BYTE
C       VAR BYTE
DAIRE   VAR BYTE
E       VAR BYTE
PULS    VAR PORTA.1
LED     VAR PORTA.0
ROLE1   VAR PORTB.5
ROLE2   VAR PORTB.6
ROLE3   VAR PORTB.7

ROLE1=0 : ROLE2=0 : ROLE3=0
PULS=1
HIGH    LED
PAUSE   1000

BASLA:
HSERIN   [PAROLA,A,BINA,C,DAIRE,E]
'------------------------------------------
IF      PAROLA=$55 THEN
ROLE1=0 : ROLE2=0 : ROLE3=0  : ENDIF
'------------------------------------------
IF      PAROLA=$26 THEN
GOSUB   DAIRELER : ENDIF
'------------------------------------------
IF     (PAROLA=$01)  AND  (DAIRE=$FE) THEN
GOSUB   KAPICI : ENDIF
GOTO    BASLA
'------------------------------------------

DAIRELER:
LOW LED
PULS=0
HSEROUT [$01,$55,$FE,$55,$FE,$F2]  
HSEROUT [PAROLA,A,BINA,C,DAIRE,E]  
PULS=1
HIGH LED
RETURN

KAPICI:
LOW LED
PULS=0

IF BINA=$FE THEN
ROLE1=1 : ROLE2=0 : ROLE3=0 : ENDIF

IF BINA=$FD THEN
ROLE1=0 : ROLE2=1 : ROLE3=0 : ENDIF

IF BINA=$FC THEN
ROLE1=0 : ROLE2=0 : ROLE3=1 : ENDIF

HSEROUT [$01,$55,$FE,$55,$FE,$F2]  
PULS=1
HIGH LED
RETURN
END
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

mhk

HSERIN {ParityLabel,}{Timeout,Label,}[Item{,...}]

bu komutun parametreleri bunlar.Burda timeout kısmını kullanabilirsin. Bu parametre içinde WAIT ( ) seçeneği ile birlikte ilk önce belirlediğin bir karakteri belirlediğin süre içinde beklersen gelmezse "label" ile istediğin yere programı dallandırabilirsin. Sorun burdanda kaynaklanabilir. Şöyleki , hserin bilgi bekliyor olabilir. Bilgi gelmezse orda beklemesine devam ediyor olabilir. Yardım menüsünden komutun kullanımı ile ilgili daha detaylı açıklama bulabilirsin.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

My75

mhk bu şekil kullanılacağını biliyorumda parity etiketi kullanırsam sürekli bunu bekleyecek,ama ilk data bir kaç komutda farklı farklı geliyor oyüzden ben gelen veriyi direkt değişkenlere yazıp öyle karşılastırmaya sokuyorum..

Aslında sorun tx den bilgi gönderdikten sonra oluyor,tx den giden veri rx ucunada geliyor,burda sonsuz bir döngüye girip kitleniyormu desem saçma geliyor çünkü komutun biri baslamadan diğerine gitmez..Yani veri gitmeden veri almaz sanırım değilmi??
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

My75

mhk bu şekil kullanılacağını biliyorumda parity etiketi kullanırsam sürekli bunu bekleyecek,ama ilk data bir kaç komutda farklı farklı geliyor oyüzden ben gelen veriyi direkt değişkenlere yazıp öyle karşılastırmaya sokuyorum..

Aslında sorun tx den bilgi gönderdikten sonra oluyor,tx den giden veri rx ucunada geliyor,burda sonsuz bir döngüye girip kitleniyormu desem saçma geliyor çünkü komutun biri baslamadan diğerine gitmez..Yani veri gitmeden veri almaz sanırım değilmi??
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

My75

İnanmıyorum ya sabahtan beri uğrasıyorum ama sayende hallettim mhk...

Boş bir etiket oluşturdum,5sn. bekle veri gelmezse boş etikete git ordan tekrar hserin'e gönderdim..Sürekli aynı şekil yani ve artık sorun yok...Şu serin hserin verileri ne şekil beklediğini bir türlü anlamış değilim,benim bildiğim etiket belirtmezsen geleni değişkenlere yazıp kontrol ettiğidir,etiketli ise onu bekleyip digerlerini yazdıgıdır neyse ya halletik tekrar sağol dostum,ya su komutların işleyişini görsel olarak gösteren bir program yokmudur?? Mcs' de böyle bir özellik var sanırım ama donanım istiyor galiba...
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...