我一直在使用蓝牙模块(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”应用程序在屏幕上显示收到的数据。
以下是接收模式的配置(数据显示为十六进制值):
此处收到的数据应从0X00开始,最高为0XFF,而不是从0X80开始,以非常陌生的方式增加到0XFF。
参考上图。我在这里观察到的模式是,十位数位从8开始,单位位置从0变为F,然后在下一循环中再次变为9,单位位置从0变为F,之后不再增加(预期)十位在8个然后在下一个周期中它再次变为9,在这两个重复单词的这四个周期之后,数字位置增加到A,单位位置从0变为F,之后奇数十位数模式重新出现A和B然后C和D后来E和F在十几个地方。
所以我担心的是:
为什么设备显示80表示00,因为它正确地为某些地方工作,为什么它不能像预期的那样在数十个地方工作?
感谢!!!
修改
此问题既不是Android版本,也不是设备制造商特定的。
答案 0 :(得分:0)
问题在于电压水平。在3.2V上操作微控制器电路和在3.8V上操作蓝牙模块解决了问题并且数据按预期传输。但是我无法预测这方面的解释。
请帮忙。
在变化电压调节器的电位器上可以清楚地观察到,当我将其保持在3.20V以下时,数据传输平稳,并且当电压电平超过3.20V时,数据的十位开始被破坏直到完整数据点损坏和输出在3.8V变为恒定数据0XFE。