먼저 Olin도 주목했습니다. 레벨은 마이크로 컨트롤러가 일반적으로 출력하는 것과 반대입니다.
걱정할 것이 없습니다. 우리도이 방법으로 읽을 수 있다는 것을 알게 될 것입니다. 우리는 단지 스코프에서 시작 비트가 a 1
및 정지 비트 임을 기억해야합니다 0
.
다음으로, 당신은 이것을 올바르게 읽을 시간 기반이 잘못되었습니다. 초당 9600 비트 (saud 당 잘못된 것은 아니지만 Baud보다 적절한 단위)는 비트 당 104 s이며 이는 현재 설정의 1/10 분할입니다. 확대하고 첫 번째 가장자리에 수직 커서를 설정하십시오. 시작 비트의 시작입니다. 두 번째 커서를 다음 각 모서리로 이동하십시오. 커서의 차이는 104 의 배수 여야합니다 . 각 104 s는 1 비트이며, 먼저 시작 비트 ( ), 8 데이터 비트, 총 시간 832 s 및 정지 비트 ( )입니다. μμμ1
μ0
화면 데이터가 전송 된 것과 일치하지 않습니다 0x00
. 좁은 1
비트 (시작 비트) 다음에 긴 하위 레벨 (936 s, 8 제로 데이터 비트 + 정지 비트)이 뒤 따릅니다 .
에 대한 같은 당신이 보내는; 당신은 긴 높은 레벨을 보게 될 것입니다 (이번에는 936 s, 이번에는 시작 비트 + 8 데이터 비트). 따라서 현재 설정과 거의 1 구간이어야하지만 그것이 내가 보는 것은 아닙니다.
첫 번째 스크린 샷에서 2 바이트를 보내고 두 번째 4에서 두 번째와 세 번째가 동일한 값을 갖는 것처럼 보입니다. μ
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/10의 분할이므로, 그 사이에 낮은 비트와 함께 각각 1 비트 높을 수 있습니다. 나는 또한 이것보다 좁은 것을 보지 못하므로 단일 비트라고 생각합니다. 이것이 우리의 참조입니다.
그런 다음 101
낮은 수준에서 더 긴 기간이 지난 후 . 이전 것보다 두 배 정도 넓습니다 00
. 높은 팔로어는 다시 두 배 넓습니다 1111
. 이제 시작 비트 ( 1
)에 8 데이터 비트를 더한 9 비트가 있습니다. 다음 비트는 스톱 비트가되지만0
즉시 보이지 않습니다. 1010011110
시작 및 정지 비트를 포함하여 모든 것을 하나로 모았습니다 . 정지 비트가 0이 아니라면 어딘가에 잘못된 가정을했을 것입니다!
UART는 LSB (최하위 비트)를 먼저 전송하므로 8 개의 데이터 비트를 반전시켜야합니다 : 11110010
= 0xF2
.
이제 단일 비트, 이중 비트 및 4 비트 시퀀스의 너비를 알고 첫 번째 바이트를 살펴 봅니다. 첫 번째 높은주기 (와이드 펄스)는 1111
두 번째 바이트의 것보다 약간 넓으 므로 5 비트 너비가됩니다. 그 다음에 오는 낮은 기간과 높은 기간은 다른 바이트의 더블 비트만큼 넓기 때문에 우리는 얻을 수 111110011
있습니다. 다시 9 비트이므로 다음 비트는 하위 비트, 정지 비트 여야합니다. 괜찮습니다. 추정이 정확하다면 데이터 비트를 다시 되돌릴 수 있습니다 : 11001111
= 0xCF
.
그런 다음 Olin에서 힌트를 얻었습니다. 첫 번째 통신 길이는 2 바이트이며 두 번째 통신보다 2 바이트 더 짧습니다. "0"도 "255"보다 2 바이트 짧습니다. 아마도 ASCII와 같을 수도 있지만 정확하게는 아닙니다. 또한 "255"의 두 번째와 세 번째 바이트는 동일합니다. 큰 "5"가 될 것입니다. 우린 잘 지내고있어! (때때로 자신을 격려해야합니다.) "0", "2"및 "5"를 디코딩 한 후 처음 두 코드의 차이가 2이고 마지막 코드의 차이가 3입니다. 두. 그리고 마지막으로 ASCII의 숫자 패턴 0xC_
인의 보수 임을 알았습니다 0x3_
.