Jump to content
mirasyedi

Asynchronous serial communication(eşzamansız seri iletişim)

Recommended Posts

Hat hep yüksek olarak bekler, düştüğü andan itibaren, stop biti geliyor farzedilir. Stop bitin süresi dolunca, veri bitleri gelir. Kaç veri biti varsa, ondan sonra, bu kez stop biti kabul edilir, stop biti her zaman yüksek olur. Stop bitinini süresi bitince, yeni bir start biti için beklenir.

 

Burada, start, veri bitleri, stop biti vs. hepsinin zaman olarak ne kadar süreceği biliniyor olmalıdır. Autobaud denen bir şey var, ama o da, bir kez bu bilgileri tespit edecek bir algoritma.

 

NXP çiplerinin, özellikle LPC17xx, LPC21xx serisinin, datasheet ve user manuallerini biraz incele. Sonra, şurada, bu işin kodla yapılmış hali var. İncelersen, çözmen, anlaman kolay olur.

 

https://www.embeddedrelated.com/showcode/344.php

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

2.png.a9cb156586a60bb06d45b7691c296a24.png

 

s =sonladırma biti (stop biti )

b =başlangıç biti (start biti)

1,2,3,4,5,6,7,8  veri bitleri

 

üstteki seri ile alttaki seri aynı

üstteki seri normal seri diyelim.

ikincisinde geciktiği  yada herhangi bir sebeple başlangıç kısmını okuyamadığı için 6 numaralı bit başlangıç biti olmaz mı?Anlamadığım konu bu. :)

 

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
20 saat önce, mirasyedi yazdı:

2.png.a9cb156586a60bb06d45b7691c296a24.png

 

s =sonladırma biti (stop biti )

b =başlangıç biti (start biti)

1,2,3,4,5,6,7,8  veri bitleri

 

üstteki seri ile alttaki seri aynı

üstteki seri normal seri diyelim.

ikincisinde geciktiği  yada herhangi bir sebeple başlangıç kısmını okuyamadığı için 6 numaralı bit başlangıç biti olmaz mı?Anlamadığım konu bu. :)

 

 

Elbette olur ve en azından ilk bayt okunduğunda yanlış bir veri gönderilmiş olurdu. :)

 

Bu hata bu veri alışverişinin zayıf noktalarından sadece birisidir. Alıcı ile verici arasında "sohbet" başlamadan önce her ikisi de hazır olması gerekir. Ayrıca her ikisi aynı ayarlarla (Veri-biti sayısı, veri hızı, stop-biti saysı, parity vb.) ayarlanmış olmalıdır. Ancak bundan sonra "sohbete" başlamalıdırlar.

Yukarda verdiğin hali ile sistem (mesela RS232) sadece 2 tel bağlantı gerekiyor. Sistem bu iki tel bağlantısı haricinde bir çok bağlantı daha içerir. Bu bağlantılar geçmiş zamanlarda  değişik hızda aletleri senkronize etmeye yarıyordu. O zamanlar artık geçti. Çünkü RS232 ve "akrabaları" direk chip olarak kullanılıyor ve o zamanların hız sorunu bulunmuyor. Benzer sorunları software ile çözmek de mümkündü elbette. Ama hem alıcı hem de verici benzer programları içermesi gerekiyordu.

 

Sevgiler

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
7 dakika önce, DreiMalAli yazdı:

Elbette olur ve en azından ilk bayt okunduğunda yanlış bir veri gönderilmiş olurdu. :)

 

Bu hata bu veri alışverişinin zayıf noktalarından sadece birisidir. Alıcı ile verici arasında "sohbet" başlamadan önce her ikisi de hazır olması gerekir. Ayrıca her ikisi aynı ayarlarla (Veri-biti sayısı, veri hızı, stop-biti saysı, parity vb.) ayarlanmış olmalıdır. Ancak bundan sonra "sohbete" başlamalıdırlar.

Yukarda verdiğin hali ile sistem (mesela RS232) sadece 2 tel bağlantı gerekiyor. Sistem bu iki tel bağlantısı haricinde bir çok bağlantı daha içerir. Bu bağlantılar geçmiş zamanlarda  değişik hızda aletleri senkronize etmeye yarıyordu. O zamanlar artık geçti. Çünkü RS232 ve "akrabaları" direk chip olarak kullanılıyor ve o zamanların hız sorunu bulunmuyor. Benzer sorunları software ile çözmek de mümkündü elbette. Ama hem alıcı hem de verici benzer programları içermesi gerekiyordu.

 

Sevgiler

 

Arduino kartı ile pc arasında usb kablosu ile bağlantı  kurmuştum.
Veriler noksan  veya yerleri değişmiş olarak geliyor.

Forumlarına  üye olamadığım  için soramadım.

Programı kaynak bol olduğu için lazarus  ile yazdım.

 

 

tarihinde mirasyedi tarafından düzenlendi

İletiyi paylaş


Link to post
Sitelerde Paylaş
21 hours ago, mirasyedi said:

2.png.a9cb156586a60bb06d45b7691c296a24.png

 

s =sonladırma biti (stop biti )

b =başlangıç biti (start biti)

1,2,3,4,5,6,7,8  veri bitleri

 

üstteki seri ile alttaki seri aynı

üstteki seri normal seri diyelim.

ikincisinde geciktiği  yada herhangi bir sebeple başlangıç kısmını okuyamadığı için 6 numaralı bit başlangıç biti olmaz mı?Anlamadığım konu bu. :)

 

 

 

Olmaz. Alttaki, UART'ı "Frame Error" condition'a, yani çerçeve hatası durumuna sokar. 

 

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
11 minutes ago, mirasyedi said:

Arduino kartı ile pc arasında usb kablosu ile bağlantı  kurmuştum.
Veriler noksan  veya yerleri değişmiş olarak geliyor.

Forumlarına  üye olamadığım  için soramadım.

Programı kaynak bol olduğu için lazarus  ile yazdım.

 

 

 

Noksan, yerleri değişmiş falan, kodunun gereken kontrolleri yapmadığını gösteriyor. UART'ın, LSR diye bir registeri var, orada, PE, FE falan gibi şeyler var, bunları kontrol etmelisin.

 

Dediğim gibi, LPC21XX lerin user manuallerine bak, onlarda bu şeylerin çalışması baya güzel anlatılır.

 

 

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

Arduino kullanmadım hiç . C ve benzeri dil kullandıkları için ve içeriğini bilmediğim program kütüphanelerinden hoşlanmadığım kullanmadım. Atmel'in mikroişletimcisi ile PC-bağlantısı (RS232 ---> USB üzerinden) kurdum. O zamanlar yazılımı assembler ile yapmıştım.  Verileri her seferinde bayt olarak gönderdim/aldım. Elbette veri aktarım süresi uzadı ama oldu. Ama benim tarzımın da kendine göre sorunları vardı. Mesela veri aktarımı hızı mikroişletimcinin kuvarz frekansından elde edilmesi gerekiyor. Bu da anca frekansı bölme ile mümkün. Bu ise sorunlu bir durumdur.. Veri aktarımındaki hatanın burdan kaynaklandığını anlayıncaya kadar ben de bol bol hatalı veri aldım/verdim.

 

Sevgiler

İletiyi paylaş


Link to post
Sitelerde Paylaş
40 dakika önce, DreiMalAli yazdı:

Arduino kullanmadım hiç . C ve benzeri dil kullandıkları için ve içeriğini bilmediğim program kütüphanelerinden hoşlanmadığım kullanmadım. Atmel'in mikroişletimcisi ile PC-bağlantısı (RS232 ---> USB üzerinden) kurdum. O zamanlar yazılımı assembler ile yapmıştım.  Verileri her seferinde bayt olarak gönderdim/aldım. Elbette veri aktarım süresi uzadı ama oldu. Ama benim tarzımın da kendine göre sorunları vardı. Mesela veri aktarımı hızı mikroişletimcinin kuvarz frekansından elde edilmesi gerekiyor. Bu da anca frekansı bölme ile mümkün. Bu ise sorunlu bir durumdur.. Veri aktarımındaki hatanın burdan kaynaklandığını anlayıncaya kadar ben de bol bol hatalı veri aldım/verdim.

 

Sevgiler

 

Vaay...Assembler ha?!

 

Muhterem,

zamanında Assembler´le işi olanların nesli maalesef tükenmek üzere.  :D

Hey gidi günler heey...o zamanlar bir bit ve byte altın değerinde idi. Şimdi ise bitmiş, bytemış; Tera byte devrinde kimse bunları umursamıyor gibi...

 

Benim ilk göz ağrım Sinclair ZX81 idi, sonrasında Commodore 64 daha sonra Atari 1040 ST...

Tesadüfe bak... şu an bir projemizin prototipinin hazırlık aşamasında Arduino kullanıyoruz, iyi mi?!

 

Kusura bakmayın, biraz nostaljik oldu ama o devirleri bilenlere rastlamak güzel.

tarihinde kavak tarafından düzenlendi

İletiyi paylaş


Link to post
Sitelerde Paylaş
18 dakika önce, kavak yazdı:

 

Vaay...Assembler ha?!

 

Muhterem,

zamanında Assembler´le işi olanların nesli maalesef tükenmek üzere.  :D

Hey gidi günler heey...o zamanlar bir bit ve byte altın değerinde idi. Şimdi ise bitmiş, bytemış; Tera byte devrinde kimse bunları umursamıyor gibi...

 

Benim ilk göz ağrım Sinclair ZX81 idi, sonrasında Commodore 64 daha sonra Atari 1040 ST...

Tesadüfe bak... şu an bir projemizin prototipinin hazırlık aşamasında Arduino kullanıyoruz, iyi mi?!

 

Kusura bakmayın, biraz nostaljik oldu ama o devirleri bilenlere rastlamak güzel.

Tükenmedi.Elektronik muhendisleri  assemblerı biliyorlar.Hatta  direk makine dilinde yazıyorlar. :)

İletiyi paylaş


Link to post
Sitelerde Paylaş
17 dakika önce, mirasyedi yazdı:

Tükenmedi.Elektronik muhendisleri  assemblerı biliyorlar.Hatta  direk makine dilinde yazıyorlar. :)

 

Elbette ancak bu devirde onların da işi, modern ekipmanlar sayesinde konforlu hale geldi, denebilir.

Şimdi şöyle bir düşünüyorum da, yanılmıyorsam Sinclair ZX81´in ana hafızasının hacmi sadece 1 kbyte idi.

Meslek yaptığım şirket, o zamanlar bunu kit(Türkçe karşılığını bilmiyorum) olarak bize vermişti ve bütün parçalarını kendimiz lehimleyerek çalışır vaziyete getirmiştik.

 

tarihinde kavak tarafından düzenlendi

İletiyi paylaş


Link to post
Sitelerde Paylaş
2 hours ago, mirasyedi said:

Tükenmedi.Elektronik muhendisleri  assemblerı biliyorlar.Hatta  direk makine dilinde yazıyorlar. :)

 

Makine dili denen şeyin, bir matahlığı yok aslında. Artık tamamen gereksiz oldu bile denebilir. 

 

Ama, kendini bilgisayar, yazılım falan sektöründe konumlandıran birinin makine dili bilmiyor olması, abes ve kabul edilemezdir. 

İletiyi paylaş


Link to post
Sitelerde Paylaş
8 saat önce, kavak yazdı:

 

Vaay...Assembler ha?!

 

Muhterem,

zamanında Assembler´le işi olanların nesli maalesef tükenmek üzere.  :D

Hey gidi günler heey...o zamanlar bir bit ve byte altın değerinde idi. Şimdi ise bitmiş, bytemış; Tera byte devrinde kimse bunları umursamıyor gibi...

 

Benim ilk göz ağrım Sinclair ZX81 idi, sonrasında Commodore 64 daha sonra Atari 1040 ST...

Tesadüfe bak... şu an bir projemizin prototipinin hazırlık aşamasında Arduino kullanıyoruz, iyi mi?!

 

Kusura bakmayın, biraz nostaljik oldu ama o devirleri bilenlere rastlamak güzel.

 

Yooo, gayet iyi geldi geçmiş zamanları yadetmek sevgili kavak. :)

Bigisayar monitörleri henüz icad edilmediği bir zamanda okulda programlarımızı (fortran) daktilo gibi aletle kart delerek kodlardık.

Fortran ile beraber assambler dersimiz vardı. Deneme bilgisayarımıza assembler 16 bitlik codlarımızı 16 tane şalter ile kaydetmiştik.

Meslek hayatında hiç ihtiyacım olmadı bunlara. Ancak ara sıra hobi olarak assembler kullandım. 8 bitlik μC ile ölçme programı yazmak ve ölçülen değerlerle hesap yapmak... Tam bir uğraş gerektiriyor. Kendi real sayılarımı (16 + 8 bitlik fixpoint sayısı) kendim tanımlamam ve  bu real sayılarla dört işlem yapmak için yazılımlar hazırlamak... Zevkli bir uğraş olmuştu.

 

Sevgiler

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

Tartışmaya katıl

You can post now and register later. If you have an account, sign in now to post with your account.

Misafir
Bu konuyu yanıtla

×   Yapıştırdığınız içerik biçimlendirme içeriyor.   Biçimlendirmeyi Temizle

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Yükleniyor ...

  • Konuyu Görüntüleyenler   0 kullanıcı

    Sayfayı görüntüleyen kayıtlı kullanıcı bulunmuyor.

×
×
  • Yeni Oluştur...