avatar_Bahri Bilir

Usart Seri İletişimde Farklı Frekanslarda Çalışmak?

Başlatan Bahri Bilir, 02 Eylül 2015, 21:43:15

Bahri Bilir

Şu an üzerine uğraştığım projede 2 pic arası hserin üzerinden uart kesmesi ile iletişim kuruyorum.Ama sistem kademe kademe yükseliyor.Yani diyelim ki sistem 5 kademe.En üst olan 5. kademe emri 4. kademe uart üzerinden gönderiyor (tüm kademeler arası iletişim el sıkışma tekniği ile yapılıyor).Sonra 4. kademedeki pic alt kademedeki pici oda altındakine derken bilgiler gitmesi gereken yolu takip ederek en üstte bulunan 1 pic ile tüm sistem kontrol ediliyor.

Örneğin resimdeki şemaya göre kırmızı 3. pice ulaşmak için ana pic "1A3" sinyalini göndererek kırmızı 3 Nolu pice ulaşabiliyor.Sistem biraz karmaşık olmasına rağmen sistem oldukça stabil çalışıyor.Bunda sıkıntı yok.

Ama sürekli geri dönüşle ilerleyen bir kademeli sistem olduğu için en üst kademeden en alt kademeye ulaşana kadar çok fazla zaman geçiyor.
Ve bu süreyi kısaltmak için hem pic hızını hemde seri haberleşme hızını arttırmak istiyorum(pic 4 mhz-seri iletişim 9600 baud).İlk önce pic hızını arttırarak deneme yapmak istedim ama 4 mhz lik kıristali çıkarıp tüm piclere 8 mhz taktığımda sistem çalışmadı.Yani pic hızı değiştiği için seri iletişim sağlanamadı ??? Aslında tüm picler yine aynı hızda çalışıyor.Ama neden seri iletişim sağlayamıyorum.Acaba seri iletişim ayarlarında bir değişiklik yapılmalı mı?

Tüm sistemi iptal edip 2 pic arasında veriye göre led yakma işi denedim yine olmadı.Yani 8 mhz de hiç bir şekilde seri iletişimi sağlayamadım.
Ama 4 mhz taktığımda hiçbir sıkıntı yok...


16F886

@ __config _CONFIG1, _XT_OSC & _WDT_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
@ __config _CONFIG2, _WRT_HALF

OSCCON=%01101110 'dahili osc 4Mhz e ayarlandı
ANSEL= 0 'A portu analog pinler iptal
ANSELH=0  'B portu Analog pinler iptal
CM1CON0=0 'C1 Komparatör iptal
CM2CON0=0 'C2 Komparatör iptal
WPUB=0  'PORTB pullup lar kapalı

PORTA=0
PORTB=0
PORTC=0


TRISA=%00000000
TRISB=%00000000
TRISC=%10000000
'----------------------------------------------------------------------------
include "modedefs.bas"

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 25h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

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

RCIE=1
PEIE=1
GIE=1
RC   VAR     Byte

ON INTERRUPT GOTO INT

'----------------------------------------------------------------------------
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

Yukarıdaki Resimde küçük bir hata var.Alltaki Daha mantıklı oldu:
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Maxim

8mhz de ayarların böyle olmalı

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 12  ' 9600 Baud @ 8MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

Maxim


Bahri Bilir

"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#7
Asıl sorun 8 mhz de seri iletişim de değil pici 8 mhz de çalıştırmakta imiş.
Biraz daha uğraştım ve sorunu çözemeyince artık bir ledi bari toggle edebileyim dedim oda olmadı :)...

Galiba sigorta ayrlarında bir karışıklık var.Yeniden ayarları gözden geçireceğim.

Bu arada @Maxim öneriniz üzerine bahsettiğiniz programı ararken aşağıdaki siteye ulaştım ve baya hoşuma gitti baud rate hesaplayacak arkadaşların işini görmesi umuduyla...

Lİnk:
http://www.nicksoft.info/el/calc/?ac=spbrg&submitted=1&mcu=+Generic+8bit+BRG&Fosc=10.000&FoscMul=1000000&FoscAutoSelector=0&MaxBaudRateError=10
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Maxim

çok ilginç
bizdeki program ile bunun verdiği SPBRG değerleri farklı çıkıyor
mesela 20mhz/9600 SPBRG:520
bizde 8 buluyor

ete hocada bu programı kullanıyor
ete abi kontrol edermisin? (BRGH=1 olursa)

ete

Senin makinada bir şey var galiba. Ben aynı hesabı aptırdım. PicMultiCalc ile aynı şeyleri hesapladı.
Sorun yok yani.

Tekrar yap bence.

Ete

Maxim


ete

Sen MultiCalc de hesaplamayı EUSART modunda yaptırıyorsun ki bu doğru. Çünki 16F886 bu porta sahip. USART modunda yaparsan diğer linkteki hesaplama ile aynı değerleri bulduğunu görebilirsin. Linkteki hesaplamada pic cinsi belirtilmediğinden genel anlamada hesaplamayı hep standart USART olarak yapmaktadır. Bu durumda MultiCalc daha iyi bu konuda diyebiliriz.

Ete

Bahri Bilir

#12
Arkadaşlar yukarıdaki bahsettiğim el sıkışma yöntemiyle çok fazla usart seri iletişim kurulan projede veriler yavaş ilerliyor ve bunu hızlandırmak için düz mantıkla seri iletişim hızını arttırmayı düşünüyordum.
Ama gördüm ki pic hz si sabit tutulup seri iletşim hızı arttırılırsa hata payı çok yükseliyor.O zama baya hızlı (1 ghz) bir pic ve yüksek bir seri iletişim hızıyla çalışayım diye düşündüm.Ama yukarıdaki hesaplama programlarında incelediğime göre belli bir baud rateden sonra pic hızlıda olsa hata payı yükseliyor.
Tahminimce hattaki yoğunluktan dolayı verilerin hata oranı yükseliyor.Ama internet erişimi gibi bizim yaptığımız seri iletişim hızının kat kat fazlasını bizim aldığımız hata payından kat kat azını alarak sağlayabiliyorlar.
Benim kurduğum sistemde serri iletşimle taşınacak veriler can güvenliği sayılabilecek derecede önem arz ediyor.Bu kadar önemli bir veri en az 11500 baud veya daha hızlı bir şekilde hangi picle hangi hızda sağlanabilir.

Özetlersek en güvenli ve en hızlı seri iletişim yöntemi ve kuralları nelerdir?

"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#13

Araştırmalarımda etherneti biraz daha bastileştirerek rs485 de olduğu gibi basit bir entegreyle pic de kullanılabilirmi? diye araştırma yaptım ama Türkçe kaynaklarda kayda değer bir şeye ulaşamadım. Anladığım kadarıyla ethernet basit bir entegreyle iletşim kurulabilecek basit bir yapıya sahip değil.Yani böyle basit bir çalışmaya ve ethernetin tam anlamıyla mantığına ulaşamadım.Yapılabilri mi şu an kesin birşey söyleyemem.

Ama endistüri alanları için de verimli bir seri iletişim yöntemi olarak kullanılıyor ve endistüriye özel aksesuarları piyasada oldukça fazla.

http://www.elektrikport.com/teknik-kutuphane/endustriyel-haberlesme-protokolleri/16448#ad-image-0 ???
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

gogoce

konuyu hortlatıyorum ama son durum nedir?
rs485 yada can-bus denediniz mi?
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal