www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

PIC in DS18B20

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
noname
Član
Član



Pridružen-a: Tor 28 Nov 2006 19:10
Prispevkov: 222
Aktiv.: 0.98
Kraj: Maribor

PrispevekObjavljeno: Tor Dec 04, 2012 11:54 pm    Naslov sporočila:  PIC in DS18B20 Odgovori s citatom

Pozdravljeni,
prosim za pomoč spisal sem naslednjo proceduro za delo z one wire elementi DS18B20 vendar mi zadeva ne deluje pa ne najdem napake (Kristal 10MHz)

Koda:
#include <htc.h>

#define OwNamen TRISA6
#define OwPrikljucek RA6
#define Ow_Izhod OwNamen = 0x00
#define Ow_Vhod OwNamen = 0xFF

void Ow_ZakasnitevDolga() // 90us
{
for (int tmpD = 0; tmpD < 25; tmpD++);
}

void Ow_ZakasnitevKratka() // 20us
{
for (int tmpD = 0; tmpD < 4; tmpD++);
}

void Ow_Reset()
{
Ow_Izhod;
OwPrikljucek = 0x00;
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_Vhod;
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
Ow_ZakasnitevDolga();
}

void Ow_Posiljanje(unsigned char data)
{
int bitcnt;
int tmpbit;
for (bitcnt = 0; bitcnt < 8; bitcnt++)
{
tmpbit = 0x01 & (data >> bitcnt);
if (tmpbit == 1)
{
Ow_Izhod;
Ow_ZakasnitevKratka();
Ow_Vhod;
Ow_ZakasnitevDolga();
}
else
{
Ow_Izhod;
Ow_ZakasnitevDolga();
Ow_Vhod;
Ow_ZakasnitevKratka();
}
}
}

unsigned char Ow_Branje()
{
int bitcnt;
unsigned char tmpdat;
for (bitcnt = 0; bitcnt < 8; bitcnt++)
{
Ow_Izhod;
Ow_ZakasnitevKratka();
Ow_Vhod;
Ow_ZakasnitevKratka();
tmpdat >>= 1;
if (OwPrikljucek == 0xFF)
tmpdat |= 0x80;
Ow_ZakasnitevKratka();
Ow_ZakasnitevKratka();
Ow_ZakasnitevKratka();
}
return tmpdat;
}

int DS_Read()
{
unsigned int tmp,tmp1;
int temp;
Ow_ZakasnitevDolga();
Ow_Reset();
Ow_ZakasnitevDolga();
Ow_Posiljanje(0xCC);
Ow_ZakasnitevDolga();
Ow_Posiljanje(0x44);
Ow_ZakasnitevDolga();
Ow_Reset();
Ow_ZakasnitevDolga();
Ow_Posiljanje(0xCC);
Ow_ZakasnitevDolga();
Ow_Posiljanje(0xBE);
Ow_ZakasnitevDolga();
tmp = Ow_Branje();
Ow_ZakasnitevDolga();
tmp1 = Ow_Branje();
Ow_ZakasnitevDolga();
tmp = tmp | tmp1 << 8;
Ow_Reset();
if ((tmp & 0x8000) > 0)
   {
   tmp = 0 - tmp;
   tmp *= 10;
   temp = 0 - (tmp >> 4);
   }
else
   {
   tmp *= 10;
   temp = tmp >> 4;
   }
return temp;
}


void main(void){
TRISA6 = 0x00;
RA6=0x00;

int i = DS_Read();



}




Po večih preizkusih vedno dobim prvih 8 bitov z vrednostjo 10 ter drugih 8 prejetih bitov z vrednostjo 255.

Lp, Uroš
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group