Yüksek Hızda Seri İletişim (Yazılımsal)

Başlatan OG, 11 Kasım 2006, 23:06:16

OG

Arkadaşlar BURADA SERIN2-SEROUT2 komutları kullanılarak 20MHz de 38400baud hızlara kadar çalışma imkanı olduğundan bahsedilmiş.

20MHz de problemsiz çalışabildiğiniz max hız konusunda tecrübelerinizden istifade etmek istiyorum. Problemsiz ulaşabildiğiniz hız ne kadar oldu?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Logan

Seri iletişim ile uğraştığım zamanlar 4 mhz kristal kulllanark 9600'de haberleşme sağlamıştım.Fakat program sağlıklı çalışmadı.Bilgi aktarırken ve bilgi alırken arada bitleri kaçırdığını gördüm.Daha sonra pic ile max. ne kadar hızlı olunabileceğini denemek için 40 Mhz işlemci ile 19200 baud'da denemele yaptım.Hizçbir sorun çıkmadı.Fakat 38400 baud rate hızı hiç denemedim. :?
İmza.

OG

Sevgili Logan aynı sayfada "9600 baud may be unreliable with 4MHz clock" demiş.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Logan

Evet bende dikkat ettim.Aslında mantıken çalışmasında herhangi bir problem olmaması lazım fakat uygulamada hiç de düşündüğümüz gibi olmuyor.Yukarıdaki mesajda dikkat ederseniz bitleri kaçırdığından bahsettim.Yani bu her zaman karşılaştığımız bir problem değildi.Ama kesinlikle stabil çalıştığıda söylenemez.Bu projeyi yaklaşık 3 sene önce yapmıştık ve 18F452 kullanmıştık.Beslemede pil kullandığımız için çalışma frekansını yükseltemezdik.O sebepten dolayı 4800 baud ile sistemi çalıştırdık.Eğer bana soracak olursanız tam olarak güvenmemenizi tavsiye ederim. Başlangıçta olmasada, sonraları sorun çıkarabilir. :!:
İmza.

mhk

Eğer illaki SERIN SEROUT komutları ile yapmak gerekmiyorsa. 4 Mhz lik dahili osc ( 16F628A ) için ulaştığım hız 19200 bps. Haberleşme kablo boyu ise yaklaşık 350 metre. http://picproje.org/index.php/topic,12653&start=0 linkinde uyguladığım devre ile. Dahili seri haberleşme modu için yaptığım ayarlar ise
SPBRG=12		' Set baud rate to 19200  4MHz
RCSTA=%10010000	' Enable serial port and continuous receive
TXSTA=%00100100	' Enable transmit and asynchronous mode  
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

OG

Bu baudrate değerlerini modifiye edebilirmiyiz. Örneğin ben 25000baud da çalışmak istesem ne yapmam gerekir?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

fatihvelid

18F8722 kullanarak 20 MHZ'de 57600 baud rate hızına çıktım. İletişim pek sağlıklı olmadığından tekrar 38400 baud rate indim. Devre şimdilik problemsiz çalışıyor.

İyi bir konfigrasyon ve HS cristal ile iletişimi hızlandırabilirsiniz.
25000 baud rate ile haberleşmek için eğer usart kullanıyorsanız SPBRG registerine 49 yükleniz yeterlidir. Gerisi programlama kaabiliyetinize kalmış.
Ancak iletişim hızını belirlerken standat baud-rate değerlerini kullanmanızı tavsiye ediyorum.

Başarılar
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

vale9

Alıntı yapılan: "mhk"Eğer illaki SERIN SEROUT komutları ile yapmak gerekmiyorsa. 4 Mhz lik dahili osc ( 16F628A ) için ulaştığım hız 19200 bps. Haberleşme kablo boyu ise yaklaşık 350 metre.

Bu hız için serin-serout yerine hangi komutu kullanmamız gerekiyor? Ben serin2-serout2 kullanıyorum.
Hayat 1'ler ve 0'lardan ibarettir.

mmengi

@OG

Neden Usart yerine soft olarak çözmeye çalışıyorsunuz.

mhk

Dahili seri haberleşme (USART ) modülleri olan ( 16F628 , 16F877, 18F452 vs ) mikroişlemcilerle seri haberleşme daha sağlıklı ve yazılımsal olarak daha az yer kaplaması açısından tercih edilebilir. Picbasic için örnek kod:

option_reg=%00001111
@ DEVICE MCLR_OFF, INTRC_OSC, WDT_OFF, LVP_OFF, BOD_ON, PWRT_ON, PROTECT_ON
define osc 4
CMCON = 7           '// Comparators Off
VRCON = 0           '// Vref Off
TRISB = %00001111
TRISA = %11111111
portb=0:porta=0
Define  LCD_RSREG     PORTB
Define  LCD_RSBIT     4
Define  LCD_EREG      PORTB
Define  LCD_EBIT      0
pause 500
verial var byte

basla:
  if RCSTA.1 = 1 then RCSTA.4 = 0:RCSTA.4 = 1
    If PIR1.5 = 1 Then                      
          verial = RCREG                    
          lcdout $FE,1,"Alinan="
          lcdout $FE,$C0,dec verial
          PIR1.5 = 0
     EndIf

goto basla


Kullanılan kristal ve hız ayarları için ilgili mikroişlemcinin datasheet bilgilerinin içindeki (USART) kısmına bakınız.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

OG

Arkadaşlar adet çok olunca iş duygusallaşıyor, bu sebeple yazılımsal çözüm arıyorum. İş olursa eğer, 16F628 ile 12F629 arasında en az 40cent fark var, 2 pic var 80 cent, totalde 1000 USD fark edebiliyor. Ve devamı olursa her iş başına bu kadar kayıp oluyor.

(1000000/Baudrate)-20 formulunun gecerliliğini deniyeceğiz bakalım.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Bu iş yazılım ile olmayacak galiba.

Donanım haberleşmesi ile çalışmam hiç olmadı. USART birimi data beklerken veya tersi gönderirken diğer işler için program kesintisiz çalışabiliyor, doğrumudur? Örneğin 2 adet 16F628'in karşılıklı haberleşmesine ait PBP veya Proton+ kod örneğimiz varmıdır? MHK üstadım sizden ümitliyim.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

z

Yazılımınıza asm kodlar ekleyebiliyorsanız  haberleşmeyi istediğiniz "baudrate" de UART donanımı olmadan yazılımla gerçekleştirebilirsiniz.

Bu işe adamanız gereken tek donanım timer.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

OG

Hocam denedim. Yazılım olarak hiç durmadan çalışması gereken 3 adet pwm üretimi var. PWM döngüsü içinde dışarıdan data almam gerekiyor ve bu esnada pwm 7.8 şiddetinde deprem yemiş gibi sallanmaya başlıyor.

PWM döngüsü içine 50usn gibi süreler kapsayan ADC ölçümleri kullandım problem olmadı. Fakat dışarıdan seri data almaya başladığımda süreler çok uzuyor ve pwm stabilitesi bozuluyor. USART mecburiyeti düşüncesi buradan doğdu. PWM döngüsünün kod akışı hiç aksamadan
If PIR1.5 = 1
gibi kontrol yapabiliyorum. Zaten önceden de pwm içinde buton kontrolunu yaptırıyordum. Problem yoktu.

If PIR1.5 = 1  ile yeni data geldiğini görürsem bu datayı almam da uzun sürmeyecektir ve pwm de sıkıntı olmayacaktır diye düşünüyorum. Eğer yanılmıyorsam.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mmengi

Data alımı için usart int. kullanırsan çok daha iyi olur kanısındayım devamlı register kontrol etmekten kurtulursunuz. Bu arada hız 25000 mi yoksa 250000 baud mu  :roll: