Get Adobe Flash player
ค้นหาบทความ
ตุลาคม 2022
จ. อ. พ. พฤ. ศ. ส. อา.
 12
3456789
10111213141516
17181920212223
24252627282930
31  

การเข้ารหัสข่าวสารแบบตรวจสอบและแก้ที่ผิดด้วย MCS51

        การเข้ารหัสข่าวสารเป็นอีกวิธีการหนึ่งที่จะทำให้การส่งข้อมูลเข้าไปยังช่องสัญญาณได้อย่างมีประสิทธิภาพ เนื่องจากหากส่งข้อมูลไปในช่องสัญญาณโดยไม่มีการเข้ารหัส เมื่อเกิดสัญญาณลบกวนในช่องสัญญาณก็จะทำให้ข้อมูลที่รับได้เกิดความผิดพลาดขึ้น แต่ถ้าหากผู้ส่งมีการเข้ารหัสสัญญาณข้อมูลก่อนส่งแล้ว เมื่อเกิดสัญญาณลบกวนขึ้นในช่องสัญญาณ ภาครับก็ยังสามารถตรวจสอบและแก้ไขข้อมูลที่ส่งมาให้ถูกต้องเหมือนข้อมูลต้นฉบับได้ แต่ทั้งนี้วิธีการตรวจสอบแก้ไขข้อผิดพลาดจะได้มากหรือน้อยก็ขึ้นอยู่กับหลักการที่นำมาใช้

        การทดลองครั้งนี้ผมจะนำไมโครคอนโทรเลอร์ตระกูล MCS51

มาทดลองการส่งและรับข้อมูลโดยให้วงจรสามารถแก้ไขที่ผิดพลาดได้ 1 จุด หมายความว่าการส่งข้อมูล 8 บิต หากมีข้อมูลบิตใดบิตหนึ่งผิดพลาดไป ภาครับจะยังสามารถแก้ไขที่ผิดได้ให้ข้อมูลกลับมาถูกต้อง โดยจะขอนำหลักการที่มีใช้อยู่ในปัจจุบัน จะเริ่มจากหลักการง่ายๆ ก่อนที่จะใช้หลักการที่ซับซ้อนต่อไป

        เริ่มจาก สมมุติว่าเราต้องการจะส่งข้อมูล 10011010 เข้าไปในช่องสัญญาณที่เป็นคลื่นวิทยุ (ใช้วงจรสื่อสารไร้สายเพื่อการพัฒนา) และสมมุติว่าเกิดสัญญาณลบกวนขึ้นเนื่องจากมีฟ้าผ่าในช่วงสั่นๆทำให้ข้อมูลที่รับได้จากเดิม 10011010 กลายเป็น 11011010 แทน ทำให้ภาครับรับสัญญาณ ที่เป็น MSB ผิดพลาดไป หากไม่มีการแก้ไขก็จะทำให้ภาครับตีความหมายข่าวสารผิดไปค่อนข่างมาก จากตัวอย่างที่ยกมาให้ดูเราจะทำการเพิ่มเติมขั้นตอนการเข้ารหัสก่อนที่จะส่งข้อมูลออกไป และจะเพิ่มขั้นตอนวิธีการเมื่อภาครับรับสัญญาณได้ก่อนที่จะนำข้อมูลไปใช้

        วิธีการ คือ เราจะทำการเพิ่มบิตของข้อมูลที่เป็นรหัสเพื่อใช้ในการตรวจสอบเข้าไป สามารถหาปริมาณบิตที่ต้องการเพิ่มได้จากการคำนวณดังนี้ สมมุติว่าต้องการให้แก้ที่ผิดได้ 1 ที่ ในข้อมูล 8 บิต จะได้ว่า  2  สัญลักษณ์  โดย (จำนวนบิตทั้งหมด + 1) x 2บิตข้อมูล ≤ 2จำนวนบิตทั้งหมดจะได้ว่า 2  ≤ 212 แสดงว่า เราจะต้องใช้จำนวนบิตทั้งหมดที่ต้องส่งเป็น 12 บิต เพื่อให้สามารถตรวจสอบและแก้ไขข้อมูลจำนวน 8 บิตได้  เมื่อได้จำนวนบิตทั้งหมดแล้วเราจะนำมาเพิ่มบิตข้อมูลเข้าไปครับ วิธีการเพิ่มดูได้จากตาราง

 

*

1

*

2

3

4

*

5

6

7

8

ตำแหน่งข้อมูลแต่ละบิต

1

2

3

4

5

6

7

8

9

10

11

12

ตำแหน่งข้อมูล LSB – MSB

* คือ ตำแหน่งที่ใส่บิตตรวจสอบ

        จากนั้นนำข้อมูลที่จะส่งมาจัดลงตามตำแหน่งจะได้ดังนี้

          จากข้อมูล 10011010

 

 

*

*

1

*

0

0

1

*

1

0

1

0

ตำแหน่งข้อมูลแต่ละบิต

1

2

3

4

5

6

7

8

9

10

11

12

ตำแหน่งข้อมูล LSB – MSB

 

 

        เมื่อนำข้อมูลมาใส่แล้วก็ต้องเพิ่มบิตตรวจสอบที่เหลือลงไปพิจารณาจากตำแหน่งของบิตที่เป็น LOGIC 1 ในที่นี้คือตำแหน่งที่ 3,7,9,11 จากนั้นค่าของแต่ละตำแหน่งมา XOR กัน

        ตารางค่าประจำตำแหน่ง   

 

 

หลัก

ค่าข้อมูล

1

1000

2

0100

3

1100

4

0010

5

1010

6

0110

7

1110

8

0001

9

1001

10

0101

11

1101

12

0011

13

1011

14

0111

15

1111

 

 

           นำค่าของหลักที่เป็น LOGIC 1 มาตั้งแล้วทำการ XOR ได้ดังนี้

 

 

1100

3

1110

7

1001

9

1101

11

0110

ผลที่ได้

 

 

            นำค่าที่ได้มาใส่ในช่องที่ว่างไว้ * โดยเรียงลำดับกันไปจะได้

 

 

0 1 1 1 0 0 1 0 1 0 1 0 ตำแหน่งข้อมูลแต่ละบิต
1 2 3 4 5 6 7 8 9 10 11 12 ตำแหน่งข้อมูล LSB – MSB

 

 

            ข้อมูล 001100101010 จะเป็นข้อมูลที่เราจะส่งไปในช่องสัญญาณ  

          เมื่อข้อมูลเดินทางมาถึงภาครับ จากข้อมูล 10011010 นำมาเข้ารหัสได้ข้อมูลเป็น 011100101010 เพิ่มจากเดิม 8 บิตเป็น 12 บิต เมื่อข้อมูล 011100101010 เดินทางมาถึงภาครับและช่องสัญญาณมีสัญญาณลบกวนทำให้ข้อมูลผิดพลาดไป 1 บิต กลายเป็นข้อมูล 111100101010บิตแรกมีการผิดพลาดไป หากไม่มีการแก้ไขจะทำให้ภาครับตีความหมายผิดไปจากเดิมมาก แต่หากภาครับมีการตรวจสอบแก้ไขแล้ว จะสามารถแก้ไขข้อมูลกลับมาได้โดยมีวิธีการดังนี้

    วิธีการคือ นำข้อมูลที่ได้มาตรวจสอบดังนี้

 

 

1 1 1 1 0 0 1 0 1 0 1 0 แทนค่าตำแหน่งข้อมูลแต่ละบิต
1 2 3 4 5 6 7 8 9 10 11 12 ตำแหน่งข้อมูล LSB – MSB

 

 

        นำค่าของตำแหน่ง LOGIC ทีเป็น 1 มา XOR กัน ได้ดังนี้ ตำแหน่งที่ 1,2,3,4,7,9,11

 

 

 

1000

1

0100

2

1100

3

0010

4

1110

7

1001

9

1101

11

1000

รวม

 

 

        ถ้าผลที่ได้ของการ XOR ที่ภาครับไม่เป็น 0000  แสดงว่ามีที่ผิด จากตัวอย่างได้ผลเป็น 1000 แสดงว่าหลักที่ 1 ของข้อมูลผิดพลาด วงจรก็จะทำการกลับบิตที่ผิดตำแหน่งที่ 1 กลายเป็น 011100101010 เหมือนข้อมูลที่ภาคส่งส่งมาและทำการแยกข้อมูลออกจากรหัส โดยการดึงตำแหน่งที่ต้องการออกมา คือ

 

 

0

1

1

1

0

0

1

0

1

0

1

0

แทนค่าตำแหน่งข้อมูลแต่ละบิต

1

2

3

4

5

6

7

8

9

10

11

12

ตำแหน่งข้อมูล LSB – MSB

 

 

        ได้ 10011010 ออกมาเหมือนเดิม จากตัวอย่างนี้ทดลองใส่ข้อมูลผิดพลาดเข้าไปที่ตำแหน่งใดก็ได้ วงจรก็จะยังสามารถระบุที่ผิดและทำการแก้ไขให้โดยการกลับบิตที่เป็นผลลัพธ์เท่านั้น

          จากตัวอย่างที่ยกมาจะเห็นได้ว่าเมื่อเราเพิ่มบิตตรวจสอบเข้าไปกับข้อมูล เราก็จะสามารถระบุตำแหน่งที่ข้อมูลผิด และแก้ไขได้ เมื่อทราบวิธีการตรวจสอบและแก้ไขแล้วทีนี้ผมก็จะนำเสนอวงจรที่สร้างด้วย MCS51 ให้สามารถส่งข้อมูลแบบมีการเข้ารหัสข่าวสาร เพื่อให้สามารถแก้ไขที่ผิดได้ ส่งผลให้ข้อมูลที่เราทำการส่งออกไปไม่ว่าจะเป็นสัญญาณควบคุมระบบอะไรสักอย่างก็ตามที่ในช่องสัญญาณมีการรบกวนค่อนข่างสูง ข้อมูลที่ภาครับรับได้ก็จะยังสามารถรับได้อย่างถูกต้อง ถึงแม้ว่าวิธีการนี้จะสามารถแก้ไขได้เพียง 1 จุดเท่านั้น และต้องแรกกับปริมาณข้อมูลที่เพิ่มขึ้น 4 บิต ก็ตาม แต่ก็ยังถือว่าคุ่มค้ากับข้อมูลที่ถูกต้องที่ภาครับสามารถรับได้ครับ

บทความโดย กิติภูมิ