Code om de DS18B20 uit te lezen..

Omdat er al vaker een discussie is geweest over het uitlezen van een DS18B20, let op de B, hierbij een werkende code.

pic basic code:


' **************************************
' ******** DS18B20 uitlezen !!! ********
' **************************************

Device 16F628A                ;Gebruik een 16F628A type
Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF

XTAL = 20

ALL_DIGITAL TRUE

Dim Temperatuur As Word
Dim Decimalen As Byte

DelayMS 500                   ;LCD stabilisering

Cls                           ;Wis scherm en zet cursor links bovenaan 
Print "Hello world!"          ;Plaats tekst op het display

DelayMS 1000

Cls                           ;Wis scherm en zet cursor links bovenaan 
OPNIEUW:


OWrite PORTA.4, 1, [$CC, $44]    ' Zend 'Convert' opdracht (temperatuur meten)
While ORead PORTA.4,4 = 0 : Wend ' Wacht tot conversie is voltooid...
OWrite PORTA.4, 1, [$CC, $BE]    ' Zend 'Read ScratchPad' opdracht
ORead  PORTA.4, 2, [Temperatuur.LowByte, Temperatuur.HighByte] ;Lees temperatuur en plaats dit in de variabele 

Decimalen = 0                           ' Op 0 voor de zekerheid..
Decimalen = Temperatuur.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
Decimalen = Decimalen >> 4              ' Bits weer op de originele plaats zetten
Decimalen = Decimalen * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.

Print At 1, 1, Dec (Temperatuur >> 4) , ".", DEC1 Decimalen / 10, 223, "C  "
                ' Door de laatste 4 bits van Temperatuur weg te gooien krijg je de graden Celcius.

GoTo OPNIEUW

End                           ;Einde programma

Doe er je voordeel mee..

Domoticz en ESP8266, goede combo!!!

Mag ik 'm onderaan bij het artikel op picbasic.nl plaatsen?
(Voor de DS18B20 kopers).

By the way, is END echt nodig?
In een ander topic werd gezegd dat het niet werkte zonder (kan me dat niet voorstellen).

Ohm sweet Ohm | www.picbasic.nl

@Frits

Je mag hem van mij bij picbasic plaatsen, had eerst de code van jouw site geprobeert, maar daar kwamen rare getallen uit, dus toen zelf maar uitgevogelt hoe de DS18B20 werkt.

Ik heb het eigenlijk niet zonder die END geprobeert, kijk maar...

Domoticz en ESP8266, goede combo!!!

kan je dezen ook om buigen zo dat i de min temeratuur aan kan

ik zoek namelijk iets voor de ds18B20 een code die ook min kan ???
wie weet iets

Arco

Special Member

een code die ook min kan ???

Cryptische omschrijving... "Klinkt als..." :+
Bedoel je temperaturen onder nul? Die kan je uit de variabele 'Temperatuur' halen.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

ja dat bedoel ik ,
vertelde het een beetje van . het klinkt als sorry voor de onduidelijk heid

maar ik zie niet hoe ik dat in die code can maken

Negatieve temperatuur uitrekenen:

pic basic code:


dim negatief as bit
clear negatief

If temperatuur > &HFC00 Then
Temperatuur = ( Temperatuur XOR &HFFFF ) + 1
negatief = 1
endif

Daarna kun je dus de temperatuur normaal uitrekenen.

Domoticz en ESP8266, goede combo!!!
Arco

Special Member

Als je temperatuur als (signed) integer i.p.v. (unsigned) word definieert, heb je de temperatuur al.
Temperatuur in graden is Temperatuur * 0.0625 (kan dus ook negatief zijn)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

geprobeert lukt niet echt waar moet ik dat dan ongeveer neer zeten ??

Arco

Special Member

Dim Temperatuur As Integer? (Ben geen PicBasic'er...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

meschien een klein voor beeltje zo dat ik verder kan , sorry ik zie het echt niet

oke nouw laat die min temperatuur maar als iemand me kan helpen ,
zodra die 0 graden aan geef en dan niet verder teld wand dan krijg je 4095.8 en dat is een rot geziht op je display

hoe kan ik vormomen dat als die 0 graden aan geef dat i gewoon blijf staan op 0 graden ???

eigenlijk wil ik het gebruiken als er een temeratuur word gemeten van 80 graden dat de spanning ergens van af gehaald word ,
is het echter af gekoeld en 75 graden dan spanning er weer op

alleen die 0 graden als i daar op komt dat i dan blijft staan hoe doe ik dat?? dan ben ik wel klaar

[Bericht gewijzigd door ricardo12345 op vrijdag 13 augustus 2010 16:29:35 (46%)

Arco

Special Member

Misschien dat iemand met Picbasic ervaring kan zeggen of dit kan, maar in MikroBasic maak je van Temperatuur gewoon een Integer (16 bit signed var), vermenigvuldigt die waarde met 0.0625, en zet dat op het display...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Het leek mij het beste om het hier neer te zetten...
Ik heb het schemaatje van picbasic opgebouwd en de code van bovenaan van dit topic in de pic gezet maar het display laat niks zien.
Als ik de code van de DS18S20 erin zet geeft hij inderdaad hoge getallen. Is de code van dit topic niet helemaal goed of moet ik mijn schakeling aanpassen?

Gr,

Bram

Bram,

De code bovenaan werkt!!!

Je zult dus iets verkeerd hebben in je schakeling.

Pull-up voor de temp-sensor vergeten? 4K7... geloof ik...

Post eens een schema...

Roche

Domoticz en ESP8266, goede combo!!!

Oke, de pull-up weerstand heb ik niet vergeten.
Ik zou de schakeling nog even na kunnen kijken maar ben er zeker van dat hij goed is. Ook een schema posten heeft geen zin want die zou het zelfde zijn als die van picbasic.nl.
Als ik de orginele 18s20 code programmeer doet hij het wel maar dan inderdaad met die rare waardes. programmeer ik jou code dan komt er niets op het scherm. Alvast bedankt! misschien weet je nog meer waar ik fout kan zijn gegaan?

Arco

Special Member

Aansluiten van de DS1820 kan (bijna) niet misgaan. (is maar 1 draad...)
Bovenstaande code werkt niet zonder meer; de code gebruikt een 20MHz kristal en de Picbasic schakeling geen kristal...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Het gaat hier wel om de TO-92 uitvoering?

@Arco.. je bent wakker...

Was mijn volgende gedachte....

Als je geen 20MHz kristal gebruikt, dan XTAL = 4 gebruiken en de config lijn van picbasic.nl ...

pic basic code:


CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
XTAL = 4

[Bericht gewijzigd door Roches op zaterdag 28 mei 2011 00:36:02 (20%)

Domoticz en ESP8266, goede combo!!!

Ik werk inderdaad met de TO-92 behuizing.
Heb de code aangepast en er is een verbetering.
Ik krijg nu "Hello world" te zien alleen daarna gaat hij niet over naar de temp weergave en komt er niks op het display te staan.
?

Gr,

Bram

Arco

Special Member

Heb je nu eigenlijk een 18S20 of een 18B20?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Een 18B20, daarom moet ik deze code ook gebruiken.

Arco

Special Member

Ook aan de goede pin (RA4) gehangen? . Bij picbasic staat 'ie aan pin RA0 getekend...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Dat was m, hij doet het, bedankt!
Welk bereik heeft hij nou met deze software?

Zie Datasheet van de 18B20.

Standaard de code overnemen zonder te kijken wat er gebeurd, da's makkelijk...

We gaan er wel vanuit dat je ook kijkt wat er gebeurd in de code, zodat je hem aanpast aan je eigen wensen....

En nogmaals datasheets lezen!!!

Domoticz en ESP8266, goede combo!!!

Dat is van -55 to +125 oke, maar bovenaan dit topic staat een code voor het meten van de neg. Zonder die code kan hij dus niet neg meten? Er staat een stukje code voor neg maar waar moet je deze dan tussen plakken?