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 

oživljanje DS1820 in PIC-a
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Merilna tehnika in senzorji
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
aly
Član
Član



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

PrispevekObjavljeno: Pet Avg 29, 2008 9:18 am    Naslov sporočila:  oživljanje DS1820 in PIC-a Odgovori s citatom

Vprašanje sem dobil na ZS, ampak se mi zdi primerno, da ga rešimo vsi skupaj.

TIBET je napisal/a:

Naj razložim svoj problem. Izdelujem si regulacijo z PIC877A, ker pa mi Angleščina dela težave, (učil sem se nemško) prosim za pomoč.

Rad bi oživel osem DS1820 senzorjev, pa mi nikakor ne deluje. Vem da mi dela preglavice branje senzorjev. Pošiljam del programa, in prosim za nasvet, kaj je narobe, oziroma kaj manjka.



1-WIRE.asm.txt
 Opis:

Download
 Ime datoteke:  1-WIRE.asm.txt
 Velikost datoteke:  3.19 KB
 Downloadano:  29 krat



Nazadnje urejal/a aly Pet Avg 29, 2008 9:20 am; skupaj popravljeno 3 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



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

PrispevekObjavljeno: Pet Avg 29, 2008 9:19 am    Naslov sporočila:   Odgovori s citatom

Na hitro sem pregledal program.

Mislim, da nimaš pravilnega klicanja senzorjev.
Če imaš en senzor, gre tako:
Reset > SkipROM > ConvertT > počakaš > Reset > SkipROM > ReadScratchpad > pretvoriš podatke.

Če imaš več senzorjev, najprej priključiš po enega in izvedeš:
Reset > ReadROM > shraniš prejeto klobasko podatkov - 64 bitov (to je naslov posameznega senzorja; ID)

Potem jih zvežeš paralelno skupaj in jih uporabljaš tako:
Reset > MatchROM > pošješ 64-bitni ID > ConvertT > počakaš > Reset > MatchROM > pošješ 64-bitni ID> ReadScratchpad > pretvoriš podatke.
To ponavljaš za vsakega posebej.

Predlagam, da najprej spraviš enega k življenju, potem pa šele verigo.
Pozoren moraš biti na širino bitov, ki jih pošiljaš / sprejemaš, ker za one-wire je širina "okna" enega bita ključna za delovanje.

Čisto prvi korak pa mora biti, da se senzor odzove na Reset ukaz.

_________________
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
snow
Član
Član



Pridružen-a: Tor 27 Dec 2005 14:02
Prispevkov: 341
Aktiv.: 1.44
Kraj: Ljubljana || Velenje

PrispevekObjavljeno: Pet Avg 29, 2008 9:42 am    Naslov sporočila:   Odgovori s citatom

Na strani od Maxima (proizvajalca DS1820) imaš lepo opisano 1-Wire komunikacijo s PIC mikrokontrolerjem:

http://www.maxim-ic.com/appnotes.cfm/an_pk/2420
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.91
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Avg 29, 2008 9:44 am    Naslov sporočila:   Odgovori s citatom

Torej najprej je potrebno prečitati ID senzorja ter ga shraniti v eeprom. Če je kak pin prost je bolje za branje id-ja uporabit posebno vodilo. S tem se prihrani marsikatera programska vrstica. Ostalo je že napisal Aljaž.
Nekje na Filemanager mora biti en moj primer kode kjer sem uporabil 4 senzorje na istem vodilu ter LCD ter 16F84.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
TIBET
Član
Član



Pridružen-a: Čet 13 Sep 2007 23:39
Prispevkov: 163
Aktiv.: 0.75
Kraj: Metlika

PrispevekObjavljeno: Sre Sep 03, 2008 1:13 am    Naslov sporočila:   Odgovori s citatom

Najprej se zahvaljujem za namige in obenem prosim za pomoč.
Pripenjal bom dele programa, vas pa prosim za komentarje. Na pinu RC4 nameravam imeti priklopljenih osem senzorjev, najprej priključim enega in odčitam ID, katerega shranim v EEPROM.

RESET
bcf STATUS,RP1
bsf STATUS,RPO ;banka 1
bcf DS1820 ;RC4 na 0
bcf STATUS,RP0
movlw .70
call CakajMs ;zakasnitev 700us
bcf STATUS,RP1
bsf STATUS,RP0
bsf DS1820
bcf STATUS,RP0
movlw .70
call CakajMs
btfss DS1820 ;je RC4 visok
bsf DS1820 ;ne
movlw .50 ;da
call CakajMs
return

ReadROM

call RESET
movlw 0x33 ;berem rom neglede na ID
call PISIds ;pošljem na senzor
call BERIds ;preberem podatek iz senzorja
movwf CRC ;vpišem CRC
call BERIds
movwf byte1 ;prvi bajt
call BERIds
movwf byte2
call BERIds
movwf byte3
call BERIds
movwf byte4
call BERIds
movwf byte5
call BERIds
movwf byte6
call BERIds
movwf byte7
call BERIds
movwf DR
return

IDshrani

movwf EEADR
movf CRC,W
call pisiEE ;vpišem v EEPROM PICA
movf byte1
call pisiEE
movf byte2
call pisiEE
movf byte3
call pisiEE
movf byte4
call pisiEE
movf byte5
call pisiEE
movf byte6
call pisiEE
movf byte7
call pisiEE
movf DR
call pisiEE
return

_________________
LP. Aleš
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
s56al
Član
Član



Pridružen-a: Pon 19 Sep 2005 12:03
Prispevkov: 788
Aktiv.: 3.32
Kraj: JN66SI & JN76TM

PrispevekObjavljeno: Sre Sep 03, 2008 7:55 am    Naslov sporočila:   Odgovori s citatom

Če DS1820 napajaš dvožično, ne pozabit na dovolj močan pull up. Tokovna zmogljivost "open drain" izhoda RA4 je dobrih 20mA (dodaten pogoj je, da vsota vseh ostalih tokov v DO ne presega 80mA), tako si na izhodnem pinu PIC če je potrebno lahko privoščiš pull-up vse do 270 Ohm. Sicer bo (odvisno od dolžine žic do posameznih senzorjev) na RA4 zadoščal pull-up nekje od 4k7 do 10k.

LP, Sandi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
aly
Član
Član



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

PrispevekObjavljeno: Sre Sep 03, 2008 9:01 am    Naslov sporočila:   Odgovori s citatom

že en čas nisem programiral pica v asm, pa me begajo sledeče stvari:
".70" ... registri so 8 bitna cela števila, kako ti tole prevede ?
"movf byte1" ... tale ukaz mora imeti 2 parametra?
A ni CRC na koncu prejetih podatkov? Itak pa vse skupaj (vseh 64 bitov) ti predstavlja en sam blok in je vseeno kako so poimenovani.

Sicer je zaenkrat videti v redu.
Poskusi prebrati en senzor, in potem PIC daj v programator in breberi vrednosti v EPROMu. Če ustrezajo tistim v datasheetu (družina in model čipa je fiksno), potem deluje.

_________________
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
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Sre Sep 03, 2008 9:57 am    Naslov sporočila:   Odgovori s citatom

aly:
-pika pred številko pomeni, da je v decimalnem formatu
-movf ima za drug parameter destinacijo, torej F ali W. Če ta ni navedena, se vzame privzeta vrednost (ne vem na pamet, katera)

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.91
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Sep 03, 2008 10:45 am    Naslov sporočila:   Odgovori s citatom

Še enkrat naj ponovim Aljažev nasvet.

Predlagam, da najprej spraviš enega k življenju, potem pa šele verigo....


Torej najprej preberi en senzor. Če je uporabljen LCD spravi prikaz na njega. Ko ti vse to deluje, veš da da so procedure, ki se uporabljajo za branje DS delujoče.
Prav tako lahko lahko na displej za test prikažeš vrednosti ID.

Naslednji korak je vpis v eeprom. Če ti procedura deluje, lahko preveriš tako, da vsebino prebereš s programatorjem. Če procedura za vpis deluje, sledi branje ter testni vpis na LCD. Ko ti vse deluje procedure ustrezno "sestaviš".

Zgornji košček kode je napisan precej zmedeno z veliko napakami. Gledam recimo tisto, ki naj bi vpisovala v EEPROM. Vpis se bo začel na vrednosti, ki je bila na zadnje definirana v W.
Koda:
movf byte1
call pisiEE

register byte1 prepisuješ samega vase. Procedure, pisiEE, ki je ne vidim bo v EEPROM vrjetno vpisovala vrednost dobljeno v W, ki pa ne bo prava.
Ostalega nisem gledal.
Kodo KOMENTIRAJ. Taka koda je popolnoma nepregledna za nekoga, ki je ni sam pisal. Čez čas bo postala nepregledana tudi zate, kajti za vse kar si si zamislil boš porabil kar nekaj sto vrstic. Ko bo treba kak popravek se boš zgubil.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
TIBET
Član
Član



Pridružen-a: Čet 13 Sep 2007 23:39
Prispevkov: 163
Aktiv.: 0.75
Kraj: Metlika

PrispevekObjavljeno: Sre Sep 03, 2008 9:13 pm    Naslov sporočila:   Odgovori s citatom

Zdravo.

Senzorja še nimam, čakam da pride, zato jih ne morem oživeti.
S kodo mislim da je vse v redu, razen tega, kar je opazil Silvo, povsod, kjer je movf byte1....7, mora biti še W, se pravi movf byte3,W. Ostalo mislim da je prav, okoli RESET-a pa nisem preveč siguren. Bom kasneje dodal še del programa za BERIds in PISIds.

_________________
LP. Aleš
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
TIBET
Član
Član



Pridružen-a: Čet 13 Sep 2007 23:39
Prispevkov: 163
Aktiv.: 0.75
Kraj: Metlika

PrispevekObjavljeno: Sre Sep 03, 2008 11:06 pm    Naslov sporočila:   Odgovori s citatom

PISIds pošlje podatek na senzor

movwf DATA ;podatek za na senzor
movlw .8
movwf STEVEC
ZANKA
bcf STATUS,RP1
bsf STATUS,RP0 ;banka 1
bcf DS1820 ;RC=0
bcf STATUS,RP0 ;banka0
nop
nop
nop
nop
nop
rrf DATA,F ;vrtim v desno
btfsc STATUS,C ;in pogledam kak je izrinjen bit
bsf DS1820 ;RC=1
movlw .6
call CakajMs ;pavza 60us
bcf STATUS,RP1
bsf STATUS,RP0 ; banka 1
bsf DS1820
bcf STATUS,RP0 ;banka0
nop
nop
nop
decfsz STEVEC,F ;zmanjšam za 1
goto ZANKA
RETURN

BERIds
movlw .8
movwf STEVEC ;v spremenljivko vpišem 8
clrf DATA
ZANKA1
bcf STATUS,RP1
bsf STATUS,RP0 ;banka 1
bcf DS1820 ;RC=0
bcf STATUS,RP0 ;banka0
nop
nop
nop
nop
nop
nop
bcf STATUS,RP1
bsf STATUS,RP0 ;banka 1
bsf DS1820 ;RC=1
bcf STATUS,RP0 ;banka0
nop
nop
nop
nop
rrf DATA,F ;vrtim v desno
bcf DATA,7
btfsc DS1820 ; preskočim ukaz če je 0
bsf DATA,7
movlw .5
call CakajMs ;pavza 50us
decfsz STEVEC,F ;zmanjšam
goto ZANKA1
movf DATA,W ;tako imam v spremenljivki podatek iz senzorja
return

To je standardna 1-wire rutina.
Vem, da je te senzorje "obudilo" že veliko forumašev, še več novih ali prihajajočih začetnikov pa jih bo tudi hotelo. Mogoče je to za "stare mačke" dolgočasna tema, pa vendar bo vsak odgovor dobrodošel.

_________________
LP. Aleš
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.69
Kraj: Kranj - struževo

PrispevekObjavljeno: Sob Sep 06, 2008 9:31 am    Naslov sporočila:   Odgovori s citatom

Zelo cool zadeva je tudi simulator Wink
Togglanje tistega vhodnega bita ne bo težavno. Lahko pa zelo natančno spremljaš, kaj se dejansko dogaja v procesorju, vključno s timingi, ki so zelo pomembni za senzor.

Predlagam, da program najprej spustiš skozi simulator. Se boš še mariskaj naučil Very Happy

_________________
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
TIBET
Član
Član



Pridružen-a: Čet 13 Sep 2007 23:39
Prispevkov: 163
Aktiv.: 0.75
Kraj: Metlika

PrispevekObjavljeno: Sob Sep 06, 2008 12:49 pm    Naslov sporočila:   Odgovori s citatom

aly, hvala za odgovor. Bom upošteval tvoj nasvet. Pripenjam pa kodo, katero sem napisal, najbrš je kaj napak, manjka mi pa še pretvorba podatkov. Simulator pa bo pokazal svoje.


DS1820.txt
 Opis:

Download
 Ime datoteke:  DS1820.txt
 Velikost datoteke:  6.25 KB
 Downloadano:  24 krat


_________________
LP. Aleš
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
TIBET
Član
Član



Pridružen-a: Čet 13 Sep 2007 23:39
Prispevkov: 163
Aktiv.: 0.75
Kraj: Metlika

PrispevekObjavljeno: Ned Okt 12, 2008 9:30 pm    Naslov sporočila:   Odgovori s citatom

Že dalj časa se ukvarjam z senzorji, uspelo mi je prebrati in prikazati na LCD-ju serijsko številko senzorja, pravtako jo uspešno shranim v EE PIC-a, nikakor pa ne morem dobiti podatkov o temperaturi. Mi lahko kdo pove, ali imam ta del pravilno napisan.

BERItemp

MOVWF KATERI ;od spremenljivke je odvisnno, kateri ID iz EE PIC-a preberem
call RESET ;po RESET-u je pin priklopa VHOD

movlw 0x55 ;iščem senzor, ID=ROM (MatchRom)
call PISIds ;pošljem na senzor
movf KATERI,W ;od spremenljivke je odvisnno, kateri ID iz EE PIC-a preberem
call IDberiEE ;ID iz EE PIC-a

movlw 0x44 ;izvedem merjenje temperature (ConvertT)
call PISIds ;ukaz pošljem na senzor
call BERIds ;dobil sem podatke
movwf ZACASNA1 ;dam v spremenljivko

MOVLW .8 ;počakam 8us
CALL Cakaj
call RESET

MOVLW 0X55 ;iščem senzor (MatchRom)
call PISIds
movf KATERI,W ;od spremenljivke je odvisnno, kateri ID iz EE PIC-a preberem
call IDberiEE ;ID iz EE PIC-a

movlw 0xBE ;berem pomnilnik "SCRATCPAD"
call PISIds

call BERIds
movwf ZACASNA1 ;LSB temp., TEMPERATURA

call BERIds
movwf ZACASNA ;MSB temp., PREDZNAK

return

_________________
LP. Aleš
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.91
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Okt 12, 2008 11:48 pm    Naslov sporočila:   Odgovori s citatom

Tole zgoraj vsaj zame ni napisano razumljivo.

Če ti branje ID-ja dela (CRC je ok) potem mora delati tudi branje temperature.
Postopek branja je sledeči:
- Reset senzorja
- Preverjanje prisotnosti
- pošlješ 0x55 (pošiljane ID)
- sledi 64 bitni ID
- pošlješ 0x44 (konverzija)
- reset
- pošlješ 0x55 (pošiljane ID)
- sledi 64 bitni ID
- pošlješ 0xBE (branje Scratchpad-a)
-branje 9 baytov (temperatura je v byte0 ter bayte1)
- reset

Za začetek poskusi le z enim senzorjem tako da ne kličeš ID-ja

- Reset senzorja
- Preverjanje prisotnosti
- pošlješ 0xCC (preskoči ID)
- pošlješ 0x44 (konverzija)
- reset
- pošlješ 0xCC (preskoči ID)
- pošlješ 0xBE (branje Scratchpad-a)
-branje 9 baytov (temperatura je v byte0 ter bayte1)
- reset

Kot sem že napisal, na forumu boš našel moje delujoče primere z in brez branja ID-ja.

_________________
lp
Silvo
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 -> Merilna tehnika in senzorji Č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: 496 dni


Powered by phpBB © 2001, 2005 phpBB Group