이진수에서 입력이없고 0이 혼동되지 않습니까?


10

0이 2Hz이고 1이 4Hz 인 FM을 통해 데이터를 전송한다고 가정합니다. 송신기는 입력이 없을 때 2Hz를 전송합니다. 수신 된 바이너리를 마이크로 컨트롤러의 UART 포트에 공급하면 마이크로 컨트롤러는 데이터와 0을 어떻게 구별 할 수 있습니까?

예를 들어 ASCII 문자를 전송할 때 관련이 있습니다. 다음 문자열을 가정하십시오.

01000110 01101111 01101111 01100010 01100001 01110010

공백을 추가 했으므로 다음과 같이 변환 할 수 있습니다.

푸바

그러나 기계에 문자열은 다음과 같습니다.

010001100110111101101111011000100110000101110010

바이너리를받을 때 ASCII 문자가 엉망이되지 않도록 어떻게 이러한 "공백"을 작성 하시겠습니까?


5
여기 UART이 그것을 해결하는 방법입니다 링크를 . zou는 UART 포트로 비트를 공급하기 때문에 비트를 정지 및 시작해야합니다.
Bence Kaulics

나는 당신의 다이어그램을 잘 이해하지 못합니다. "시작 비트"는 단순히 0으로 나타나서 내 문제를 다시 나타냅니다. 예를 들어 문자열이 000 01111000 000 인 경우 01111000과 00111100의 차이를 어떻게 알 수 있습니까?
Allenph

2
@Allenph는 버스를 보내지 않을 때 유휴 상태이며 논리적으로 높은 상태를 유지합니다. 패키지 전송을 시작할 때 첫 번째 비트는 항상 논리적으로 낮습니다. 이것이 시작 비트입니다. 그런 다음 8 개의 데이터 비트와 논리적으로 높은 정지 ​​비트를 따릅니다. 마이크로 프로세서는 구성한 버스 속도를 알고 있으므로 다음 비트가 도착하는시기를 알고 있습니다. 마이크로 프로세서와 마이크로 프로세서로 전송되는 장치는 모두 동일한 전송 속도로 구성되어야합니다.
Mattias Johansson

답변:


16

마이크로 프로세서의 UART 포트에 무언가를 공급하는 경우 마이크로 프로세서가 공급하는 내용을 이해하도록하려면 UART 통신 프로토콜을 따라야합니다. 시작 비트, 정지 비트 및 패리티 비트를 포함하는 UART 패키지에 각 ASCI 문자를 포함시켜야 합니다 . UART Wikipedia 페이지 에서 더 많은 정보를 얻을 수 있습니다 .

전송하지 않으면 버스가 유휴 상태이고 논리적으로 높은 상태로 유지됩니다. 패키지 전송을 시작할 때 첫 번째 비트는 항상 논리적으로 낮습니다. 이것이 시작 비트입니다. 그런 다음 8 개의 데이터 비트와 논리적으로 높은 정지 ​​비트를 따릅니다. 마이크로 프로세서는 구성한 버스 속도를 알고 있으므로 다음 비트가 도착하는시기를 알고 있습니다. 따라서, 예를 들어 서로 옆에 2 개의 0을 전송할 수있다. 마이크로 프로세서와 마이크로 프로세서로 전송되는 장치는 모두 동일한 전송 속도, 패리티 및 정지 비트 수로 구성되어야합니다.


2
요점은 구성된 정지 비트 수가 최대 값이 아니라 최소값이라는 것입니다. 비동기 직렬 회선의 유휴 상태는 확장 정지 비트입니다. 따라서 라디오 0에서 유휴 상태 여야 하는 경우 쉬운 대답은 라디오를 운전하기 전에 UART 출력을 반전시켜 0에서 유휴 상태가되도록하고 1은 시작입니다. 그런 다음 수신 된 데이터를 UART로 처리하기 전에 반전하십시오.
RBerteig

6

이를위한 많은 기술이 있습니다. 맨체스터 코딩 또는 NRZ 코드를 볼 수 있습니다. 또는 8b / 10b 코딩 은 8 개의 모든 데이터 비트를 10 비트 시퀀스에 매핑하여 클럭 복구, 오류 수정 및 전송의 시작과 끝을 감지하는 데 사용할 수있는 특수한 "쉼표"기호를 허용합니다.


5

모든 ASCII 문자는 8 비트 너비이며 ASCII 표에서 확인할 수 있습니다. ASCII 문자의 HEX 값이 FF를 초과하지 않습니다 (1111 1111)

UART는 한 번에 두 개 이상의 데이터 바이트 (8 비트)를 수신 할 수 없으며, 8 비트 데이터 외에 STOP 및 START 비트, PARITY 및 몇 가지가 더 있습니다. 아래 그림과 같이 UART 통신 패킷을 구성합니다.

여기에 이미지 설명을 입력하십시오

ASCII 문자를 UART로 보낼 때 하나씩 문자를 보내면 문자열이 만들어집니다. 문자열은 단순히 문자 배열이라는 것을 알고 있습니다.


4
ascii는 8이 아닌 7 비트이지만, 정렬을 간단하게하기 위해 8 비트에 넣는 것이 일반적입니다. 또한 다른 문자 세트와 utf8도 허용합니다.
폐지

0

Mattias가 설명했듯이 UART 프로토콜은 시간 기반 비동기 프로토콜입니다. 비트들 사이의 경계를 정의하는 것은 시작 비트의 시작부터 걸리는 시간이다. 따라서 마이크로 컨트롤러는 (N+half)/baudrate시작 비트가 시작된 후 비트 초를 "샘플링"합니다 . 반 비트는 비트 중간에서 샘플링하기 때문에 수신기와 송신기 사이의 타이밍에서 반 비트 차이를 가질 수 있습니다 (차이는 누적되며 최악의 경우는 각 프레임의 마지막 비트에서 발생합니다. 구성에 따라 항상 8 비트 너비 인 것은 아닙니다. 작동하게하는 비결은 가능한 한 가까운 전송 속도를 가진 수신기와 트랜시버를 갖는 것입니다.

따라서 마이크로 컨트롤러는 각 비트 사이의 시간을 계산하여 각 비트가 프레임 내부에 어디에 있는지 알 수 있습니다. 다음 캐릭터는 다음 프레임으로 이동합니다. 각 프레임이 끝나면 마이크로 컨트롤러가 다음 프레임을 자동으로 청취하기 시작하므로 다음 시작 비트가 오면 새로운 프레임을 시작해야한다는 것을 이미 알고 있습니다. 문자가 분리되는 방식입니다.

또한 UART 수신 마이크로 컨트롤러로 전송하기 위해 실제로 두 개의 주파수가 필요하지 않다고 덧붙입니다. FSK 로 두 개의 주파수 대신 단일 주파수를 OOK 로 사용할 수 있습니다 . 모스 부호와 매우 유사하게 송신기로서 반송파 스위처와 수신기로서 단일 주파수 검출기 만 필요하기 때문에 더 높은 스펙트럼 효율을 가지며 회로는 훨씬 간단합니다. 일반적으로 전송 속도보다 훨씬 높은 주파수의 반송파를 사용해야합니다. 그렇지 않으면 간단한 회로가 제대로 작동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.