avatar_ete

Manchester Kodlama ve Kod Çözme

Başlatan ete, 06 Haziran 2014, 13:46:37

ete

RF sistemlerinde sıklıkla kullanılan Manchester kodlama sisteminden bahsedeceğim biraz. Bu sistemde tek bitlik değer 2 bitle ifade edilerek değeri "0" olan bit %01 şeklinde değeri "1" olan bit ise %10 şeklinde gösterilerek kodlama yapılır.
Örnek vermek gerekir ise;
elimizdeki 8 bitlik bilgi %00101101 şeklinde olsun. Bunu manchester koduna çevirdiğimiz zaman elde edilen şekil şöyle olur.
%0101100110100110 . Bu bilgi vericiden yollandıktan sonra alıcı tarafından alınır ve yeniden eski heline çevirilmesi gerekir. Bu seferde yaptığımız işlemin tersini yapmalıyız. Yani sağdan sola doğru ikişer ikişer bitler alınarak;
- %01 olan bitleri "0"
- %10 olan bitleri "1" olarak düzenleyerek asıl 8 bitlik bilgiye dönüştürmüş oluruz.
Şimdi bu işi programla nasıl yaparız ona bakalım.

Önce manchester koduna çevirmeyi deneyelim. Bu işlemde kullanacağımız değişkenlerimiz, INDEX (byte) , MANCHESTER (çevrilmiş kod word tipinde) ve Bilgi (çevrilecek 8 bitlik değişkenimiz) olacaktır.
Çevrim açıklamasına geri dönecek olursak  0==>01 şeklini alıyor veya 1==>10 halini alıyor.
Burada dikkat ederseniz bit'in orjinali ilk bit tam tersi halini alıyor ikincisi ise orjinal bitin aynısı oluyor. İşte bu ip ucumuz olacaktır. Bit 0 ise ilk bit 1 ikincisi 0 olacak demektir. Yani 01 yada bit 1 ise ilk bit tersi 0 ve ikincisi 1 olacak demektir.
Bu işi bilgi değişkeninin ilk biti için yapacak olsak;
Manchester.0=~Bilgi.0     '......ilk bit orjinal bitin tersi olacak idi
Manchester.1=Bilgi.0       '......ikinci bit orjinal bitin aynısı olacak idi
şeklinde yapmamız gerekirdi.  Ancak amacımız bir döngü içinde bütün bitleri otomatik şekilde çevirmek olacağına göre bu açıklamaya biriki ilave yaparak işimizi halledeceğiz. Index değişkenine bağlı olarak otomatik işlem için;
Manchester.0[index]=~Bilgi.0[Index]
bu eşitliğin açıklaması şöyle Index=0 iken manchester değişkeninin sıfırıncı biti (Manchester.0[0])  eşittir;
~Bilgi.0[Index] , yani Not Bilgi daha doğrusu ters çevrilmiş olan Bilgi.0[0]  biti anlamına gelir.
Sade bir dille açıklarsak Manchester değişkeninin sıfırncı biti bilgi değişkeninin sıfırıncı bitinin tersine eşittir demek olur.
İlk biti hallettik. Manchester ikinci bitini ayarlamak için;
Manchester.0[Index+1]=Bilgi.0[Index] şeklinde olacaktır. Yani manch. ikinci biti ,orjinal bitin aynısı olmuş oldu.
Index değişkeni döngü içinde bir artırılınca bu yazdıklarım işi otomatik yapamayacak durumdadır.
Zira,
Manchester.0[1]=~Bilgi.0[1] olurki bu bizim bir evvelki işlemde ayarladığımız Manc. 1. bitini bozar. Dikkat ederseniz İndex değişkeni 8 bitlik bilginin bitlerini ayarlıyor. Manchester değişkeninin bitleri 2 şer artmalıdır. Yani sıra Manch.0[2] ye gelmiştir. O halde ufak bir değişiklik yapmamız lazım formülde;
Manchester.0[Index*2]=~Bilgi.0[Index] şeklinde yazarsak Manchester tarafı bitleri 2 şer artarak gidecektir.
Benzer şekilde ikinci bit eşitliğinide Manchester.0[(2*Index)+1]=Bilgi.0[Index] şeklinde yazarsak her şey yerli yerine oturacaktır. Bu açıklamaya bağlı olarak çevirim programımızı yazabiliriz artık.

Bilgi=%00101101 olsun yine.
8 adımlık bir INDEX döngüsü kuruyoruz,
For INDEX=0 to 7
  Manchester.0[2*index]=~Bilgi.0[index]
  Manchester.0[(2*Index)+1]=Bilgi.0[Index]
Next
Bu 4 satırlık program Bilgi değişkeni içindeki değeri manchester koduna çevirerek 16 bit haline getirir.

Şimdi bu işin tersini yapacak programı yazalım.
%01 şeklindeki bitler 0 haline, %10 şeklindeki bitler ise 1 haline dönüştürülecek.
Yine bir index döngüsü kuralım.
For INDEX=0 to 7
  Bilgi.0[Index]=~Manchester.0[Index<<1]
Next
Burada hemen (Index<<1 ) komut satırının ne iş yaptığını açıklayayım.
Index=0 iken Index<<1=0 olur
Index=1 iken Index<<1=2 olur
Index=2 iken Index<<1=4 olur
Tek tek yazmaktansa Index değişkeninin alacağı değerleri yazalım en iyisi (0,2,4,6,8,10,12,14)
Bu işi başka bir şekilde daha yapabiliriz. Şöyle;
x=0
For Index=0 to 15 step 2
   Bilgi.0[X]=~Manchester.0[Index]
X=X+1
Next

Buraya kadar hem 8 bitlik bilgiyi Manchester koduna çevirmiş hemde manchester koduna çevrilmiş bir bilgiden tekrar 8 bitlik bilgiyi elde etmiş olduk.

İlişikteki RF kontrol sisteminde Manchester kodlaması kullanılmıştır.

Ete

gogoce

süper bir açıklama hocam teşekkürler
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal