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

Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom

[es] :: Elektronika :: Mikrokontroleri :: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom

[ Pregleda: 2809 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

agresor11
Beograd

Član broj: 96627
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom13.05.2010. u 23:11 - pre 169 meseci
Relatibno sam nov u ovome i uspeo sam da sam isprogramiram PIC 18f4550 da prikazuje tekst na 2x16 LCD.

Problem je nastao kada sam hteo da ugradim temperaturni senzor ds18b20+.

Zanimljiva stvar je da on "radi", tj komuniciram sa njim i CRC mi prolazi, ali mi stalno vraca velike negativne vrednosti.

Da li neko ima ideju zasto bi se to desavalo?

Ako treba postovacu i deo koda.
 
Odgovor na temu

milanmeh
Novi Sad

Član broj: 206027
Poruke: 213
*.ptt.rs.



+7 Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom14.05.2010. u 11:55 - pre 169 meseci
Da li ti je stalno izbacivao istu vrednost ili su varirale? Ukoliko mozes, pogledaj u biblioteci od HITECHA za DS18B20 koje su rutine za rukovanje sa greskama (ako su biblioteke otvorene). Tvoj senzor meri u rasponu od -55 do +125, ako su vrednosti manje od -55 onda tu nesto ne stima. Ja sam radio sa DS18S20 na AVR mikrokontroleru i obicno sam imao dve vrste greske, ocitana je vrednost -9999 koju je vracala sama rutina za citanje senzora (ovo je vezano za kompaljer koji sam koristio) i znacilo je da je komunikacija losa ili konstanto +85, sto je bila greska preranog citanja senozra. Senzoru treba oko 600-700ms da bi konvertovo temperaturu i smestio rezultat na buffer za citanje, ali ova vrednost moze biti i veca, pa ukoliko se prerano posalje zahtev za ocitavanje, senzor ce poslati vrednost 850, tj 85 kad se podeli sa 10.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom14.05.2010. u 16:59 - pre 169 meseci
nisam terao taj termometar na hitech-u ali sam pricao sa njim koristeci mnoge druge ... obrati paznju da vecina biblioteka koristi isti kod za pricu sa svim 18x20 ... problem je sto se rezultat razlicito interpretira ako je 18S20 (9bita rezultat) ili 18B20 (12 bita rezultat) ili neki treci ...

tipicna rutina za citanje (E2 je pin za one wire na primer)
Code:

    unsigned in16 temp;

    Ow_Reset(&PORTE, 2);
    Ow_Write(&PORTE, 2, 0xCC);
    Ow_Write(&PORTE, 2, 0x44);
    Delay_us(120);
    Ow_Reset(&PORTE, 2);
    Ow_Write(&PORTE, 2, 0xCC);
    Ow_Write(&PORTE, 2, 0xBE);
    temp =  Ow_Read(&PORTE, 2);
    temp = (Ow_Read(&PORTE, 2) << 8) + temp;


(OW_* je mikroc one wire biblioteka, hitech ima svoju)
e sada je fora samo izvadidi vrednost iz temp varijable i to je razlicito vezano za velicinu rezultata
ovo ti je primer kako da procitas vrednost i upises u txt array koji onda bacis na display
(int8 je 1byte integer, int16 je 2 byte integer, char je 1byte integer..)

Code:

//  Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
//  18S20: 9  
//  18B20: 12
const unsigned int8 TEMP_RESOLUTION = 9;
const unsigned int8 RES_SHIFT = TEMP_RESOLUTION - 8;

  char temp_whole;
  unsigned int16 temp_fraction;

  // check if temperature is negative
  if (temp2write & 0x8000) {
     text[0] = '-';
     temp2write = ~temp2write + 1;
     }

  // extract temp_whole
  temp_whole = temp2write >> RES_SHIFT ;

  // convert temp_whole to characters
  if (temp_whole/100)
     text[0] = temp_whole/100  + 48;
  else
     text[0] = '0';

  text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  text[2] =  temp_whole%10     + 48;             // Extract ones digit

  // extract temp_fraction and convert it to unsigned int
  temp_fraction  = temp2write << (4-RES_SHIFT);
  temp_fraction &= 0x000F;
  temp_fraction *= 625;

  // convert temp_fraction to characters
  text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit
  text[5] = (temp_fraction/100)%10 + 48;         // Extract hundreds digit
  text[6] = (temp_fraction/10)%10  + 48;         // Extract tens digit
  text[7] =  temp_fraction%10      + 48;         // Extract ones digit




 
Odgovor na temu

agresor11
Beograd

Član broj: 96627
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom14.05.2010. u 22:21 - pre 169 meseci
Pogledao sam stanje i mislim da CRC ne prolazi u mom slucaju, sto je odgovorno za moj problem.

Trenutno je bio izabran unutrasnji oscilator na 8 Mhz. Isto vazi i za promenljivu za delay funkcije.

Nista nije pomoglo.

Onda mi je palo napamet da promeni na 4 Mhz i cela stvar je proradila. Pogledacu zasto nije htelo da radi na 8.



Hvala svima na pomoci.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom15.05.2010. u 14:25 - pre 169 meseci
da li si postavio config parametre za 18f455 za 8MHz ili si samo upisao u projekat da je 8MHz? Samo upisivanje u projekat bez setovanja IRCF2:IRCF0 (111 je 8MHz, 110 je 4MHz) nece da odradi posao .. mislim da je 4MHz default ali nisam 100% siguran i onda ako ti kazes kompajleru da pravi delay na 8MHz a mcu radi na 4, sav tajming ode u void
 
Odgovor na temu

agresor11
Beograd

Član broj: 96627
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom15.05.2010. u 18:46 - pre 169 meseci
pa kada je u pitanju 8 mhz stavio sam OSCCON = 0b0111011 u main ()
i #define PIC_CLK 8000000 //MHz u delay.h,
ali ne radi kako treba.


kada je u pitanju 4mhz - OSCCON = 0b0110011 u main ()
i #define PIC_CLK 4000000 //MHz u delay.h
i tada je sve ok.


Mada u sustini mi to vise i nije problem.

Sada imam jednu veoma zanimljivu stvar. Korisim PICKit2 i MPLAB 8.43 i javlja mi se problem da mi se main nikada ne zavrsi,
tj. main se neprekidno ponavlja.

Watchdog timer je iskljucen.

main()
{
OSCCON = 0b01100111;



GIE = 0;
PEIE = 0;
ADON = 0;

ADCON1 = 0x0F;
ADCON2 = 0x0F;

CMCON = 0x07;

TRISA = 0;
LATA = 0;
PORTA = 0;

TRISB = 0;
LATB = 0;
PORTB = 0;

Init_TLCD();
Clear_TLCD();

while(1)
{
Read_Temperature();
}
}

Imate li ideja zasto?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom15.05.2010. u 20:42 - pre 169 meseci
definisao si main kao

Code:


main()
{



ako funkcija (u tvom slucaju main) nema definisan tip, podrazumeva se tip INT, sto znaci da hitech ocekuje negde return sa povratnom vrednoscu ...

ili definisi to kao

Code:

void main(){
...


ili na kraju main-a posle while(1) petlje dodaj jedan return 0;


Code:

...
  while(1){    
    Read_Temperature();
  }
  return 0;
}

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom15.05.2010. u 20:45 - pre 169 meseci
da, zaboravih - za klok - nemam pojma .. meni sa picc-om radi super na 8MHz ... probao sam hitech i ok je (mozda cak i malo bolji od picc-a, nisam dovoljno dugo probao) ali obzirom da picc imam kupljen (na zalost imao sam samo godinu dana support + free updates tako da nemam najnoviju verziju) a hitech mi je limitiran na 2k vratio sam se na picc (csc).
 
Odgovor na temu

agresor11
Beograd

Član broj: 96627
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom17.05.2010. u 20:00 - pre 169 meseci
sto se tice main-a jos uvek ista stvar, i dalje mi se main izvrsava kao while(1) cak iako nema nista i njemu

int main(){return 0;}
ili
void main(){}

ne znam zasto...

Pomislicu da ima nesto u vezi sa podesavanjima MPLAB-a jer mi se isto desavalo na pic 18f2550.
 
Odgovor na temu

agresor11
Beograd

Član broj: 96627
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom19.05.2010. u 20:35 - pre 169 meseci
Ako neko ima ideju....
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Problem sa ds18b20+ i merenjem temperature sa HITECH C jezikom

[ Pregleda: 2809 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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