Asenkron Seri Port (8N1) Baudrate bulucu

Başlatan OG, 16 Temmuz 2012, 16:09:55

OG

Gelen 8N1 datanın kaç baud olduğunu anlayabilecek hazır bir kod/algoritma varmıdır? 1200-115200 arası hızlar için.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Erol YILMAZ

Karakteri gönderen tarafın istediğimiz karakteri göndermesini sağlayabilirsek çok kolay görünüyor...
Aksi halde uğraştırıcı bi probleme benziyor :)

http://documentation.renesas.com/doc/products/region/rtas/mpumcu/apn/autobaud.pdf

yamak

Hocam karşı tarafın Çalışma frekansı ve gelen datanın kaç bitlik olduğu(data,parity,stop bit) biliniyorsa hesaplanabilir bence. Çünkü işlemcinin içindeki baudrate generator baudrate hızının 16 katında pulse üretiyor. Sonra uart birimi bu pulseları sayıyo ve her 16 pulse da bir gönderilecek datanın bir bitini oluşturuyor. Mesela baud rate 19200 e ayarlanmışssa ve işlemci 50 mhz de çalışyosa baudrate generator (50*10^6)/(19200*16)=163 ten her 163 cycle da bir bir pulse üretmiş olacak. Bu şekilde 10 bitlik bir frame(1 stop bit,8 bit data,1 stop bit) in oluşması 163*16*10=26080 cycle sürmüş olacak. Bu da 50 mhz bi işlemcide (1/(50*(10^6)))*26080 sn sürer. Bu formülle beraber karşı taraftan iki frame arası süre hesaplanarak baud hızı bulunabilir bence.

Erol YILMAZ



gönderilen herhangibir karakter için herhangi bir hızda, neresinin START neresinin STOP olduğunu nasıl anlayacağız ?

z

Bunun için seri porttan en bir süre dataların geliyor olması gerekir.

I/O port  yada capture pinlerle seri bilginin en kısa palsının süresi ölçülür. Buna T diyelim.

T, T/2, T/3 ... T/9 süreleri için sıra ile baud rate ayarlanır ve seri datalar UART ile dinlenir. Framing error alınmayan durumda baud yakalanmış demektir.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak

Alıntı Yapgönderilen herhangibir karakter için herhangi bir hızda, neresinin START neresinin STOP olduğunu nasıl anlayacağız ?
Hocam evet düşündüm de bunu herhangi bir karakter için anlayamayız. Dediğiniz gibi bir süre karşı tarafın bizim istediğimiz harfleri göndermesi gereki.Mesela ascii kodu 0 olan \0 karakteri gibi :). Ya da ascii kodu 85=10101010 olan karakter de olabilir.

OG

Uğraştıracak gibi görünüyor, kolay olur sanıyordum.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

camby

Microchip EUSART birimlerinde de bu özellik var , kullanmadım ama okuduğum kadarıyla başlangıçta istenilen karakterin ( 10101010 ) gönderilmesi yeterli. Alıcı bir timer ile baud için gerekli olan parametreleri çıkartıyor , yada kendi yerine yerleştiriyor..

Benim kullandığım sistemde başlangıçta böle bir karakter göndermeme olanak yoktu , kullanamadım.

8N1 ne oluyor ?

serdararikan

evet 10101010 verisi TX den RX e başlangıçta gönderilirse en kısa kare dalganın periyot u tesbit edilerek baudrate hesaplanabilir.

serhat1990

Alıntı yapılan: camby - 16 Temmuz 2012, 18:33:25
Microchip EUSART birimlerinde de bu özellik var , kullanmadım ama okuduğum kadarıyla başlangıçta istenilen karakterin ( 10101010 ) gönderilmesi yeterli. Alıcı bir timer ile baud için gerekli olan parametreleri çıkartıyor , yada kendi yerine yerleştiriyor..

Benim kullandığım sistemde başlangıçta böle bir karakter göndermeme olanak yoktu , kullanamadım.

8N1 ne oluyor ?

Hocam 8 bit data , eşlik biti yok , 1 bit stop biti ...

bocek

1 ya da 0. işte 'bit'ün mesele..