This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C123GH6PM:DHT11有问题

Guru**** 2380860 points
Other Parts Discussed in Thread: TM4C123GH6PM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/835373/ccs-tm4c123gh6pm-problem-with-dht11

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

大家好、

我尝试将 温度/湿度传感器 DHT11与 TM4C123GH6PM 相连。 我成功-温度和湿度正常。 突然,当我再次尝试读取数据时,会出现一些问题。 请不要说“看连接”,因为我检查了很多次。 出现问题是因为传感器在0之后始终为高电平或1。 有 DHT11的人可以尝试我的代码了。 还有一点、我在数据线上使用10k 或5k 上拉电阻器。

还有一个问题:为什么我使用时不能生成代码 ?

#include 
#include 
#include 
//#include 
include "hw_memmap.h"
#include "hw_types.h"
#include "hw_gpio.h"
#include "debug.h"

#include "crc_tctl.h"
#include "gpio.h"
#include "rom_map.h"
#include "包含"rom_prefix.h"

#include "nterm.h"#include



"包含"ctrab.h"







#include "ns"#ctrab.h.h.h"#include "#include "ns"#include "#ctrab.h.h.h.h"#include "#include "#include "#ctrab.h.h"#include "#include "ns"#include "#include "#ctrab.h.h.h.h"#include "#include "#include "ns"#ctrab.h.h.h.h"#include "#include "#include "#include "#ctrab.h.h"#include "#include "#include "ns"#


#include "interrupt.h"
#include "inttypes.h"
#include "lcd.h"
#include "iso646.h"
#include "lowlev.h"

#include "locale.h"
#include "muse.h"
#include
"pinvol.h.h"





#include "pin_mh.md.h"







#include "#include "md.h"#include "#md.h"#include "timer.h.md.h"#include "#include "#md.h"#include "#md.h"#md.h"#include "timer #md.eh.md.md.eh.md.md.md.eh"#include "#include "#include "#include "#include "#include "#include "#include "#md.eh.md.md.eh"#include "#include "#include "#include "#include "#t.md.h"#t.md.md.h"#include "#include "#t.
无符号长湿度、湿度解甲部分、温度、温度解甲部分、 验证;

/******** PA3连接到 DHT11的 DATA 引脚 /
//******** 在数据线和 Vcc 之间放置10k 上拉电阻器 /
//******** 温度精度介于+-2C 和+-1C 之间 /
//******** 温度测量范围0 - 50°C /
//******** 湿度精度介于+-4%和+-5%之间 /
//******** 湿度测量范围20 - 90% /

无符号长整型转换 BinaryToDecimal (int startBit){
int i = 0;
unsigned long convertedNum = 0;
for (i = startBit;i <=(startBit + 7);i++){
convertedNum = convertedNum + variable [i]* pow (2、i);
}
返回 convertedNum;
}

void Interrupt_Function_GPIO_PORTF (void){
GPIOIntClear (GPIO_PORTF_BASE、GPIO_INT_PIN_0);
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、~GPIO_PIN_3);// PA3上的低电压
SysCtlDelay (302000);// 18.12mS 延迟
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、GPIO_PIN_3);// PA3上的高电压
SysCtlDelay (500);// 500 = 30us
GPIOPinTypeGPIOInput (GPIO_Porta_base、GPIO_PIN_3);//输入引脚 PF0和 PF4
GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_3、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);//上拉电阻、最大2mA
while (GPIOPinRead (GPIO_Porta_base、GPIO_PIN_3)=0){};
while (GPIOPinRead (GPIO_Porta_base、GPIO_PIN_3)=GPIO_PIN_3){};
int i;
对于(i = 0;i < 40;i++){
while (GPIOPinRead (GPIO_Porta_base、GPIO_PIN_3)=0){};
SysCtlDelay (450);// 45us = 750
if (GPIOPinRead (GPIO_Porta_base、GPIO_PIN_3)=GPIO_PIN_3){
可变[i]= 1;
while (GPIOPinRead (GPIO_Porta_base、GPIO_PIN_3)== 8){};
}否则{
Variable [i]= 0;
}

}
//SysCtlDelay (50000000);// 1秒延迟
//湿度= ConversionBinaryToDecimal (0);
HumidityDecimalPart = ConversionBinaryToDecimal (8);
温度=转换二进制到十进制(16);
TemperatureDecimalPart = ConversionBinaryToDecimal (24);
验证=转换二进制到十进制(32);
*/
}

void main (void){
/******** 时钟和使能外设 /
SysCtlClockSet (SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz | SYSCTL_SYSDIV_4);//时钟设置50MHz
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//启用 portF
SysCtlPeripheralEnable (sysctl_Periph_GPIOA);//启用 Porta
/*************** //********

GPIO 配置 /
GPIO_PORTF_LOCK_R = GPIO_LOCK_KEY;
GPIO_PORTF_CR_R = 0x01;
GPIO_PORta_lock_R = GPIO_LOCK_KEY;
GPIO_PORta_CR_R = 0x08;

GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_0);//输入引脚 PF0
GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_0、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);//上拉电阻、最大2mA

GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);//输出引脚 PA3
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、GPIO_PIN_3);// PA3上的高电压
/********* //********

GPIO 中断配置 /
IntMasterEnable();
IntEnable (INT_GPIOF);
IntPrioritySet (INT_GPIOF、4);
GPIOIntEnable (GPIO_PORTF_BASE、GPIO_INT_PIN_0);
GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_0、GPIO_FALLING_EDGE);
内部寄存器(INT_GPIOF、Interrupt_Function_GPIO_PORTF);
/************* /
while (1){

}
} 

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我没有 DHT11。 我想我建议的第一件事是在示波器上捕获总线、并测量您是否在后续读取中发送起始位。 当您说它突然不起作用时、您想知道 MCU 是否正在发送正确的起始位和所需的持续时间。 如果您有示波器或逻辑分析仪、调试将变得更加简单。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    过去几天,我一直在研究这个问题,而我所发现的只是这个问题。 当程序校准 DHT11时,除此部件外,序列正常。 在此序列中、DHT11发送~ 80US 低电平信号(这是正常的)、然后发送~ 80US 高电平信号(我认为这是问题)、但在示波器上、我捕获到不同的信号。 有人能告诉我为什么会从3.3V 下降到~0.4V? 传感器有时工作正常、这意味着会发生这种下降、但当不工作时、传感器会始终发出高信号。 我尝试使用3.3、4.5、5V 电源、其中任何一个都不能帮助稳定传感器始终正常工作。

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    细节和范围上限不足、无法进行"实际"诊断。

    我们是否可以建议:

    • 是否已获得并测试第二个 DHT -以防止(浪费)诊断"故障器件"所花费的时间。
    • MCU 和 DHT 之间是否存在接地和电源电压"短路"?   尤其是公共接地。
    • MCU 板和 DHT 的电源是否"足够"?   电压是否已"在实际操作下"测量?

    您的示波器上限揭示的"条件"并不清楚。   您将其称为"不确定的信号"-它显示为:

    • 仅~15µS μ V 高电平
    • 然后降至~0.4V (非接地)、这可能会导致"芯片损坏"或电源/连接问题
    • 之后(大约44µS μ s)会一直降至接地-这可能表示 MCU (切换)与 DHT 之间存在(部分)争用?   (或值太低的上拉电阻器?)
    • 此(或类似)"可疑(非法波形)信号"出现的频率如何?   (百分比明智是可以的-而且很重要。   某些"已定序的命令"是否比其他命令"更好"?   如果是-哪一个?

    [报价用户="Milan S"]当程序校准 DHT11时,除此部件外,序列正常。

    我们是否可以看到示波器电容器-显示正确的信号显示?   理想情况下(两者都是) 80µS Ω 低电平和80µS Ω 高电平间隔。   (您必须将初始触发点移至"最左侧"以在示波器上显示"低"和"高"。)   您可以提供的详细信息越多-您的"问题"被注意的可能性越高。   回想一下-您是论坛的眼睛!

    采集第二个传感器并始终妥善保护 ESD、以防止(大量)因故障或间歇性设备而浪费时间、这一点非常重要。   (对无行为帮助者如此不公平...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我同意 CB1关于他的诊断建议。 如果您有第二个 DHT11与之比较、这将是很好的选择。 您是否还记得您是否更改了代码、导致了当前无法正常工作的行为? 您提到它可以正常工作、直到它突然不再工作。 请检查您是否修改了代码、以便在传感器返回数据时驱动总线、从而导致总线上的驱动器冲突。 如果情况并非如此、那么您能否在第二个 DHT11传感器中重现此行为。 如果您无法在第二个传感器上重现问题、则表示您的第一个传感器在某种程度上损坏。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这也是我的想法,以放置新的 DHT11并检查结果。 MCU 和 DHT11具有公共接地、电源和接地与电线和原型板牢固连接。 当传感器正常工作时、电压不会正常、如图所示。 传感器提供3.3V ~15US、然后提供~0.4V、这是不好的、数据表 中说传感器需要提供3.3V ~80US。 因此、传感器序列例程再次给出0V ~80US、然后提供3.3V ~80US、但传感器提供3.3V ~15US、然后下降到~0.4V、这是不正确的。 发生这种情况时、传感器会为我提供温度、湿度和验证字节的精细结果。 在我描述的序列中、传感器在一段时间内工作正常(1. 80uS 0V | 2. 15uS 3.3V  | 3. 25uS 0.4V),然后转储(传感器提供 80uS 0V,然后始终提供3.3V,这不正确)。 上拉电阻器正常、电阻器值为10k omhs (我也尝试5k)。 代码看起来正常、因为我在中断例程中接收数据、任何东西都无法访问数据线。   

    我将尝试使用另一个 DHT11、我 将在这里写入结果。 我的一些朋友认为 DHT11和 MCU 输出级的电阻会导致这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、米兰、

      [报价用户="Milan S"]我将尝试另一个 DHT11,我 将在此处写入结果

    您是否对新 DHT11进行了任何更新? 您的问题是否已解决?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、米兰、

     我没有听到你的反馈。 我将假定您的问题已得到某种程度的解决。 我现在将关闭该线程。 如果您有一些更新、您可以回复此帖子以再次打开该主题。 如果您有新问题、请打开新主题。 作为一名负责人,我下周将不在办公室。