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


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Sre Mar 04, 2009 8:05 pm Naslov sporočila: PIC in DS18B20 |
|
|
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 |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Sre Mar 04, 2009 8:57 pm Naslov sporočila: |
|
|
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 |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Sre Mar 04, 2009 9:14 pm Naslov sporočila: |
|
|
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  _________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Sre Mar 04, 2009 9:41 pm Naslov sporočila: |
|
|
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 |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Sre Mar 04, 2009 10:34 pm Naslov sporočila: |
|
|
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  _________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Sre Mar 04, 2009 10:50 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Sre Mar 04, 2009 11:17 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Čet Mar 05, 2009 9:08 am Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Čet Mar 05, 2009 10:10 am Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Čet Mar 05, 2009 10:56 am Naslov sporočila: |
|
|
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 |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Čet Mar 05, 2009 12:53 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Čet Mar 05, 2009 12:56 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Čet Mar 05, 2009 8:51 pm Naslov sporočila: |
|
|
Aha, hvala Kroko. Zdaj se mi že bolj svita Bom poskusil spisat ta del in poročam, kako in kaj. _________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Pet Mar 06, 2009 11:41 am Naslov sporočila: |
|
|
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Pet Mar 06, 2009 5:37 pm Naslov sporočila: |
|
|
Zakaj pa ne spremeniš v celo število? Npr. pomnožiš s sto in tako dobiš dve decimalki ...
LP! |
|
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: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|