PIC16F877 + DHT22

Tak jsem dal ten toogle hned za to čekání a podle mě to tak má být.
Mělo by to být 0000000101101001 což je 361/10=36,1% to by snad mohla být vlhkost v pokoji.
Ale na GLCD mi to zobrazuje hodnotu 257 a nebo 256, ještě jsem ji nedělil 10.
Což mě napadá, že že 256 je vlastně první byte posunutý o 8 doleva ale nevím, proč tam je jako druhý byte 0 a nebo 0.

Pro to spojení byte používám

	vlhkost = (RH_byte1 << 8 )| RH_byte2; 

Což si myslím, že by mělo fungovat.
Když dám zobrazit na druhém řádku číslo měření a na 6. vlhkost tak tam mám těch 257 nebo 256.
Pokud tam k přidám zobrazení jednotlivých byte vlhkosti na 4. a 5. řádek, tak mi to z nějákého důvodu na číslu měření napíše 8225, na vlhkosti 8224 a na těch jednotlivých byte vlhkosti - Byte1 0 a na Byte2 0 nebo 1ku.
Nechápu proč, číslo měření by mělo jít od nuly nahoru a ne v prvním cyklu hned na 8225.

Myslím,že tak jak jsem to popsal, tak to nemůže nikdo pochopit. Pro jistotu tu dám zase kód při kterým to vypisuje pouze číslo měření a vlhkost.

[code]// DHT22 knihovna
unsigned char Check;

void StartSignal()
{
TRISA = 0b00000000; //PORTA je výstup
RA0 = 0; //RA0 jde do 0 = startovacísignál
__delay_ms(18);//18
RA0 = 1; //RA0 se vrací do 1
__delay_us(30);
TRISA = 0b11111111; //PORTA je vstupní
}

void CheckResponse()
{
Check = 0;
__delay_us(40);
if (RA0 == 0)
{
__delay_us(80);//80
if (RA0 == 1)
Check = 1;
__delay_us(40);//40
}
}
int ReadData()
{
int i=0, j;
for(j = 0; j < 8; j++)
{
i = 0;
while(RA0 == 0); //Čeká dokud je RA0 v 0
__delay_us(35);//30 hranice mezi log 0 a log 1
RC6 = ~RC6;
if(RA0 == 1) //Zkouší, zda je RA0 po uplynulé době v 1 čí 0
{
i|= (1 << (7 - j)); //Nastaví bit do 1
while(RA0 == 1); //Čeká dokud je RA0 v 1
}
}
return i;
}

void main(void)
{
PSPIE = 0;
PSPMODE = 0;
ADCON1 = 7;
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00000000;
TRISD = 0b00000000;

   GLCD_Init(); 
   __delay_ms(100); 
   GLCD_ClrScr(); 

   int i = 0; 
   char text1[16]; 
   char text2[16];
   char text3[16]; 
   char text4[16]; 
   char text5[16];
   char text6[20]; 

   GLCD_ClrScr(); 
       
     int T_byte1, T_byte2, RH_byte1, RH_byte2; 
 int Temp, RH, Sum ; 

   TRISA = 0b00000000;    //RA0 jako vstup 
   TRISC = 0b00000000; 
	int a = 0; 

  unsigned int teplota =  0;
  unsigned int vlhkost =  0;

while(1) 
{     
  RH_byte1 = 0; 
  RH_byte2 = 0; 
  T_byte1 = 0; 
  T_byte2 = 0; 
  teplota = 0; 
  vlhkost = 0;       



	StartSignal(); 
	CheckResponse();

	RH_byte1 = ReadData(); 
	RH_byte2 = ReadData(); 
    //T_byte1 = ReadData(); 
    //T_byte2 = ReadData(); 
    //Sum = ReadData(); 

vlhkost = (RH_byte1 << 8 )| RH_byte2; 

	GLCD_ClrScr(); 

  sprintf(text5,"Mereni: %d                ",a); 
  GLCD_text(0, 1,text5 );
  /*sprintf(text1,"Byte 1: %d               ",RH_byte1); 
  GLCD_text(0, 3,text1 ); 
  sprintf(text2,"Byte 2: %d               ",RH_byte2); 
  GLCD_text(0, 4,text2 ); */

  sprintf(text6,"Vlhkost:%d             ",vlhkost); 
  GLCD_text(0, 5,text6 );

a++;

  RC7 = 1; 
  __delay_ms(500); 
  RC7 = 0; 
  __delay_ms(500); 

}//end while(1)
}//end main [/code]

Se divím, že jste mě ještě neposlali někam :slight_smile: