2X ds18b20 Geven dezelfde tempratuur

Ik heb een klein probleempje met het uitlezen van 2 DS18B20 sensoren die op poort A1 en A0 zitten, het is de bedoeling dat ze los van elkaar de temperatuur lezen maar dit is niet het geval.
Wie kan mij helpen?

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

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

Xtal = 4

All_Digital TRUE

Dim Temperatuur As Word
Dim Decimalen As Byte

DelayMS 500 ;LCD stabilisering

Cls ;Wis scherm en zet cursor links bovenaan
Print At 1, 1, "Zonnecollector" ;Plaats tekst op het display
Print At 2, 1, "regelaar"
DelayMS 3000

Cls ;Wis scherm en zet cursor links bovenaan
OPNIEUW:

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

OWrite PORTA.1, 1, [$CC, $44] ' Zend 'Convert' opdracht (temperatuur meten)
While ORead PORTA.1,4 = 0 : Wend ' Wacht tot conversie is voltooid...
OWrite PORTA.1, 1, [$CC, $BE] ' Zend 'Read ScratchPad' opdracht
ORead PORTA.1 , 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, "Collector ",Dec (Temperatuur >> 4) , ".", Dec1 Decimalen / 10, 223, "C "
' Door de laatste 4 bits van Temperatuur weg te gooien krijg je de graden Celcius.

Print At 2, 1, "Wisselaar ",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
Waarom op een aparte ingang?

Gebruik ze zoals bedoeld, met 1 DS alleen kan het nog lukken om data te verkrijgen.

Bij meerdere benader je ze via hun adres.

En jij zet data in dezelfde variable, logisch dan output zelfde is he dan.

hint, [Temperatuur1.LowByte, Temperatuur1.HighByte]
Pi and Pimatic
pic basic code:
Device 16F877                ;Gebruik een 16F628A type
XTAL 20
ALL_DIGITAL = true
 
;Normale constanten
Symbol ReadROM      = $33     ;Vaste, constante waarde (zie datasheet DS1820)
 
;Poortnamen
Symbol DS1820       = PORTA.4 ;Sluit de DS1820 temperatuur sensor aan op deze poort
 
;Variabelen declareren
;BYTE
Dim CRC             As Byte   ;Bevat de CRC code, deze kan steeds anders zijn (zie tekst)
Dim ID1             As Byte   ;Bevat zodadelijk een deel van het unieke IDentificatie adres
Dim ID2             As Byte   ;Bevat zodadelijk een deel van het unieke IDentificatie adres
Dim ID3             As Byte   ;Bevat zodadelijk een deel van het unieke IDentificatie adres
Dim ID4             As Byte   ;Bevat zodadelijk een deel van het unieke IDentificatie adres
Dim ID5             As Byte   ;Bevat zodadelijk een deel van het unieke IDentificatie adres
Dim ID6             As Byte   ;Bevat zodadelijk een deel van het unieke IDentificatie adres
Dim Familie         As Byte   ;Bevat de OneWire familiecode (dit zal 10 (hexadecimaal) zijn)
 
Clear                         ;Wis RAM geheugen
 
DelayMS 500                   ;LCD stabilisatie
 
High PORTB.1                  ;enable lcd backlight
 
;Hoofdprogramma
While 1=1
Cls                           ;Wis display
OWrite DS1820, 1, [ReadROM]   ;Geef aan de DS1820 door dat we het adres vanuit ROM willen lezen
DelayMS 25
ORead  DS1820, 0, [Familie, ID1, ID2, ID3, ID4, ID5, ID6, CRC] ;Lees het unieke adres
Print At 1, 1, HEX2 ID1, " ", HEX2 ID2, " ", HEX2 ID3, " ", HEX2 ID4, " ", HEX2 ID5, " ", HEX2 ID6
Print At 2, 1, "Fam: ", HEX2 Familie, "  CRC: ", HEX2 CRC
DelayMS 1000
Wend
 
End                         


Met dit kan je adres te weten komen

pic basic code:
  ;Geef alle sensors de opdracht tot het meten van de huidige temperatuur
  OWRITE DS1820, 1, [MatchROM, $28, $59, $5A, $A7, $02, $00, $00, $EE, Convert]  ;DS1
  OWRITE DS1820, 1, [MatchROM, $28, $48, $5E, $A7, $02, $00, $00, $9D, Convert]  ;DS2
  OWRITE DS1820, 1, [MatchROM, $28, $D4, $1F, $A7, $02, $00, $00, $75, Convert]  ;DS3
  OWRITE DS1820, 1, [MatchROM, $28, $2A, $53, $A7, $02, $00, $00, $DC, Convert]  ;DS4
  OWRITE DS1820, 1, [MatchROM, $28, $4A, $53, $A7, $02, $00, $00, $1F, Convert]  ;DS7
  OWRITE DS1820, 1, [MatchROM, $28, $F6, $3C, $A7, $02, $00, $00, $1B, Convert]  ;DS8
 
  DELAYMS 50  ; efkes wachten...
 
  ;Haal de temperatuur op van alle sensors   
  OWRITE DS1820, 1, [MatchROM, $28, $59, $5A, $A7, $02, $00, $00, $EE, RdScratchPad]
  OREAD  DS1820, 2, [temperatuur1.LowByte, temperatuur1.HighByte] 
 
  OWRITE DS1820, 1, [MatchROM, $28, $48, $5E, $A7, $02, $00, $00, $9D, RdScratchPad]
  OREAD  DS1820, 2, [temperatuur2.LowByte, temperatuur2.HighByte] 
 
  ;DS7
  OWRITE DS1820, 1, [MatchROM, $28, $D4, $1F, $A7, $02, $00, $00, $75, RdScratchPad]
  OREAD  DS1820, 2, [temperatuur3.LowByte, temperatuur3.HighByte]  
 
   ;DS8
  OWRITE DS1820, 1, [MatchROM, $28, $2A, $53, $A7, $02, $00, $00, $DC, RdScratchPad]
  OREAD  DS1820, 2, [temperatuur4.LowByte, temperatuur4.HighByte]  
 
  ;DS7
  OWRITE DS1820, 1, [MatchROM, $28, $4A, $53, $A7, $02, $00, $00, $1F, RdScratchPad]
  OREAD  DS1820, 2, [temperatuur5.LowByte, temperatuur5.HighByte]  
 
   ;DS8
  OWRITE DS1820, 1, [MatchROM, $28, $F6, $3C, $A7, $02, $00, $00, $1B, RdScratchPad]
  OREAD  DS1820, 2, [temperatuur6.LowByte, temperatuur6.HighByte]  
 delayms 50 
  ;bereken decimalen kast
  Decimalen1 = 0                            ' Op 0 voor de zekerheid..
  Decimalen1 = temperatuur1.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
  Decimalen1 = Decimalen1 >> 4              ' Bits weer op de originele plaats zetten
  Decimalen1 = Decimalen1 * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.
 
  ;bereken decimalen serre
  Decimalen2 = 0                            ' Op 0 voor de zekerheid..
  Decimalen2 = temperatuur2.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
  Decimalen2 = Decimalen2 >> 4              ' Bits weer op de originele plaats zetten
  Decimalen2 = Decimalen2 * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.
 
   ;bereken decimalen kast
  Decimalen3 = 0                            ' Op 0 voor de zekerheid..
  Decimalen3 = temperatuur3.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
  Decimalen3 = Decimalen3 >> 4              ' Bits weer op de originele plaats zetten
  Decimalen3 = Decimalen3 * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.
 
  ;bereken decimalen kast
  Decimalen4 = 0                            ' Op 0 voor de zekerheid..
  Decimalen4 = temperatuur4.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
  Decimalen4 = Decimalen4 >> 4              ' Bits weer op de originele plaats zetten
  Decimalen4 = Decimalen4 * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.
 
  ;bereken decimalen serre
  Decimalen5 = 0                            ' Op 0 voor de zekerheid..
  Decimalen5 = temperatuur5.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
  Decimalen5 = Decimalen5 >> 4              ' Bits weer op de originele plaats zetten
  Decimalen5 = Decimalen5 * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.
 
   ;bereken decimalen kast
  Decimalen6 = 0                            ' Op 0 voor de zekerheid..
  Decimalen6 = temperatuur6.LowByte << 4    ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
  Decimalen6 = Decimalen6 >> 4              ' Bits weer op de originele plaats zetten
  Decimalen6 = Decimalen6 * 6.25            ' Resolutie van de DS18B20 is 0.0625 graden celcius.  
 


En hier heb je voorbeeld hoe je dan meerdere sensors uitleest
Pi and Pimatic
Als ik je code lees (je = TS) dan zie ik dat je denkt dat de one wire pin laag gehouden wordt tijdens de conversie. Dat lijkt me dat dit niet kan kloppen: Je kan tijdens de conversie (orde van grootte een seconde) ook een andere onewire ding aansturen op die poort (om bijvoorbeeld ook een conversie te starten). Dat zou niet kunnen als je onewire device de one wire laag houdt. Bovendien kan ie zich voeden uit de datalijn en dat kan dan weer niet als ie hem zelf omlaag blijft trekken. Ik zou verwachten dat:

Pseudocode:
code:
stuur start conversie naar ding op poort A.0
stuur start conversie naar ding op poort A.1
sleep 1 sec.
lees sensor op A.0
verwerk data van sensor op A.0
lees sensor op A.1
verwerk data van sensor op A.1

Dit zou een cyclus tijd van ongeveer 1 s hebben terwijl jij twee keer de "ongeveer 0.75" had willen wachten. Dus het is sneller en hopelijk werkt het wel. :-)
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Het liefst had ik ze ook op 1 draad maar dat komt qua afstand van de sensoren niet goed uit.

Ik ben er inmiddels uit, alleen vroeg ik mij af of ik de ds18 ook kon kalibreren aangezien ik er ook een paar van Ali tussen heb zitten en die wijken een paar graden af
Uiteraard kan je ze zelf kalibreren. Allen tegenover wat? De meeste andere temp meters zijn ook vaak niet gekalibreerd. Je kan de de temperatuur van smeltend ijs = 0°C en kokend water = 100°C gebruiken dan heb je voor elke sensor 2 ijkpunten en daarmee kan je dan een conversietabel maken of gewoon via een formule steeds de juiste waarde uitrekenen.
Shiptronic

Golden Member

Op 14 april 2019 19:09:26 schreef Jeroennr:
Het liefst had ik ze ook op 1 draad maar dat komt qua afstand van de sensoren niet goed uit.


Leg dat eens uit? naar beide sensoren moet een draad, beginpunt is hetzelfde, dus ik zie het bezwaar niet? Het is 1-wire met parasite power, dus met een 2 aderige kabel ben je er al.
Wie de vraag stelt, zal met het antwoord moeten leren leven.
Op 14 april 2019 19:09:26 schreef Jeroennr:
Ik ben er inmiddels uit,
En wat was nu het probleem?
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 14 april 2019 19:09:26 schreef Jeroennr:..
Ik ben er inmiddels uit, alleen vroeg ik mij af of ik de ds18 ook kon kalibreren aangezien ik er ook een paar van Ali tussen heb zitten en die wijken een paar graden af
Knikker die Ali-dingen maar weg en koop goede. Stel dat je die Ali-dingen zou kunnen calibreren, wie zegt jou dat die Ali-krengen over langere tijd wel stabiel blijven?
Calibreren gaat probleemloos. In je software maak je gewoon een tabelletje met in de ene kolom de Ali-temperatuur en in de andere kolom de echte temperatuur.

[Bericht gewijzigd door ohm pi op 14 april 2019 22:34:37 (15%)]

Bezoek mijn neefjes' site: www.tinuselectronics.nl
BVZ

Golden Member

Op 14 april 2019 22:26:32 schreef rew:
[...]En wat was nu het probleem?

Zie de post van bordje @16:58

2 sensoren uitlezen, en beide waarden opslaan in 1 en dezelfde var gaat niet werken zoals je zou willen.