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



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Pet Avg 29, 2008 9:18 am Naslov sporočila: oživljanje DS1820 in PIC-a |
|
|
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. |
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Pet Avg 29, 2008 9:19 am Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
snow Član


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


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.91 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Avg 29, 2008 9:44 am Naslov sporočila: |
|
|
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 |
|
 |
TIBET Član

Pridružen-a: Čet 13 Sep 2007 23:39 Prispevkov: 163 Aktiv.: 0.75 Kraj: Metlika
|
Objavljeno: Sre Sep 03, 2008 1:13 am Naslov sporočila: |
|
|
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 |
|
 |
s56al Član

Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 788 Aktiv.: 3.33 Kraj: JN66SI & JN76TM
|
Objavljeno: Sre Sep 03, 2008 7:55 am Naslov sporočila: |
|
|
Č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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Sre Sep 03, 2008 9:01 am Naslov sporočila: |
|
|
ž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  |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Sre Sep 03, 2008 9:57 am Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.91 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Sep 03, 2008 10:45 am Naslov sporočila: |
|
|
Š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 |
|
 |
TIBET Član

Pridružen-a: Čet 13 Sep 2007 23:39 Prispevkov: 163 Aktiv.: 0.75 Kraj: Metlika
|
Objavljeno: Sre Sep 03, 2008 9:13 pm Naslov sporočila: |
|
|
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 |
|
 |
TIBET Član

Pridružen-a: Čet 13 Sep 2007 23:39 Prispevkov: 163 Aktiv.: 0.75 Kraj: Metlika
|
Objavljeno: Sre Sep 03, 2008 11:06 pm Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Sob Sep 06, 2008 9:31 am Naslov sporočila: |
|
|
Zelo cool zadeva je tudi simulator
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
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
TIBET Član

Pridružen-a: Čet 13 Sep 2007 23:39 Prispevkov: 163 Aktiv.: 0.75 Kraj: Metlika
|
Objavljeno: Sob Sep 06, 2008 12:49 pm Naslov sporočila: |
|
|
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.
Opis: |
|
 Download |
Ime datoteke: |
DS1820.txt |
Velikost datoteke: |
6.25 KB |
Downloadano: |
24 krat |
_________________ LP. Aleš |
|
Nazaj na vrh |
|
 |
TIBET Član

Pridružen-a: Čet 13 Sep 2007 23:39 Prispevkov: 163 Aktiv.: 0.75 Kraj: Metlika
|
Objavljeno: Ned Okt 12, 2008 9:30 pm Naslov sporočila: |
|
|
Ž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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.91 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Okt 12, 2008 11:48 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|