Pic16F688 通过蓝牙没有稳定的读数

Pic16F688 has no stable readings via buletooth

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

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

可能是我的接线不正确,如果你能帮忙解决一下 我需要为 Mikro PRO 软件选择什么配置 "at edit project"? 我使用 "Bluetooth terminal" 应用程序从蓝牙异步查看我的数据。 谢谢你。


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);
    }
}

您可以使用 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);
}

请检查您在两端配置的波特率是否相同。如果波特率不匹配,那么您将在 Bluetooth Terminal 读取值的地方获得随机值。

我的建议是,如果您有逻辑分析仪,请将其连接起来。如果您不使用数据表重新计算振荡器速度。可能只是内部振荡器不够准确。同样有效的是,在程序集中编写一个等待已知时间的函数(通过复制粘贴大量 NOPs 并使用它使 LED 闪烁。然后启动秒表并计数,例如闪烁 100 次。这是我在拥有逻辑分析仪之前所做的。(它们在 ebay 上很便宜)。