|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
rimci Mojster
Pridružen/-a: Tor Mar 2004 17:57 Prispevkov: 24
|
Objavljeno: Tor Jan 10, 2006 7:55 am Naslov sporočila: Program za merjenje temperature ne dela |
|
|
V reviju Svet elekronike je že dolgo nazaj bil objavljen primer merjenja temperature.
Prvi program (Temp 1820) meni enostavno ne dela in mi izpiše da CRC ni OK. V čem bi lahko bil problem?
Pri drugem programu (1820_w5) pa mi ne dela prvi senzor (kot da sploh nebi bil priključen). Ko pa na njegovo mesto priključim drugi senzor ta dela. Sam senzor je sigurno vredu, saj mi ta isti senzor npr. s kakšnim drugim programom za merjenje temperature dela.
Končnico programov (.pdf), spremenite v (.txt)
Hvala za nasvete
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sre Jan 11, 2006 6:34 am Naslov sporočila: hm |
|
|
Hm, ali je
Koda: | Crc8:
Data 16 , 150 , 202 , 49 , 0 , 8 , 0 , 214
Data 16 , 178 , 194 , 49 , 0 , 8 , 0 , 130
'Data 0 , 94 , 188 , 226 , 97 , 63 , 221 , 131 , 194 , 156
'Data 126 , 32 , 163 , 253 , 31 , 65 , 157 , 195 , 33 , 127
'Data 252 , 162 , 64 , 30 , 95 , 1 , 227 , 189 , 62 , 96
'Data 130 , 220 , 35 , 125 , 159 , 193 , 66 , 28 , 254 , 160 |
namenoma izključen? vidim, da so Data stavki komentirani, namesto, da bi bili vključeni v program. Tako kot je, bo seveda vedno CRC8 narobe! _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sre Jan 11, 2006 6:41 am Naslov sporočila: Še enkrat |
|
|
V programu 1829_w5 je
Koda: |
Dta1: 'naslov 1
Data 16 , 150 , 202 , 49 , 0 , 8 , 0 , 214
Dta2: 'naslov 2
Data 16 , 178 , 194 , 49 , 0 , 8 , 0 , 130
Dta3:
'Data 16 , 4 , 66 , 39 , 0 , 0 , 0 , 187
|
tudi zadnji Data stavek komentiran
Termometri 1820 niso enostavno zamenljivi. Vsak ima svoj 8-bajtni naslov. Če zamenjaš termometer, potem moraš v programu tudi prilagoditi naslov novemu termometru, a to verjetno že veš.
Pozdrav _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
rimci Mojster
Pridružen/-a: Tor Mar 2004 17:57 Prispevkov: 24
|
Objavljeno: Sre Jan 11, 2006 8:59 am Naslov sporočila: |
|
|
Zdaj ko si to napisal mi je dalo misliti. V prvem programu CRC8: niso vpisane ID številke od senzorjev. Tista prva dva naslova sem vpisal jaz ostale pa sem onemogočil. In kolikor vidim je to narobe. Tu niso vpisane ID številke od senzorjev ampak ........ Kaj je tu vpisano?
V drugem programu pa sta Dta1 in Dta2 sta ID številki od DS1820 ki ju uporabljam jaz, ostale od Dta3 pa sem namerno izključil. Pa tudi če bi bili omogočeni bi po moje stvar morala delati. Ali narobe razmišljam?
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sre Jan 11, 2006 11:37 am Naslov sporočila: data ukazi |
|
|
Data ukazi pri CRC8 so podatki, ki jih za izračun CRC8 potrebuje rutina.
Če le ti niso kompletni, potem crc8 ne bo nikoli v redu.
DS1820 lahko uporabljaš tako, da ne specificiraš njegovega naslova, se pravi ID-a, vendar le, če je en sam DS1820 na 1wire bus-u. V tem slučaju je ID nepotreben, in ukaz za branje temperature je malo drugačen.
Imam samo minuto časa, in hitim, zato le ugibam, verjetno prvi program uporablja ta splošni način merjenja temperature, drugi pa specifični način, kjer je potreben ID pri ukazu za merjenje temperature.
Pozdrav _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
rimci Mojster
Pridružen/-a: Tor Mar 2004 17:57 Prispevkov: 24
|
Objavljeno: Sre Jan 11, 2006 1:54 pm Naslov sporočila: Re: data ukazi |
|
|
vilko je napisal/a: | Data ukazi pri CRC8 so podatki, ki jih za izračun CRC8 potrebuje rutina.
Če le ti niso kompletni, potem crc8 ne bo nikoli v redu.
|
Od kod pa dobim te podatke v CRC-ju. A so za vsak senzor drugačni? A jih je potrebno prebrati iz senzorja tako kot se prebere ID številka?
lp |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Sre Jan 11, 2006 6:08 pm Naslov sporočila: merjenje temperature |
|
|
Rimci,
meni se zdi da si narobe vpisal podatke, v tabelo CRC8 si vpisal podatke od senzorja!
Crc8:
Data 16 , 150 , 202 , 49 , 0 , 8 , 0 , 214
Data 16 , 178 , 194 , 49 , 0 , 8 , 0 , 130
Prav zaradi tega ti ne izracuna pravilno CRC8.
Ti podatki spadajo v tabelo DTA1.
Pusti tabelo za CRC8 tako kot je, a serijske stevilke svojih senzorjev vpisi v tabelo DTA1.
Vlado |
|
Nazaj na vrh |
|
|
roberto Mojster
Pridružen/-a: Ned Maj 2005 16:19 Prispevkov: 41
|
Objavljeno: Sre Jan 11, 2006 8:42 pm Naslov sporočila: |
|
|
Jaz sem si priredi sledeci program, tako da na LCD izpise celotno adreso DS1820, pocaka nekaj sekund in spet zacne brati naslednji senzor, ki se ga vtakne na vezje. Verjetno bo marsikomu koristil ta programcek.
'///////////////////////////////////////////////////////////////
'Program prebere adreso DS1820 senzorja temperature
'///////////////////////////////////////////////////////////////
'$regfile = "89c2051.dat"
'$crystal = 11059200
$crystal = 12000000
Config 1wire = P3.1 'use this pin
Dim Ar(8) As Byte , A As Byte , I As Byte
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
Do
Reset P1.1
'Wait 1
1wreset 'reset the device
1wwrite &H33 'read ROM command
For I = 1 To 8
Ar(i) = 1wread() 'place into array
Next
For I = 1 To 8
' Lcd I
' Lcd ":"
If I = 1 Then
Upperline
Elseif I = 5 Then
Lowerline
End If
Lcd Ar(i);
If I < 8 Then
Lcd ":"
End If
Wait 1
If I = 8 Then
Wait 5
Cls
End If
Next
Loop
End
Upam, da zadeva deluje ker je ze kar nekaj casa kar sem to zapekel v 4051. Preveril sem program tudi na ATmega8 pa stvar deluje. Na AVR-ju sem senzor priklopil tako, da stranske nogice vezem na maso, s + pa 4k7 upor na data nogico in stvar deluje.
Lp |
|
Nazaj na vrh |
|
|
rimci Mojster
Pridružen/-a: Tor Mar 2004 17:57 Prispevkov: 24
|
Objavljeno: Čet Jan 12, 2006 10:58 am Naslov sporočila: |
|
|
To sem opazil, da sem v CRC8 tabelo vpisal ID-je od mojih senzorjev, kar je narobe. Izbrisal sem jih in pustil tabelo tako kot je. Sedaj mi ne javlja da je CRC koda napačna ampak mi vedno izpisuje da je temperatura 85 stopinj. Zanima me kako je ta tabela CRC sestavljena, a so to znani podatki,saj niso prebrani iz senzorja.
Kar se pa tiče drugega programa, pa sem ID za prvi senzor vpisal v Dta1 in ID za drugi senzor v Dta2 in prvi senzor se obnaša kot da ni priključen.
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Čet Jan 12, 2006 11:53 am Naslov sporočila: CRC8 |
|
|
CRC8 je matematični postopek, s katerim izračunaš vsebino tkzv. bajta za preverjanje vsebine telegrama. Če ima telegram recimo 7 bajtov informacij, tedaj dodaš osmi bajt, ki ga izračunaš na osnovi vsebine preteklih 7 bajtov.
Prostopka za izračun sta dva. Eden je čisto matematični, zato bolj zahteven in bolj počasen, drugi si pomaga s tabelo, in je zato hitrejši, a vzame 256 bajtov prostora za tabelo, kar v splošnem ni problem.
Ko nek mikroprocesor odda telegram, odda z njim tudi ta bajt.
Ko drug mikroprocesor sprejema telegram, podobno izračuna CRC8 bajt in izračunano primerja s sprejetim. Če je izračunano enako prejetemu, smo dovolj zanesljivo prepričani, da je cel telegram prejet pravilno.
CRC8 je dovolj preprost, a ne absolutno zanesljiv. Ker ima samo en bajt informacije za preverjanje, torej 256 različnih možnosti, je statistično verjetno, da bo od 256 napačno sprejetih telegramov enega le teh sprejel kot pravilnega.
CRC8 in ID DS1820 so popolnoma nepovezana, popolnoma različna podatka. ID je lastnost vsakega DS1820 termometra, in v kolikor imaš paralelno vezanih več termometrov, tedaj moraš pri branju temperature povedati s pomočjo ID, katero temperaturo meriš.
Odgovor dobiš v obliki telegrama, ki ima na koncu CRC8 bajt in je odvisen od sporočila, ki si ga dobil. Napačen CRC8 dobiš recimo, če si prehitro po startu merjenja temperature začel brati temperaturo, (sekunda je primeren čas zakasnitve) ali če napajanje DS1820 ni v redu.
Vilko _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
rimci Mojster
Pridružen/-a: Tor Mar 2004 17:57 Prispevkov: 24
|
Objavljeno: Pet Jan 13, 2006 9:20 am Naslov sporočila: |
|
|
Vilko hvala glede razlage CRC postopka. Prav si imel res je bil problem časovna zakasnitev. V subrutini temperatura sem zakasnitev povečal na eno sekundo in stvar je začela delovati.
Kar se pa tiče drugega programa, pa mi noče delovati. Prvega senzorja enostavno ne zazna. A ima mogoče kdo možnost na testni plošči preizkusti ta program.
hvala
lp |
|
Nazaj na vrh |
|
|
cipko Novinec
Pridružen/-a: Pon Jan 2004 12:21 Prispevkov: 8 Kraj: velenje
|
Objavljeno: Pet Jan 13, 2006 9:58 am Naslov sporočila: |
|
|
Pozdravljeni!
Naj se še jaz vključim v debato merjenja temperature z DS 1820. Preizkušal sem program napisan v reviji svet elektronike (program za dva senzorja, ki ga je napisal Jure), vendar mi pri izpisu temperatur v območju od 0 do -0.9 st. celzije prikazuje vrednosti, kot da bi bila pozitivna temperatura (torej od 0 do +0.9). Ko pa temp. pade na -1 in nižje je prikaz na LCD v redu.
Ali ima še kdo podobno težavo in kako jo je rešil?
LP, Cipko |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pet Jan 13, 2006 1:39 pm Naslov sporočila: Pripnite svojo kodo |
|
|
Pripnite svojo kodo, da bomo lahko pogledali, kako in kaj s programom.
Na strežniku SE je program za čitanje ds1820, in isti program je tudi na CD-u, ki ga dobite s knjigo Programiranje v BASCOM8051, ki je naprodaj. Program ima napako pri prenašanju ID-a iz programskega pomnilnika v RAM. Napaka izvira iz anomalije, ker tečejo indeksi bajtov v RAM, če definiramo spremeljivko
od 1 do 8 pri bajtih v Data stavkih
Koda: | ID1:
Data ..8 bajtov konstant |
pa od 0 do 7
Programer je pri prepisovanju programa, ki ga je nedvomno stestiral, to spregledal. Najbolj enostavno se napaka popravi na ta način, da pred dejanske konstante za identifikacijo DS1820 dodamo spredaj še en brezvezni bajt tako
Koda: | ID1:
Data ..1 bajt s poljubno vsebino
Data ..8 bajtov konstant- pravi ID1
ID2:
Data ..1 bajt s poljubno vsebino
Data ..8 bajtov konstant- pravi ID2 |
Potem bo for zanka za prenos podatka v RAM pravilno delovala:
Koda: | for i = 1 to 8
id(i) = Lookup(i, ID1)
next |
Pozdrav _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
rimci Mojster
Pridružen/-a: Tor Mar 2004 17:57 Prispevkov: 24
|
Objavljeno: Pon Jan 16, 2006 6:02 pm Naslov sporočila: |
|
|
Vilko še enkrat hvala. Zdaj mi pa zadeva dela. Zanima me pa kako je kaj z točnostjo teh senzorjev. Opažam namreč da je razlika v temperaturi med obema senzorjema tja do 0.8 stopinje (senzorja imam en zraven drugega).
Pa še nekaj. A je priporočjivo dati zunanje pull up upore na port kjer je priključena tipka. Saj kontroler na portu kjer imam priključeni tipki nima notranjih pull up uporov
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pon Jan 16, 2006 6:21 pm Naslov sporočila: Toplotna kapaciteta |
|
|
Senzorji DS1820 imajo zelo majhno maso. Zato lahko že zelo majhna energija, ki jo prejmejo, spremeni njih temperaturo. Meni se je dogajalo, da sem dobil tudi za več kot stopinjo drugačne meritve od dveh senzorjev, ki sta bila fizično blizu skupaj in na istem 1wire vodilu.
Senzor mora imeti dober toplotni stik z materijalom, ki ga želimo meriti. Če je to tekočina v cevi, mora bit pritisnjen ob steno cevi. Če je to zzrak ali plin, ga pritrdi na rebra, podobna za hlajenje tranzistorjev. Res pa je, da boš tako kasneje zaznal spremembe temperature plina, ker s tem, ko dodaš maso, dodaš tudi neke vrste temperaturno vztrajnost.
-----
Pullup upori načeloma ne morejo naredi kaj narobe in jaz jih dajem vedno, razen p1.0 in p1.1 pri 4051, če ju uporabljam kot vhode komparatorja napetosti. Seveda pa pullup upori pomenijo porabo energije. No 10kOhmon na 5V ne bo napak. Res pa je, da če gre samo za tipko, bo ta odčitana pravilno tudi brez pullup upora, saj neko visoko upornost proti +5V ima tudi port v mikroprocesorju serije 8051.
Pozdrav _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
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 You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|