Perbedaan antara nilai biner nyata dan nilai osiloskop

14

Saya mencoba melihat karakter ASCII "A" dengan osiloskop tetapi nilai biner yang sebenarnya dan nilai osiloskop berbeda mengapa? ASCII "A" Nilai biner - 01000001

Osiloskop menampilkan grafik ini:

Ascii A

Ascii A

Saya menggunakan Arduino Uno untuk mengirim nilai ASCII menggunakan kode:

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

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

Jawaban:

35

Inilah cara Anda membaca bentuk gelombang osiloskop. Saya meluangkan waktu untuk mengedit gambar gelombang Anda dan membubuhi keterangan untuk menunjukkan bit mana. Mikrokontroler mengirimkan 10 bit per karakter; MULAI, yang selalu 0, 8 bit data dan BERHENTI yang selalu 1. Baris juga bertumpu pada 1, jadi ujung jatuh pertama MULAI memberi tahu penerima bahwa byte akan datang. Bit dikirim LSB terlebih dahulu, jadi jika Anda ingin "melihatnya" secara aritmetika, Anda perlu mirror mereka secara horizontal agar masuk akal. Lebar setiap bit ditentukan oleh baudrate, dan pemancar dan penerima keduanya harus tahu apa baudrate itu.

Dari gambar di bawah ini Anda dapat melihat bahwa ia mengirim tiga karakter: karakter ASCII 'A', carriage return, dan feed line.

masukkan deskripsi gambar di sini

PkP
sumber
Jika komunikasi serial, beri gelombang seperti ini. Baik? Apa itu CR dan LF? Apa data lain yang bisa didapat seperti CR atau LF?
user38701
1
CR adalah Carriage Return, LF adalah Line Feed. Bersama-sama mereka membentuk Baris Baru, misalnya kursor pergi ke awal baris berikutnya. Mereka adalah bagian dari standar "ASCII" ("Kode Standar Amerika untuk Pertukaran Informasi"), google "bagan ASCII" atau sesuatu.
PkP
@ user38701: CRLF adalah apa yang terjadi ketika Anda menekan tombol enter. Secara teknis, CR seharusnya menjadi tombol kembali dan LF seharusnya menjadi tombol enter tetapi konsol serial menginterpretasikan kunci enter menjadi CRLF (atau kadang-kadang hanya LF). Di sebagian besar bahasa pemrograman, CR adalah "\ r" dan LF adalah "\ n" tetapi beberapa kompiler / bahasa menghasilkan CRLF untuk "\ n"
slebetman
1
Pengembalian kereta sederhana. Dia menggunakan printlnperintah, yang berarti mencetak string, serta "\ r \ n". Jadi tiga karakter
ps95
1
perlu dicatat bahwa pemutusan jalur adalah khusus sistem. CRLF utamanya adalah pemutusan jalur Windows dan Arduino. Jika Anda mengulangi pengujian yang sama menggunakan terminal di linux sebagai sumber "A", Anda hanya akan melihat LF.
Nicolas Holthaus
13

Jika Anda melihat dokumentasi Arduino println (), Anda akan melihat bahwa itu menambahkan carriage return dan linefeed di akhir. Jadi dalam desimal Anda akan berakhir dengan 65 (A), 13 (CR) dan 10 (LF) yang dalam biner diterjemahkan menjadi:

01000001 00001101 00001010

Data serial Async dikirim LSB terlebih dahulu sehingga menjadi:

10000010 10110000 01010000

Sinyal Anda idle tinggi sehingga bit mulai akan 0 dan bit berhenti akan 1 sehingga menambahkan itu ke setiap byte dan Anda berakhir dengan:

0100000101 0101100001 0010100001

Agak sulit untuk menentukan waktu yang tepat dari diagram Anda, tetapi tampaknya setidaknya cocok secara kasar dan akan memberi Anda gambaran di mana beberapa bit tambahan berasal dan mengapa mereka dipesan ulang. Tautan Wikipedia yang disediakan oleh Kvegaoro memberikan banyak informasi latar belakang yang bagus tentang data serial async.

PeterJ
sumber
1

Jika aliran yang Anda tunjukkan ada serial Asynchronous , osiloskop akan menunjukkan bit mulai yang sesuai, stop bit dan bit paritas. Juga memperhitungkan apakah sinyal Anda terbalik atau tidak dan cuaca itu bit pertama yang paling signifikan atau sedikit lebih dulu. Jika Anda menambahkan detail lebih lanjut tentang aliran serial yang telah Anda wakili dalam gambar,, kami dapat memberikan jawaban yang lebih rinci dan lebih baik jika tidak, ini hanya tebakan yang terpelajar.

Kvegaoro
sumber