PIC18 ile CRC – MikroC

This post is also available in: English Azerbaycan Türkcesi Русский


Video Anlatım

Kütüphane ve Kaynak Dosyalar

CRC Hakkında Genel Bilgilendirme

  1. CRC Nedir?
  2. Veri Gönderim Sistemi
  3. CRC Nasıl Hesaplanır?

CRC Kütüphanesi Kullanımı

  1. Fonksiyonlar

 

CRC HAKKINDA GENEL BİLGİLENDİRME

1-) CRC Nedir?

CRC , açılım olarak “Cyclic Redundancy Check” yani döngüsel artık denetimi demektir. CRC tüm elektronik haberleşme sistemlerinde yaygın olarak kullanılır.Kullanımın basit ve pratik olması CRC sistemini oldukça popüler hale getirmiştir. Nerdeyse tüm ikili sistemlerde kullanılır. CRC sistemi  ilk olarak 1961’de W. Wesley Peterson tarafından telekomünikasyon sistemlerindeki hataları gidermek için yapılmıştır.

2-) Veri Gönderim Sistemi

CRC veri gönderim sistemlerinde giden verinin alıcı tarafından doğru gelip gelmediğini tespit etmeye yarar. Burada öncelikle bir polinom belirlenir. Bu çözüm polinomu ana veriye eklenerek XOR işlemine tutulur ve çözümlenir. Böylece çıkan sonuçtan verinin doğru gidip gitmediği anlaşılır. CRC polinomları 1 bit eşlikten CRC64e kadar 64 bit olabilirler. Ancak temelde 2 kola ayrılırlar bir tanesi hata tesbit eden fonsiyonlar diğerleri ise tesbit edilen hataları otomatik olarak düzeltebilen fonksiyonlardır.

3-) CRC Nasıl Hesaplanır?

CRC kesinlikle ikili binary kod sistemi ile hesaplanmalıdır aksi halde desimal tabandaki hesaplamalar hatalı olacaktır. Sadece XOR işlemi yapılmalıdır.

mikroc crc kutuphanesi XOR
XOR İşlemi Yapılır

3A) -VERİ İÇİN GEÇERLİ CRC KODUNU HESAPLAMA-

Bu kısımda veriyi gönderecek olan verici tarafından ham veri sonuna eklenecek CRC kodu hesaplanacaktır. Bu hesaplamada CRC polinomu kullanılacak sonuç olarak bize 7 bitlik (CRC7 oldugu için) CRC kodunu verecektir.

CRC7= 10001001  veya    x7+ x3+ x0

Veri =  1001001001110

Çözüm;

İlk olarak verimizin sonuna CRC sayısı kadar sıfır eklenir CRC7 kullanıldığı için 7 adet sıfır eklenir

1001001001110-0000000-> polinomumuz ile XOR lama yapılır

10001001-> Polinom

——xor——-

00011011011-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

——10001001-> Polinom

        ——xor——-

      010100101-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

——10001001-> Polinom

            ——xor——-

            0010110000-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

————10001001-> Polinom

                   ——xor——-

—————-0011100100-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

——————-10001001-> Polinom

                            ——xor——-

——————-011011010-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

——————–10001001-> Polinom

                              ——xor——-

——————–010100110-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

———————-10001001-> Polinom

                                  ——xor——-

———————-0010111100-> baştaki sıfırlar kaydırılarak yukarıdan sıfır kadar bit indirilir

————————-10001001-> Polinom

                                      ——xor——-

————————-0  0110101-> Ham veri için hesaplanmış 7 bitlik CRC kodu

 

 

3B) -VERİ GÖNDERİLDİKTEN SONRA ALICI TARAFINDAN KONTROL EDİLMESİ

Yukarıda 7 bitlik CRC kodu hesaplandı. Şimdi alıcıya gelen veriyi alıcının nasıl çözümleyip sonuca ulaştığını görelim. Yukarıdaki 7 bitlik CRC kodu ana verinin sonuna eklenerek gönderilir. Alıcı bunu Polinom ile XOR lar ve sonuç  “0”sıfır ise veri doğru aktarılmıştır aksi halde veri gönderiminde hata var demektir.

CRC7= 10001001  veya    x7+ x3+ x0

Veri =  1001001001110

Çözüm;

10010010011100110101->ham veri sonuna hesaplanan CRC kodu eklendi

10001001-> Polinom

——xor——-

00011011011

—–10001001-> Polinom

       ——xor——-

——-010100101

——-10001001-> Polinom

           ——xor——-

——-0010110000

———-10001001-> Polinom

               ——xor——-

———-0011100111

————-10001001-> Polinom

————- ——xor——-

————-011011100

————–10001001-> Polinom

                     ——xor——-

————–010101011

—————10001001-> Polinom

                        ——xor——-

————- 0010001001

—————–10001001-> Polinom

                          ——xor——-

—————–00000000

Görüldüğü gibi sonuç sıfır çıktı . O halde veri doğru iletilmiş demektir. Bu sonuçtan sonra artık alıcı alınana verilerin doğruluğunu onaylamıştır. CRC kontrolünde veri uzunluğu istendiği kadar uzatılabilir bunda kısıtlama yoktur ayrıca kontrolün daha sağlam olması için uzun CRC kontrol polinomları kullanabilirsiniz.

CRC KÜTÜPHANESİNİN KULLANIMI

  • CRC Kütüphanesinde CRC3-CRC4-CRC5-CRC6-CRC7-CRC8-CRC10-CRC11-CRC12-CRC15-CRC16-CRC24-CRC30 fonksiyonları bulunmaktadır.
  • Bu fonksiyonlardan size uygun olanını kullanarak veri iletim projelerinde kullanabilirsiniz
  • CRC fonksiyonlarında hesaplama için “polinom” değeri girilmesi istenir. Bu polinomu kendiniz hesaplayabilir yada aşağıdaki hazır polinomları kullanabilirsiniz
  • Genel Kabul Görmüş CRC Polinomları(binary)
    CRC3->1011
    CRC4->10011
    CRC5->101001 / 110101 / 100101
    CRC6->1000010
    CRC7->10001001
    CRC8->100000111 / 100110001 / 111010101 / 100011101 / 110011011
    CRC10->11000110011
    CRC11->101110000101
    CRC12->1100000001111
    CRC15->1100010110011001
    CRC16->11000000000000101 / 10001000000100001 / 11000101110110111 /10000010110001001 / 10000010110001001
    CRC24->1010111010110110111001011 / 1100001100100110011111011
    CRC30->1100000001100001011100111000111
Veriler doğru iletilmiş ise sonuç sıfırdır

 

mikroc_crc_kutuphanesi
istenildiği kadar dizi eklenebilir

1-) FONKSİYONLAR

 

1A-)   CRC3  Fonksiyonu

Amacı

3 bitlik CRC kodu oluşturur.

Sonucu “char” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC3(unsigned char *veri,unsigned int dizi_sayisi,unsigned char polinom,unsigned char kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

 

1B-)   CRC4  Fonksiyonu

Amacı:

4 bitlik CRC kodu oluşturur.

Sonucu “char” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC4(unsigned char *veri,unsigned int dizi_sayisi,unsigned char polinom,unsigned char kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1C-)   CRC5  Fonksiyonu

Amacı:

5 bitlik CRC kodu oluşturur.

Sonucu “char” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC5(unsigned char *veri,unsigned int dizi_sayisi,unsigned char polinom,unsigned char kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

 

1D-)   CRC6  Fonksiyonu

Amacı:

6 bitlik CRC kodu oluşturur.

Sonucu “char” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC6(unsigned char *veri,unsigned int dizi_sayisi,unsigned char polinom,unsigned char kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

 

 

1E-)   CRC7  Fonksiyonu

Amacı:

7 bitlik CRC kodu oluşturur.

Sonucu “char” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC7(unsigned char *veri,unsigned int dizi_sayisi,unsigned char polinom,unsigned char kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

 

 

1F-)   CRC8  Fonksiyonu

Amacı:

8 bitlik CRC kodu oluşturur.

Sonucu “int” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC8(unsigned int *veri,unsigned int dizi_sayisi,unsigned int polinom,unsigned int kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1G-)   CRC10  Fonksiyonu

Amacı:

10 bitlik CRC kodu oluşturur.

Sonucu “int” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC10(unsigned int *veri,unsigned int dizi_sayisi,unsigned int polinom,unsigned int kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1H-)   CRC11  Fonksiyonu

Amacı:

11 bitlik CRC kodu oluşturur.

Sonucu “int” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC11(unsigned int *veri,unsigned int dizi_sayisi,unsigned int polinom,unsigned int kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

 

1I-)   CRC12  Fonksiyonu

Amacı:

12 bitlik CRC kodu oluşturur.

Sonucu “int” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC12(unsigned int *veri,unsigned int dizi_sayisi,unsigned int polinom,unsigned int kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1J-)   CRC15  Fonksiyonu

Amacı:

15 bitlik CRC kodu oluşturur.

Sonucu “int” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC15(unsigned int *veri,unsigned int dizi_sayisi,unsigned int polinom,unsigned int kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1K-)   CRC16  Fonksiyonu

Amacı:

16 bitlik CRC kodu oluşturur.

Sonucu “long” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC16(unsigned long *veri,unsigned int dizi_sayisi,unsigned long polinom,unsigned long kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1L-)   CRC24 Fonksiyonu

Amacı:

24 bitlik CRC kodu oluşturur.

Sonucu “long” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC24(unsigned long *veri,unsigned int dizi_sayisi,unsigned long polinom,unsigned long kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:

1M-)   CRC30 Fonksiyonu

Amacı:

30 bitlik CRC kodu oluşturur.

Sonucu “long” tipinde geri döndürür.

Veri kontrol işlemi sonucunda “0” sıfır sonucu geliyorsa veriler doğru iletilmiştir. Aksi halde veriler hatalı gitmiş demektir.

Kullanımı:

CRC30(unsigned long *veri,unsigned int dizi_sayisi,unsigned long polinom,unsigned long kod) – şeklindedir

-*veri: CRC si hesaplanacak verilerin bulunduğu dizinin adı yazılır

-dizi_sayısı: Veri dizisi kaç adet ise yazılır

-polinom: CRC hesaplaması için gerekli polinom yazılır . ( Genel Kabul Görmüş Polinomlar da yazılabilir)

-kod: Bu parametre “0” ( sıfır) ise fonksiyon CRC kodu hesaplar. Eğer buraya hesaplanmış CRC kodu yazılırsa verinin doğruluğunu hesaplar

Örnek:


PIC18 ile CRC – MikroC Video Anlatım


Kütüphane ve Kaynak Dosyalar


About ERCAN KOÇLAR

Çalışmalarım çocukken başladı kolonyalı kağıtları yakmak, ilaçları birbirine katmak gibi değişik deneylerim vardı. Kimya kitabında elektroliz ile suyun hidrojen ve oksijene ayrıldığı ve hidrojenin yandığını yazıyordu, o zamanlarda aklım almıyordu sudan nasıl yanan....Devamını okumak için tıklayınız ;)