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

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Ned Sep 07, 2008 10:36 am Naslov sporočila: AVR>DS1820>ERR |
|
|
Pozdravljeni
V aplikaciji berem temperature 5-tih senzorjev DS1820
V primeru nebranja ID senzorja bi rad dobil podatek o tem iz podatka ERR.
Če iz aplikacije odstranim vsej 5 senzorjev, dobim podatek ERR=1, če pa imam priklopljen samo en senzor je pa ERR podatek za vse senzorje- Seer=0.
Podatke bi rad zajemal v spremenjivki Serr(5) za vsak senzor posebej, vendar mi to nikakor ne uspeva.
Prosim za kak namig - rešitev tega problema
V prilogi je trenutno uporabljen način zajemanja ERR podatka, ki se odvija vsako minuto.
Hvala
LP, stursc
Opis: |
|
Velikost datoteke: |
35.66 KB |
Pogledana: |
109 krat |

|
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Ned Sep 07, 2008 1:54 pm Naslov sporočila: |
|
|
Predvidevam, da dobiš podatek ERR iz ukaza "RESET one wire bus".
Ta ukaz se izvede na začetku vsakega paketa, še preden senzorje kličeš po IDjih.
Če je na vodilu vsaj en senzor, se na reset odzove z "0". Če je na vodilu več senzorjev, se odzovejo vsi z "0".
Tako da tega ne moreš uporabiti za identificiranje dotičnega senzorja.
Če senzor je in če deluje pravilno, ugotoviš tako, da pošlješ reset, pošlješ ID in prebereš Scratchpad in preračunaš CRC. Če se ujema, potem je s senzorjem in komunikacijo vse ok. Enako za vsakega.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Ned Sep 07, 2008 5:25 pm Naslov sporočila: Imel |
|
|
Imel sem nekoč problem, tudi 4 ali 5 senzorjev na enem 1wire busu, dela odlično dan ali dva, potem ne dobim nobene temperature več, vse je v errorju. karkoli sem naredil na busu, je bilo v errorju.
Potem sem za vsak termemeter določil en pin, in vsakega bral na svojem senzorju, spet dela nekaj časa, potem pa samo eden termometer štrajka, in ne dela.
Potem sem zamenjal defektni termometer, in sedaj dela že nekaj mesecev.
Ker sem kontkatke termometra lotal na žičke in čez dal skrčljive špagete, sumim, da sem tistega enega mora z vžigalnikom pregrel, ko sem ogreval špagetke. Od takrat vedno kadar segrevam skrčljive špagetke blizu integriranih vezij, primem samo veze s ploščatimi kleščami, da jih hladim, med tem ko segrevam špagetke.
_________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Sep 07, 2008 6:01 pm Naslov sporočila: |
|
|
Visokonivojskih jezikov, s katerim je napisan gornji košček kode ne poznam. Lahko pa potrdim tisto, kar je že napisal Aljaž. Vsi senzorji, ki so priključeni na 1Wire vodilo se odzivajo na reset, katerega razumejo kot nizko stanje vodila v trajanju ca 480-960 S, z nizkim stanjem v dolžini do 240 S od časa, ko CPU vodilo sprosti, na kar vodilo sprostijo. Z danih informacij lahko izberemo, če je sploh kaj priključeno na vodilo ter ali je vodilo (ali senzor) slučajno v kratkem stiku. Okvaro ali prisotnost dotičnega senzorja za katerega poznamo ID pa lahko preverimo le z branjem CRC-ja.
Osebno sem DS1820 kar dosti uporabljal. (med drugim je z njimi bila razvita ena idustrijska aplikacija, ki se še vedno izdeluje. Senzorji delujejo izredno zanesljivo.) Osebno prilotam 100n smd kondezator neposredno na pine. Senzorje pa zaščitim z termo bužirko, ki vsebuje lepilo. Tak senzor se lahko brez škode namoči v vodo.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Pon Sep 08, 2008 9:10 am Naslov sporočila: |
|
|
Pozdrav
@aly :Če senzor je in če deluje pravilno, ugotoviš tako, da pošlješ reset, pošlješ ID in prebereš Scratchpad in preračunaš CRC. Če se ujema, potem je s senzorjem in komunikacijo vse ok.
To je verjetno tudi najboljša rešitev le izvedba se mi nikakor "ne posveti"
Sedaj sem v ta namen uporabljal ukaz "če je temperatura 0 (nič)" kot simulacijo nedelovanja senzorja, ker pa nekatere koristim kot protizmrzovalno zaščito, kjer naj bi bila uporabna temperatura 0 (nič).
Ni mi jasno kako prebrati ID posameznega senzorja, če je na 1wire priključenih več senzorje. Če obstoja ta rešitev potem bi tudi moja rešitev bila preprosta.
ID posameznega senzorja hranim v eepromu in jih vnašam tako, da je pri vnosu ID-ja priklopljen le dotični.
@Silvo:Okvaro ali prisotnost dotičnega senzorja za katerega poznamo ID pa lahko preverimo le z branjem CRC-ja.
Kako to izvesti ?? bolj po "kmečko", da bom razumel
V prilogi je del kode za branje, ki je sedaj v uporabi
LP, stursc
Opis: |
|
 Download |
Ime datoteke: |
ERR.txt |
Velikost datoteke: |
2.95 KB |
Downloadano: |
30 krat |
|
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Pon Sep 08, 2008 9:34 am Naslov sporočila: |
|
|
Sam sem najprej napisal programček, ki je na LCD-ju izpisal kodo posameznega senzorja, ko je le ta samostojno priključen.
Potem sem te kode uporabil v programu.
Drugače se to verjetno ne da narediti, ker če narediš poizvedbo, ko so priključeni vsi senzorji, odgovorijo vsi hkrati in ni možno razbrati kod posameznih senzorjev.
_________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
robika Član

Pridružen-a: Pon 05 Apr 2004 20:55 Prispevkov: 281 Aktiv.: 1.19 Kraj: ajdovščina
|
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Pon Sep 08, 2008 10:11 am Naslov sporočila: |
|
|
Citiram: |
Drugače se to verjetno ne da narediti, ker če narediš poizvedbo, ko so priključeni vsi senzorji, odgovorijo vsi hkrati in ni možno razbrati kod posameznih senzorjev. |
Serijske številke (naslove) posameznih senzorjev se da prebrati (poglej v pdf od senzorja). Problem, je v tem, da dobiš seznam serijskih številk, ne veš pa kateri je kje. Potrebuješ še eno tabelo, v kateri so serijske številke in imena lokacij senzorjev. Uporabo po vrsti, kakor jih najdeš z algoritmom iskanja odsvetujem, ker se v primeru menjave enega senzorja vrstni red spremeni.
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Pon Sep 08, 2008 1:29 pm Naslov sporočila: |
|
|
stursc je napisal/a: |
Sedaj sem v ta namen uporabljal ukaz "če je temperatura 0 (nič)" kot simulacijo nedelovanja senzorja, |
Ne bo šlo. Če se senzorja ne javi, potem prebereš vrednost FFFFh, kar ti da vrednost -1 ali -0.5 ali -0.25, odvisno kako bereš.
stursc je napisal/a: |
Ni mi jasno kako prebrati ID posameznega senzorja, če je na 1wire priključenih več senzorje. |
Če bi prebral datasheet, bi vedel, da obstaja funkcija Search. Ki pa je dokaj zahtevna in je ne priporočam, dokler ti ne deluje vse 100%. S to iterativno funkcijo poiščeš vse zadeve na 1-wire vodilu, ne samo senzorjev.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Pon Sep 08, 2008 2:09 pm Naslov sporočila: |
|
|
Hvala aly !
Ostajam pri dosedanji zaščiti,kako stopinjo višje, pa bo !
@robika :Žal ne morem te kode uporabno pretvorit za AVR-je, pa sem poskušal vse živo
Vsekakor boš moral AVR-ju povedat kaj bo kateri pin - AOUTPUT ali INPUT
potem bi pa znalo delovati, saj ti že sam prevajalnik pove, da nekaj ne štima !
LP, stursc
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 08, 2008 2:45 pm Naslov sporočila: |
|
|
Citiram: |
stursc je napisal/a:
Ni mi jasno kako prebrati ID posameznega senzorja, če je na 1wire priključenih več senzorje.
Če bi prebral datasheet, bi vedel, da obstaja funkcija Search. Ki pa je dokaj zahtevna in je ne priporočam, dokler ti ne deluje vse 100%. S to iterativno funkcijo poiščeš vse zadeve na 1-wire vodilu, ne samo senzorjev. |
Poleg tega pri tem iskanju ne veš kje fizično se nahaja najden senzor. (razen, da ga takrat, ko je že najden pogreješ - če gre za temperaturni oz, da ga odstraniš, če gre za kako drugo 1-wire periferijo)
Za branje ID-ja je najbolje uporabit svoj pin na mikrokontrolerju. (Če uporabljaš v aplikaciji tipke, recimo lahko uporabiš en pin, ki ga uporablja tipka. Lahko sicer uporabiš tudi isto vodilo, a v tem primeru mora biti na vodilu pri branju le en senzor.)
Za AVR nimam spisanega kakega primera. (lahko ga sicer spišem - a le v assemblerju-če ti kaj koristi)
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Pon Sep 08, 2008 3:17 pm Naslov sporočila: |
|
|
@aly
Bascom ima funkcijo za iskanje že napisano. Samo poklicati jo je treba (in pogledati v dokumentacijo, kako se uporablja).
EDIT: Primer uporabe search funkcije.
|
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Pon Sep 08, 2008 5:52 pm Naslov sporočila: |
|
|
Silvo, hvala. Asembler poznam zelo slabo, bolje rečeno ne poznam.
Bo poskušal kaj ugotoviti v Bascom-AVR, dokler bo pa zaščita kot je bila že sedaj
2 leti.
Če bo ratalo bom pa poročal !
Hvala vsem za odziv.
Lp, stursc
|
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Tor Sep 09, 2008 5:07 pm Naslov sporočila: |
|
|
Spisal proceduro za 1wsearch.
Stvar res deluje, vendar, kot je napisal aly - ne priporočam.
Ne vidim uporabne možnosti.
Če dotičnega senzorja ni bere naslednjega, če odstranim vse bere zadnjega.
Torej, branje izvrši enkart in podatki ostanejo RAM-u do reseta.
Kateri senzor bo prvi prebran je pa vprašanje.
V mojem primeru ta sistem kontrole nima funkcije
LP, stursc
|
|
Nazaj na vrh |
|
 |
robika Član

Pridružen-a: Pon 05 Apr 2004 20:55 Prispevkov: 281 Aktiv.: 1.19 Kraj: ajdovščina
|
Objavljeno: Tor Sep 09, 2008 9:09 pm Naslov sporočila: |
|
|
Jaz s tistim programčkom, ki je pripet malo višje preberem naslove vsakega posameznega senzorja, nato pa to vpišem v kodo na sledeči način:
Rem /////////////////////////
'Read Address 1
Sub Srno1 'branje adrese
For I = 0 To 7
Ar(i) = Lookup(i , Dta1)
Next
End Sub
Rem /////////////////////////
'Read Address 2
Sub Srno2 'branje adrese
For I = 0 To 7
Ar(i) = Lookup(i , Dta2)
Next
End Sub
'//////////////////////////////////
Dta1: 'naslov 1
Data 16 , 106 , 205 , 60 , 0 , 8 , 0 , 21 'kotel
Dta2:
Data 16 , 153 , 221 , 64 , 0 , 8 , 0 , 248 'kolektorji
Ravno ta del programa za uporabo z AVR-jem, nikakor ne uspem usposobit, dočim na AT89S8252 ali AT89C4051 dela brez problema.
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
|