打印
[技术问答]

搞了一个温度湿度传感器AM2301

[复制链接]
4852|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2015-3-5 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只见上面写着:
AM2301                aosong  electronics
电源3.3-5.5V DC
量程:0-100%RH -40-80℃
精度:±3%RH ,±0.5%℃
输出:单总线数据信号
————————————————————————————
那么问题来了,单总线的协议谁有给我来一份,还有用咱们新唐的哪个单片机测试最般配?
沙发
gaoyang9992006|  楼主 | 2015-3-5 10:26 | 只看该作者
没人理我啊,我自己搞定了,原来这个东西又叫DH21,

使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2015-3-5 10:27 | 只看该作者
DHT21说明书20081208.pdf (1.04 MB)

下载后请回复个顶啊

使用特权

评论回复
地板
598330983| | 2015-3-5 10:32 | 只看该作者
下载留名,谢谢。

使用特权

评论回复
5
598330983| | 2015-3-5 10:32 | 只看该作者
刚才百度看了一下图片,三根线,红黑电源线,黄色数据线。

使用特权

评论回复
6
mintspring| | 2015-3-5 10:33 | 只看该作者
顶楼主,谢谢分享,百度文库还收费,真坑,谢谢

使用特权

评论回复
7
iamzyhua| | 2015-3-6 16:19 | 只看该作者
楼主是代理吗? 单价多少米米

使用特权

评论回复
8
gaoyang9992006|  楼主 | 2015-3-7 16:37 | 只看该作者
iamzyhua 发表于 2015-3-6 16:19
楼主是代理吗? 单价多少米米

弄了一个,不是代理,也不知道多少钱买的,弄的其他人的。

使用特权

评论回复
9
598330983| | 2015-3-8 14:32 | 只看该作者
这个东西淘宝上卖的15元一个。

使用特权

评论回复
10
wright0418| | 2015-3-14 00:53 | 只看该作者
DHT 系列的 數據都是採用單線就可以讀取 , 主要是判讀 High Low 訊號寬度時間來決定是 "0" 還是"1"
最簡單的方法 就是使用一個 GPIO , 先輸出 Low在輸出 high , 在採用 timer或 delay + GPIO input 去判讀 GPIO 的 High low 時間長度 , 就可以找出數據

另一種方法 是 GPIO + Timer capture , timer Capture 只需要抓取High 寬度即可

使用特权

评论回复
11
gaoyang9992006|  楼主 | 2015-3-14 08:30 | 只看该作者
wright0418 发表于 2015-3-14 00:53
DHT 系列的 數據都是採用單線就可以讀取 , 主要是判讀 High Low 訊號寬度時間來決定是 "0" 還是"1"
最簡單 ...

,高手啊。看来用过这个。

使用特权

评论回复
12
wright0418| | 2015-3-16 11:22 | 只看该作者
gaoyang9992006 发表于 2015-3-14 08:30
,高手啊。看来用过这个。

全系列的 M0/M4/8051 都可以做得到

使用特权

评论回复
13
quray1985| | 2015-3-16 14:34 | 只看该作者
gaoyang9992006 发表于 2015-3-5 10:27
下载后请回复个顶啊

谢谢该同志的分享啊

使用特权

评论回复
14
gaoyang9992006|  楼主 | 2015-3-16 17:27 | 只看该作者
wright0418 发表于 2015-3-16 11:22
全系列的 M0/M4/8051 都可以做得到

果然厉害,我们多多交流一下,互相学习提高。

使用特权

评论回复
15
gaoyang9992006|  楼主 | 2015-3-16 17:27 | 只看该作者
quray1985 发表于 2015-3-16 14:34
谢谢该同志的分享啊

不用谢,我看这个资料不好找,就发来了。

使用特权

评论回复
16
wright0418| | 2015-3-18 13:06 | 只看该作者
我用過 DHT11 , 讀取資料的方法一樣 , 我把sample code 貼給你參考一下 , 我用的是 NANO102
void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable External XTAL (4~24 MHz) */
//    CLK->PWRCTL &= ~CLK_PWRCTL_HXT_EN_Msk;
//    CLK->PWRCTL |= (0x1 << CLK_PWRCTL_HXT_EN_Pos); // HXT Enabled

    /* Waiting for 12MHz clock ready */
//    CLK_WaitClockReady( CLK_CLKSTATUS_HXT_STB_Msk);

    /* Switch HCLK clock source to XTAL */
    CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLK_S_Msk;
    CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_HIRC;

    /* Enable IP clock */
    CLK->APBCLK |= CLK_APBCLK_UART0_EN; // UART0 Clock Enable

    /* Select IP clock source */
    CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
    CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_UART_S_Pos);// Clock source from external 12 MHz or 32 KHz crystal clock

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
    SystemCoreClockUpdate();

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set PB multi-function pins for UART0 RXD and TXD  */
    SYS->PB_H_MFP &= ~(SYS_PB_H_MFP_PB13_MFP_Msk | SYS_PB_H_MFP_PB14_MFP_Msk);
    SYS->PB_H_MFP |= (SYS_PB_H_MFP_PB13_MFP_UART0_RX | SYS_PB_H_MFP_PB14_MFP_UART0_TX);

    /* Lock protected registers */
    SYS_LockReg();
}

void UART0_Init()
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                                                                               */
    /*---------------------------------------------------------------------------------------------------------*/
    UART_Open(UART0, 115200);
}

void TMR0_IRQHandler(void)
{

    time_DHT11[i] = TIMER_GetCaptureData(TIMER0);
                i++;
    TIMER_ClearCaptureIntFlag(TIMER0);

}

/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/
int main (void)
{
    int32_t i32Err,uu;

    /* Init System, IP clock and multi-function I/O */
    SYS_Init(); //In the end of SYS_Init() will issue SYS_LockReg() to lock protected register. If user want to write protected register, please issue SYS_UnlockReg() to unlock protected register.
                PD11 = 0 ;
                TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000000);
                TIMER_SET_PRESCALE_VALUE(TIMER0, 11);
            // Set compare value as large as possible, so don't need to worry about counter overrun too frequently.
    TIMER_SET_CMP_VALUE(TIMER0, 0xFFFFFF);
                TIMER_EnableCapture(TIMER0, TIMER_CAPTURE_TRIGGER_COUNTING_MODE, TIMER_CAPTURE_RISING_THEN_FALLING_EDGE);
                GPIO_SetMode(PD,BIT11,GPIO_PMD_OUTPUT);
                GPIO_ENABLE_PULL_UP(PD,BIT11);
                       
                PD11 = 0 ;
                CLK_SysTickDelay (18000); //18ms
                PD11 = 1;

       
                SYS->PD_H_MFP  = (SYS->PD_H_MFP & ~SYS_PD_H_MFP_PD11_MFP_Msk) | SYS_PD_H_MFP_PD11_MFP_TMR0_CAP;
                // Start Timer 0
    TIMER_Start(TIMER0);
                i = 0;
    // Enable timer interrupt
    TIMER_EnableCaptureInt(TIMER0);
    NVIC_EnableIRQ(TMR0_IRQn);
                while(i<40);
                for (uu=0;uu<40;uu++)
                                printf ( "%x  ",time_DHT11[uu]);
                printf("\n");
        while(1);

使用特权

评论回复
17
gaoyang9992006|  楼主 | 2015-3-18 13:42 | 只看该作者
wright0418 发表于 2015-3-18 13:06
我用過 DHT11 , 讀取資料的方法一樣 , 我把sample code 貼給你參考一下 , 我用的是 NANO102
void SYS_Init( ...

非常感谢。

使用特权

评论回复
18
WKK007| | 2015-3-18 14:19 | 只看该作者
果然厉害,我们多多交流一下,互相学习提高

使用特权

评论回复
19
quray1985| | 2015-3-20 09:11 | 只看该作者
gaoyang9992006 发表于 2015-3-5 10:27
下载后请回复个顶啊

顶楼主,你弄过tts语音吗?

使用特权

评论回复
20
gaoyang9992006|  楼主 | 2015-3-20 09:25 | 只看该作者
quray1985 发表于 2015-3-20 09:11
顶楼主,你弄过tts语音吗?

没用过这个,项目中没这种

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

1972

主题

15992

帖子

210

粉丝