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
Pojdi na stran 1, 2  Naslednja
 
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
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Sre Mar 04, 2009 8:05 pm    Naslov sporočila:  PIC in DS18B20 Odgovori s citatom

Spravil sem se oživljati termometer s PIC-em (zaenkrat se še nisem odločil katerega, verjetno enega "malčka") in 1x DS18B20 ter prikazom izmerjene temperature v 10 bitni resoluciji na 2*16 LCD v 4 bitnem režimu delovanja. Prebral sem si datasheet od omenjenega senzorja, ampak mi ostaja nekaj neznank, zato bi vas prosil, da se skozi ta postopek prebijem ob vaši pomoči.

Predenj začnem s pisanjem programa (v assembler-ju), sem si ga na papirju v grobem razdelil nekako takole:

1. Inicializacija LCD
2. Inicializacija DS18B20
3. Meritev temperature
4. Pretvorba digitalnega podatka iz DS18B20
5. Prikaz izmerjene temperature na LCD


Četrta in peta točka sta itak tesno povezana, zato ju v nadaljevanju nisem ločil.

Vsako točko sem si nato še naprej razčlenil.

1. Inicializacija LCD

V tem delu ni kaj dosti razglabljat, ker je postopek točno definiran in mi ne dela težav.

2. Inicializacija DS18B20

- reset senzorja
- preskočim branje ID-ja
- v config registru (scratchpad) nastavim 10 bitno resolucijo
- reset senzorja

3. Meritev temperature

- reset senzorja
- preskočim branje ID-ja
- izvedem merjenje temperature (temperaturna konverzija)
- branje spodnjih 8 bitov izmerjene temperature
- branje zgornjih 8 bitov izmerjene temperature

4. Pretvorba digitalnega podatka iz DS18B20 in prikaz izmerjene temperature na LCD

Tukaj pa se mi ustavi, ker nimam nekih pravih idej, kako naj izvedem pretvorbo digitalnega podatka, da bom lahko izpisoval temperaturo na LCD? Vem, da je vsak bit v podatku utežen in predstavlja neko decimalno število. Ne vem pa, kako se naj lotim te pretvorbe.


Upam, sem si ostale točke prav zastavil. Kakršnikoli popravki, predlogi ali izboljšave so dobrodošli.

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.03
Kraj: Črnuče

PrispevekObjavljeno: Sre Mar 04, 2009 8:57 pm    Naslov sporočila:   Odgovori s citatom

Basic počne takole:
Koda:

   Ow_Write(DS_port, DS_pin, $BE)        'read scratchpad -> ukaz ds1820
       for i=0 to 8
           x = ow_read(DS_port, DS_pin)
           scratch[i] = x                 ' prebere 9 bajtov podatkov senzorja
       next i
       a= scratch[1]                      ' kakšen je predznak temperature
       if a=0 then
                  lcd_chr(vrstica,stolpec,"+")
              else
                  lcd_chr(vrstica,stolpec,"-")
       end if

       a=scratch[0]
       if a.0 = 0  then                    'bit 0 = decimalna vrednost temp.
                       decimalka = "0"
                  else
                       decimalka = "5"
       end if
       a = scratch[0]  >>1                 ' Vsebino premakne za 1 mesto v desno
       senzor[vrstica] = a                 ' da se odstrani vrednost decimalke
       ByteToStr(a,temperatura)            ' pretvori vrednost za prikaz na LCD tole je samo pretvorba cifre v črke, ker ukaz za ispis to zahteva
       lcd_out_cp( temperatura)
       Lcd_Chr_CP(",")
       Lcd_Chr_CP(decimalka)


Program bere posamezen bajt poslan iz senzorja v spremenljivko v mali tabeli. Posamezen bajt informacij ima različne pomene. Pogledaš posamezne bajte da dobiš željeno informacijo. nato rabiš prejeto informacijo samo prikazat.

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Sre Mar 04, 2009 9:14 pm    Naslov sporočila:   Odgovori s citatom

Koda:
ByteToStr(a,temperatura)      ' pretvori vrednost za prikaz na LCD tole je samo pretvorba cifre v črke, ker ukaz za izpis to zahteva


Mene pa ravno ta del najbolj muči Wink

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.03
Kraj: Črnuče

PrispevekObjavljeno: Sre Mar 04, 2009 9:41 pm    Naslov sporočila:   Odgovori s citatom

Ma ne vem po opisu ne naredi nič posebnega. Funkcija za izpis zahteva sprejemljivko tipa char, v prejeti sprejemljivki pa je številka.

Te stvari se ponavadi obdelujejo s kakšnimi tabelami. RETLW ... če se ne motim...
Dobiš bajt v nekem območju - 0 -FF posamezni vrednosti 0 -FF pripišeš drugo vrednost. Poglej kakšen asm, ki ga je pripel Silvo pa imaš izpis na displej ali LED displej. Je enako..

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Sre Mar 04, 2009 10:34 pm    Naslov sporočila:   Odgovori s citatom

Highlag je napisal/a:
Silvo pa imaš izpis na displej ali LED displej. Je enako..


Saj imam en program od njega, ampak si te pretvorbe ne znam razjasnit Sad

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sre Mar 04, 2009 10:50 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sre Mar 04, 2009 11:17 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Čet Mar 05, 2009 9:08 am    Naslov sporočila:   Odgovori s citatom

nufan: za pretvorbo iz številke v string:

Koda:

void inline strreverse(char* begin, char* end)
{
   char aux;
   while(end>begin)
      aux=*end, *end--=*begin, *begin++=aux;
}
   
void itoa(int value, char* str, int base)
{
   static char num[] = "0123456789abcdef";
   char* wstr=str;
   //int sign;
   
   if (base<2 || base>16){ *wstr='\0'; return; }
   //if ((sign=value) < 0) value = -value;
   do *wstr++ = num[value%base]; while(value/=base);
   //if(sign<0) *wstr++='-';
   *wstr='\0';
   strreverse(str,wstr-1);
}


Tole je sicer v c-ju, samo mislim da ne bi smel biti problem pretvoriti v asm. Kar je zakomentirano, je podpora za negativne številke.

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.70
Kraj: Kranj - struževo

PrispevekObjavljeno: Čet Mar 05, 2009 10:10 am    Naslov sporočila:   Odgovori s citatom

Za PIC-a imaš že napisano rutino za 1-wire senzorje. Prosto dostopna na netu. Ali je od Microchipa ali pa od Maxima. V glavnem, deluje 100%.
_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Čet Mar 05, 2009 10:56 am    Naslov sporočila:   Odgovori s citatom

aly je napisal/a:
Za PIC-a imaš že napisano rutino za 1-wire senzorje. Prosto dostopna na netu. Ali je od Microchipa ali pa od Maxima. V glavnem, deluje 100%.


Na Maximu sem našel samo tole, kjer je lepo razložen postopek komunikacije, nič pa ne piše o pretvorbi. Na Microchip-ovi strani pa nisem ničesar našel.
Sicer pa, če program ni dobro komentiran ali razložen mi nič kaj veliko ne pomaga, ker si ne znam razjasnit postopka.

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Mar 05, 2009 12:53 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Mar 05, 2009 12:56 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Čet Mar 05, 2009 8:51 pm    Naslov sporočila:   Odgovori s citatom

Aha, hvala Kroko. Zdaj se mi že bolj svita Wink Bom poskusil spisat ta del in poročam, kako in kaj.
_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Pet Mar 06, 2009 11:41 am    Naslov sporočila:   Odgovori s citatom

Na papirju sem si razjasnil pretvorbo celega dela za pozitivna in negativna števila. Kako pa naj pretvorim decimalni del? BIN to BCD postopek "dela" samo za celi del števila.
_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pet Mar 06, 2009 5:37 pm    Naslov sporočila:   Odgovori s citatom

Zakaj pa ne spremeniš v celo število? Npr. pomnožiš s sto in tako dobiš dve decimalki ...

LP!
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
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
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: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group