比如说
AD采样的速率是800个点/秒,每个点是一个16bit数据。
波特率肯定要大于采样速率,设为19200波特率,19200/16=1200个数据。
差这400个数据怎么处理呢?
就是说如何实时的实现变采边传,互不影响。
比如说
AD采样的速率是800个点/秒,每个点是一个16bit数据。
波特率肯定要大于采样速率,设为19200波特率,19200/16=1200个数据。
差这400个数据怎么处理呢?
就是说如何实时的实现变采边传,互不影响。
我的意思是19200波特率意味着1秒钟必须发送2400个字节出去。
而每秒AD采集到的数据并没有2400个字节,只有1600个字节。
而单片机的数据空间有限,我也不想扩展,因此先将我需要的点存入数据空间,然后最后再传输是不可能的。
因此我的意思呢就是采1个字节,传1个字节,有延时没关系。
每秒串口传输的2400个字节大于AD采到的1600个字节。这时就有800个字节的裕量。
就是说采的慢,传的快。
我画了一个示意图:
我画问号的地方,实际上是没有数据要发送的。这些问号应该填充什么?
光看标题,没有看懂,进来看讨论后,明白了,不知道是什么样的系统需要这样用串口来实施传输A/D采样,一般人家是A/D采样后,单片机处理完再用通讯直接传输结果(上述意思是通常没必要直接传输每个点的A/D数据);如果是必须采用这种方式(不常见),那么也能正常执行(相对而言通讯是慢速,不能进行实时控制的),回复你4帖的问题,在波特率是19200的情况下,不能保证一次不丢码,如果每次确认都接收OK的话,串口多余的时间等着,如果出现丢码,就重新发送!
呃,我有点晕了。
第一:串口不是一直在工作的,而是你有数据传输的时候才会去启动它的。
第二:波特率是速度,不是量度。它是一秒钟传输速度可以达到2400个字节,不是说必须一定要2400个字节。就像一条短程高速公路,速度上限是120公里每小时,整条高速公路有三车道,但不一定每段200米内的三车道都有120公里每小时的车在走,也可以是一辆,或者更本没车在走。
当你把数据装载到串口寄存器,发送完了,它也就停止了,空数据的地方它根本不会理你,更别说发送了。你想想,像你说的,它每秒钟都要发送2400字节的数据,那么除非它的send寄存器有自动清零功能,不然,在你装载入下个数据之前,它一直送的是前面你送的这个数据。那你的接收端的receive寄存器的门不得给数据扣爆了。一秒钟,串口中断2400次,你MCU内核主频如果不够大,直接死给你看。
另外,有个建议,就是你这串口如果只是用来传AD数据而不是其他大数据包的话,真没必要这么大,2400左右就可以了。这速度已经可以让你感觉到实时了,也不会让ADC芯片数据需要堆栈的。让MCU多休息,品质会提高。频率减小了,时序出错的几率也减小了,品质也会提高。同时,功耗可以降低。
了解,解释的清晰明了!非常感谢!
我是要采集一个系统里面某电容充电时的两端电压,这个电容充电的时间也就0.5s左右,所以需要用单片机AD的最高速度采,采完以后立刻发送出去