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 1, 2, 3, 4, 5, 6, 7, 8  Další
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
B0sc0
Profesionál
Profesionál


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

PříspěvekZaslal: 01 leden 2016, 16:10    Předmět: PIC16F877 + DHT22 Citovat

Zdravím všechny a přeji úspěšný rok 2016,
rok se s rokem sešel a já jsem vytáhnul opět na Vánoce nějáký projekt.
Snažím se rozchodit jednoduchý program s PIC16F877, GLCD a snímačem teploty a vlhkosti DHT22. Bohužel se mi nedaří a nemohu přijít na to, kde dělám chybu, snímač DHT data posílá, ale mě se je nedaří přečíst a když už něco přečtu, tak to nedává smysl. Mám to nějak slepený z netu, ale pro Atmela myslím a něco jsem tam předělával. Mohl by se na to prosím někdo znalý podívat. Děkuju
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
   }
}

char ReadData()
{
    char i, j;
    for(j = 0; j < 8; j++)
   {
       while(RA0 == 0); //Čeká dokud je RA0 v 0
       __delay_us(30);//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;
      }
    }
    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();

   unsigned int i = 0;
   char text1[16];
   char text2[16];

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

   TRISA = 0b00000000;    //RA0 jako vstup
   TRISC = 0b00000000;
   __delay_ms(1000);

   while(1)
     {
      GLCD_ClrScr();
      StartSignal();
      CheckResponse();

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

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

      sprintf(text1,"Teplota: %d^C            ",teplota/10);
      GLCD_text(0, 4,text1 );
      sprintf(text2,"Vlhkost: %d `            ",vlhkost/10);
      GLCD_text(0, 6,text2 );

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

      RH_byte1 = 0;
      RH_byte2 = 0;
      T_byte1 = 0;
      T_byte2 = 0;
      teplota = 0;
      vlhkost = 0;

   }//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: 02 leden 2016, 2:24    Předmět: Citovat

Bez logického analyzéru nebo křišťálový koule asi těžko.
Návrat nahoru
 

 
B0sc0
Profesionál
Profesionál


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

PříspěvekZaslal: 02 leden 2016, 10:56    Předmět: Citovat

Tady jde třeba, jestli by jste nepoužili jiné datové typy, atd.
Data ze snímače lezou, to už jsem kontroloval.

_________________
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: 02 leden 2016, 14:51    Předmět: Citovat

Nejde o to jestli lezou, ale jaká a jak přesně lezou… Sry, ale prinscreen z analyzéru je prostě víc, než „Data ze snímače lezou, to už jsem kontroloval.”, pak až můžem navázat se čtením a odpovídat na dotazy (a taky až uvedeš co to máš za kompilátor - SDCC, XC8 nebo něco jiného?). Obecně první prostě musí být z čeho vyjít, aby to nebyla ztráta času pro všechny strany, jen tvrzení nestačí.
Návrat nahoru
 

 
B0sc0
Profesionál
Profesionál


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

PříspěvekZaslal: 02 leden 2016, 15:26    Předmět: Citovat

Ok, omlouvám se. V příloze je prinscreen, jenom teda z PICkit2. Další kdyžtak udělám. Kompiler používám HI-TEC C PRO.


1.bmp
 Komentář:

Stáhnout
 Soubor:  1.bmp
 Velikost:  7.27 kB
 Staženo:  124 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
 

 
Anonymní






PříspěvekZaslal: 02 leden 2016, 21:26    Předmět: Citovat

200us/dílek, to asi opravdu budeš muset přidat lepší. Jinak v datasheetu toho „zázraku” píšou že je to DS18B20 + přidanej senzor vlhkosti, takže 1-wire, takže by ti asi dost pomohl datasheet přímo od toho DS18B20 (pokud se ho číňani drželi aspoň trochu), tam je popsaný jak má vypadat 1-wire (možná tak vypadá, ale podle toho co jsi přiložil to fakt nepoznám).

Jinak teda říkám narovinu dopředu že nejsem céčkač, takže odchytávání vstupu v Cčku bude výzva trochu víc než v ASM (ale analyzér bude potřeba tak či onak, bez něj se sériové komunikace ladí hodně těžko, takže do budoucna si určitě pořiď od soudruhů saleae klon pokud nemáš, stojí to dvě stovky a práce to za ty prachy nadělá až až).
Návrat nahoru
 

 
Balů
Profesionál
Profesionál


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

PříspěvekZaslal: 03 leden 2016, 0:45    Předmět: Citovat

Anonymous napsal:
... v datasheetu toho „zázraku” píšou že je to DS18B20 + přidanej senzor vlhkosti...


A na tuhle ptákovinu jsi přišel jak ? Datasheet od DHT11 tu mám před sebou a nic takového tam není. Je tam ale celkem dobře popsáno, jak spustit přenos, jak dlouhý má pulz být a jak vypadají bity, které DHT11 vrací a jak data intepretovat. Je to tam popsáno dost detailně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Anonymní






PříspěvekZaslal: 03 leden 2016, 2:19    Předmět: Citovat

Odpověď se skrývá pod heslem „On ale nemá DHT-11” a googlovským výsledkem hledání „k čínskýmu pajcu čínskej datasheet” (a navíc to nic nemění na tom, že si to navzorkoval s malým rozlišením Wink )
Návrat nahoru
 

 
B0sc0
Profesionál
Profesionál


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

PříspěvekZaslal: 03 leden 2016, 11:52    Předmět: Citovat

Je to děláný PICkit2kou, ale objednám z eBay lepší a budou lepší snímky Smile

Nebo si z práce půjčím oscilo, to bude nejrychlejší Smile

_________________
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
 

 
Balů
Profesionál
Profesionál


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

PříspěvekZaslal: 03 leden 2016, 20:29    Předmět: Citovat

B0sc0: Logický analyzátor se Ti hodí (osciloskop je v tomhle případě poněkud těžkopádný, pokud nemáš k dispozici paměťový), nicméně tentokrát bych řekl, že Tvůj PICkit2 to zvládnul. Trochu jsem pohledal a DHT22 posílá data sice stejným způsobem jako DHT11, ale rozkódovat je musíš trošku jinak. Pokud jsem dobře počítal a simulační software nekecá, tak jsi z čidla dostal 02 01 00 E4 E7 (kontrolní součet tam sice nemáš zachycený celý, ale je to nižších 8 bitů součtu bytů na pozicích 0-3). První 2 byty jsou 10xvlhkost, druhé 2 byty jsou 10xteplota. 0x0201 je 513 => 513/10 = 51,3%, teplota je 0x00E4 = 228 => 228/10 = 22,8°C.

Záporná hodnota není kódovaná "klasicky", ale hodnota je doplněná jedničkou na bitu 15 :
0x00E4 = 228 => 22,8°C
0x80E4 = -228 => -22,8°C
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
B0sc0
Profesionál
Profesionál


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

PříspěvekZaslal: 04 leden 2016, 14:28    Předmět: Citovat

Díky Balů, ten saleae analzátor jsem již objednal. Ty hodnoty sedí, ale nevím proč mi je nechce stonožka načíst a zobrazit. :-/
_________________
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
 

 
Balů
Profesionál
Profesionál


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

PříspěvekZaslal: 04 leden 2016, 15:45    Předmět: Citovat

A nemůže být chyba tady ?

kód:
      unsigned char teplota = (T_byte1  << 8 )| T_byte2;
      unsigned char vlhkost = (RH_byte1 << 8 )| RH_byte2;


Jestli se nepletu, tak unsigned char má 8 bitů. Neměl bys tam mít unsigned int místo unsigned char ?

kód:
      unsigned int teplota = (T_byte1  << 8 )| T_byte2;
      unsigned int vlhkost = (RH_byte1 << 8 )| RH_byte2;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
B0sc0
Profesionál
Profesionál


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

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

To je přesně to, k čemu jsem myslel, že se vyjádříte. Až příjdu z práce, tak se na to mrknu. Díky
Ten princip toho přenosu je celkem jednoduchej, tak nechápu, že to nechodí Smile

_________________
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
 

 
Balů
Profesionál
Profesionál


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

PříspěvekZaslal: 04 leden 2016, 16:30    Předmět: Citovat

To je tak, když si neprojdu pořádně program a hledám problém tam, kde evidentně není ... Jsem zvědavý, jestli je to ono.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Anonymní






PříspěvekZaslal: 04 leden 2016, 17:15    Předmět: Citovat

A navíc by, jestli se dobře dívám, měly být ty proměnné
kód:
volatile
, nebo ne?
Návrat nahoru
 

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 1, 2, 3, 4, 5, 6, 7, 8  Další
 
Strana 1 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 © 2017 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)