資料介紹
描述
?
![poYBAGO0HRSADg0cAABoGw4whDw411.png](https://file.elecfans.com/web2/M00/88/41/poYBAGO0HRSADg0cAABoGw4whDw411.png)
介紹
在我的數(shù)字通信課上,我試圖通過(guò)發(fā)現(xiàn)領(lǐng)域問(wèn)題并解決它們來(lái)幫助我的學(xué)生學(xué)習(xí)數(shù)字通信/計(jì)算機(jī)網(wǎng)絡(luò)。在上一節(jié)課中,我們使用激光和 LDR構(gòu)建了一個(gè)摩爾斯電碼發(fā)射器/接收器。
今天,我將其擴(kuò)展到傳輸數(shù)字?jǐn)?shù)據(jù);以0和1的流編碼的數(shù)據(jù)。在摩爾斯電碼中,'dot'和'dash'相當(dāng)于數(shù)字?jǐn)?shù)據(jù)的0和1。但是,我們有 0/點(diǎn)的明確信號(hào)。沒(méi)有信號(hào)不被解釋為零。這使得渠道成本更高。我可以達(dá)到每分鐘約 18 個(gè)單詞(PARIS 通常用作此計(jì)算的參考單詞)。這相當(dāng)于每分鐘 75 個(gè)字節(jié)或10bps 。
發(fā)射機(jī)
由于我的發(fā)射器是一個(gè)具有開(kāi)和關(guān)狀態(tài)的激光二極管,關(guān)閉狀態(tài)可以被認(rèn)為是 0,而打開(kāi)狀態(tài)可以被認(rèn)為是 1。然而,這提出了一個(gè)挑戰(zhàn),即如何區(qū)分代表數(shù)據(jù)的一組 0 和0代表靜默(沒(méi)有數(shù)據(jù)傳輸)。
編輯代碼
由于我們遇到了這個(gè)問(wèn)題,我添加了一個(gè)開(kāi)始消息頭/模式 (1011) 和一個(gè)結(jié)束消息頭/模式 (1101)。我不斷地在我的 LDR 接收器上采樣數(shù)據(jù),并將讀取值 0/1 添加到我的數(shù)據(jù)中。然后,我檢查結(jié)束模式,如果找到,我檢查 8 位數(shù)據(jù)之前的起始標(biāo)頭。
1011 <8 位數(shù)據(jù)> 1101
H: 1011010010001101
E: 1011010001011101
L: 1011010011001101
L: 1011010011001101
O: 1011010011111101
我可以在我的接收器上解碼這個(gè)模式。
![poYBAGO0HRaAR2-_AAAMFiIqM4k623.png](https://file.elecfans.com/web2/M00/88/41/poYBAGO0HRaAR2-_AAAMFiIqM4k623.png)
然而,這種封裝消息的簡(jiǎn)單模式并非萬(wàn)無(wú)一失。它很容易被流氓數(shù)據(jù)系列破解。
![poYBAGO0HRmAJXWYAAAz55Z45sM270.png](https://file.elecfans.com/web2/M00/88/41/poYBAGO0HRmAJXWYAAAz55Z45sM270.png)
那么如何驗(yàn)證接收到的數(shù)據(jù)是否真的是另一端發(fā)送的數(shù)據(jù)呢?
我在數(shù)據(jù)末尾添加了一個(gè)小簽名;設(shè)置位數(shù)。由于我的數(shù)據(jù)是 8 位,我又添加了 4 位來(lái)表示可以在數(shù)據(jù)中設(shè)置的最多 8 位。
1011 <8_bit_data><4_sign_bits> 1101
H: 10110100100000101101
E: 10110100010100111101
L: 10110100110000111101
L: 10110100110000111101
O: 10110100111101011101
我也可以解碼這個(gè)模式。結(jié)果,我可以過(guò)濾掉一些垃圾:
![pYYBAGO0HRuAFgtXAAAtG-W6LLg365.png](https://file.elecfans.com/web2/M00/88/C8/pYYBAGO0HRuAFgtXAAAtG-W6LLg365.png)
我確實(shí)有數(shù)據(jù)丟失,但現(xiàn)在垃圾更少了。那么我該如何進(jìn)一步改進(jìn)呢?我可以修復(fù)傳輸錯(cuò)誤嗎?我可以更好地利用符號(hào)位嗎?大量可能的改進(jìn),但當(dāng)我們遇到問(wèn)題并且我們確信該問(wèn)題值得解決時(shí),我們將解決。可能是下節(jié)課……
發(fā)射機(jī):
#define PULSE 50
#define START_MSG one(); zero(); one(); one();
#define ??END_MSG one(); one(); zero(); one();
#define MSG_PACK(x) START_MSG x END_MSG
void setup() {
?pinMode(13, OUTPUT);
}
void loop() {
// <8_Data_Bits><4_Sign_Bits>
?//H: 2 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); zero(); zero(); zero(); \
??????????zero(); zero(); one(); zero(); )
?//E: 3 set bits
?MSG_PACK(zero(); one(); zero(); zero(); zero(); one(); zero(); one(); \
??????????zero(); zero(); one(); one(); )
?//L: 3 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); one(); zero(); zero(); \
??????????zero(); zero(); one(); one(); )
?//L: 3 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); one(); zero(); zero(); \
??????????zero(); zero(); one(); one(); )
?//O: 5 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); one(); one(); one(); \
??????????zero(); one(); zero(); one(); )
?//CR: 3 set bits
?MSG_PACK(zero(); zero(); zero(); zero(); one(); one(); zero(); one(); \
??????????zero(); zero(); one(); one(); )
?//LF: 2 set bits
?MSG_PACK(zero(); zero(); zero(); zero(); one(); zero(); one(); zero(); \
??????????zero(); zero(); one(); zero(); )
}
void zero()
{
?digitalWrite(13, LOW);
?delay(PULSE);
}
void one()
{
?digitalWrite(13, HIGH);
?delay(PULSE);
}
接收者:
#define SOM 0xB
#define EOM 0xD
#define PULSE 50
unsigned long data = 0;
void setup() {
?// put your setup code here, to run once:
?Serial.begin(9600);
}
void loop() {
?// put your main code here, to run repeatedly:
?int val = analogRead(4);
?unsigned long sign = 0;
?data = (data << 1);
?if(val >= 10){
???data |= 1;
?}else {
???data |= 0;
?}
?//check tail signature
?if(EOM == (data&EOM))
?{
???//check head signature
???if(SOM == ((data >> 16)&0xF)){
?????sign = (data>>4)&0xF; // 4 bits of signature
?????data = (data>>8)&0xFF;// 8 bits of data
?????if(sign == getSetBits(data))
?????{
???????Serial.print((char)data);
?????}
?????//Diagnostics
?????//if(data==72||data==69||data==76||data==79||data==13||data==10){
???????//data
???????//digitalWrite(13, HIGH);
?????//}else{
???????//error
???????//digitalWrite(12, HIGH);
?????//}
?????data = 0;
???}
?}
?delay(PULSE);
?//digitalWrite(13, LOW);
?//digitalWrite(12, LOW);
}
unsigned long getSetBits(unsigned long n)
{
?unsigned long count = 0;
?while(n)
?{
???n &= (n-1);
???count++;
?}
?return count;
}
順便說(shuō)一句,我使用此處發(fā)布的最終代碼實(shí)現(xiàn)了每秒約 1 字節(jié)數(shù)據(jù)的速度。包括標(biāo)頭在內(nèi),達(dá)到每秒 20 位!
編輯
為了檢測(cè)數(shù)據(jù)中的錯(cuò)誤,我在數(shù)據(jù)中添加設(shè)置位數(shù)的簽名機(jī)制并沒(méi)有被證明是好的。我需要一個(gè)不會(huì)增加大量數(shù)據(jù)開(kāi)銷(xiāo)的更好、更便宜的解決方案。
I XOR 高半字節(jié)和低半字節(jié)以生成 4 位簽名。此簽名不太可能失敗,因?yàn)殄e(cuò)誤(位翻轉(zhuǎn))必須發(fā)生在高半字節(jié)和低半字節(jié)的相應(yīng)位上。
// (sign == (right ^ left))
if(sign == ((data & 0xF) ^ ((data >> 4) & 0xF))){
Serial.print((char)data);
}
正如預(yù)期的那樣,結(jié)果比以前更好。我很少看到惡意字節(jié)通過(guò)此測(cè)試。
![poYBAGO0HR2AEia1AAAs7sNWPGE113.png](https://file.elecfans.com/web2/M00/88/41/poYBAGO0HR2AEia1AAAs7sNWPGE113.png)
在理想情況下,我不會(huì)出錯(cuò)。我還沒(méi)有看到流氓字節(jié),但我確實(shí)看到數(shù)據(jù)包被丟棄了。我如何確保以正確的順序收到所有數(shù)據(jù)?
這是下一個(gè)要解決的問(wèn)題。為每個(gè)數(shù)據(jù)包構(gòu)建一個(gè) ACK??,以便發(fā)送方可以確認(rèn)他發(fā)送的內(nèi)容確實(shí)已收到。我計(jì)劃發(fā)回收到的異或符號(hào)。但是我沒(méi)有其他激光二極管用于此目的...
- 信路達(dá) CAN收發(fā)器 XL2515-TSS數(shù)據(jù)手冊(cè)
- 低功耗收發(fā)器MAX490模塊電路圖下載 161次下載
- 硅鍺24GHz收發(fā)器MMICBGT24MTR11數(shù)據(jù)手冊(cè) 27次下載
- RS-232收發(fā)器SP3223E/3243E數(shù)據(jù)手冊(cè) 36次下載
- 單片無(wú)線收發(fā)器芯片NRF24L01 PCB原理圖下載 0次下載
- TC32306FTG射頻收發(fā)器數(shù)據(jù)手冊(cè) 32次下載
- 基于RF收發(fā)器的基帶處理器 7次下載
- 2.4GHz無(wú)線收發(fā)器IC及其應(yīng)用 29次下載
- FPGA與ADC數(shù)字?jǐn)?shù)據(jù)輸出的接口 96次下載
- 無(wú)線射頻收發(fā)器TRF6900A的應(yīng)用研究 151次下載
- 大功率無(wú)線數(shù)傳收發(fā)器安裝使用手冊(cè) 85次下載
- 基于MICRF005的高速無(wú)線UHF收發(fā)器原理及應(yīng)用
- 高保真數(shù)字無(wú)線音頻收發(fā)器產(chǎn)品說(shuō)明書(shū)
- 數(shù)字?jǐn)?shù)據(jù)網(wǎng)
- 計(jì)算機(jī)無(wú)線數(shù)據(jù)收發(fā)器電路及制作
- 射頻收發(fā)器是混合集成電路嗎 322次閱讀
- 收發(fā)器的主要作用與種類(lèi)詳解 2428次閱讀
- 收發(fā)器保護(hù)電路原理圖 747次閱讀
- 適用于數(shù)字混頻器的主要選項(xiàng) 1579次閱讀
- PoE光纖收發(fā)器如何工作,PoE光纖收發(fā)器的應(yīng)用 5256次閱讀
- 光纖收發(fā)器a與b怎么放 3w次閱讀
- 光纖收發(fā)器的效果原理 4229次閱讀
- ADI的最新收發(fā)器產(chǎn)品ADRV9009實(shí)現(xiàn)雜散去相關(guān)的收發(fā)器功能 8709次閱讀
- 數(shù)據(jù)通信與網(wǎng)絡(luò):數(shù)字?jǐn)?shù)據(jù),模擬數(shù)據(jù)和數(shù)字信號(hào)間的轉(zhuǎn)換 1.1w次閱讀
- 數(shù)字擴(kuò)頻收發(fā)器RF109:可將電路復(fù)雜程度和成本降到最低 1381次閱讀
- UAA3545收發(fā)器的應(yīng)用電路 1817次閱讀
- 收發(fā)器SA2421的技術(shù)特點(diǎn)和應(yīng)用電路 1021次閱讀
- 光纖模塊與光纖收發(fā)器使用方法_光纖模塊與光纖收發(fā)器的區(qū)別 2.5w次閱讀
- 基于TDA5255和XC866單片機(jī)的射頻收發(fā)器設(shè)計(jì) 1899次閱讀
- 有關(guān)光纖收發(fā)器的基本常識(shí)解析 1987次閱讀
下載排行
本周
- 1DeepSeek:從入門(mén)到精通
- 5.36 MB | 25次下載 | 1 積分
- 2中興通訊的PCB設(shè)計(jì)規(guī)范
- 23.03 MB | 2次下載 | 5 積分
- 3IP6823 支持 qi 認(rèn)證的無(wú)線充電發(fā)射控制 SOC
- 1.01 MB | 1次下載 | 免費(fèi)
- 4IP6824? 全集成QI?無(wú)線充電發(fā)射控制SOC
- 1.22 MB | 1次下載 | 免費(fèi)
- 5工程師入門(mén)必學(xué)的二十個(gè)模擬電路
- 0.37 MB | 1次下載 | 1 積分
- 6PESD18VY1BBIF保護(hù)二極管規(guī)格書(shū)
- 4.56MB | 次下載 | 免費(fèi)
- 774HC4050緩沖器規(guī)格書(shū)
- 217.58KB | 次下載 | 免費(fèi)
- 874HC73-Q100雙JK觸發(fā)器規(guī)格書(shū)
- 220.85KB | 次下載 | 免費(fèi)
本月
- 1A7159和A7139射頻芯片的資料免費(fèi)下載
- 0.20 MB | 55次下載 | 5 積分
- 2零死角玩轉(zhuǎn)STM32F103—指南者
- 26.78 MB | 41次下載 | 1 積分
- 3PIC12F629/675 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.38 MB | 36次下載 | 5 積分
- 4DeepSeek:從入門(mén)到精通
- 5.36 MB | 25次下載 | 1 積分
- 5PIC16F716 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.35 MB | 18次下載 | 5 積分
- 6GD32F4xx用戶手冊(cè)
- 14.49MB | 14次下載 | 免費(fèi)
- 7dsPIC33EDV64MC205電機(jī)控制開(kāi)發(fā)板用戶指南
- 5.78MB | 8次下載 | 免費(fèi)
- 8STC15系列常用寄存器匯總免費(fèi)下載
- 1.60 MB | 7次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935124次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73813次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論