最初にオーリンも気づいたこと:レベルは、マイクロコントローラーが通常出力するものの逆です:
心配する必要はありません。この方法でも読み込めることがわかります。スコープでは、スタートビットが1
ストップビットになり0
ます。
μμμ1
μ0
0x00
1
μ
0xFF
μ
推測値:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
編集
Olinは絶対に正しいです。これはASCIIのようなものです。実際のところ、ASCII の1の補数です。
0xCF〜0x30 = '0'
0xCE〜0x31 = '1'
0xCD〜0x32 = '2'
0xCC〜0x33 = '3'
0xCB〜0x34 = '4'
0xCA〜0x35 = '5'
0xF2〜0x0D = [CR]
これは、スクリーンショットの私の解釈が正しいことを確認します。
編集2(一般的な要求に応じてデータを解釈する方法:-))
警告:これは長い話です。これは、このようなものをデコードしようとすると頭の中で起こることの転写であるためです。それに取り組むための1つの方法を学びたい場合にのみ読んでください。
例:2つの狭いパルスから始まる、最初のスクリーンショットの2番目のバイト。最初のバイトよりもエッジが多いため、意図的に2番目のバイトから開始します。各狭パルスは約1/10分割されているため、それぞれが1ビット高く、その間に低ビットがあります。また、これより狭いものは見当たらないので、1ビットだと思います。それが参考です。
その後、101
低レベルでの期間が長くなった後。広い以前のものと同様に約2倍に見えますが、そのためには、可能性があり00
。それに続く高さは再び2倍の幅になります1111
。これで9ビットになりました:開始ビット(1
)+ 8データビット。次のビットはストップビットになりますが、0
すぐには見えません。したがって1010011110
、開始ビットと停止ビットを含めて、すべてをまとめることができます。ストップビットがゼロにならない場合、どこかで悪い仮定をしたでしょう!
私たちは、8つのデータビットを反転させる必要がありますので、UARTは最初のLSB(最下位ビット)を送ることに注意してください:11110010
= 0xF2
。
これで、シングルビット、ダブルビット、および4ビットシーケンスの幅がわかったので、最初のバイトを確認しました。最初の高周期(幅の広いパルス)は1111
、2番目のバイトよりわずかに広いため、5ビット幅になります。それに続くロー期間とハイ期間は、それぞれ他のバイトのダブルビットと同じ幅なので、を取得し111110011
ます。再び9ビットなので、次のビットは低ビット、つまりストップビットでなければなりません。私たちのguesstimatingが正しいかどうかのOKということなので、我々は再びデータビットを逆にすることができます:11001111
= 0xCF
。
その後、Olinからヒントを得ました。最初の通信は2バイト長で、2番目の通信より2バイト短いです。また、「0」は「255」よりも2バイト短くなっています。したがって、正確ではありませんが、おそらくASCIIのようなものです。また、「255」の2番目と3番目のバイトが同じであることに注意してください。素晴らしい、それは二重の「5」です。元気です!(時々自分自身を励まさなければなりません。)「0」、「2」、「5」をデコードした後、最初の2つのコードには2の違いがあり、最後の3つには3の違いがあることに気付きます。二。そして最後に、これがASCIIの数字のパターンである0xC_
の補数であることに気付きました0x3_
。