قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:110
قديم 07-01-2019, 05:23 AM المشاركة 1   
افتراضي برجاء المساعده في تعديل علي كود لقرأة من حساس DHT22 Twitter FaceBook Google+



السلام عليكم ورحمه الله

لقد نفذت مشروع من فطره بستخدام حساس الحرارة والرطوبه DHT11 والحمد لله المشروع اشتغل تمام بدون أي مشاكل .

ما اريده هو تعديل علي هذا الكود لكي يتناسب مع الحساس DHT22

كود:
    // ENG / ABDALLA HEGAZY **
    // DATA / 2018/8/2      **
    // RH _temp. controller **


  // Lcd pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;

// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;



 unsigned long  Check, T_byte1, T_byte2,RH_byte1, RH_byte2, Ch ;
 unsigned Temp,RH,Sum;







 void StartSignal(){
 TRISC.F7 = 0;    //Configure RD0 as output
 PORTC.F7 = 0;    //RD0 sends 0 to the sensor
 delay_ms(18);
 PORTC.F7 = 1;    //RD0 sends 1 to the sensor
 delay_us(30);
 TRISC.F7 = 1;    //Configure RD0 as input
  }
 //////////////////////////////
 void CheckResponse(){
 Check = 0;
 delay_us(40);
 if (PORTC.F7 == 0){
 delay_us(80);
 if (PORTC.F7 == 1)   Check = 1;   delay_us(40);}
 }
 //////////////////////////////
 char ReadData(){
 char i, j;
 for(j = 0; j < 8; j++){
 while(!PORTC.F7); //Wait until PORTD.F0 goes HIGH
 delay_us(30);
 if(PORTC.F7 == 0)
       i&= ~(1<<(7 - j));  //Clear bit (7-b)
 else {i|= (1 << (7 - j));  //Set bit (7-b)
 while(PORTC.F7);}  //Wait until PORTD.F0 goes LOW
 }
 return i;
 }




      void main() {
      TRISC=0; PORTC=0; TRISB=0; PORTB=0; TRISD=242; PORTD=0;
      TRISA=1;PORTA=0;  TRISE=0; PORTE=0;
      ADCON1 = 0x0F;  // Configure all ports with analog function as digital
      CMCON  = 7;    // Disable comparators
      Lcd_Init();



          while(1)
       {





       StartSignal(); CheckResponse();
        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;
         RH   = RH_byte1;
          Lcd_Out(1, 1, "Temp:C           ");
         Lcd_Out(2, 1, "Humi:%           ");
         LCD_Chr(1, 8, 48 + ((Temp / 10) % 10));
         LCD_Chr(1, 9, 48 + (Temp % 10));
         LCD_Chr(2, 8, 48 + ((RH / 10) % 10));
         LCD_Chr(2, 9, 48 + (RH % 10));
         delay_ms(3000);
       }

            else
          { Lcd_Cmd(_LCD_CLEAR);
            Lcd_Cmd(_LCD_CURSOR_OFF);        // cursor off
            Lcd_Cmd(_LCD_CLEAR);             // clear LCD
            Lcd_Out(1, 1, "Check sum error");

           delay_ms(2000);   Lcd_Cmd(_LCD_CLEAR);

          }
    }

        else
      {
        Lcd_Out(1, 1, "[..] NO response");
        Lcd_Out(2, 1, "|||| the sensor");

        delay_ms(2000);Lcd_Cmd(_LCD_CLEAR);

      }



   }

 }


وهذه صوره للمحكاه مع البيك المستخدم






رابط لتحميل ملف المحكاه

https://drive.google.com/open?id=15Y...9_1yDpOUOw2BBm




وشكرااا جزيلا


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 07-01-2019 الساعة 05:26 AM
اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:110
قديم 20-01-2019, 10:20 PM المشاركة 2   
افتراضي


السلام عليكم ورحمه الله



تم الحل وتوصلت الي كود للقرأه من الحساس DHT22

وهذا الكود للفائده منه في مشاريع


كود:
    // ENG / ABDALLA HEGAZY **
    // DATA / 2019/1/20      **
    // RH _temp. controller **


  // Lcd pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;

// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;





 unsigned char  Check, T_byte1, T_byte2,
                RH_byte1, RH_byte2, Ch ;
 unsigned Temp, RH, Sum ;
 //////////////////////////////
 void StartSignal(){
 TRISD.F0 = 0;    //Configure RD0 as output
 PORTD.F0 = 0;    //RD0 sends 0 to the sensor
 delay_ms(18);
 PORTD.F0 = 1;    //RD0 sends 1 to the sensor
 delay_us(30);
 TRISD.F0 = 1;    //Configure RD0 as input
  }
 //////////////////////////////
 void CheckResponse(){
 Check = 0;
 delay_us(40);
 if (PORTD.F0 == 0){
 delay_us(80);
 if (PORTD.F0 == 1)   Check = 1;   delay_us(40);}
 }
 //////////////////////////////
 char ReadData(){
 char i, j;
 for(j = 0; j < 8; j++){
 while(!PORTD.F0); //Wait until PORTD.F0 goes HIGH
 delay_us(30);
 if(PORTD.F0 == 0)
       i&= ~(1<<(7 - j));  //Clear bit (7-b)
 else {i|= (1 << (7 - j));  //Set bit (7-b)
 while(PORTD.F0);}  //Wait until PORTD.F0 goes LOW
 }
 return i;
 }
 //////////////////////////////
 void main() {
 OSCCON =  0X70;       // Set internal oscillator at 8MHz
 ADCON1 = 0x0F;        // Configure AN pins as digital
 Lcd_Init();
 Lcd_Cmd(_LCD_CURSOR_OFF);        // cursor off
 Lcd_Cmd(_LCD_CLEAR);             // clear LCD

 while(1){
  StartSignal();
  CheckResponse();
  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;
  Lcd_Out(1, 6, "Temp:   . C");
  Lcd_Out(2, 2, "Humidity:   . %");
  if (Temp > 0X8000){
  Lcd_Out(1, 11, "-");
  Temp = Temp & 0X7FFF; }
  LCD_Chr(1, 12, 48 + ((Temp / 100) % 10));
  LCD_Chr(1, 13, 48 + ((Temp / 10) % 10));
  LCD_Chr(1, 15, 48 + (Temp % 10));
  LCD_Chr(2, 12, 48 + ((RH / 100) % 10));
  LCD_Chr(2, 13, 48 + ((RH / 10) % 10));
  LCD_Chr(2, 15, 48 + (RH % 10));
  }
  else{
  Lcd_Cmd(_LCD_CURSOR_OFF);        // cursor off
  Lcd_Cmd(_LCD_CLEAR);             // clear LCD
  Lcd_Out(1, 1, "Check sum error");}
  }
  else {
  Lcd_Out(1, 3, "No response");
  Lcd_Out(2, 1, "from the sensor");
  }
  delay_ms(1000);
  }
  }


الدائره الإلكترونيه



اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 08:46 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025