Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problemi s ds1820

[es] :: Elektronika :: Mikrokontroleri :: problemi s ds1820

[ Pregleda: 4077 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

damir0205

Član broj: 22726
Poruke: 107
*.dialin.iskon.hr.



Profil

icon problemi s ds182014.08.2006. u 07:46 - pre 214 meseci
Pokusavam pokrenuti ds 1820 digitalni termometar, navedeni kod mi ne radi pa ako neko ima kakav prijedlog....Inace koristim PIC18f252 i htpicov kompajler


// The following are standard 1-Wire routines.
void _1w_init(int sensor)
{
_1w_pin_hi(sensor);
_1w_pin_low(sensor);
DelayUs(250);
DelayUs(250);

_1w_pin_hi(sensor);
DelayUs(65);
}

int _1w_in_byte(int sensor)
{
int n, i_byte, temp, mask;
i_byte = 0;
mask = 0xff & (~(0x01<<sensor));
for (n=0; n<8; n++)
{
PORTB=0x00;
TRISB=mask;
TRISB=0xff;
#asm
CLRWDT
NOP
NOP
#endasm
temp=PORTB;
if(temp & ~mask)
{
i_byte=(i_byte >> 1) | 0x80; // least sig bit first
}
else
{
i_byte=i_byte >> 1;
}

//i_byte = i_byte | ((temp & ~mask) & (1 << n));
DelayUs(60);
}
return(i_byte);
}

void _1w_out_byte(int d, int sensor)
{
int n, mask;
mask = 0xff & (~(0x01<<sensor));
for(n=0; n<8; n++)
{
if (d&0x01)
{
PORTB=0;
TRISB=mask; // momentary low
TRISB=0xff;
DelayUs(60);
}

else
{
PORTB=0;
TRISB=mask;
DelayUs(60);
TRISB=0xff;
}
d=d>>1;
}
}

void _1w_pin_hi(int sensor)
{
TRISB = 0xff;
}

void _1w_pin_low(int sensor)
{
PORTB = 0x00;
TRISB = 0xff & (~(0x01 << sensor));
}

void _1w_strong_pull_up(int sensor) // bring DQ to strong +5VDC
{
PORTB = 0x01 << sensor;
TRISB = 0xff & (~(0x01 << sensor));
DelayMs(250);
asm("CLRWDT");
DelayMs(250);
asm("CLRWDT");
DelayMs(250);
TRISB = 0xff;
}

a main funkcija izgleda otprilike ovako:

void main(void)
{
MCU_Init();
while(1)
{
asm("CLRWDT");

if(flag_ds1820 == 1)
{
for (sensor=0; sensor<MAX_SENSORS; sensor++)
{
_1w_init(sensor);
_1w_out_byte(0xcc, sensor); // skip ROM

_1w_out_byte(0x44, sensor); // perform temperature conversion
_1w_strong_pull_up(sensor);

_1w_init(sensor);
_1w_out_byte(0xcc, sensor); // skip ROM

_1w_out_byte(0xbe, sensor); // read the result

for (n=0; n<1; n++)
{
buff[n]=_1w_in_byte(sensor);
}
}

mjerena_vrijednost = t;
flag_prikaza = TERMOMETAR;
podjela_cifre_na_4_znamenke(mjerena_vrijednost);

}
}
 
Odgovor na temu

beep
Srbija/Vrbas

Član broj: 19294
Poruke: 198
*.smin.sezampro.yu.

Sajt: keselj.xyz


+1 Profil

icon Re: problemi s ds182018.08.2006. u 18:33 - pre 214 meseci
funkcija u kojoj inicijalizujes ds18b20 nije dobra.....

Citat:
damir0205:
// The following are standard 1-Wire routines.
void _1w_init(int sensor)
{
_1w_pin_hi(sensor);
_1w_pin_low(sensor);
DelayUs(250);
DelayUs(250);

_1w_pin_hi(sensor);
DelayUs(65);
}


nakon resetovanja potrebno je da sacekas 15-60us tj. u tom vremenskom intervalu treba da oslobodis liniju da bi ds18b20 mogo da 'odgovori'....nakon isteka tog vremena senzor spusta liniju na 0 u trajanju od 60-240us 'presence pulse' ....ne moze se pisati program ako nisi dobro izucio dokumentaciju i jos nesto ne pise se program u 'cugu' i nakon toga postavlja pitanje 'navedeni kod mi ne radi ...... '.Prvo je potrebo da u sklopu funkcije _1w_init(int sensor) proveris dali ti senzor 'odgovara' na tvoj reset pa tek onda slanje komandi .....korak po korak...moj ti je savet da kasnjenja pises u asembleru...
 
Odgovor na temu

damir0205

Član broj: 22726
Poruke: 107
*.dialin.iskon.hr.



Profil

icon Re: problemi s ds182018.08.2006. u 20:12 - pre 214 meseci
hvala, na odgovoru i na kritikama. Istina je htio sam to rijesiti na brzinu... , ali i nakon sto sam jako dobro proucio dokumentaciju stvar i dalje nije radila, problem je bio u tome sto nisam ukljucio full optimizaciju, a koristio sam build in funkcije za delay, a i inetrrupt timera mi je prekidao komunikaciju s dallasom (u interruptu multiplexno drajvem led displeje...).
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: problemi s ds1820

[ Pregleda: 4077 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.