1. 程式人生 > >錯誤檢測(1)可靠的資料傳輸

錯誤檢測(1)可靠的資料傳輸

本節將演示由於傳送方和接收方不能同步時鐘所引起的問題:

 

Parity 奇偶校驗位

Checksum 校驗和

CRC error detection 迴圈冗餘校驗(Cyclic Redundancy Check)

 

傳送資料的穩定性是依靠error detect 和 error correct 來保證的

 

Non-return-tozero 不歸零編碼:

low就發0 high就發1

 

 

transmiter

receiver

 

Arduino

 

5v 電壓 led接入d3

 

 

 &和 | 既是邏輯運算子也是位運算子,而&&和||只是邏輯運算子。

>> 右移運算子

 

 

 

接上示波器

 

再重新傳送資料:

 

 

看一下1s內發的資料:

 

 

 

100 1000 (大寫字母H的ASCII編碼

可以看出這裡少了一個bit 這裡只有七位

所以再相左一點點就可以找到這個位元組

這個位元組是 0100 1000

 

下一個位元組是0110 0101 是e(我們要發hello world。。。

 

下一個位元組是 0110 1100

 

 

接了一個LCD面板: (d4 d5 d6 d7 just four of the data pins

 

 

然後騷操作 安了一個液晶的庫

 

 

 

然後開始編碼(define the pins we using

 

 

 

 

 

 

這個操作

 

 

就是輸出完之後就輸出空白

 

 

 

Now we build sth with NRZ encoding

 

 

 

Receiver也做好了

 

開始編碼:

 

 

(pin3 設定為input)

 

 

繼續

 

 

 

。。。

接上:

 

 

 

看一下結果:

 

 

(開始還行 但是傳著傳著就出現亂碼了

 

檢查一下,transmitter 和 receiver的都是200ms讀/寫一次

 

我們把這個delay改小一點,改成198吧

(結果又亂碼了

 

Receiver換成196

 

 

 

 

(基本都沒事了,但是最後一個字元還是掛掉了)

 

結論: these delay things is really a bad way to try to synchronize these things .(because you know we really don’t know how much time this processing is going to take

 

通過手動同時按開關的話基本不能可靠的維持同步

 

這就是一個不reliable的communication  因為這些東西最終一開始還是同步的 但是最終會不同步

 

so delay isn’t the right way to ensure…