ความแตกต่างระหว่างค่าไบนารีจริงและค่าออสซิลโลสโคป


14

ฉันพยายามดู ASCII "A" ตัวละครด้วยออสซิลโลสโคป แต่ค่าไบนาสโคปจริงและค่าออสซิลโลสโคปแตกต่างกันเพราะเหตุใด ASCII "A" ค่าไบนารี - 01000001

ออสซิลโลสโคปแสดงกราฟนี้:

แอสดีไอ

แอสดีไอ

ฉันใช้ Arduino Uno เพื่อส่งค่า ASCII โดยใช้รหัส:

void setup() {  
  Serial.begin(9600);  
}  

void loop() {  
  Serial.println("A");  
  delay(1000);  
}

คำตอบ:


35

นี่คือวิธีที่คุณอ่านรูปคลื่นสโคป ฉันใช้เวลาในการแก้ไขรูปคลื่นของคุณและใส่คำอธิบายประกอบเพื่อแสดงว่าเป็นบิตใด ไมโครคอนโทรลเลอร์ส่ง 10 บิตต่อตัวอักษร เริ่มต้นซึ่งเป็น 0, 8 บิตข้อมูลและ STOP ซึ่งเป็น 1 เสมอเสมอสายยังคงอยู่ที่ 1 ดังนั้นขอบเริ่มต้นที่ล้มลงครั้งแรกจะแจ้งเตือนผู้รับว่าไบต์กำลังมา บิตจะถูกส่งไปยัง LSB ก่อนดังนั้นหากคุณต้องการ "ลองดู" ในแบบนั้นคุณต้องทำการมิรเรอร์ตามแนวนอนเพื่อให้เข้าใจได้ ความกว้างของแต่ละบิตจะถูกกำหนดโดย baudrate และตัวส่งและตัวรับจะต้องทราบว่า baudrate นั้นคืออะไร

จากภาพด้านล่างคุณจะเห็นว่ามันส่งอักขระสามตัว: อักขระ ASCII 'A', การขึ้นบรรทัดใหม่และการป้อนบรรทัด

ป้อนคำอธิบายรูปภาพที่นี่


ถ้าเป็นการสื่อสารแบบอนุกรมคลื่นก็ให้อย่างนี้ ขวา? CR และ LF คืออะไร ข้อมูลอื่นใดที่สามารถได้รับเช่น CR หรือ LF
38701

1
CR คือ Carriage Return, LF คือ Line Feed พวกเขาช่วยกันสร้าง Newline เช่นเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดถัดไป พวกเขาเป็นส่วนหนึ่งของมาตรฐาน "ASCII" ("รหัสมาตรฐานอเมริกันสำหรับการแลกเปลี่ยนข้อมูล"), google "แผนภูมิ ASCII" หรือบางอย่าง
PkP

@ user38701: CRLF คือสิ่งที่เกิดขึ้นเมื่อคุณกดปุ่ม Enter ในทางเทคนิค CR ควรจะเป็นคีย์ส่งคืนและ LF ควรจะเป็นคีย์ Enter แต่คอนโซลอนุกรมตีความคีย์ Enter เป็น CRLF (หรือบางครั้งก็เป็น LF) ในภาษาการเขียนโปรแกรมส่วนใหญ่ CR คือ "\ r" และ LF คือ "\ n" แต่คอมไพเลอร์ / ภาษาเอาท์พุท CRLF สำหรับ "\ n" บางอย่าง
slebetman

1
ผลตอบแทนการขนส่งง่าย เขาใช้printlnคำสั่งซึ่งหมายถึงพิมพ์สตริงเช่นเดียวกับ "\ r \ n" ดังนั้นตัวละครสามตัว
ps95

1
มันเป็นที่น่าสังเกตว่าการเลิกจ้างสายเป็นระบบเฉพาะ CRLF เป็นหลักในการเลิกจ้างสาย Windows และ Arduino หากคุณทดสอบซ้ำโดยใช้เทอร์มินัลบน linux เป็นแหล่งที่มาของ "A" คุณจะเห็นเฉพาะ LF
Nicolas Holthaus

13

หากคุณดูเอกสารประกอบArduino println ()คุณจะเห็นว่ามันผนวกการขึ้นบรรทัดใหม่และการป้อนบรรทัดเข้าที่ท้าย ดังนั้นในทศนิยมคุณจะลงท้ายด้วย 65 (A), 13 (CR) และ 10 (LF) ซึ่งในไบนารี่แปลเป็น:

01000001 00001101 00001010

ข้อมูลอนุกรม Async จะถูกส่ง LSB ก่อนเพื่อที่จะกลายเป็น:

10000010 10110000 01010000

สัญญาณของคุณไม่ได้ใช้งานสูงดังนั้นบิตเริ่มต้นจะเป็น 0 และบิตหยุดจะเป็น 1 ดังนั้นการเพิ่มลงในแต่ละไบต์และคุณสิ้นสุดด้วย:

0100000101 0101100001 0010100001

เป็นการยากที่จะกำหนดเวลาที่แน่นอนจากไดอะแกรมของคุณ แต่ดูเหมือนว่าจะจับคู่กันอย่างน้อยและควรให้แนวคิดว่าบิตพิเศษบางอย่างมาจากไหนและเหตุใดจึงสั่งซื้อใหม่ ลิงค์ Wikipedia ที่จัดทำโดย Kvegaoro ให้ข้อมูลพื้นฐานที่ดีเกี่ยวกับข้อมูลซีเรียลแบบอนุกรม


1

หากสตรีมที่คุณแสดงว่ามีซีเรียลแบบอะซิงโครนัสออสซิลโลสโคปจะแสดงบิตเริ่มต้นที่สอดคล้องกันหยุดบิต (s) และบิตพาริตี้ พิจารณาว่าสัญญาณของคุณกลับด้านหรือไม่และสภาพอากาศเป็นบิตที่สำคัญที่สุดก่อน หากคุณเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับสตรีมอนุกรมที่คุณได้แสดงไว้ในภาพเราสามารถให้คำตอบที่มีรายละเอียดมากขึ้นดีกว่ามิฉะนั้นนี่เป็นเพียงการเดาที่มีการศึกษา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.