 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
noname Član

Pridružen-a: Tor 28 Nov 2006 19:10 Prispevkov: 222 Aktiv.: 0.98 Kraj: Maribor
|
Objavljeno: Tor Dec 04, 2012 11:54 pm Naslov sporočila: PIC in DS18B20 |
|
|
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 |
|
 |
|
|
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
|