# Lietotāju Izstrādājumi >  Digitālais termometrs

## Texx

Klejojot pa netu atradu tādu lietu, ka Dallas Semiconductor Maxim ražo dažādas 1-wire ierīces. Radās doma izmēģināt DS18S20 mikroshēmu. 
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2815
Lasot info atradu, ka šo termometru var pievienot datoram izmantojot vienkāršu adapteru. Shēma, ko es izmantoju ir analoģiska rūpnieciski ražotajam adapterim no Maxim DS9097E tikai detaļas mazliet tika paņemtas citas  :: 
[attachment=2:2z0d9chn]shema.png[/attachment:2z0d9chn]
Shēmas attēls paņemts no:http://martybugs.net/electronics/tem...r/hardware.cgi
Lielākais darbs tika ieguldīts programmas izveidošanā. Ātrumā neizdevās iebraukt tai sistēmā, kā pielietot tos 1-wire draiverus programmā, tādēļ visu taisīju no "nullītes". Nošpikoju tikai nolasīšanas algoritmu un aptuvenās pauzes starp nolasīšanām (izrādījās, ka algoritms tā kā ieteikts datasheetaa negribēja darboties). Taisīju ar Delphi. Programmā pagaidām nav realizēta nolasīto datu CRC pārbaude, kā arī tā māk strādāt tikai vienlaicīgi tikai ar vienu DS18S20 tipa termometru.
[attachment=1:2z0d9chn]skrshot.JPG[/attachment:2z0d9chn]
Ja kāds izveido šādu adapteri, tad laipni lūgti ievietojiet ziņu kā Jums strādā šī programma. Pagaidām vēl daudz kļūdu, bet vismaz man pamatfunkcija (temperatūras attēlošana) darbojas.

Mazliet palabota programma v. 3. Ievietoju par jaunu. Par cik man nebija izdevies "notvert" mīnusa grādus, tad nebiju notestējis uz mīnusiem šo softu.

----------


## Texx

Pāris bildes:[attachment=1:247k6sk1]sensors.jpg[/attachment:247k6sk1]

[attachment=0:247k6sk1]montaazja.jpg[/attachment:247k6sk1]

----------


## karloslv

Vēl pamatīgāku vadu nevarēji paņemt  ::

----------


## Texx

::  
Vads tiešām nopietns. Ņēmu kāds bija pa rokai.
Inetersanti, ka uz testēju uz 3 datoriem. Uz diviem tas hardware strādāja uz viena ne. It kā esmu dzirdējis, ka ir dažādi seriālie porti daži no kuriem var paņemt lielāku strāvu, daži ar mazāku strāvu. Tas kompis uz kura neatpazina bija ar Intel plati   ::  Pēc maniem uzskatiem tās ir labākās un uzticamākās

----------


## karloslv

Nekur jau nav zvanīts, ka RS232 standartā ir paredzēts, ka var smelt strāvu. Drīzāk ķīniešu izgudrojumi ir diezgan aptuveni piemesti, un no tiem tad arī var. Līdzīgi ir arī ar paralēlo portu.

----------


## zzz

Saskanjaa ar RS232 standartu, izejas draiveriem ir jaabuut speejiigiem nodroshinaat 5V uz 3kom slodzes, tas ir ~1.7 mA straavu.

Reaalaas implementaacijas meedz varieeties - kaads paarpilda plaanu ar lielu rezervi, kaads nedavelk liidz standartaa noteiktajam minimumam.

----------


## marizo

Varbūt jāpamēģina uzlodēt paša priekam un jānotestē darbība ar USB-RS232 pārveidotāju.  ::

----------


## Jon

Ideja patiesi laba, tikai tūlīt USB adapteris jātaisa. Desktopa mātenei vēl varētu atrast, kur piespraust (un mērīt temperatūru kompja iekšienē). Bet kurā gadā virknes ports vēl bija uz notebook?

----------


## marizo

Salodēju, bet nedarbojas - no USB-RS232 pārveidotāja rāda kļūdas paziņojumu, bet, pieslēdzot parastam COM portam, rāda aplamu temperatūru- mīnus kaut kādus 100 grādus.
Interesanti, nav kaut kāds portam mazāk "sāpīgs" veids (kas neslogotu DTR), kā pieslēgt to DS temometru pie datora? Es domāju, kaut kā caur MAX232 mikroshēmu, izmantojot RX, TX signālus un ārēju barošanu?

----------


## Texx

Ja ir aizdomas, ka mans softs gļuko var patestēt demo versiju no šejienes http://www.digitemp.com. Un novelc pēdējo versiju, jo es pa laikam atrodot gļuku mazliet palaboju un ievietoju topikā to arhīva failu par jaunu. Caur USB-RS232 noteikti nedarbosies, tur tad būtu jāizmanto atsevišķa barošana un programma jāpārtaisa. Šito sensoru var visādi pieslēgt. Man pašam pusjaukts USB-RS232 adapteris no kaut kāda mobilā datu vada uz specializētas mikrenes. Es tā papētīju, ka tur arī noteikti varētu, pieslēgt nav tikai brīva laka tagad jaunradei. Par to kļūdu iespējams, ka nebija norādīts pareizais porta numurs. Softs pie palaišanas aptaujā visus seriālos portus un, ja ports nav COM1 tad, tas ķeksis pirms startēšanas katru reizi ir jāieliek manuāli.

----------


## marizo

Diezin vai tā ir programmas vaina, drīzāk man rokas kā parasti līkas.
Kādēļ gan lai nevarētu izdoties caur USB-RS232? Varbūt vienīgi dēļ strāvas, ko šāds adapters no tās SIPEX (MAX232 līdzīgas) mikroshēmas mēģina paņemt. Bet savādāk tas kompī kā parasts COM ports. Pat dati ārā nāk, izmantojot Tavu programmu, tikai nezināmu iemeslu dēļ programma izmet kļūdas paziņojumu. Varbūt tas adapters "nožaujas", kad uz DTR tiek padots +spriegums?

Īsti nav laika baigi lasīt info un iedziļināties, kas pa kuru kāju tur tiek sūtīts, tā varētu paeksperimentēt ar to FTDI čipu:
FT232R
USB-TTL Serial adapter

----------


## marizo

Man ir aizdomas, ka Tavs softs darbojas tikai ar DS18*S*20, bet ne ar DS18*B*20. Tur atšķirība ir tāda, ka derīgie temperatūras biti ir citi.

----------


## Syntetik

Paceļu vecu tēmu, jo gan jau kāds padarbojas ar DS18*20 sensoriem arī šodien, ne es vienīgais, un atduras pret dažādību datu interpretācijā.

Lieta tāda, ka taisu savu mocrolan (1-Wire tīkls), kur būs vairāki šādi sensori. Testa režīmā ar Arduino Duemilenova viss darbojas man ar diviem sensoriem - DS18S20 un DS18B20. Tam otrajam gan nācās pameklēt internetā algoritmu, lai saņemtos datus pareizi interpretētu.

Tātad, no sensora saņemam 8 baitus, no kuriem 0. un 1. ir temperatūras vērtība (Low Byte un High Byte attiecīgi). Salīmēt vienā vārdā mācēs katrs programmētājs. Tad šim vārdam pārbaudam pašu vecāko bitu - ja tas ir 1, tad vērtība ir negatīva (lāstekas aiz loga), pretējā gadījumā protams pozitīva temperatūra. Ja tas bija ieslēgts, tad vārdam izslēdzam vecāko bitu un pieskaitam 1. Jo vērtība ir "two's complement".

Tālāk, ja ir DS18S20, tad šo vārdu reizinam ar 100 un dalam ar 2. (joferī, vienkāršāk būtu reizināt ar 50  :: 
Ja DS18B20, tad šo vārdu reizinam ar 6 un pieskaitam šī paša vārda dalījumu ar 4. (Sviests, bet pareizi sakults. Šis ir tas, ko ilgi meklēju internetā). Pārbaudīt programmiski, kurš sensors ir sūtījis datus - sensora adresē pirmais baits, ja ir 0x10, tad tas ir DS18S20, pretējā gadījumā otrs sensors.

Rezultāts lai iet jaunā mainīgā. To dalam ar 100 - iegūstam temperatūras vērtību pirms komata. Kā integer, protams, lai nevelkas līdzi sīkumi aiz komata. Temperatūras vērtību aiz komata iegūsim, ja no rezultāta atņemsim pirmskomata reizinājumu ar 100.

Nu tas īsumā  ::  Lai visiem veicas!

----------


## Vikings

Pag pag! Vai tad gadījumā lai no negatīva "Two's complement" iegūtu pozitīvu skaitli tas nebija jāinvertē un jāpieskaita viens?

----------


## JDat

Heh, Interesanti! Nez kāpēc es agrāk nepamanīju šo lietotāja izstrādājumu. Vajadzēs pašam paspēlēties ar tiem sensoriem lai apgūtu protokolu. No sākuma uz PC caur ft232rl, pēc tam arī uz kontroliera.

----------


## goga

Ir kāds iemesls izmantot tieši šotkija diodes?

----------


## Texx

Jāatzīmē, ka tā programma ir smagi gļukaina. Man baiss slinkums to izlabot un lieka laika arī pamaz. Tā, ka neņemeet ļaunā par tiem -100 grādiem  :: )

----------

