蓝牙数据显示为0X80而不是0X00

时间:2014-07-02 07:31:30

标签: bluetooth avr

我一直在使用蓝牙模块(HC-05)和Atmega8(A和L)微控制器将数据传输到我的Android设备。在下面的代码中,通过蓝牙发送8位有符号(或无符号未进行任何更改)值以在设备上显示,该值从0X00开始并在每次迭代中递增:

#define F_CPU 1000000
#define BAUD 9600
#define MYUBRR (F_CPU/16/BAUD-1)

#include <avr/io.h>
#include <util/delay.h>

int main (void)
{
uint8_t data = 0;

UBRRH = (MYUBRR >> 8);      // setting higher bits of UBRR
UBRRL = MYUBRR;         // setting lower bit of UBRR

UCSRB = (1 << TXEN);        // transmit enable
UCSRC = ((1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0));   //URSEL=USART reg selection (R/W), UCSZ1 & UCSZ0 set equal to 011 that is 8 bit data size

while (1)
{
UDR=data;           // loading data in USART Data register (8-bit) and it will be transmitted immidiately
while(!(UCSRA&(1<<UDRE)));     // waiting till complete data sent and UDRE flag set
_delay_ms(200);         // after some time
data++;             // incrementing data
}
return 0;
}

在Android设备端,有“蓝牙spp Pro”应用程序在屏幕上显示收到的数据。

以下是接收模式的配置(数据显示为十六进制值):

Data is displayed as hex characters and not ASCII

此处收到的数据应从0X00开始,最高为0XFF,而不是从0X80开始,以非常陌生的方式增加到0XFF。

continuous stream of data

参考上图。我在这里观察到的模式是,十位数位从8开始,单位位置从0变为F,然后在下一循环中再次变为9,单位位置从0变为F,之后不再增加(预期)十位在8个然后在下一个周期中它再次变为9,在这两个重复单词的这四个周期之后,数字位置增加到A,单位位置从0变为F,之后奇数十位数模式重新出现A和B然后C和D后来E和F在十几个地方。

所以我担心的是:

为什么设备显示80表示00,因为它正确地为某些地方工作,为什么它不能像预期的那样在数十个地方工作?

感谢!!!

修改

此问题既不是Android版本,也不是设备制造商特定的。

1 个答案:

答案 0 :(得分:0)

问题在于电压水平。在3.2V上操作微控制器电路和在3.8V上操作蓝牙模块解决了问题并且数据按预期传输。但是我无法预测这方面的解释。

请帮忙。

在变化电压调节器的电位器上可以清楚地观察到,当我将其保持在3.20V以下时,数据传输平稳,并且当电压电平超过3.20V时,数据的十位开始被破坏直到完整数据点损坏和输出在3.8V变为恒定数据0XFE。