Gerçek ikili değer ve osiloskop değeri arasındaki fark


14

Osiloskoplu bir ASCII "A" karakteri görmeye çalıştım ama gerçek ikili değer ve osiloskop değerleri neden farklı? ASCII "A" İkili değer - 01000001

Osiloskop bu grafiği görüntüler:

Ascii A

Ascii A

ASCII değerini kodu kullanarak göndermek için bir Arduino Uno kullanın:

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

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

Yanıtlar:


35

Osiloskop dalga formunu nasıl okuduğunuz aşağıda açıklanmıştır. Dalga formu resminizi düzenlemek ve hangi bitin hangisi olduğunu göstermek için açıklama eklemek için zaman ayırdım. Mikrodenetleyici karakter başına 10 bit gönderir; START, her zaman 0, 8 veri biti ve her zaman 1 olan STOP. Hat da 1'de durur, bu nedenle ilk START düşen kenarı alıcıya bir bayt geldiğini bildirir. Önce bitler LSB gönderilir, bu yüzden aritmetik olarak onlara "bakmak" istiyorsanız, herhangi bir anlam ifade edebilmeleri için yatay olarak aynalamanız gerekir. Her bitin genişliği baudrat tarafından belirlenir ve verici ve alıcı baudratın ne olduğunu bilmelidir.

Aşağıdaki resimde üç karakter gönderdiğini görebilirsiniz: ASCII karakteri 'A', satır başı ve satır besleme.

resim açıklamasını buraya girin


Seri iletişim ise, dalga böyle verir. sağ? CR ve LF nedir? CR veya LF gibi diğer veriler nelerdir?
user38701

1
CR Satır Başı, LF Satır Besleme'dir. Birlikte bir Newline oluştururlar, örneğin imleç bir sonraki satırın başına gider. Bunlar "ASCII" standardının ("Bilgi Değişimi için Amerikan Standart Kodu"), google "ASCII çizelgesi" veya başka bir şeyin parçasıdır.
PkP

@ user38701: Enter tuşuna bastığınızda CRLF olur. Teknik olarak CR'nin dönüş anahtarı olması ve LF'nin enter anahtarı olması gerekirken, seri konsol enter anahtarını CRLF (veya bazen sadece LF) olarak yorumlar. Çoğu programlama dilinde, CR "\ r" ve LF "\ n" dir, ancak bazı derleyiciler / diller "\ n" için CRLF çıktı
slebetman

1
Taşıyıcı dönüşü basittir. Bir printlnkomut kullandı , bu da dizeyi yazdırmanın yanı sıra "\ r \ n" yazdı. Yani üç karakter
ps95

1
satır sonlandırmalarının sisteme özgü olduğunu belirtmek gerekir.CRLF öncelikle Windows ve Arduino satır sonlandırmasıdır. Aynı testi linux üzerinde "A" kaynağı olarak bir terminal kullanarak tekrarladıysanız, yalnızca LF'yi görürsünüz.
Nicolas Holthaus

13

Arduino println () belgelerine bakarsanız, sonunda bir satır başı ve satır besleme eklediğini görürsünüz. Ondalık olarak ikilide şu anlama gelen 65 (A), 13 (CR) ve 10 (LF) elde edersiniz:

01000001 00001101 00001010

Async seri verileri önce LSB'ye gönderilir, böylece:

10000010 10110000 01010000

Sinyaliniz boşta yüksek, bu nedenle başlangıç ​​biti 0 ve durma biti 1 olacak, böylece her bayta ekleyerek aşağıdakilerle sonuçlanacaksınız:

0100000101 0101100001 0010100001

Diyagramınızdan tam zamanlamayı çalışmak biraz zor ama en azından kabaca eşleşiyor gibi görünüyor ve ekstra bitlerin bazılarının nereden geldiği ve neden yeniden sipariş verildiği hakkında bir fikir vermelidir. Kvegaoro tarafından sağlanan Wikipedia bağlantısı, zaman uyumsuz seri veriler hakkında birçok iyi arka plan bilgisi verir.


1

Gösterdiğiniz bu akış Asenkron seri olduğunda, osiloskop karşılık gelen başlangıç ​​bitini, durdurma bit (ler) ini ve eşlik bitlerini gösterecektir. Ayrıca, sinyalinizin ters çevrilip çevrilmediğini ve hava durumunun en önemli bit olduğunu ya da ilk önce önemli bit olduğunu dikkate alın. Resimde temsil ettiğiniz seri akışı hakkında daha fazla ayrıntı eklerseniz, size daha ayrıntılı bir cevap verebiliriz, aksi takdirde bu sadece eğitimli bir tahmindir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.