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í

 
DS18B20 nevrací teplotu

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
L.
Anonymní





PříspěvekZaslal: 21 leden 2016, 22:23    Předmět: DS18B20 nevrací teplotu Citovat

Zdravím všechny a žádám o radu, kde bych mohl mít chyby v kódu. Proměnné tempL a tempH zobrazuji na displeji, ale jejich hodnoty jsou 0.

kód:

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>


#define _XTAL_FREQ 4000000

#define C PORTEbits.RE0
#define TRE TRISEbits.TRISE0


__CONFIG(FOSC_XT & WDTE_OFF & PWRTE_OFF);

/*-------------------------------------------------------------*/
//Komunikace s DS 18B20
/*-------------------------------------------------------------*/
 
void OWReset()
{
  int out;
  C=0;                               
  TRE = 0;
  __delay_us(480);                   
  C=1;
  TRE = 1;                         
  __delay_us(70);                   
    if(C == 0)
        out=0;                       
    else
        out=1;                               
  __delay_us(410);                   
  //return(out);
 }

void OWWriteBit(int bita)
{
        if (bita)
        {
                C=0;
                TRE = 0;
                __delay_us(6);
                C = 1;
                TRE = 1;
                __delay_us(64);
               
        }
        else
        {
                C=0;
                TRE = 0;
                __delay_us(60);
                C=1;
                TRE = 1;
                __delay_us(10);
               
        }
}

void OWWriteByte(int data)
{
        int loop;

        for (loop = 0; loop < 8; loop++)
        {
                OWWriteBit(data & 0x01);

                data >>= 1;
        }
}
int OWReadBit(void)
{
        int result;

        C=0;
        TRE = 0;
        __delay_us(6);
        C=1;
        TRE = 1;
        __delay_us(9);
        result = C & 0x01;
        __delay_us(55);
        return result;
}

int OWReadByte(void)
{
        int loop=0, result=0;

        for (loop = 0; loop < 8; loop++)
        {
                result >>= 1;

                if (OWReadBit())
                        result |= 0x80;
        }
        return result;
}

/*-------------------------------------------------------------*/

void main()
{
   
        int tempL, tempH;
        //int out;
       
        OWReset();
        OWWriteByte(0xCC);  // skip ROM
        OWWriteByte(0x44);   // convert T
        __delay_ms(750);
        OWReset();
        OWWriteByte(0xCC);  //skip ROM
        OWWriteByte(0xBE);   //read scratchpad
        tempL = OWReadByte();   //cteni spodniho bytu teploty
        tempH = OWReadByte();   //cteni horniho bytu teploty

}   
Návrat nahoru
 

 
L.
Anonymní





PříspěvekZaslal: 21 leden 2016, 22:30    Předmět: Citovat

Jinak doplňuji, že čidlo komunikuje s procesorem PIC16F727.
Návrat nahoru
 

 
Standa33
Profesionál
Profesionál


Založen: 26.4.2010
Příspěvky: 135

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

Po resetu jsou vývody PORTE nastaveny do režimu analogové vstupy(ANSELE = 0b00000111).
Pro přepnutí na I/O režim musíš nastavit registr ANSELE = 0b00000000, viz datasheet.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Mahoney
Profesionál
Profesionál


Založen: 26.12.2013
Příspěvky: 91

PříspěvekZaslal: 22 leden 2016, 18:42    Předmět: Citovat

Jj, nenastavit si ANSELx je skvělá sranda, taky jsem tak kdysi zabil dva dny než jsem na to přišel… Shodou okolností taky u DS18B20.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
L.
Anonymní





PříspěvekZaslal: 22 leden 2016, 19:28    Předmět: Citovat

Díky, o víkendu vyzkouším.
Návrat nahoru
 

 
L.
Anonymní





PříspěvekZaslal: 25 leden 2016, 20:54    Předmět: Citovat

Bylo to přesně tímto...díky Wink
Návrat nahoru
 

 
theenggprojects
Nováček
Nováček


Založen: 23.8.2016
Příspěvky: 6

PříspěvekZaslal: 29 září 2016, 3:22    Předmět: Citovat

You should have a look at this tutorial Interfacing of 18B20 with Arduino.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

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
 
Strana 1 z 1
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)