Probleem met uitlezen van geadresseerde DS1820

Hopenlijk kan iemand me helpen met een, waarschijnlijk simpel, probleem. Maar ik zie de oplossing niet.

Ik heb van PIC basic.nl de uitlezing van de DS1820 geprobeerd. Uitlezen met SkipRom en 1 DS1820 verbonden is geen probleem.
Daarna het adres van de DS1820 gelezen (volgens het voorbeeld op picbasic.nl) en volgens mij een correct resultaat.
Uitkomst: CC FA 24 02 08 00 fam. 10 CRC 45

Ik heb in het totaal 4 verschillende DS 1820's (allemaal nieuw) en geven netjes allemaal een ander adres.

Wanneer ik het programma van SkipROM aanpas naar MatchROM met het adres wil het niet werken, Dan komt er -0.00 te staan in het scherm. En dat heb ik met 2 DS1820's geprobeerd.
Zou er misschien een wacht op antwoord instructie bij moeten ?

Hardware:
Breadboard
PIC 16F628, 5Vdc gevoed
DS1820 met 4k7 pullup
LCD 4x20

Het volgende programma geeft me netjes een kloppende temperatuur:

pic basic code:


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : J. van der Veen                                   *
'*  Notice  : Copyright (c) 2012 J. van der Veen                *
'*          : All Rights Reserved                               *
'*  Date    : 14-1-2012                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;Voorbeeld 5
Device 16F628                 ;We gebruiken een 16F628 type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE              ;Alle ingangen digitaal

;Normale constanten
Symbol Convert      = $44     ;DS1820 commando, de DS1820 moet de temperatuur gaan meten
Symbol Graad        = 223     ;223 is de ASCII code voor het 'graad' karakter
Symbol RdScratchPad = $BE     ;DS1820 commando, temperatuur van de DS1820 uitlezen
Symbol MatchROM     = $55
Symbol SkipROM      = $CC     ;DS1820 commando, geen gebruik maken van het unieke adres

;Logische constanten
Symbol FALSE        = 0
Symbol TRUE         = 1

;Poortnamen
Symbol DS1820       = PORTA.0 ;Sluit de DS1820 temperatuur sensor aan op deze poort

;Variabelen declareren
;WORD
Dim Temp            As Word   ;Bevat de temperatuur Celsius
;BYTE
Dim Remain          As Byte   ;De remain waarde voor berekening temperatuur achter de komma 
Dim Slope           As Byte   ;Bevat de 'counts per graad Celsius' waarde
Dim TempDeci        As Byte   ;Bevat de temperatuur waarde "achter de komma"
Dim BD1             As Byte   ;Byte Dummy 1
;BIT
Dim NegTemp         As Bit    ;TRUE als temperatuur Celsius onder 0 oC komt

Clear                         ;Wis RAM geheugen

DelayMS 500                   ;LCD stabilisatie


;Hoofdprogramma
Cls                           ;Wis LCD scherm
Print "Temp:"                 ;Plaats eerst deze tekst op het display
While 1 = 1
  OWrite DS1820, 1, [SkipROM, Convert]      ;Zend 'Calculate Temperature' opdracht
  OWrite DS1820, 1, [SkipROM, RdScratchPad] ;Zend 'Read ScratchPad' opdracht
  ORead  DS1820, 2, [Temp.LowByte, Temp.HighByte, BD1, BD1, BD1, BD1, Remain, Slope] ',CRC]
  NegTemp  = Temp.8           ;Als bit 8 (het 9e bit) geset is, dan is temperatuur negatief
  TempDeci = ((Slope - Remain) * 100) / Slope
  Temp     = Temp * 5
  
  If NegTemp = TRUE Then      ;Als de temperatuur negatief is, dan...
    Temp = 65530 - Temp       ;De gemeten waarde Inverteren
    TempDeci = 100 - TempDeci ;Ook de waarde achter de komma inverteren
    If TempDeci < 51 Then TempDeci = TempDeci + 100
  EndIf

  Temp = (((Temp + 550) / 10) * 100) + TempDeci - 5500 ;
  Print At 1, 7, Rep "-"\NegTemp, Dec Temp / 100, ".", Dec2 Temp, Graad, "C "
Wend

Het volgende programma wil niet werken en geeft als resultaat -0.00:

pic basic code:


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : J. van der Veen                                   *
'*  Notice  : Copyright (c) 2012 J. van der Veen                *
'*          : All Rights Reserved                               *
'*  Date    : 14-1-2012                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;Voorbeeld 5
Device 16F628                 ;We gebruiken een 16F628 type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE              ;Alle ingangen digitaal

;Normale constanten
Symbol Convert      = $44     ;DS1820 commando, de DS1820 moet de temperatuur gaan meten
Symbol Graad        = 223     ;223 is de ASCII code voor het 'graad' karakter
Symbol RdScratchPad = $BE     ;DS1820 commando, temperatuur van de DS1820 uitlezen
Symbol MatchROM     = $55
Symbol SkipROM      = $CC     ;DS1820 commando, geen gebruik maken van het unieke adres

;Logische constanten
Symbol FALSE        = 0
Symbol TRUE         = 1

;Poortnamen
Symbol DS1820       = PORTA.0 ;Sluit de DS1820 temperatuur sensor aan op deze poort

;Variabelen declareren
;WORD
Dim Temp            As Word   ;Bevat de temperatuur Celsius
;BYTE
Dim Remain          As Byte   ;De remain waarde voor berekening temperatuur achter de komma 
Dim Slope           As Byte   ;Bevat de 'counts per graad Celsius' waarde
Dim TempDeci        As Byte   ;Bevat de temperatuur waarde "achter de komma"
Dim BD1             As Byte   ;Byte Dummy 1
;BIT
Dim NegTemp         As Bit    ;TRUE als temperatuur Celsius onder 0 oC komt

Clear                         ;Wis RAM geheugen

DelayMS 500                   ;LCD stabilisatie


;Hoofdprogramma
Cls                           ;Wis LCD scherm
Print "Temp:"                 ;Plaats eerst deze tekst op het display
While 1 = 1
  OWrite DS1820, 1, [MatchROM, $CC, $FA, $24, $02, $08, $00, $10, $45, Convert]      ;Zend 'Calculate Temperature' opdracht
  OWrite DS1820, 1, [MatchROM, $CC, $FA, $24, $02, $08, $00, $10, $45, RdScratchPad] ;Zend 'Read ScratchPad' opdracht
  ORead  DS1820, 2, [Temp.LowByte, Temp.HighByte, BD1, BD1, BD1, BD1, Remain, Slope] ',CRC]
  NegTemp  = Temp.8           ;Als bit 8 (het 9e bit) geset is, dan is temperatuur negatief
  TempDeci = ((Slope - Remain) * 100) / Slope
  Temp     = Temp * 5
  
  If NegTemp = TRUE Then      ;Als de temperatuur negatief is, dan...
    Temp = 65530 - Temp       ;De gemeten waarde Inverteren
    TempDeci = 100 - TempDeci ;Ook de waarde achter de komma inverteren
    If TempDeci < 51 Then TempDeci = TempDeci + 100
  EndIf

  Temp = (((Temp + 550) / 10) * 100) + TempDeci - 5500 ;
  Print At 1, 7, Rep "-"\NegTemp, Dec Temp / 100, ".", Dec2 Temp, Graad, "C "
Wend

Iemand een idee wat ik fout doe ?

Groeten,
Jurgen

[Bericht gewijzigd door Henry S. op 6 maart 2012 18:07:26 (0%)]

Hallo.

Er staat een fout op de site van picbasic voor het uitlezen.

je moet de uitgelezen data van de ( fam ) er voor zetten de rest er achter dan werkt het wel.

dus in plaats van :

Uitkomst: CC FA 24 02 08 00 fam. 10 CRC 45

10 CC FA 24 02 08 00 45

nu werkt het wel.

Groet Koos.

Op 5 maart 2012 10:58:04 schreef PD0SBS:
Er staat een fout op de site van picbasic voor het uitlezen.

Gelul, ik bedoel, hoezo?

Vreemd dat het bij mij dan wél werkt...

________________

Tip voor J.v/d Veen.

Beperk je code.
Het blokje met UNTITLED.BAS, Author, enz. moet je weglaten op het forum, anders krijg je een lap tekst waar ik niet meer zoveel zin in heb om doorheen te spitten.
Kom tot de kern van de zaak, wis dus al het overbodige uit je programma voordat je het op het forum zet.
En plaats het programma zelf tussen code tags, zodat je programma in een venster komt te staan en niet als normale tekst tussen jouw tekst door.
Dit maakt het veel overzichtelijker.

Ben je er inmiddels al uit?

Ohm sweet Ohm | www.picbasic.nl

Hallo Frits.

als je dat stukje leest zoals het op scherm komt en overneemd

werkt het bij mij niet. maar misschien komt dat door mijn manier van lezen hi.

pic basic code:

;
CLS                           ;Wis display
OWRITE DS1820, 1, [ReadROM]   ;Geef aan de DS1820 door dat we het adres vanuit ROM willen lezen
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
END
WEND

zou het niet beter zo gaan ?

pic basic code:


CLS                           ;Wis display
OWRITE DS1820, 1, [ReadROM]   ;Geef aan de DS1820 door dat we het adres vanuit ROM willen lezen
OREAD  DS1820, 0, [Familie, ID1, ID2, ID3, ID4, ID5, ID6, CRC] ;Lees het unieke adres
PRINT AT 1, 1, HEX2 Familie, " ", HEX2 ID1, " ", HEX2 ID2, " ", HEX2 ID3, " ", HEX2 ID4
PRINT AT 2, 1, HEX2 ID5, " ", HEX2 ID6 , " ", HEX2 CRC
END

Nu staat volgens mij de volgorde goed op het scherm.

groet Koos.

Hallo Koos.

Hmmm ja, ik snap nu wat je bedoelt.
Is wat van te zeggen...

Zoals het nu op picbasic.nl staat is niet "fout", want als je het display goed afleest, staan op regel 1 van het display de zes ID adreswaarden.
Op regel 2 staat vervolgens duidelijk "Fam: " met daarachter de familiecode en daarnaast "CRC: " met daarachter de CRC waarde.
Ik heb dit toen zo gedaan zodat de ID waarden op één displayregel staan.

Maar mee eens, je moet een beetje opletten als je de adreswaarden van je eigen DS1820 in het PIC Basic programma overneemt.
Agree, voor jouw standpunt is ook wat te zeggen :)

Ik zal er melding van maken bij het artikel.

Ohm sweet Ohm | www.picbasic.nl

PD0SBS & Frits Kieftenbelt

Bedankt dat jullie de moeite genomen hebben om even te kijken naar het probleem waar ik tegenaan loop en te antwoorden.
Ik ben op dit moment onderweg voor de baas (offshore india) en kan niet gelijk de voorgestelde oplossing uit proberen. Direct als ik thuis ben ga ik een poging doen !

@Frits Kieftenbelt
Bedankt voor je site. Ik heb er toch al veel van opgestoken. Vooral als je nieuw bent tot de wereld van PIC's (zoals ik) is het een bijzonder waardevolle bron van informatie !

Jurgen

Hallo J v/d Veen.

je hebt helemaal gelijk.

het is een hele mooie site waar we veel van kunnen leren.

Groet koos

ps ik ben vroeger ook vaak offshore geweest maar dan noordzee
voor gas boringen.

is het nuttig genoeg, om iedereen te bedanken die aan dit topic heeft mee gewerkt?

ik ben nu iig van het probleem verlost

Op 4 maart 2018 11:10:23 schreef Hedalen:
is het nuttig genoeg, om iedereen te bedanken die aan dit topic heeft mee gewerkt?

ik ben nu iig van het probleem verlost

is het ook mogelijk om de maximum en minimum waardes op te slaan?