I want to use DHT22 Temperature&Humidity Sensor with CC2530 EM but I want a Library for this sensor
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.
I want to use DHT22 Temperature&Humidity Sensor with CC2530 EM but I want a Library for this sensor
I write this Code for DHT22 With CC2530 but it doesn't work there is no response from the sensor
where is the problem ? Please
/******************** (C) COPYRIGHT 2012 waveshare ******************** * File Name : main.c * Author : waveshare.xuwenjie * Version : V1.0.0 * Date : 29/10/2012 * Description : ************************************************************************/ #include <ioCC2530.h> #include <string.h> #include "LCD22.h" #include "Touchpanel.h" #define uint unsigned int #define uchar unsigned char #define uint16 unsigned short #define DATA_PIN P1_2 unsigned Temp, RH, Sum ; uchar Check , T_byte1 , T_byte2 , RH_byte1 , RH_byte2 ; void delay_us (uint16 timeout) { while (timeout--) { asm("NOP"); asm("NOP"); asm("NOP"); } } void StartSignal() { P1DIR |= (1<<2); // Configure connection pin as output DATA_PIN = 0; // Connection pin output low Delay_ms(30); DATA_PIN = 1; // Connection pin output high delay_us(30); P1DIR &= ~(1<<2); // Configure connection pin as input } void CheckResponse() { Check = 0; delay_us(40); if (DATA_PIN == 0) { delay_us(80); if (DATA_PIN == 1) Check = 1; delay_us(40); } } char ReadData() { char i, j; for(j = 0; j < 8; j++) { while(!DATA_PIN); //Wait until PORTD.F0 goes HIGH delay_us(30); if(DATA_PIN == 0) i&= ~(1<<(7 - j)); //Clear bit (7-b) else { i|= (1 << (7 - j)); //Set bit (7-b) while(DATA_PIN); //Wait until PORTD.F0 goes LOW } } return i; } /******************************************************************************* * Function Name : SystemInit * Description : Initialize the system * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void SystemInit(void) { CLKCONCMD &= ~0x40; //*Sets the system clock source for 32 MHZ crystal oscillator while(CLKCONSTA & 0x40); //* Wait for Oscillator to be ready CLKCONCMD &= ~0x47; //*Sets the system master clock frequency for 32 MHZ } void Init_UART(void) { PERCFG = 0x00; //Peripheral-control register P0SEL = 0x0c; //P0_2=RX,P0_3=TX for peripheral control P2DIR &= ~0XC0; //set periorty to USRT0 U0CSR |= 0x80; //control and status reg //Bit7 select mode :0 spi mode , 1 UART mode U0GCR |= 7; //U0GCR[4:0] & U0BAUD defines baud-rate U0BAUD |= 59; //baud-rate is 115200 UTX0IF = 0; //(0: Interrupt not pending , 1: Interrupt pending) URX0IF = 0; } void dsply_num( unsigned int Xpos , unsigned int Ypos , unsigned int Color , uint16 a ) { uint16 b=0; uint16 c=0; uint16 d=0; uint16 e=0; uint16 f=0; uint16 g=0; d=a/1000; e=a%1000; c=e/100; b=e%100; f=b/10; g=b%10; PutChar( Xpos , Ypos , d+48 , Color , 15 ); PutChar( Xpos + 10 , Ypos , c+48 , Color , 15 ); PutChar( Xpos + 20 , Ypos , f+48 , Color , 15 ); PutChar( Xpos + 30 , Ypos , g+48 , Color , 15 ); U0DBUF=d+48; while(!UTX0IF); UTX0IF = 0; U0DBUF=c+48; while(!UTX0IF); UTX0IF = 0; U0DBUF=f+48; while(!UTX0IF); UTX0IF = 0; U0DBUF=g+48; while(!UTX0IF); UTX0IF = 0 ; U0DBUF= '/' +48; } /******************************************************************************* * Function Name : main * Description : Main program * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ //extern U8 WenDu,ShiDu;//�����¶ȴ�ű��� void main(void) { SystemInit(); Init_UART(); LCD_Initializtion(); Disp_Touchpanel(); StartSignal(); CheckResponse(); while(1) { if(Check == 1) { RH_byte1 = ReadData(); RH_byte2 = ReadData(); T_byte1 = ReadData(); T_byte2 = ReadData(); Sum = ReadData(); if(Sum == ((RH_byte1+RH_byte2+T_byte1+T_byte2) & 0XFF)) { Temp = T_byte1; Temp = (Temp << 8) | T_byte2; RH = RH_byte1; RH = (RH << 8) | RH_byte2; GUI_Text( 50 , 50 , "Temp: . C" , White , 15 ); GUI_Text( 46 , 100 , "Humidity: . %" , Red , 15 ); if (Temp > 0X8000) { GUI_Text( 55 , 50 , "-" , White , 15 ); Temp = Temp & 0X7FFF; } PutChar( 56 , 50 , 48 + ((Temp / 100) % 10) , White , 15 ); PutChar( 57 , 50 , 48 + ((Temp / 10) % 10) , White , 15 ); PutChar( 59 , 50 , 48 + (Temp % 10) , White , 15 ); PutChar( 56 , 100 , 48 + ((RH / 100) % 10) , White , 15 ); PutChar( 57 , 100 , 48 + ((RH / 10) % 10) , White , 15 ); PutChar( 59 , 100 , 48 + (RH % 10) , White , 15 ); } else { GUI_Text( 46 , 50 , "***** Check sum error*****" , Red , 15 ); GUI_Text( 46 , 100, "****** Check sum error****" , Red , 15 ); } } else { GUI_Text( 46 , 50 , "***********No response" , Red , 15 ); GUI_Text( 46 , 100, "from the sensor*******" , Red , 15 ); } Delay_ms(1000); } }
Check P1SEL to see if bit 2 (I suppose you use P1.2 as GPIO to read SHT22) is set to 0.
I make a check P1SEL to see if bit 2 is set to 0
but there is no change and there is no response from the sensor