三版(绿色)调试问题汇总

* 传感器问题:
电压不对,太低1.6
PCB设计不对

* CO2的485串口:
430可以收到pc发来的数据,且收到的数据是正确的,但是430发出的数据pc没有接收到(即不论正确与否,啥都没收到)。用示波器看时,在430给pc发数据是,端子上确实有波形,但就是没有数据。
测试485方向管脚的电平变化也都正常。
测试电子开关的供电也都正常。
解决:端子出来的收和发上各自多设计了一个510欧姆电阻。去掉后PC能收到板子发的前面部分数据。
修改程序,在发送完后,增加了延迟,之后才切换485方向位。然后,完全正常。

*DTU的485串口:
430可以收到pc发来的数据,但接收到的是乱码 9600和115200一样的。
测试485方向管脚的电平变化也都正常。

*DTU的232串口:
430能收到pc发来的数据,但是乱码
pc能收到430发来的数据,但是乱码

*看门狗问题:
看门狗打开的情况下,停止喂狗后,系统为停止状态,而不是重启。
解决:
用示波器测试,发现看门狗一直在发送重启信号,导致系统处于不断重启的状态,看起来就似乎cpu停止运行了。
继续测试,发现在看门狗发送rst信号时,会把启动系统的3.3拉下来一个毛刺,低于3.0v了,因此cpu就无法正常工作了。
之所以,系统3.3会被拉下来,怀疑是提供系统3.3的XC6206P332MR功率不够,而看门狗发出rst信号导致cpu启动时有一个比较大电流,会把系统3.3拉下来。
把看门狗接到外设3.3后工作正常。

*rtc问题:
断掉rtc的系统供电后(即关闭拨码开关),应该是由纽扣电池给rtc供电,应该能正常使用时间,但实际上不行。
因为R109 110 111上拉到了VCC3.3,而断掉rtc的系统供电后,就不存在上拉了,所以故障。

*供电电压到7V系统就不工作了
因为5v芯片的工作门限就是这样设置的。

*****************************

为了省电,在使用完串口后把串口关闭,但是,在关闭串口时,串口总会往外发出一个字符'',让人郁闷。
我使用的关闭串口的程序如下:
RS0_PORT_SEL &= ~(TXD + RXD);
UCA0CTL1 |= UCSWRST;
UCA0IE &= ~UCRXIE;
解决:使用以下程序解决问题
RS0_PORT_SEL &= ~(TXD + RXD);

P3DIR &= ~TXD;
//P3OUT &= ~TXD;
P3OUT |= TXD;

UCA0CTL1 |= UCSWRST;
UCA0IE &= ~UCRXIE;

注意:P3OUT &= ~TXD和P3OUT |= TXD都可以达到效果,但似乎P3OUT |= TXD更省电些。

****************************

工作台串口往出发的数据是正常的,但收数据不正常(识别不出我发送的内容):
解决:把波特率从115200调整到9600,问题解决。
虽然解决了,但不太明白,如果说问题的原因是因为我的时钟频率低,但是为啥发正常。

*******************************

问题:
想用光照传感器的vcc来给433供电,但测试发现接上433模块后会把光照vcc拉的很低,以致于433无法正常工作。

解决:
原来是因为我把433的M0和M1直接接到了地上,接到IO上,让后把IO设为输出状态并置为高后,正常。

*******************************

433模块发出来的数据不完整的问题

---------------------------------

找了好久,找的好累,终于找到了

现象:板子通过433模块发出数据,另外一个433模块通过usb转ttl接到pc上。发现在某些时候pc收到的数据会少后半部分:

##0065CN=0001;MN=20050708S00001;SN=00005;CP=&&AirTemp=24.0

而完整的数据应该是:

##0065CN=0001;MN=20050708S00001;SN=00006;CP=&&AirTemp=25.0;AirHum=18;&&06C0

解决:

因为我用万用表在测试系统的电流情况,所以把万用表打到电流档串到了系统中。当我把档位调大(被测电流在量程内)时,数据正常;

当我把档位调小(被测电流不在量程内)时,数据丢失后半部分。

看来是由于万用表的使用不当导致了问题。

真是防不胜防啊。

*******************************

433从机采集土壤温度数据错误

---------------------------------

之前的文物采集程序,固定采集空气温湿度。但,在其他应用中有其他传感器,因此增加了其他几个传感器,但却发现土壤温度采集不上。

调试后发现,Init_18B20的初始化函数一直执行失败,把延迟相关的一个参数(ds1802_const)从16.5修改为1后正常。

结论:本以为433从机系统速度变慢了应该对采集数据没有影响,只是采集的时间长一些,结果是,不一定,18b20传感器看来时钟太快了不行,太慢了也不行。

*******************************

光照传感器的问题:

----------------------------------

只要使用获取光照传感器的函数,传感器的sensor_V3.3就无法关闭了。

原因:

因为光照使用了IIC(IO模拟)的,而IIC电路中有上拉到sensor_V3.3,这样的话,即便sensor_V3.3没有了,但是IIC管脚的电平也就给到sensor_V3.3了,所以出现了看起来似乎不能关闭sensor_V3.3的情况;实际上,并不是sensor_V3.3不能关闭,而是虽然关闭了,但是作为光照IIC用的IO管脚的电平到了sensor_V3.3了。

解决办法:在采集完光照传感器的数据后,把相关管脚置为输入模式(就像给sht11所做的一样)

----------------------------------

第二个问题

光照传感器在系统启动后采集第一次数据时总会采集不到,没有仔细研究原因

解决办法:

连续采2次,即便第一次错了,第二次是对的。

----------------------------------

第三个问题

低功耗工作

若要光照传感器低功耗工作,需要:

每次采集前再做传感器管脚的初始化工作

但切记,应该在打开传感器电源前,而且至少一段时间,否则会出错。

---------------------------------

第四个问题

采集需要的时间太长

原因:B_LUX30_Stop中的B_LUX30_delay_nms(1000)耗时太长,修改为B_LUX30_delay_nms(10)解决。

---------------------------------

土壤温湿度问题

给低功耗板子增加土壤湿度采集功能遇到问题
*湿度为0
因为在采集开始时只给了V3.3_SESOR,而土壤湿度使用的是V5.0_CTRL_SENSOR
但是依然不行,发现没有在main函数开始时调用Adc_Init();于是增加。
依然不行,又增加了Init_PMM();终于OK了
在查找为啥要调用Init_PMM()时发现,突然地、不知道原因的,不调用Init_PMM()也好了。晕!
在查找过程中,我把下句中的ADC12SHT1_15改成了ADC12SHT1_2,发现有数据了,但是之后又改回原值,也是好的。
ADC12CTL0 = ADC12ON + ADC12MSC +ADC12SHT0_15 + ADC12SHT1_15;

 ------------------------------------

修改太阳能版本的程序,发现程序运行以后很快就死机。
调试后发现就是在执行以下函数的IOCTRL_MOTOR_PULSE_LOW后死机的。

void SwitchIOCtrlMotorPulseLevel()
{

if (P2OUT & BIT7)
{
IOCTRL_MOTOR_PULSE_LOW;
}
else
{
IOCTRL_MOTOR_PULSE_HIGH;
}
}

原因:
因为在main函数的开始处定义了P2.7用作中断触发,而恰巧有定义:
#define IOCTRL_MOTOR_PULSE_LOW P2OUT&=~BIT7
而且,并没有定义函数中断处理函数,因此导致了死机。
解决方法:
1、删掉没有用到的马达相关函数
或者
2、定义P2.7的中断处理函数

 ------------------------------------

低功耗版本的程序采集不到光照传感器的数据

-----

之前的程序都已经处理好了,但因为程序有修改,就又采集不到正确的光照传感器数据了

解决:

折腾了一番之后,发现和大多数的问题一样,仍然是一个低级错误。

我定义了宏来决定使用外部16M时钟还是使用内部时钟,并且在其他地方使用了该宏是否定义作为条件来判断应该执行哪一段程序。

但是,我并没有把定义该宏的头文件include到所有使用该宏的文件中,但是,程序并不会报错,程序只是认为在没有include的文件中没有定义该宏罢了。

这就导致了问题:我以为已经定义了,但是实际上并没有定义,因此导致了错误。

原文地址:https://www.cnblogs.com/gaotaozhaolei/p/8045749.html