避免在无输入和二进制零之间混淆?


10

假设我正在通过FM传输数据,其中0为2Hz,1为4Hz。没有输入时,发射器正在发射2Hz。如果我将收到的二进制文件输入微控制器的UART端口,微控制器将如何区分无数据和0?

例如,这在传输ASCII字符时变得很重要。假设以下字符串:

01000110 01101111 01101111 01100010 01100001 01110010

因为我添加了空格,所以我们可以将其转换为:

富巴

但是对于一台机器,字符串看起来像这样:

010001100110111101101111011000100110000101110010

您将如何创建这些“空格”,以便在接收二进制文件时不会弄乱ASCII字符?


5
这是UART解决它的方法,链接。停止和启动位,因为zou将其馈送到UART端口,因此zou也应将其传输。
Bence Kaulics,2015年

恐怕我不太了解您的图表。看来“起始位”只是零,这再次说明了我的问题。例如,如果字符串为000 01111000 000,它将如何知道01111000和00111100之间的差异?
亚伦夫,2015年

2
@Allenph,当您不发送总线时,它处于空闲状态,并处于逻辑高状态。当您开始传输数据包时,第一位在逻辑上总是很低。这是开始位。然后是八个数据位,然后是逻辑高的停止位。微处理器知道下一个位的到达时间,因为它知道您已配置的总线速度。微处理器和传输到微处理器的单元都需要配置为相同的传输速度。
Mattias Johansson

Answers:


16

如果将某些东西馈送到微处理器的UART端口,则要使微处理器了解要馈入的内容,必须遵循UART通信协议。您需要将每个ASCI字符嵌入到一个UART包中,该包包含一个起始位,一个停止位以及可能的一个奇偶校验位,有关更多信息,请参见UART Wikipedia页面

不发送时,总线处于空闲状态,并保持逻辑高状态。当您开始传输数据包时,第一位在逻辑上总是很低。这是开始位。然后是八个数据位,然后是逻辑高的停止位。微处理器知道下一个位的到达时间,因为它知道您已配置的总线速度。因此,可以例如彼此相邻地发送例如两个零。微处理器和传输到微处理器的单元都需要配置为相同的传输速度,奇偶校验和停止位数。


2
关键是停止位的配置数量是最小值,而不是最大值。异步串行线的空闲状态是扩展的停止位。因此,如果无线电必须在0处空闲,那么简单的答案是在驱动UART之前先反转UART输出,以使其在0处空闲,并且1是开始。然后将接收到的数据取反,然后再使用UART处理它。
RBerteig 2015年

6

为此有很多技术。您可能需要查看曼彻斯特编码或NRZ代码。或8b / 10b编码,它将每8个数据位映射到一个10位序列,该序列允许时钟恢复,纠错和可用于检测传输开始和结束的特殊“逗号”符号。


5

所有ASCII字符均为8位宽,您可以在ASCII表中看到它。ASCII字符的十六进制值不超过FF(1111 1111)

UART一次不能接收一个以上的数据字节(8位),除了8位数据外,还有STOP和START位,奇偶校验等,您可以在下面的图片中看到它们,它们共同构成了UART通信数据包。

在此处输入图片说明

因此,当您将ASCII字符发送到UART时,就是一一发送,这就是字符串的制作方式。您已经知道字符串只是一个字符数组。


4
ascii是7位,而不是8位,但是通常将其放到8位中以使对齐变得微不足道。它还允许其他字符集和utf8。
hildred

0

正如Mattias解释的那样,UART协议是基于时间的异步协议。定义位之间边界的是从起始位开始算起的时间。因此,微控制器将(N+half)/baudrate在起始位开始的几秒钟后对位进行“采样” 。半个比特只是在比特的中间进行采样,因此它在接收器和发送器之间的时序可能会有半个比特的差异(请记住,差异是累积的,最坏的情况发生在每个帧的最后一位,通常是(并非总是8位宽,具体取决于配置)。使其工作的关键是使接收器和收发器的波特率尽可能接近。

因此,微控制器对每个位之间的时间进行计数,以了解每个位在帧内的位置。下一个字符将进入下一帧。当每个帧结束时,微控制器开始自动侦听下一帧,因此当下一个开始位出现时,它已经知道应该开始一个新帧。这就是字符分离的方式。

另外,我要补充一点,您实际上不需要两个频率即可传输到UART接收微控制器。您可以将单个频率用作OOK,而不能将两个频率用作FSK。它具有更高的频谱效率,电路也更简单,因为您只需要一个载波切换器作为发送器,一个频率检测器作为接收器,就像莫尔斯电码一样。请记住,通常使用频率远高于波特率的载波,否则较简单的电路将无法正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.