DS B20

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#16 Příspěvek od Chenzee »

S touto problematikou jsem si nevěděl rady a nakonec jsem to udělal takto: pokud mám volné piny obvodu a počet čidel není vysoký (2,3), používám pro každé z nich svůj pin. Pokud jich mám nevěšenejch 8, využívám piny 2 a to jeden coby 1wire a jednu, kde čidlo nejprve připojím, načtu ROM kód, přiřadím čidlo a uložím do paměti. pak ho napíchnu na 1wire a systém ví, že rom na této adrese je třeba čidlo bojleru a tak ho také používá. Je to systém složitý na programování ale výměna čidla v systému je zcela triviální - připíchnu, načtu, odpojím a připojím na místo a vše frčííí. Bohužel tam musíš mít zobrazovač, kde vidíš, kam to připojuješ. Ale jsem s tímto spokojen, funguje to. Systém se SEARCH ROM jsem nepochopil ani z datasheetu ani z té knihy takže toto je můj ověřený a funkční systém. :wink: :idea: Pro dvě čidla bych použil dva piny a je to. Dáš dva programy za sebe, přejmenuješ ho z A0 na A1 atd. a je to. Nebo pokud někdo funguje se search rom, nechť se podělí o informace.
Návštěvník

#17 Příspěvek od Návštěvník »

to je dobré řešení chci to použít do akvária pro měření teploty vody a potom měření teploty v místnosti taky tam budou tři okruky na spínání zářívek takže tam dám větší pic
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#18 Příspěvek od ViPali »

Chenzee píše:Systém se SEARCH ROM jsem nepochopil ani z datasheetu ani z té knihy takže toto je můj ověřený a funkční systém. :wink: :idea: Pro dvě čidla bych použil dva piny a je to. Dáš dva programy za sebe, přejmenuješ ho z A0 na A1 atd. a je to. Nebo pokud někdo funguje se search rom, nechť se podělí o informace.


Search ROM Command F0h
Predpokladaj, že si pripojil na 1wire štyri zariadenia. Každé je charakterizované 64bit - 8byte číslom, v tvare (CCR, B6,B5,B4,B3,B2,B1, M).
Vyhradíš si v pamäti 4 zariadenia krát 8 byte = 32byte na adresovanie jednotlivých zariadení.
Predpokladajme, že všetky sú 1820, potom M = 28h.
Adresy sú:
A1: CRC,B,B,B,B,B,(xxxx0100),M
A2: CRC,B,B,B,B,B,(xxxx0101),M
A3: CRC,B,B,B,B,B,(xxxx0001),M
A4: CRC,B,B,B,B,B,(xxxx0110),M
Algoritmus:
1/ Procesor vyšle kód F0h a inicializačný impulz 0.
2/ Všetky zariadenia na 1w vyšľú na 1w svoj najnižší bit. Keďže všetky sú 1820, tak počas prvého byte sa nič neudialo a zaujímavé je to až pri 9. bite (1.bit 2.bajtu). Pretože 1w je zavesený na +5V cez odpor 5k, nuly "prekričia" jednotky a na 1w bude nula.
3/ V druhom cykle všetky zariadenia vyšlú na 1w negovaný najnižší bit. Jednotky budú negované na nulu a na 1w bude opäť nula. Procesor sa dozvedel, že na 1w sú zariadenia ktoré majú na pozícii 9.bitu nulu aj jednotku.
4/ Procesor vyšle na 1w nulu. Tým sa zablokujú všetky zariadenia, ktoré majú na poz. 9. bitu jednotku a už nebudú odpovedať. Procesor si do bloku 4 uloží predpokladanú adresu zariadenia s najvyššou adresou)
5/ V nasledujúcom kroku vyšlú na 1w zvyšné zariadenia svoj 10. bit
A1: CRC,B,B,B,B,B,(xxxx010o),M
A4: CRC,B,B,B,B,B,(xxxx011o),M
6/ V nasledujúcom cykle negáciu 10.bitu
7/ Procesor zistil, že na poz. 10.bitu je 1 aj 0, vyšle nulu a zablokuje A4. (Procesor si do bloku 3 uloží predpokladanú adresu zariadenia)
8/ Odteraz už nebude konflikt a procesor prečíta všetkých 64 bitov. V bloku 1 bude uložená odresa prvého zariadenia.
9/ Celý proces sa zopakuje, - hľadá sa ďalšie zariadenie. F0h a inicializačný pulz 0.
10/ Procesor vyšle nulu a čaká nulu a jednotku. Dostal nulu a nulu, tak vyšle nulu - blokuje A2, A3.
11/ V ďalšom cykle dostanu opäť nulu a nulu, ale keďže vyslaním nuly by pokračoval v čítaní už známeho zariadenia. Porovnaním známeho blok1 a najbližšieho neznámeho blok3 zistí, že je tam konflikt a na 1w vyšle jednotku. Tým sa zablokuje A1 (viac neodpovedá) a ďalej sa bude čítať 64bit A4. A4 sa uloží do bloku 2.
12/ Proces sa opakuje F0h, pulz nula.
13/ Procesor pošle na 1w jednotku, zablokuje A1,A4 a vyhľadáva medzi A2 a A3
14/ Na záver musí prísť Masterreset pulz.
Ako elektrikár sa cítim slobodne.
Môžem hovoriť do vedenia!
Návštěvník

#19 Příspěvek od Návštěvník »

Mám ještě jeden dotaz. Musel jsem dát odpor 100k místo 4k7. je to normální? Když jsem připojil čidlo tak to měřílo pokojovou teplotu až do 125 stupňů ale při ochlazení to při teplotě 12 stupňů začalo hazet nejaké nesmysly a po chvíli se to zastavilo a hodilo to nulu Zpočátku jsem si myslel že mám chybu v přepočtu teploty, ale po mnohonásobném vyzkoušení v MPLABU jsem myslel že ne. Když jsem tam dal odpor 10k tak čidlo měřilo do 6 stupňů a potom se objevily problémy no a když jsem tam dal 100k tak to měří do -20 (zkoušeno v mrazáku) a jede to bez problémů Je to normální? nebo kde je chyba?
Zkoušel jsem dvě čidla 18b20 a dělá to u každého. Napájím to 5V ze stab.zdroje 12V přes stabilizátor 7805.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#20 Příspěvek od Chenzee »

No napadá mě pouze to, jestli máš správně nastavené časové smyčky (přizpůsobené f krystalu). Pakliže by se někde dostávalo časování na okraj možnosti funkce, nemusel by pull-up odpor stíhat zvedat (ikdyž tu je to spíš obráceně že?). Zkontroluj časy ve smyčkách, zda souhlasí (tzn. zda máš v MPLABu spávně nastaven kmitočet pro simulaci a zda krystal má tu hodnotu, na kterou to ladíš. Mě to funfuje normálně s 4K7. Zkoušel jsem to od lednice až po rychlovarnou konvici a nezdálo se mi, že by to nějak švindlovalo. :wink: . Jinak sem hod ten prográmek na úpravu hodnoty a převod do BCD, třeba tam je nějaká blbost, kterou jakožto stvořitel nevidíš (opakuješ stejnou chybu - tím tě nijak nechci tentononc ehm... !!!) :wink:
Naposledy upravil(a) Chenzee dne 03 dub 2008, 10:44, celkem upraveno 1 x.
Návštěvník

#21 Příspěvek od Návštěvník »

Krystal mám 4Mhz a časové smyčky jsem použil Vaše pro 4Mhz. Program pošlu ale musím ho popsat a a vyházet zakomentované řádky bude to chvíli trvat.
Návštěvník

#22 Příspěvek od Návštěvník »

Posílám program předem se omlouvám jsem začátečník tak je trochu nepřehledný.Bylo to jenom na zkoušku komunikace s čidlem a přepočet pro zobrazení teploty. Myslím si že přepočet je dobře mám dvě čidla DS18B20 a zkoušel jsem je připojit k počítači přes program LogTemp a líší se vzájemně asi o 0.2stupně a při připojení k PIC se taky liší vzájemně o 0.2 stupně. Což je myslím v toleranci výrobce uvadí 0.5 stupně. Třeba ten program někomu pomůže jako mně od Chenziho.
Přílohy
teplomerDS_2_1.asm
(23.29 KiB) Staženo 169 x
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#23 Příspěvek od Chenzee »

No udělal jsi přesně stejnou chybu jako já, když jsem tuto rutinu programoval. Jedná se o to, že zadáš převod teploty Convert T a pak čteš úroveň sbernice. Bohužel jsi to v datasheetu špatně pochopil, protože je tam psáno: Když je čidlo DS18B20 napájeno externím zdrojem, master může po příkazu ConvertT vysílat „čtecí časové úseky“ a čidlo DS18B20 bude odpovídat log.0 během převodu teploty a log.1 po jeho ukončení. Jenže ty čteš pouze log. úroveň sběrnice, což díky PULL-UPP bude vždy log.1, takže v podstatě program ihned jede dál a převod teploty se nestihne korektně provást, což má za následek špatné měření. Ty musíš vyslat čtecí časový průběh a číst, co čidlo odpoví a ne číst pouze úroveň sběrnice!!! (v MPlabu je to řádek cca 370). Oprav to a uvidíš. Buď dáš pevnou čekací smyčku nebo zadáš potřebný příkaz :wink: Dej vědět, zda se něco změnilo. Hodně štěstí.
Návštěvník

#24 Příspěvek od Návštěvník »

Tak jsem to předělal ale nepomohlo to když tam dám odpory 4k7 tak to zobrazuje 0.0 když tam dám 100k tak to funguje. Posílám i program
Přílohy
teplomerDS_2_1.asm
(23.6 KiB) Staženo 151 x
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#25 Příspěvek od Chenzee »

Tak jsem ti na to koukal, nevím, co používáš za editor pro psaní programu ale na MPLAB to nevypadá vzhledem k úpravě, každopádně jsi úplně nepochopil to, co jsem ti psal. Našel jsem v programu dvě chyby, tak se na to koukni a dej vědět. Naschvál ti je nenapíši, najdi si ty změny sám a podle toho si je třeba poté zapamatuješ. (kdyžtak si vem znovu datasheet a pozorně přečti :wink: ) Ta úprava, na kterou jsem to nyní "poupravil" je pro MPLAB a délka tabulátoru 8zn. Tak hodně štěstí.
Přílohy
teplomerds.asm
(23.94 KiB) Staženo 209 x
Návštěvník

#26 Příspěvek od Návštěvník »

Já jsem to psal v MPLABU, ale nevěděl jsem že se tam dá nastavit i vlastnosti texu. Chyby jsem našel první je ta že jsem měl chybu v čekání na ukončení převodu a ta druhá byla v časování při čtení z DS. První chyba neměla vliv na hodnotu odporu ale ta druhá jo. Takže už to teď jede s odporem 4k7. Děkuji moc
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#27 Příspěvek od Chenzee »

... to jsem moc rád :wink:
Petr 5

#28 Příspěvek od Petr 5 »

Zdravím, mohl by sem prosím někdo dát rutinu na přepočet teploty z DS18B20 napsaný v C, ten asm mi nějak nejde do hlavy. Děkuji.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#29 Příspěvek od Atlan »

TAk som si objednal s SOS ds18s20... prisli pozrel som na nalepku 18s20... napajkoval ..programujem.. a programujem presiel som program z predu do zadu a nič.... az nakomiec...Poslali mi DS1820... ja blbec som to neskontroloval grrrrrrrrr.... troch a ma napalili :)
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“