forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
PIC16F877 + DHT22
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6, 7, 8  Další
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
Anonymní






PříspěvekZaslal: 06 leden 2016, 23:16    Předmět: Citovat

RC6 není bajt ale bit, takže napíšeš
kód:
RC6 = ~RC6
Návrat nahoru
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 17:42    Předmět: Citovat

Do funkce na čtení jsem přidal ten toggle
kód:
int ReadData()
{
    int i=0, j;
    for(j = 0; j < 8; j++)
   {
      RC6 = ~RC6;
       while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(35);//30 hranice mezi log 0 a log 1
       if(RA0 == 0) //Zkouší, zda je RA0 po uplynulé době v 1 čí 0
             i&= ~(1<<(7 - j));  //Znuluje bit
       else
      {
         i|= (1 << (7 - j));  //Nastaví bit do 1
          while(RA0 == 1); //Čeká dokud je RA0 v 1
         break;
      }
    }


a výsledek je v příloze, pro rychlou orientaci =horní jsou data, spodní toggle
Je z něj patrný, že čtění probíhí tak nějak jinak než bych si představoval.



22.bmp
 Komentář:

Stáhnout
 Soubor:  22.bmp
 Velikost:  293.02 kB
 Staženo:  61 krát


_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 897
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 07 leden 2016, 18:05    Předmět: Citovat

zvetsi cas vzorkovani at tam jde neco vydet, staci ctvrtka
mas to na spatnym miste to toglovani viz , dej ho ale pred to vzorkovani

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 19:38    Předmět: Citovat

Lepší vzorkování bude,až dorazí LA z eBay.
Před to vzorkování myslíš sem?
kód:

int ReadData()
{
    int i=0, j;
      RC6 = ~RC6;
    for(j = 0; j < 8; j++)
   {

       while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(35);//30 hranice mezi log 0 a log 1
       if(RA0 == 0) //Zkouší, zda je RA0 po uplynulé době v 1 čí 0
             i&= ~(1<<(7 - j));  //Znuluje bit
       else
      {
         i|= (1 << (7 - j));  //Nastaví bit do 1
          while(RA0 == 1); //Čeká dokud je RA0 v 1
         break;
      }
    }

jsem myslel, že když ho dám do smyčky for, tak to změní stav pokaždy když to načte stav.

_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 19:56    Předmět: Citovat

Jinak tady je zabalenej nezmenšenej obrázek průběhů, předtím jsem ho musel zmenšit ze 4000 na 1000 aby šel vložit.


222.rar
 Komentář:

Stáhnout
 Soubor:  222.rar
 Velikost:  9.37 kB
 Staženo:  55 krát


_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 897
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 07 leden 2016, 19:58    Předmět: Citovat

ne takle
kód:
int ReadData()
{
    int i=0, j;
    for(j = 0; j < 8; j++)
   {
       while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(35);//30 hranice mezi log 0 a log 1
       RC6 = ~RC6;
       if(RA0 == 0) //Zkouší, zda je RA0 po uplynulé době v 1 čí 0
             i&= ~(1<<(7 - j));  //Znuluje bit
       else
      {
         i|= (1 << (7 - j));  //Nastaví bit do 1
          while(RA0 == 1); //Čeká dokud je RA0 v 1
         break;
      }
    }

to tam mas vzorkovani 1MHz ? (1ms okno)

edit: v simulatoru to toglovani chodi ? frekvence procesoru spravne nastavena ?
tet uz je na tom neco vydet Wink

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 764

PříspěvekZaslal: 07 leden 2016, 20:08    Předmět: Citovat

... a jakmile se přečte první jednička, tak se smyčka for ukončí - to dělá ten break, kterej už tam zase je ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 20:23    Předmět: Citovat

Aha, to je tím, že zkouším 10 verzí naráz. Když dám break; pryč, tak se mi to sehne v tý funkci a nechce to projet ani jednou.
_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Anonymní






PříspěvekZaslal: 07 leden 2016, 20:26    Předmět: Citovat

Vyhoď i to while (RA==0) a delay…

nahlídni sem, to je zdroják knihovny pro Arduino pro to čidlo, mrkni pro inspiraci co tam řeší

https://github.com/nethoncho/Arduino-DHT22
Návrat nahoru
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 20:38    Předmět: Citovat

Abychom si rozuměli, z tohoro
kód:
int ReadData()
{
    int i=0, j;
    for(j = 0; j < 8; j++)
   {
      RC6 = ~RC6;
      i = 0;
       while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(35);//30 hranice mezi log 0 a log 1
       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;
 }

mám odstranit
kód:
 while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(35);//30 hranice mezi log 0 a log 1

Toto?
Vždyť to čeká na náběžnou hranu a pak po zvolený době to vyčte 1 nebo 0.
Tím by to přece nešlo ne?

_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 20:41    Předmět: Citovat

MiloPS3:
Vzorkování mám 250 kHz, 4 ms okno.
Simulátor žádnej nepoužívám.
Kdystal 2 MHz a nastaneno taky 2 MHz.

_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 20:45    Předmět: Citovat

Tak z toho zdrojáku pro Arduino nejsem vůbec chytrej. Je to úplně neco jinýho než Cčko pro HI-TECH
_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 20:48    Předmět: Citovat

Ať se synchronizujeme, tak tady je aktuální vezde kódu. Už pomale přestávám vnímat co ej co :-/
kód:
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++)
   {
      RC6 = ~RC6;
      i = 0;
     /  while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(35);//30 hranice mezi log 0 a log 1
       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];
   
      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;

      sprintf(text5,"Mereni: %d                ",a);
      GLCD_text(0, 2,text5 );
      sprintf(text1,"Byte 1: %d               ",teplota);
      GLCD_text(0, 4,text1 );
      sprintf(text5,"Byte 2: %d               ",teplota);
      GLCD_text(0, 5,text5 );
      sprintf(text3,"Byte 3: %d               ",teplota);
      GLCD_text(0, 6,text3 );
      sprintf(text4,"Byte 4: %d               ",teplota); //^C
      GLCD_text(0, 7,text4 );

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

   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();
 

   //   teplota = (T_byte1  << 8 )| T_byte2;
   //   vlhkost = (RH_byte1 << 8 )| RH_byte2;

       GLCD_ClrScr();

      sprintf(text5,"Mereni: %d                ",a);
      GLCD_text(0, 2,text5 );
      sprintf(text1,"Byte 1: %d               ",RH_byte1);
      GLCD_text(0, 4,text1 );
      sprintf(text2,"Byte 2: %d               ",RH_byte2);
      GLCD_text(0, 5,text2 );
      sprintf(text3,"Byte 3: %d               ",T_byte1);
      GLCD_text(0, 6,text3 );
      sprintf(text4,"Byte 4: %d              ",T_byte2);
      GLCD_text(0, 7,text4 ); 
      a++;

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



   }//end while(1)
}//end main

_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Anonymní






PříspěvekZaslal: 07 leden 2016, 20:53    Předmět: Citovat

Tak tady to máš ještě pro mbed, je to v podstatě ta samá knihovna, ale v C a líp okomentovaná. To podstatný je spíš v druhý půlce toho kódu, řeší se tam věci jako čekání na začátek a konec ACKu, délka pulzu apod. Taky z toho plyne, že DHT-22 posílá 16bitový hodnoty.

https://developer.mbed.org/users/hwkit/code/DHT22/docs/tip/DHT22_8cpp_source.html

Asi bych nad tím nemudroval a vzal si to celý, když už to někdo napsal.
Návrat nahoru
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 07 leden 2016, 20:58    Předmět: Citovat

Díky Anonyme, podívám se na to.
_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip Časy uváděny v GMT + 2 hodiny
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6, 7, 8  Další
 
Strana 3 z 8
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2018 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)