Pic16F688通过buletooth没有稳定的读数

时间:2015-06-06 03:57:24

标签: android bluetooth pic android-bluetooth

我花了很多时间试图找出我的错误在哪里我闪烁PIC16F688。 Pic已使用PicKit2成功闪存。我使用Pic将模拟压力传感器转换为数字输出并通过蓝牙发送数据,但蓝牙没有接收稳定数量的数据。数据由4个字符的十进制数组成,介于0和1023之间。 问题是蓝牙无法等待特定数字并继续读取,而是随机读取4位数字。

我认为我的错误在于内部振荡器的配置。 我附加了我的代码,编写代码来配置灵活的传感器电路,输出高达5v的模拟电压,然后pic占空比将其转换为数字,如上所述。

可能是我的接线不正确,请如果您可以帮忙解决这个问题 什么配置"在编辑项目"我需要选择Mikro PRO软件吗? 我使用"蓝牙终端"应用程序,以从蓝牙异步查看我的数据。 谢谢。

char *temp = "0000";
unsigned int adc_value;
char uart_rd; int i;
void main()
{
    OSCCON = 0x77;
    ANSEL = 0b00000100;
    CMCON0 = 0X07;
    TRISA = 0b00001100;
    UART1_Init(9600);
    Delay_ms(100);
    while (1)
    {
        adc_value = ADC_Read(2);
        temp[0] = adc_value/1000+48;
        temp[1] = (adc_value/100)%10+48;
        temp[2] = (adc_value/10)%10+48;
        temp[3] = adc_value%10+48;
        for (i=0;i<4; i++)
            UART1_Write(temp[i]);
        UART1_Write(13);
        Delay_ms(1000);
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用itoa函数将ADC整数值转换为通过UART发送的字符。如果计算中出现错误,那么您将无法获得适当的值。以下代码段供您参考:

while (1)
{
    adc_value = ADC_Read(2);
    itoa(adc_value, temp, 10);  
    for (i=0;i<4; i++)
        UART1_Write(temp[i]);
    UART1_Write(13);
    Delay_ms(1000);
}

请检查两端配置的波特率是否相同。如果波特率不匹配,那么您将在蓝牙终端处获得随机值,您正在读取值。

答案 1 :(得分:0)

如果你有逻辑分析仪,我会建议你把它连接起来。如果您没有使用数据表重新计算振荡器速度。可能只是内部振荡器不够准确。什么也有效,就是在程序集中编写一个等待已知时间的函数(通过复制粘贴很多NOP并使用它来闪烁一个led。然后启动一个秒表并计算,例如,100次闪烁。这是我在使用逻辑分析仪之前所做的事情。(它们在ebay上非常糟糕)。